15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 341fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch#include "bindings/v8/ExceptionState.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 3853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/NodeList.h" 3976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/dom/TagCollection.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/markup.h" 4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/events/Event.h" 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/html/HTMLCollection.h" 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/html/HTMLElement.h" 4453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 4553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderWidget.h" 461e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Widget.h" 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebString.h" 485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebVector.h" 49f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEvent.h" 50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEventListener.h" 51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h" 52f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebElement.h" 53f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebElementCollection.h" 54f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNodeList.h" 55f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPluginContainer.h" 56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/EventListenerWrapper.h" 57f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/FrameLoaderClientImpl.h" 58f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 59f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebNode::reset() 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_private.reset(); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebNode::assign(const WebNode& other) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_private = other.m_private; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::equals(const WebNode& n) const 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 77e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_private.get() == n.m_private.get(); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::lessThan(const WebNode& n) const 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 82e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_private.get() < n.m_private.get(); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode::NodeType WebNode::nodeType() const 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<NodeType>(m_private->nodeType()); 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode WebNode::parentNode() const 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNode(const_cast<ContainerNode*>(m_private->parentNode())); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebNode::nodeName() const 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->nodeName(); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebNode::nodeValue() const 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->nodeValue(); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebDocument WebNode::document() const 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return WebDocument(&m_private->document()); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode WebNode::firstChild() const 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNode(m_private->firstChild()); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode WebNode::lastChild() const 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNode(m_private->lastChild()); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode WebNode::previousSibling() const 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNode(m_private->previousSibling()); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNode WebNode::nextSibling() const 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNode(m_private->nextSibling()); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::hasChildNodes() const 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 132d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return m_private->hasChildren(); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNodeList WebNode::childNodes() 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebNodeList(m_private->childNodes()); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebString WebNode::createMarkup() const 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebCore::createMarkup(m_private.get()); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::isLink() const 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->isLink(); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::isTextNode() const 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->isTextNode(); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::isFocusable() const 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 157df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (!m_private->isElementNode()) 158df95704c49daea886ddad70775bda23618d6274dBen Murdoch return false; 1598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_private->document().updateLayoutIgnorePendingStylesheets(); 160df95704c49daea886ddad70775bda23618d6274dBen Murdoch return toElement(m_private.get())->isFocusable(); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::isContentEditable() const 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->isContentEditable(); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::isElementNode() const 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->isElementNode(); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebNode::addEventListener(const WebString& eventType, WebDOMEventListener* listener, bool useCapture) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Please do not add more eventTypes to this list without an API review. 176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RELEASE_ASSERT(eventType == "mousedown"); 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) EventListenerWrapper* listenerWrapper = listener->createEventListenerWrapper(eventType, useCapture, m_private.get()); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The listenerWrapper is only referenced by the actual Node. Once it goes 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // away, the wrapper notifies the WebEventListener so it can clear its 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // pointer to it. 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_private->addEventListener(eventType, adoptRef(listenerWrapper), useCapture); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::dispatchEvent(const WebDOMEvent& event) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!event.isNull()) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->dispatchEvent(event); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebNode::simulateClick() 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_private->dispatchSimulatedClick(0); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebElementCollection WebNode::getElementsByTagName(const WebString& tag) const 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 199c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu if (m_private->isContainerNode()) { 200c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu // FIXME: Calling getElementsByTagNameNS here is inconsistent with the 201c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu // function name. This is a temporary fix for a serious bug, and should 202c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu // be reverted soon. 203c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu return WebElementCollection(toContainerNode(m_private.get())->getElementsByTagNameNS(HTMLNames::xhtmlNamespaceURI, tag)); 204c664b83e7394be007e9ef2430bed7d73b50e0da7Bo Liu } 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebElementCollection(); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebElement WebNode::querySelector(const WebString& tag, WebExceptionCode& ec) const 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 21051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebElement element; 212d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (m_private->isContainerNode()) 21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) element = toContainerNode(m_private.get())->querySelector(tag, exceptionState); 21451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ec = exceptionState.code(); 215df95704c49daea886ddad70775bda23618d6274dBen Murdoch return element; 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebElement WebNode::rootEditableElement() const 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebElement(m_private->rootEditableElement()); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::focused() const 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->focused(); 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::remove() 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 23051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 23151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_private->remove(exceptionState); 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !exceptionState.hadException(); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebNode::hasNonEmptyBoundingBox() const 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2378abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_private->document().updateLayoutIgnorePendingStylesheets(); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private->hasNonEmptyBoundingBox(); 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebPluginContainer* WebNode::pluginContainer() const 242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (isNull()) 244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) const Node& coreNode = *constUnwrap<Node>(); 246d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (isHTMLObjectElement(coreNode) || isHTMLEmbedElement(coreNode)) { 247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RenderObject* object = coreNode.renderer(); 248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (object && object->isWidget()) { 249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Widget* widget = WebCore::toRenderWidget(object)->widget(); 250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (widget && widget->isPluginContainer()) 25109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return toWebPluginContainerImpl(widget); 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebElement WebNode::shadowHost() const 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (isNull()) 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebElement(); 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const Node* coreNode = constUnwrap<Node>(); 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return WebElement(coreNode->shadowHost()); 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 265323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebNode::WebNode(const PassRefPtrWillBeRawPtr<Node>& node) 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_private(node) 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 270323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebNode& WebNode::operator=(const PassRefPtrWillBeRawPtr<Node>& node) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_private = node; 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return *this; 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 276323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)WebNode::operator PassRefPtrWillBeRawPtr<Node>() const 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_private.get(); 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 282