| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
| 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
| 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
| 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
| 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
| (...skipping 2191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2202 m_hoverNode = nullptr; | 2202 m_hoverNode = nullptr; |
| 2203 m_focusedElement = nullptr; | 2203 m_focusedElement = nullptr; |
| 2204 m_activeHoverElement = nullptr; | 2204 m_activeHoverElement = nullptr; |
| 2205 m_autofocusElement = nullptr; | 2205 m_autofocusElement = nullptr; |
| 2206 | 2206 |
| 2207 m_renderView = 0; | 2207 m_renderView = 0; |
| 2208 ContainerNode::detach(context); | 2208 ContainerNode::detach(context); |
| 2209 | 2209 |
| 2210 m_styleEngine->didDetach(); | 2210 m_styleEngine->didDetach(); |
| 2211 | 2211 |
| 2212 if (Document* parentDoc = parentDocument()) | |
| 2213 parentDoc->didClearTouchEventHandlers(this); | |
| 2214 frameHost()->eventHandlerRegistry().documentDetached(*this); | 2212 frameHost()->eventHandlerRegistry().documentDetached(*this); |
| 2215 | 2213 |
| 2216 // This is required, as our LocalFrame might delete itself as soon as it det
aches | 2214 // This is required, as our LocalFrame might delete itself as soon as it det
aches |
| 2217 // us. However, this violates Node::detach() semantics, as it's never | 2215 // us. However, this violates Node::detach() semantics, as it's never |
| 2218 // possible to re-attach. Eventually Document::detach() should be renamed, | 2216 // possible to re-attach. Eventually Document::detach() should be renamed, |
| 2219 // or this setting of the frame to 0 could be made explicit in each of the | 2217 // or this setting of the frame to 0 could be made explicit in each of the |
| 2220 // callers of Document::detach(). | 2218 // callers of Document::detach(). |
| 2221 m_frame = 0; | 2219 m_frame = 0; |
| 2222 | 2220 |
| 2223 if (m_mediaQueryMatcher) | 2221 if (m_mediaQueryMatcher) |
| 2224 m_mediaQueryMatcher->documentDetached(); | 2222 m_mediaQueryMatcher->documentDetached(); |
| 2225 | 2223 |
| 2226 lifecycleNotifier().notifyDocumentWasDetached(); | 2224 lifecycleNotifier().notifyDocumentWasDetached(); |
| 2227 m_lifecycle.advanceTo(DocumentLifecycle::Stopped); | 2225 m_lifecycle.advanceTo(DocumentLifecycle::Stopped); |
| 2228 #if ENABLE(OILPAN) | 2226 #if ENABLE(OILPAN) |
| 2229 // This mirrors the clearing of the document object's touch | |
| 2230 // handlers that happens when the LocalDOMWindow is destructed in a | |
| 2231 // non-Oilpan setting (LocalDOMWindow::removeAllEventListeners()), | |
| 2232 // except that it is now done during detach instead. | |
| 2233 didClearTouchEventHandlers(this); | |
| 2234 | |
| 2235 // Done with the window, explicitly clear to hasten its | 2227 // Done with the window, explicitly clear to hasten its |
| 2236 // destruction. | 2228 // destruction. |
| 2237 clearDOMWindow(); | 2229 clearDOMWindow(); |
| 2238 #endif | 2230 #endif |
| 2239 } | 2231 } |
| 2240 | 2232 |
| 2241 void Document::prepareForDestruction() | 2233 void Document::prepareForDestruction() |
| 2242 { | 2234 { |
| 2243 m_markers->prepareForDestruction(); | 2235 m_markers->prepareForDestruction(); |
| 2244 disconnectDescendantFrames(); | 2236 disconnectDescendantFrames(); |
| (...skipping 2996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5241 // and implement them here. See https://bugs.webkit.org/show_bug.cgi?id=4781
9 | 5233 // and implement them here. See https://bugs.webkit.org/show_bug.cgi?id=4781
9 |
| 5242 LocalFrame* frame = window ? window->frame() : this->frame(); | 5234 LocalFrame* frame = window ? window->frame() : this->frame(); |
| 5243 return Touch::create(frame, target, identifier, FloatPoint(screenX, screenY)
, FloatPoint(pageX, pageY), FloatSize(radiusX, radiusY), rotationAngle, force); | 5235 return Touch::create(frame, target, identifier, FloatPoint(screenX, screenY)
, FloatPoint(pageX, pageY), FloatSize(radiusX, radiusY), rotationAngle, force); |
| 5244 } | 5236 } |
| 5245 | 5237 |
| 5246 PassRefPtrWillBeRawPtr<TouchList> Document::createTouchList(WillBeHeapVector<Ref
PtrWillBeMember<Touch> >& touches) const | 5238 PassRefPtrWillBeRawPtr<TouchList> Document::createTouchList(WillBeHeapVector<Ref
PtrWillBeMember<Touch> >& touches) const |
| 5247 { | 5239 { |
| 5248 return TouchList::create(touches); | 5240 return TouchList::create(touches); |
| 5249 } | 5241 } |
| 5250 | 5242 |
| 5251 void Document::didAddTouchEventHandler(Node* handler) | |
| 5252 { | |
| 5253 // The node should either be in this document, or be the Document node of a
child | |
| 5254 // of this document. | |
| 5255 ASSERT(&handler->document() == this | |
| 5256 || (handler->isDocumentNode() && toDocument(handler)->parentDocument() =
= this)); | |
| 5257 if (!m_touchEventTargets.get()) | |
| 5258 m_touchEventTargets = adoptPtr(new TouchEventTargetSet); | |
| 5259 bool isFirstHandler = m_touchEventTargets->isEmpty(); | |
| 5260 | |
| 5261 if (!m_touchEventTargets->add(handler).isNewEntry) { | |
| 5262 // Just incremented refcount, no real change. | |
| 5263 // If this is a child document node, then the count should never go abov
e 1. | |
| 5264 ASSERT(!handler->isDocumentNode() || &handler->document() == this); | |
| 5265 return; | |
| 5266 } | |
| 5267 | |
| 5268 if (isFirstHandler) { | |
| 5269 if (Document* parent = parentDocument()) { | |
| 5270 parent->didAddTouchEventHandler(this); | |
| 5271 } else { | |
| 5272 // This is the first touch handler on the whole page. | |
| 5273 if (FrameHost* frameHost = this->frameHost()) | |
| 5274 frameHost->chrome().client().needTouchEvents(true); | |
| 5275 } | |
| 5276 } | |
| 5277 | |
| 5278 // When we're all done with all frames, ensure touch hit rects are marked as
dirty. | |
| 5279 if (!handler->isDocumentNode() || handler == this) { | |
| 5280 if (Page* page = this->page()) { | |
| 5281 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoor
dinator()) | |
| 5282 scrollingCoordinator->touchEventTargetRectsDidChange(); | |
| 5283 } | |
| 5284 } | |
| 5285 } | |
| 5286 | |
| 5287 void Document::didRemoveTouchEventHandler(Node* handler, bool clearAll) | |
| 5288 { | |
| 5289 // Note that we can't assert that |handler| is in this document because it m
ight be in | |
| 5290 // the process of moving out of it. | |
| 5291 ASSERT(clearAll || m_touchEventTargets->contains(handler)); | |
| 5292 if (!m_touchEventTargets.get()) | |
| 5293 return; | |
| 5294 | |
| 5295 if (clearAll) { | |
| 5296 if (!m_touchEventTargets->contains(handler)) | |
| 5297 return; | |
| 5298 m_touchEventTargets->removeAll(handler); | |
| 5299 } else { | |
| 5300 if (!m_touchEventTargets->remove(handler)) | |
| 5301 // Just decremented refcount, no real update. | |
| 5302 return; | |
| 5303 } | |
| 5304 | |
| 5305 if (m_touchEventTargets->isEmpty()) { | |
| 5306 if (Document* parent = parentDocument()) { | |
| 5307 // This was the last handler in this document, update the parent doc
ument too. | |
| 5308 parent->didRemoveTouchEventHandler(this, clearAll); | |
| 5309 } else { | |
| 5310 // We just removed the last touch handler on the whole page. | |
| 5311 if (FrameHost* frameHost = this->frameHost()) | |
| 5312 frameHost->chrome().client().needTouchEvents(false); | |
| 5313 } | |
| 5314 } | |
| 5315 | |
| 5316 // When we're all done with all frames, ensure touch hit rects are marked as
dirty. | |
| 5317 if (!handler->isDocumentNode() || handler == this) { | |
| 5318 if (Page* page = this->page()) { | |
| 5319 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoor
dinator()) | |
| 5320 scrollingCoordinator->touchEventTargetRectsDidChange(); | |
| 5321 } | |
| 5322 } | |
| 5323 } | |
| 5324 | |
| 5325 DocumentLoader* Document::loader() const | 5243 DocumentLoader* Document::loader() const |
| 5326 { | 5244 { |
| 5327 if (!m_frame) | 5245 if (!m_frame) |
| 5328 return 0; | 5246 return 0; |
| 5329 | 5247 |
| 5330 DocumentLoader* loader = m_frame->loader().documentLoader(); | 5248 DocumentLoader* loader = m_frame->loader().documentLoader(); |
| 5331 if (!loader) | 5249 if (!loader) |
| 5332 return 0; | 5250 return 0; |
| 5333 | 5251 |
| 5334 if (m_frame->document() != this) | 5252 if (m_frame->document() != this) |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5799 { | 5717 { |
| 5800 WillBeHeapHashSet<RawPtrWillBeWeakMember<const LiveNodeListBase> >::const_it
erator end = m_listsInvalidatedAtDocument.end(); | 5718 WillBeHeapHashSet<RawPtrWillBeWeakMember<const LiveNodeListBase> >::const_it
erator end = m_listsInvalidatedAtDocument.end(); |
| 5801 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<const LiveNodeListBase> >::con
st_iterator it = m_listsInvalidatedAtDocument.begin(); it != end; ++it) | 5719 for (WillBeHeapHashSet<RawPtrWillBeWeakMember<const LiveNodeListBase> >::con
st_iterator it = m_listsInvalidatedAtDocument.begin(); it != end; ++it) |
| 5802 (*it)->invalidateCacheForAttribute(attrName); | 5720 (*it)->invalidateCacheForAttribute(attrName); |
| 5803 } | 5721 } |
| 5804 | 5722 |
| 5805 void Document::clearWeakMembers(Visitor* visitor) | 5723 void Document::clearWeakMembers(Visitor* visitor) |
| 5806 { | 5724 { |
| 5807 if (m_axObjectCache) | 5725 if (m_axObjectCache) |
| 5808 m_axObjectCache->clearWeakMembers(visitor); | 5726 m_axObjectCache->clearWeakMembers(visitor); |
| 5809 | |
| 5810 // FIXME: Oilpan: Use a weak counted set instead. | |
| 5811 if (m_touchEventTargets) { | |
| 5812 Vector<Node*> deadNodes; | |
| 5813 for (TouchEventTargetSet::iterator it = m_touchEventTargets->begin(); it
!= m_touchEventTargets->end(); ++it) { | |
| 5814 if (!visitor->isAlive(it->key)) | |
| 5815 deadNodes.append(it->key); | |
| 5816 } | |
| 5817 for (unsigned i = 0; i < deadNodes.size(); ++i) | |
| 5818 didClearTouchEventHandlers(deadNodes[i]); | |
| 5819 } | |
| 5820 } | 5727 } |
| 5821 | 5728 |
| 5822 void Document::trace(Visitor* visitor) | 5729 void Document::trace(Visitor* visitor) |
| 5823 { | 5730 { |
| 5824 #if ENABLE(OILPAN) | 5731 #if ENABLE(OILPAN) |
| 5825 visitor->trace(m_importsController); | 5732 visitor->trace(m_importsController); |
| 5826 visitor->trace(m_docType); | 5733 visitor->trace(m_docType); |
| 5827 visitor->trace(m_implementation); | 5734 visitor->trace(m_implementation); |
| 5828 visitor->trace(m_autofocusElement); | 5735 visitor->trace(m_autofocusElement); |
| 5829 visitor->trace(m_focusedElement); | 5736 visitor->trace(m_focusedElement); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5883 using namespace blink; | 5790 using namespace blink; |
| 5884 void showLiveDocumentInstances() | 5791 void showLiveDocumentInstances() |
| 5885 { | 5792 { |
| 5886 WeakDocumentSet& set = liveDocumentSet(); | 5793 WeakDocumentSet& set = liveDocumentSet(); |
| 5887 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 5794 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
| 5888 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it
) { | 5795 for (WeakDocumentSet::const_iterator it = set.begin(); it != set.end(); ++it
) { |
| 5889 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut
f8().data()); | 5796 fprintf(stderr, "- Document %p URL: %s\n", *it, (*it)->url().string().ut
f8().data()); |
| 5890 } | 5797 } |
| 5891 } | 5798 } |
| 5892 #endif | 5799 #endif |
| OLD | NEW |