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 511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 | 522 |
523 #ifndef NDEBUG | 523 #ifndef NDEBUG |
524 liveDocumentSet().add(this); | 524 liveDocumentSet().add(this); |
525 #endif | 525 #endif |
526 } | 526 } |
527 | 527 |
528 Document::~Document() | 528 Document::~Document() |
529 { | 529 { |
530 ASSERT(!layoutView()); | 530 ASSERT(!layoutView()); |
531 ASSERT(!parentTreeScope()); | 531 ASSERT(!parentTreeScope()); |
| 532 // If a top document with a cache, verify that it was comprehensively |
| 533 // cleared during detach. |
| 534 ASSERT(!m_axObjectCache); |
532 #if !ENABLE(OILPAN) | 535 #if !ENABLE(OILPAN) |
533 ASSERT(m_ranges.isEmpty()); | 536 ASSERT(m_ranges.isEmpty()); |
534 ASSERT(!hasGuardRefCount()); | 537 ASSERT(!hasGuardRefCount()); |
535 // With Oilpan, either the document outlives the visibility observers | 538 // With Oilpan, either the document outlives the visibility observers |
536 // or the visibility observers and the document die in the same GC round. | 539 // or the visibility observers and the document die in the same GC round. |
537 // When they die in the same GC round, the list of visibility observers | 540 // When they die in the same GC round, the list of visibility observers |
538 // will not be empty on Document destruction. | 541 // will not be empty on Document destruction. |
539 ASSERT(m_visibilityObservers.isEmpty()); | 542 ASSERT(m_visibilityObservers.isEmpty()); |
540 | 543 |
541 if (m_templateDocument) | 544 if (m_templateDocument) |
542 m_templateDocument->m_templateDocumentHost = nullptr; // balanced in ens
ureTemplateDocument(). | 545 m_templateDocument->m_templateDocumentHost = nullptr; // balanced in ens
ureTemplateDocument(). |
543 | 546 |
544 m_scriptRunner.clear(); | 547 m_scriptRunner.clear(); |
545 | 548 |
546 // FIXME: Oilpan: Not removing event listeners here also means that we do | 549 // FIXME: Oilpan: Not removing event listeners here also means that we do |
547 // not notify the inspector instrumentation that the event listeners are | 550 // not notify the inspector instrumentation that the event listeners are |
548 // gone. The Document and all the nodes in the document are gone, so maybe | 551 // gone. The Document and all the nodes in the document are gone, so maybe |
549 // that is OK? | 552 // that is OK? |
550 removeAllEventListenersRecursively(); | 553 removeAllEventListenersRecursively(); |
551 | 554 |
552 // Currently we believe that Document can never outlive the parser. | 555 // Currently we believe that Document can never outlive the parser. |
553 // Although the Document may be replaced synchronously, DocumentParsers | 556 // Although the Document may be replaced synchronously, DocumentParsers |
554 // generally keep at least one reference to an Element which would in turn | 557 // generally keep at least one reference to an Element which would in turn |
555 // has a reference to the Document. If you hit this ASSERT, then that | 558 // has a reference to the Document. If you hit this ASSERT, then that |
556 // assumption is wrong. DocumentParser::detach() should ensure that even | 559 // assumption is wrong. DocumentParser::detach() should ensure that even |
557 // if the DocumentParser outlives the Document it won't cause badness. | 560 // if the DocumentParser outlives the Document it won't cause badness. |
558 ASSERT(!m_parser || m_parser->refCount() == 1); | 561 ASSERT(!m_parser || m_parser->refCount() == 1); |
559 detachParser(); | 562 detachParser(); |
560 #endif | |
561 | 563 |
562 if (this == &axObjectCacheOwner()) | |
563 clearAXObjectCache(); | |
564 | |
565 #if !ENABLE(OILPAN) | |
566 if (m_styleSheetList) | 564 if (m_styleSheetList) |
567 m_styleSheetList->detachFromDocument(); | 565 m_styleSheetList->detachFromDocument(); |
568 | 566 |
569 if (m_importsController) | 567 if (m_importsController) |
570 HTMLImportsController::removeFrom(*this); | 568 HTMLImportsController::removeFrom(*this); |
571 | 569 |
572 m_timeline->detachFromDocument(); | 570 m_timeline->detachFromDocument(); |
573 | 571 |
574 // We need to destroy CSSFontSelector before destroying m_fetcher. | 572 // We need to destroy CSSFontSelector before destroying m_fetcher. |
575 m_styleEngine->detachFromDocument(); | 573 m_styleEngine->detachFromDocument(); |
(...skipping 5181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5757 #ifndef NDEBUG | 5755 #ifndef NDEBUG |
5758 using namespace blink; | 5756 using namespace blink; |
5759 void showLiveDocumentInstances() | 5757 void showLiveDocumentInstances() |
5760 { | 5758 { |
5761 WeakDocumentSet& set = liveDocumentSet(); | 5759 WeakDocumentSet& set = liveDocumentSet(); |
5762 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 5760 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
5763 for (Document* document : set) | 5761 for (Document* document : set) |
5764 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str
ing().utf8().data()); | 5762 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str
ing().utf8().data()); |
5765 } | 5763 } |
5766 #endif | 5764 #endif |
OLD | NEW |