1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 Google Inc. All rights reserved.
35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met:
75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions in binary form must reproduce the above
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution.
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Neither the name of Google Inc. nor the names of its
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission.
175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "config.h"
32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebNode.h"
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Document.h"
35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "Element.h"
36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Frame.h"
37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FrameLoaderClientImpl.h"
38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Node.h"
39d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "NodeList.h"
405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
41d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "EventListenerWrapper.h"
42e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebDOMEvent.h"
43e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebDOMEventListener.h"
44d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebDocument.h"
45643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebFrameImpl.h"
46d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebNodeList.h"
47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebString.h"
48d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebVector.h"
49d0825bca7fe65beaee391d30da42e937db621564Steve Block
50d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "markup.h"
515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
52643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace WebCore;
535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
54643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit {
55643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebNode::reset()
575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_private.reset();
59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
61643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid WebNode::assign(const WebNode& other)
62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_private = other.m_private;
64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockbool WebNode::equals(const WebNode& n) const
67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return (m_private.get() == n.m_private.get());
69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
71e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkebool WebNode::lessThan(const WebNode& n) const
72e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{
73e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke    return (m_private.get() < n.m_private.get());
74e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke}
75e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke
76d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNode::NodeType WebNode::nodeType() const
77d0825bca7fe65beaee391d30da42e937db621564Steve Block{
78d0825bca7fe65beaee391d30da42e937db621564Steve Block    return static_cast<NodeType>(m_private->nodeType());
79d0825bca7fe65beaee391d30da42e937db621564Steve Block}
80d0825bca7fe65beaee391d30da42e937db621564Steve Block
81643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebNode WebNode::parentNode() const
82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    return WebNode(const_cast<ContainerNode*>(m_private->parentNode()));
84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
86643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockWebString WebNode::nodeName() const
87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    return m_private->nodeName();
89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
91d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebString WebNode::nodeValue() const
92d0825bca7fe65beaee391d30da42e937db621564Steve Block{
93d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->nodeValue();
94d0825bca7fe65beaee391d30da42e937db621564Steve Block}
95d0825bca7fe65beaee391d30da42e937db621564Steve Block
96d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebNode::setNodeValue(const WebString& value)
97d0825bca7fe65beaee391d30da42e937db621564Steve Block{
98d0825bca7fe65beaee391d30da42e937db621564Steve Block    ExceptionCode exceptionCode = 0;
99d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_private->setNodeValue(value, exceptionCode);
100d0825bca7fe65beaee391d30da42e937db621564Steve Block    return !exceptionCode;
101d0825bca7fe65beaee391d30da42e937db621564Steve Block}
102d0825bca7fe65beaee391d30da42e937db621564Steve Block
103d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebDocument WebNode::document() const
104d0825bca7fe65beaee391d30da42e937db621564Steve Block{
105d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebDocument(m_private->document());
106d0825bca7fe65beaee391d30da42e937db621564Steve Block}
107d0825bca7fe65beaee391d30da42e937db621564Steve Block
108d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNode WebNode::firstChild() const
109d0825bca7fe65beaee391d30da42e937db621564Steve Block{
110d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebNode(m_private->firstChild());
111d0825bca7fe65beaee391d30da42e937db621564Steve Block}
112d0825bca7fe65beaee391d30da42e937db621564Steve Block
113d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNode WebNode::lastChild() const
114d0825bca7fe65beaee391d30da42e937db621564Steve Block{
115d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebNode(m_private->lastChild());
116d0825bca7fe65beaee391d30da42e937db621564Steve Block}
117d0825bca7fe65beaee391d30da42e937db621564Steve Block
118d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNode WebNode::previousSibling() const
119d0825bca7fe65beaee391d30da42e937db621564Steve Block{
120d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebNode(m_private->previousSibling());
121d0825bca7fe65beaee391d30da42e937db621564Steve Block}
122d0825bca7fe65beaee391d30da42e937db621564Steve Block
123d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNode WebNode::nextSibling() const
124d0825bca7fe65beaee391d30da42e937db621564Steve Block{
125d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebNode(m_private->nextSibling());
126d0825bca7fe65beaee391d30da42e937db621564Steve Block}
127d0825bca7fe65beaee391d30da42e937db621564Steve Block
128d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebNode::hasChildNodes() const
129d0825bca7fe65beaee391d30da42e937db621564Steve Block{
130d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->hasChildNodes();
131d0825bca7fe65beaee391d30da42e937db621564Steve Block}
132d0825bca7fe65beaee391d30da42e937db621564Steve Block
133d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebNodeList WebNode::childNodes()
134d0825bca7fe65beaee391d30da42e937db621564Steve Block{
135d0825bca7fe65beaee391d30da42e937db621564Steve Block    return WebNodeList(m_private->childNodes());
136d0825bca7fe65beaee391d30da42e937db621564Steve Block}
137d0825bca7fe65beaee391d30da42e937db621564Steve Block
138d0825bca7fe65beaee391d30da42e937db621564Steve BlockWebString WebNode::createMarkup() const
139d0825bca7fe65beaee391d30da42e937db621564Steve Block{
140dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return WebCore::createMarkup(m_private.get());
141d0825bca7fe65beaee391d30da42e937db621564Steve Block}
142d0825bca7fe65beaee391d30da42e937db621564Steve Block
143d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebNode::isTextNode() const
144d0825bca7fe65beaee391d30da42e937db621564Steve Block{
145d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->isTextNode();
146d0825bca7fe65beaee391d30da42e937db621564Steve Block}
147d0825bca7fe65beaee391d30da42e937db621564Steve Block
1482bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebNode::isFocusable() const
1492bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1502bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_private->isFocusable();
1512bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1522bde8e466a4451c7319e3a072d118917957d6554Steve Block
153a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochbool WebNode::isContentEditable() const
154a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
1552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_private->isContentEditable();
156a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
157a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
158d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool WebNode::isElementNode() const
159d0825bca7fe65beaee391d30da42e937db621564Steve Block{
160d0825bca7fe65beaee391d30da42e937db621564Steve Block    return m_private->isElementNode();
161d0825bca7fe65beaee391d30da42e937db621564Steve Block}
162d0825bca7fe65beaee391d30da42e937db621564Steve Block
163e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebNode::addEventListener(const WebString& eventType, WebDOMEventListener* listener, bool useCapture)
164d0825bca7fe65beaee391d30da42e937db621564Steve Block{
165d0825bca7fe65beaee391d30da42e937db621564Steve Block    EventListenerWrapper* listenerWrapper =
166dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        listener->createEventListenerWrapper(eventType, useCapture, m_private.get());
167d0825bca7fe65beaee391d30da42e937db621564Steve Block    // The listenerWrapper is only referenced by the actual Node.  Once it goes
168d0825bca7fe65beaee391d30da42e937db621564Steve Block    // away, the wrapper notifies the WebEventListener so it can clear its
169d0825bca7fe65beaee391d30da42e937db621564Steve Block    // pointer to it.
170d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_private->addEventListener(eventType, adoptRef(listenerWrapper), useCapture);
171d0825bca7fe65beaee391d30da42e937db621564Steve Block}
172d0825bca7fe65beaee391d30da42e937db621564Steve Block
173e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid WebNode::removeEventListener(const WebString& eventType, WebDOMEventListener* listener, bool useCapture)
174d0825bca7fe65beaee391d30da42e937db621564Steve Block{
175d0825bca7fe65beaee391d30da42e937db621564Steve Block    EventListenerWrapper* listenerWrapper =
176dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        listener->getEventListenerWrapper(eventType, useCapture, m_private.get());
177d0825bca7fe65beaee391d30da42e937db621564Steve Block    m_private->removeEventListener(eventType, listenerWrapper, useCapture);
178d0825bca7fe65beaee391d30da42e937db621564Steve Block    // listenerWrapper is now deleted.
179d0825bca7fe65beaee391d30da42e937db621564Steve Block}
180d0825bca7fe65beaee391d30da42e937db621564Steve Block
181dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid WebNode::simulateClick()
182dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
183dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    RefPtr<Event> noEvent;
184dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_private->dispatchSimulatedClick(noEvent);
185dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
186dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
187dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebNodeList WebNode::getElementsByTagName(const WebString& tag) const
188dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
189dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return WebNodeList(m_private->getElementsByTagName(tag));
190dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
19221939df44de1705786c545cd1bf519d47250322dBen Murdochbool WebNode::hasNonEmptyBoundingBox() const
19321939df44de1705786c545cd1bf519d47250322dBen Murdoch{
19421939df44de1705786c545cd1bf519d47250322dBen Murdoch    return m_private->hasNonEmptyBoundingBox();
19521939df44de1705786c545cd1bf519d47250322dBen Murdoch}
19621939df44de1705786c545cd1bf519d47250322dBen Murdoch
197dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebNode::WebNode(const PassRefPtr<Node>& node)
198dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    : m_private(node)
199dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
200dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
201dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
202dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebNode& WebNode::operator=(const PassRefPtr<Node>& node)
203dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
204dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_private = node;
205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return *this;
206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
208dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockWebNode::operator PassRefPtr<Node>() const
209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    return m_private.get();
211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
212dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit
214