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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 #include "core/css/resolver/StyleResolverStats.h" | 59 #include "core/css/resolver/StyleResolverStats.h" |
60 #include "core/dom/AXObjectCache.h" | 60 #include "core/dom/AXObjectCache.h" |
61 #include "core/dom/AddConsoleMessageTask.h" | 61 #include "core/dom/AddConsoleMessageTask.h" |
62 #include "core/dom/Attr.h" | 62 #include "core/dom/Attr.h" |
63 #include "core/dom/CDATASection.h" | 63 #include "core/dom/CDATASection.h" |
64 #include "core/dom/ClientRect.h" | 64 #include "core/dom/ClientRect.h" |
65 #include "core/dom/Comment.h" | 65 #include "core/dom/Comment.h" |
66 #include "core/dom/ContextFeatures.h" | 66 #include "core/dom/ContextFeatures.h" |
67 #include "core/dom/DOMImplementation.h" | 67 #include "core/dom/DOMImplementation.h" |
68 #include "core/dom/DocumentFragment.h" | 68 #include "core/dom/DocumentFragment.h" |
| 69 #include "core/dom/DocumentLifecycleNotifier.h" |
69 #include "core/dom/DocumentLifecycleObserver.h" | 70 #include "core/dom/DocumentLifecycleObserver.h" |
70 #include "core/dom/DocumentMarkerController.h" | 71 #include "core/dom/DocumentMarkerController.h" |
71 #include "core/dom/DocumentType.h" | 72 #include "core/dom/DocumentType.h" |
72 #include "core/dom/Element.h" | 73 #include "core/dom/Element.h" |
73 #include "core/dom/ElementDataCache.h" | 74 #include "core/dom/ElementDataCache.h" |
74 #include "core/dom/ElementRegistrationOptions.h" | 75 #include "core/dom/ElementRegistrationOptions.h" |
75 #include "core/dom/ElementTraversal.h" | 76 #include "core/dom/ElementTraversal.h" |
76 #include "core/dom/ExceptionCode.h" | 77 #include "core/dom/ExceptionCode.h" |
77 #include "core/dom/ExecutionContextTask.h" | 78 #include "core/dom/ExecutionContextTask.h" |
78 #include "core/dom/MainThreadTaskRunner.h" | 79 #include "core/dom/MainThreadTaskRunner.h" |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 | 396 |
396 void DocumentVisibilityObserver::setObservedDocument(Document& document) | 397 void DocumentVisibilityObserver::setObservedDocument(Document& document) |
397 { | 398 { |
398 unregisterObserver(); | 399 unregisterObserver(); |
399 registerObserver(document); | 400 registerObserver(document); |
400 } | 401 } |
401 | 402 |
402 Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC
lasses) | 403 Document::Document(const DocumentInit& initializer, DocumentClassFlags documentC
lasses) |
403 : ContainerNode(0, CreateDocument) | 404 : ContainerNode(0, CreateDocument) |
404 , TreeScope(*this) | 405 , TreeScope(*this) |
405 , DocumentLifecycleNotifier(this) | |
406 , m_hasNodesWithPlaceholderStyle(false) | 406 , m_hasNodesWithPlaceholderStyle(false) |
407 , m_evaluateMediaQueriesOnStyleRecalc(false) | 407 , m_evaluateMediaQueriesOnStyleRecalc(false) |
408 , m_pendingSheetLayout(NoLayoutWithPendingSheets) | 408 , m_pendingSheetLayout(NoLayoutWithPendingSheets) |
409 , m_frame(initializer.frame()) | 409 , m_frame(initializer.frame()) |
410 , m_domWindow(m_frame ? m_frame->localDOMWindow() : 0) | 410 , m_domWindow(m_frame ? m_frame->localDOMWindow() : 0) |
411 , m_importsController(initializer.importsController()) | 411 , m_importsController(initializer.importsController()) |
412 , m_activeParserCount(0) | 412 , m_activeParserCount(0) |
413 , m_contextFeatures(ContextFeatures::defaultSwitch()) | 413 , m_contextFeatures(ContextFeatures::defaultSwitch()) |
414 , m_wellFormed(false) | 414 , m_wellFormed(false) |
415 , m_printing(false) | 415 , m_printing(false) |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
635 | 635 |
636 // FIXME: consider using ActiveDOMObject. | 636 // FIXME: consider using ActiveDOMObject. |
637 if (m_scriptedAnimationController) | 637 if (m_scriptedAnimationController) |
638 m_scriptedAnimationController->clearDocumentPointer(); | 638 m_scriptedAnimationController->clearDocumentPointer(); |
639 m_scriptedAnimationController.clear(); | 639 m_scriptedAnimationController.clear(); |
640 | 640 |
641 if (svgExtensions()) | 641 if (svgExtensions()) |
642 accessSVGExtensions().pauseAnimations(); | 642 accessSVGExtensions().pauseAnimations(); |
643 | 643 |
644 m_lifecycle.advanceTo(DocumentLifecycle::Disposed); | 644 m_lifecycle.advanceTo(DocumentLifecycle::Disposed); |
645 DocumentLifecycleNotifier::notifyDocumentWasDisposed(); | 645 lifecycleNotifier().notifyDocumentWasDisposed(); |
646 } | 646 } |
647 #endif | 647 #endif |
648 | 648 |
649 SelectorQueryCache& Document::selectorQueryCache() | 649 SelectorQueryCache& Document::selectorQueryCache() |
650 { | 650 { |
651 if (!m_selectorQueryCache) | 651 if (!m_selectorQueryCache) |
652 m_selectorQueryCache = adoptPtr(new SelectorQueryCache()); | 652 m_selectorQueryCache = adoptPtr(new SelectorQueryCache()); |
653 return *m_selectorQueryCache; | 653 return *m_selectorQueryCache; |
654 } | 654 } |
655 | 655 |
(...skipping 1519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2175 // This is required, as our LocalFrame might delete itself as soon as it det
aches | 2175 // This is required, as our LocalFrame might delete itself as soon as it det
aches |
2176 // us. However, this violates Node::detach() semantics, as it's never | 2176 // us. However, this violates Node::detach() semantics, as it's never |
2177 // possible to re-attach. Eventually Document::detach() should be renamed, | 2177 // possible to re-attach. Eventually Document::detach() should be renamed, |
2178 // or this setting of the frame to 0 could be made explicit in each of the | 2178 // or this setting of the frame to 0 could be made explicit in each of the |
2179 // callers of Document::detach(). | 2179 // callers of Document::detach(). |
2180 m_frame = nullptr; | 2180 m_frame = nullptr; |
2181 | 2181 |
2182 if (m_mediaQueryMatcher) | 2182 if (m_mediaQueryMatcher) |
2183 m_mediaQueryMatcher->documentDetached(); | 2183 m_mediaQueryMatcher->documentDetached(); |
2184 | 2184 |
2185 DocumentLifecycleNotifier::notifyDocumentWasDetached(); | 2185 lifecycleNotifier().notifyDocumentWasDetached(); |
2186 m_lifecycle.advanceTo(DocumentLifecycle::Stopped); | 2186 m_lifecycle.advanceTo(DocumentLifecycle::Stopped); |
2187 | 2187 |
2188 // FIXME: Currently we call notifyContextDestroyed() only in | 2188 // FIXME: Currently we call notifyContextDestroyed() only in |
2189 // Document::detach(), which means that we don't call | 2189 // Document::detach(), which means that we don't call |
2190 // notifyContextDestroyed() for a document that doesn't get detached. | 2190 // notifyContextDestroyed() for a document that doesn't get detached. |
2191 // If such a document has any observer, the observer won't get | 2191 // If such a document has any observer, the observer won't get |
2192 // a contextDestroyed() notification. This can happen for a document | 2192 // a contextDestroyed() notification. This can happen for a document |
2193 // created by DOMImplementation::createDocument(). | 2193 // created by DOMImplementation::createDocument(). |
2194 DocumentLifecycleNotifier::notifyContextDestroyed(); | 2194 LifecycleContext<Document>::notifyContextDestroyed(); |
2195 ExecutionContext::notifyContextDestroyed(); | 2195 ExecutionContext::notifyContextDestroyed(); |
2196 } | 2196 } |
2197 | 2197 |
2198 void Document::prepareForDestruction() | 2198 void Document::prepareForDestruction() |
2199 { | 2199 { |
2200 m_markers->prepareForDestruction(); | 2200 m_markers->prepareForDestruction(); |
2201 disconnectDescendantFrames(); | 2201 disconnectDescendantFrames(); |
2202 | 2202 |
2203 // The process of disconnecting descendant frames could have already detache
d us. | 2203 // The process of disconnecting descendant frames could have already detache
d us. |
2204 if (!isActive()) | 2204 if (!isActive()) |
(...skipping 3246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5451 | 5451 |
5452 frame()->page()->chrome().client().didAssociateFormControls(associatedFormCo
ntrols, frame()); | 5452 frame()->page()->chrome().client().didAssociateFormControls(associatedFormCo
ntrols, frame()); |
5453 m_associatedFormControls.clear(); | 5453 m_associatedFormControls.clear(); |
5454 } | 5454 } |
5455 | 5455 |
5456 float Document::devicePixelRatio() const | 5456 float Document::devicePixelRatio() const |
5457 { | 5457 { |
5458 return m_frame ? m_frame->devicePixelRatio() : 1.0; | 5458 return m_frame ? m_frame->devicePixelRatio() : 1.0; |
5459 } | 5459 } |
5460 | 5460 |
| 5461 PassOwnPtr<LifecycleNotifier<Document>> Document::createLifecycleNotifier() |
| 5462 { |
| 5463 return DocumentLifecycleNotifier::create(this); |
| 5464 } |
| 5465 |
| 5466 DocumentLifecycleNotifier& Document::lifecycleNotifier() |
| 5467 { |
| 5468 return static_cast<DocumentLifecycleNotifier&>(LifecycleContext<Document>::l
ifecycleNotifier()); |
| 5469 } |
| 5470 |
5461 void Document::removedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upda
teMode) | 5471 void Document::removedStyleSheet(StyleSheet* sheet, StyleResolverUpdateMode upda
teMode) |
5462 { | 5472 { |
5463 // If we're in document teardown, then we don't need this notification of ou
r sheet's removal. | 5473 // If we're in document teardown, then we don't need this notification of ou
r sheet's removal. |
5464 // styleResolverChanged() is needed even when the document is inactive so th
at | 5474 // styleResolverChanged() is needed even when the document is inactive so th
at |
5465 // imported docuements (which is inactive) notifies the change to the master
document. | 5475 // imported docuements (which is inactive) notifies the change to the master
document. |
5466 if (isActive()) | 5476 if (isActive()) |
5467 styleEngine()->modifiedStyleSheet(sheet); | 5477 styleEngine()->modifiedStyleSheet(sheet); |
5468 styleResolverChanged(updateMode); | 5478 styleResolverChanged(updateMode); |
5469 } | 5479 } |
5470 | 5480 |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5747 visitor->trace(m_svgExtensions); | 5757 visitor->trace(m_svgExtensions); |
5748 visitor->trace(m_timeline); | 5758 visitor->trace(m_timeline); |
5749 visitor->trace(m_compositorPendingAnimations); | 5759 visitor->trace(m_compositorPendingAnimations); |
5750 visitor->trace(m_contextDocument); | 5760 visitor->trace(m_contextDocument); |
5751 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this); | 5761 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this); |
5752 DocumentSupplementable::trace(visitor); | 5762 DocumentSupplementable::trace(visitor); |
5753 #endif | 5763 #endif |
5754 TreeScope::trace(visitor); | 5764 TreeScope::trace(visitor); |
5755 ContainerNode::trace(visitor); | 5765 ContainerNode::trace(visitor); |
5756 ExecutionContext::trace(visitor); | 5766 ExecutionContext::trace(visitor); |
5757 DocumentLifecycleNotifier::trace(visitor); | 5767 LifecycleContext<Document>::trace(visitor); |
5758 } | 5768 } |
5759 | 5769 |
5760 } // namespace blink | 5770 } // namespace blink |
5761 | 5771 |
5762 #ifndef NDEBUG | 5772 #ifndef NDEBUG |
5763 using namespace blink; | 5773 using namespace blink; |
5764 void showLiveDocumentInstances() | 5774 void showLiveDocumentInstances() |
5765 { | 5775 { |
5766 WeakDocumentSet& set = liveDocumentSet(); | 5776 WeakDocumentSet& set = liveDocumentSet(); |
5767 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 5777 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
5768 for (Document* document : set) | 5778 for (Document* document : set) |
5769 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str
ing().utf8().data()); | 5779 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str
ing().utf8().data()); |
5770 } | 5780 } |
5771 #endif | 5781 #endif |
OLD | NEW |