IDOMNode* DOMNode::createInstance(WebCore::Node* n) { if (!n) return 0; HRESULT hr = S_OK; IDOMNode* domNode = 0; WebCore::Node::NodeType nodeType = n->nodeType(); switch (nodeType) { case WebCore::Node::ELEMENT_NODE: { IDOMElement* newElement = DOMElement::createInstance(static_cast<WebCore::Element*>(n)); if (newElement) { hr = newElement->QueryInterface(IID_IDOMNode, (void**)&domNode); newElement->Release(); } } break; case WebCore::Node::DOCUMENT_NODE: { IDOMDocument* newDocument = DOMDocument::createInstance(&n->document()); if (newDocument) { hr = newDocument->QueryInterface(IID_IDOMNode, (void**)&domNode); newDocument->Release(); } } break; default: { DOMNode* newNode = new DOMNode(n); hr = newNode->QueryInterface(IID_IDOMNode, (void**)&domNode); } break; } if (FAILED(hr)) return 0; return domNode; }