| 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 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 frame->document()->domWindow()->printErrorMessage(message); | 402 frame->document()->domWindow()->printErrorMessage(message); |
| 403 } | 403 } |
| 404 | 404 |
| 405 static HashSet<Document*>* documentsThatNeedStyleRecalc = 0; | 405 static HashSet<Document*>* documentsThatNeedStyleRecalc = 0; |
| 406 | 406 |
| 407 uint64_t Document::s_globalTreeVersion = 0; | 407 uint64_t Document::s_globalTreeVersion = 0; |
| 408 | 408 |
| 409 Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML) | 409 Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML) |
| 410 : ContainerNode(0, CreateDocument) | 410 : ContainerNode(0, CreateDocument) |
| 411 , TreeScope(this) | 411 , TreeScope(this) |
| 412 , m_guardRefCount(0) | |
| 413 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer
Fired) | 412 , m_styleResolverThrowawayTimer(this, &Document::styleResolverThrowawayTimer
Fired) |
| 414 , m_lastStyleResolverAccessTime(0) | 413 , m_lastStyleResolverAccessTime(0) |
| 415 , m_activeParserCount(0) | 414 , m_activeParserCount(0) |
| 416 , m_contextFeatures(ContextFeatures::defaultSwitch()) | 415 , m_contextFeatures(ContextFeatures::defaultSwitch()) |
| 417 , m_compatibilityMode(NoQuirksMode) | 416 , m_compatibilityMode(NoQuirksMode) |
| 418 , m_compatibilityModeLocked(false) | 417 , m_compatibilityModeLocked(false) |
| 419 , m_domTreeVersion(++s_globalTreeVersion) | 418 , m_domTreeVersion(++s_globalTreeVersion) |
| 420 , m_mutationObserverTypes(0) | 419 , m_mutationObserverTypes(0) |
| 421 , m_styleSheetCollection(DocumentStyleSheetCollection::create(this)) | 420 , m_styleSheetCollection(DocumentStyleSheetCollection::create(this)) |
| 422 , m_visitedLinkState(VisitedLinkState::create(this)) | 421 , m_visitedLinkState(VisitedLinkState::create(this)) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 , m_visualUpdatesAllowed(true) | 473 , m_visualUpdatesAllowed(true) |
| 475 , m_visualUpdatesSuppressionTimer(this, &Document::visualUpdatesSuppressionT
imerFired) | 474 , m_visualUpdatesSuppressionTimer(this, &Document::visualUpdatesSuppressionT
imerFired) |
| 476 , m_sharedObjectPoolClearTimer(this, &Document::sharedObjectPoolClearTimerFi
red) | 475 , m_sharedObjectPoolClearTimer(this, &Document::sharedObjectPoolClearTimerFi
red) |
| 477 #ifndef NDEBUG | 476 #ifndef NDEBUG |
| 478 , m_didDispatchViewportPropertiesChanged(false) | 477 , m_didDispatchViewportPropertiesChanged(false) |
| 479 #endif | 478 #endif |
| 480 #if ENABLE(TEMPLATE_ELEMENT) | 479 #if ENABLE(TEMPLATE_ELEMENT) |
| 481 , m_templateDocumentHost(0) | 480 , m_templateDocumentHost(0) |
| 482 #endif | 481 #endif |
| 483 { | 482 { |
| 484 setTreeScope(this); | |
| 485 | |
| 486 m_printing = false; | 483 m_printing = false; |
| 487 m_paginatedForScreen = false; | 484 m_paginatedForScreen = false; |
| 488 | 485 |
| 489 m_ignoreAutofocus = false; | 486 m_ignoreAutofocus = false; |
| 490 | 487 |
| 491 m_frame = frame; | 488 m_frame = frame; |
| 492 if (m_frame) | 489 if (m_frame) |
| 493 provideContextFeaturesToDocumentFrom(this, m_frame->page()); | 490 provideContextFeaturesToDocumentFrom(this, m_frame->page()); |
| 494 | 491 |
| 495 // We depend on the url getting immediately set in subframes, but we | 492 // We depend on the url getting immediately set in subframes, but we |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 575 #endif | 572 #endif |
| 576 | 573 |
| 577 Document::~Document() | 574 Document::~Document() |
| 578 { | 575 { |
| 579 ASSERT(!renderer()); | 576 ASSERT(!renderer()); |
| 580 ASSERT(!m_inPageCache); | 577 ASSERT(!m_inPageCache); |
| 581 ASSERT(!m_savedRenderer); | 578 ASSERT(!m_savedRenderer); |
| 582 ASSERT(m_ranges.isEmpty()); | 579 ASSERT(m_ranges.isEmpty()); |
| 583 ASSERT(!m_styleRecalcTimer.isActive()); | 580 ASSERT(!m_styleRecalcTimer.isActive()); |
| 584 ASSERT(!m_parentTreeScope); | 581 ASSERT(!m_parentTreeScope); |
| 585 ASSERT(!m_guardRefCount); | 582 ASSERT(!hasGuardRefCount()); |
| 586 | 583 |
| 587 #if ENABLE(TEMPLATE_ELEMENT) | 584 #if ENABLE(TEMPLATE_ELEMENT) |
| 588 if (m_templateDocument) | 585 if (m_templateDocument) |
| 589 m_templateDocument->setTemplateDocumentHost(0); // balanced in templateD
ocument(). | 586 m_templateDocument->setTemplateDocumentHost(0); // balanced in templateD
ocument(). |
| 590 #endif | 587 #endif |
| 591 | 588 |
| 592 #if ENABLE(TOUCH_EVENT_TRACKING) | 589 #if ENABLE(TOUCH_EVENT_TRACKING) |
| 593 if (Document* ownerDocument = this->ownerDocument()) | 590 if (Document* ownerDocument = this->ownerDocument()) |
| 594 ownerDocument->didRemoveEventTargetNode(this); | 591 ownerDocument->didRemoveEventTargetNode(this); |
| 595 #endif | 592 #endif |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 ASSERT(!m_listsInvalidatedAtDocument.size()); | 639 ASSERT(!m_listsInvalidatedAtDocument.size()); |
| 643 | 640 |
| 644 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) | 641 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) |
| 645 ASSERT(!m_nodeListCounts[i]); | 642 ASSERT(!m_nodeListCounts[i]); |
| 646 | 643 |
| 647 clearDocumentScope(); | 644 clearDocumentScope(); |
| 648 | 645 |
| 649 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter); | 646 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter); |
| 650 } | 647 } |
| 651 | 648 |
| 652 void Document::removedLastRef() | 649 void Document::dispose() |
| 653 { | 650 { |
| 654 ASSERT(!m_deletionHasBegun); | 651 // We must make sure not to be retaining any of our children through |
| 655 if (m_guardRefCount) { | 652 // these extra pointers or we will create a reference cycle. |
| 656 // If removing a child removes the last self-only ref, we don't | 653 m_docType = 0; |
| 657 // want the scope to be destructed until after | 654 m_focusedNode = 0; |
| 658 // removeDetachedChildren returns, so we guard ourselves with an | 655 m_hoverNode = 0; |
| 659 // extra self-only ref. | 656 m_activeElement = 0; |
| 660 guardRef(); | 657 m_titleElement = 0; |
| 661 | 658 m_documentElement = 0; |
| 662 // We must make sure not to be retaining any of our children through | 659 m_contextFeatures = ContextFeatures::defaultSwitch(); |
| 663 // these extra pointers or we will create a reference cycle. | 660 m_userActionElements.documentDidRemoveLastRef(); |
| 664 m_docType = 0; | |
| 665 m_focusedNode = 0; | |
| 666 m_hoverNode = 0; | |
| 667 m_activeElement = 0; | |
| 668 m_titleElement = 0; | |
| 669 m_documentElement = 0; | |
| 670 m_contextFeatures = ContextFeatures::defaultSwitch(); | |
| 671 m_userActionElements.documentDidRemoveLastRef(); | |
| 672 #if ENABLE(FULLSCREEN_API) | 661 #if ENABLE(FULLSCREEN_API) |
| 673 m_fullScreenElement = 0; | 662 m_fullScreenElement = 0; |
| 674 m_fullScreenElementStack.clear(); | 663 m_fullScreenElementStack.clear(); |
| 675 #endif | 664 #endif |
| 676 | 665 |
| 677 detachParser(); | 666 detachParser(); |
| 678 | 667 |
| 679 // removeDetachedChildren() doesn't always unregister IDs, | 668 // removeDetachedChildren() doesn't always unregister IDs, |
| 680 // so tear down scope information upfront to avoid having stale referenc
es in the map. | 669 // so tear down scope information upfront to avoid having stale references i
n the map. |
| 681 destroyTreeScopeData(); | 670 destroyTreeScopeData(); |
| 682 removeDetachedChildren(); | 671 removeDetachedChildren(); |
| 683 | 672 |
| 684 m_markers->detach(); | 673 m_markers->detach(); |
| 685 | 674 |
| 686 m_cssCanvasElements.clear(); | 675 m_cssCanvasElements.clear(); |
| 687 | 676 |
| 688 #if ENABLE(REQUEST_ANIMATION_FRAME) | 677 #if ENABLE(REQUEST_ANIMATION_FRAME) |
| 689 // FIXME: consider using ActiveDOMObject. | 678 // FIXME: consider using ActiveDOMObject. |
| 690 if (m_scriptedAnimationController) | 679 if (m_scriptedAnimationController) |
| 691 m_scriptedAnimationController->clearDocumentPointer(); | 680 m_scriptedAnimationController->clearDocumentPointer(); |
| 692 m_scriptedAnimationController.clear(); | 681 m_scriptedAnimationController.clear(); |
| 693 #endif | 682 #endif |
| 694 | |
| 695 #ifndef NDEBUG | |
| 696 m_inRemovedLastRefFunction = false; | |
| 697 #endif | |
| 698 | |
| 699 guardDeref(); | |
| 700 } else { | |
| 701 #ifndef NDEBUG | |
| 702 m_deletionHasBegun = true; | |
| 703 #endif | |
| 704 delete this; | |
| 705 } | |
| 706 } | 683 } |
| 707 | 684 |
| 708 Element* Document::getElementById(const AtomicString& id) const | 685 Element* Document::getElementById(const AtomicString& id) const |
| 709 { | 686 { |
| 710 return TreeScope::getElementById(id); | 687 return TreeScope::getElementById(id); |
| 711 } | 688 } |
| 712 | 689 |
| 713 Element* Document::getElementByAccessKey(const String& key) | 690 Element* Document::getElementByAccessKey(const String& key) |
| 714 { | 691 { |
| 715 if (key.isEmpty()) | 692 if (key.isEmpty()) |
| (...skipping 5329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6045 else | 6022 else |
| 6046 m_templateDocument = Document::create(0, blankURL()); | 6023 m_templateDocument = Document::create(0, blankURL()); |
| 6047 | 6024 |
| 6048 m_templateDocument->setTemplateDocumentHost(this); // balanced in dtor. | 6025 m_templateDocument->setTemplateDocumentHost(this); // balanced in dtor. |
| 6049 | 6026 |
| 6050 return m_templateDocument.get(); | 6027 return m_templateDocument.get(); |
| 6051 } | 6028 } |
| 6052 #endif | 6029 #endif |
| 6053 | 6030 |
| 6054 } // namespace WebCore | 6031 } // namespace WebCore |
| OLD | NEW |