Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(198)

Side by Side Diff: Source/core/dom/Document.cpp

Issue 262093006: Oilpan: Make the Node hierarchy RefCountedGarbageCollected instead of TreeShared. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address more comments. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 , m_writeRecursionDepth(0) 472 , m_writeRecursionDepth(0)
473 , m_taskRunner(MainThreadTaskRunner::create(this)) 473 , m_taskRunner(MainThreadTaskRunner::create(this))
474 , m_registrationContext(initializer.registrationContext(this)) 474 , m_registrationContext(initializer.registrationContext(this))
475 , m_elementDataCacheClearTimer(this, &Document::elementDataCacheClearTimerFi red) 475 , m_elementDataCacheClearTimer(this, &Document::elementDataCacheClearTimerFi red)
476 #ifndef NDEBUG 476 #ifndef NDEBUG
477 , m_didDispatchViewportPropertiesChanged(false) 477 , m_didDispatchViewportPropertiesChanged(false)
478 #endif 478 #endif
479 , m_animationClock(AnimationClock::create()) 479 , m_animationClock(AnimationClock::create())
480 , m_timeline(DocumentTimeline::create(this)) 480 , m_timeline(DocumentTimeline::create(this))
481 , m_transitionTimeline(TransitionTimeline::create(this)) 481 , m_transitionTimeline(TransitionTimeline::create(this))
482 , m_templateDocumentHost(0) 482 , m_templateDocumentHost(nullptr)
483 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired) 483 , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsT imerFired)
484 , m_hasViewportUnits(false) 484 , m_hasViewportUnits(false)
485 , m_styleRecalcElementCounter(0) 485 , m_styleRecalcElementCounter(0)
486 { 486 {
487 setClient(this); 487 setClient(this);
488 ScriptWrappable::init(this); 488 ScriptWrappable::init(this);
489 489
490 if (m_frame) { 490 if (m_frame) {
491 ASSERT(m_frame->page()); 491 ASSERT(m_frame->page());
492 provideContextFeaturesToDocumentFrom(*this, *m_frame->page()); 492 provideContextFeaturesToDocumentFrom(*this, *m_frame->page());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 ASSERT(!renderView()); 527 ASSERT(!renderView());
528 ASSERT(m_ranges.isEmpty()); 528 ASSERT(m_ranges.isEmpty());
529 ASSERT(!parentTreeScope()); 529 ASSERT(!parentTreeScope());
530 #if !ENABLE(OILPAN) 530 #if !ENABLE(OILPAN)
531 ASSERT(!hasGuardRefCount()); 531 ASSERT(!hasGuardRefCount());
532 // With Oilpan, either the document outlives the visibility observers 532 // With Oilpan, either the document outlives the visibility observers
533 // or the visibility observers and the document die in the same GC round. 533 // or the visibility observers and the document die in the same GC round.
534 // When they die in the same GC round, the list of visibility observers 534 // When they die in the same GC round, the list of visibility observers
535 // will not be empty on Document destruction. 535 // will not be empty on Document destruction.
536 ASSERT(m_visibilityObservers.isEmpty()); 536 ASSERT(m_visibilityObservers.isEmpty());
537 #endif
538 537
539 if (m_templateDocument) 538 if (m_templateDocument)
540 m_templateDocument->m_templateDocumentHost = 0; // balanced in ensureTem plateDocument(). 539 m_templateDocument->m_templateDocumentHost = nullptr; // balanced in ens ureTemplateDocument().
540 #endif
541 541
542 m_scriptRunner.clear(); 542 m_scriptRunner.clear();
543 543
544 #if !ENABLE(OILPAN)
544 removeAllEventListenersRecursively(); 545 removeAllEventListenersRecursively();
haraken 2014/05/06 04:20:16 Removing this line is great, but we'll still need
Mads Ager (chromium) 2014/05/06 08:26:00 Yeah, we need to figure out how to deal with Inspe
546 #endif
545 547
546 // Currently we believe that Document can never outlive the parser. 548 // Currently we believe that Document can never outlive the parser.
547 // Although the Document may be replaced synchronously, DocumentParsers 549 // Although the Document may be replaced synchronously, DocumentParsers
548 // generally keep at least one reference to an Element which would in turn 550 // generally keep at least one reference to an Element which would in turn
549 // has a reference to the Document. If you hit this ASSERT, then that 551 // has a reference to the Document. If you hit this ASSERT, then that
550 // assumption is wrong. DocumentParser::detach() should ensure that even 552 // assumption is wrong. DocumentParser::detach() should ensure that even
551 // if the DocumentParser outlives the Document it won't cause badness. 553 // if the DocumentParser outlives the Document it won't cause badness.
552 ASSERT(!m_parser || m_parser->refCount() == 1); 554 ASSERT(!m_parser || m_parser->refCount() == 1);
553 detachParser(); 555 detachParser();
554 556
555 if (this == topDocument()) 557 if (this == topDocument())
556 clearAXObjectCache(); 558 clearAXObjectCache();
557 559
558 #if !ENABLE(OILPAN) 560 #if !ENABLE(OILPAN)
559 if (m_styleSheetList) 561 if (m_styleSheetList)
560 m_styleSheetList->detachFromDocument(); 562 m_styleSheetList->detachFromDocument();
561 #endif 563 #endif
562 564
563 if (m_importsController) { 565 if (m_importsController) {
564 m_importsController->wasDetachedFrom(*this); 566 m_importsController->wasDetachedFrom(*this);
565 m_importsController = 0; 567 m_importsController = 0;
566 } 568 }
567 569
568 m_timeline->detachFromDocument(); 570 m_timeline->detachFromDocument();
569 m_transitionTimeline->detachFromDocument(); 571 m_transitionTimeline->detachFromDocument();
570 572
573 #if !ENABLE(OILPAN)
571 // We need to destroy CSSFontSelector before destroying m_fetcher. 574 // We need to destroy CSSFontSelector before destroying m_fetcher.
572 if (m_styleEngine) 575 if (m_styleEngine)
573 m_styleEngine->detachFromDocument(); 576 m_styleEngine->detachFromDocument();
574 577
575 #if !ENABLE(OILPAN)
576 if (m_elemSheet) 578 if (m_elemSheet)
577 m_elemSheet->clearOwnerNode(); 579 m_elemSheet->clearOwnerNode();
578 #endif 580 #endif
579 581
580 // It's possible for multiple Documents to end up referencing the same Resou rceFetcher (e.g., SVGImages 582 // It's possible for multiple Documents to end up referencing the same Resou rceFetcher (e.g., SVGImages
581 // load the initial empty document and the SVGDocument with the same Documen tLoader). 583 // load the initial empty document and the SVGDocument with the same Documen tLoader).
582 if (m_fetcher->document() == this) 584 if (m_fetcher->document() == this)
583 m_fetcher->setDocument(0); 585 m_fetcher->setDocument(0);
584 m_fetcher.clear(); 586 m_fetcher.clear();
585 587
586 // We must call clearRareData() here since a Document class inherits TreeSco pe 588 // We must call clearRareData() here since a Document class inherits TreeSco pe
587 // as well as Node. See a comment on TreeScope.h for the reason. 589 // as well as Node. See a comment on TreeScope.h for the reason.
588 if (hasRareData()) 590 if (hasRareData())
589 clearRareData(); 591 clearRareData();
590 592
591 ASSERT(!m_listsInvalidatedAtDocument.size()); 593 ASSERT(!m_listsInvalidatedAtDocument.size());
592 594
593 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++) 595 for (unsigned i = 0; i < WTF_ARRAY_LENGTH(m_nodeListCounts); i++)
594 ASSERT(!m_nodeListCounts[i]); 596 ASSERT(!m_nodeListCounts[i]);
595 597
596 setClient(0); 598 setClient(0);
597 599
598 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter); 600 InspectorCounters::decrementCounter(InspectorCounters::DocumentCounter);
599 } 601 }
600 602
601 void Document::dispose() 603 void Document::dispose()
haraken 2014/05/06 04:20:16 Just to confirm: In oilpan, Document::dispose() is
Mads Ager (chromium) 2014/05/06 08:26:00 With Oilpan, dispose is called at the point where
602 { 604 {
605 #if !ENABLE(OILPAN)
603 ASSERT_WITH_SECURITY_IMPLICATION(!m_deletionHasBegun); 606 ASSERT_WITH_SECURITY_IMPLICATION(!m_deletionHasBegun);
607
604 // We must make sure not to be retaining any of our children through 608 // We must make sure not to be retaining any of our children through
605 // these extra pointers or we will create a reference cycle. 609 // these extra pointers or we will create a reference cycle.
606 m_docType = nullptr; 610 m_docType = nullptr;
607 m_focusedElement = nullptr; 611 m_focusedElement = nullptr;
608 m_hoverNode = nullptr; 612 m_hoverNode = nullptr;
609 m_activeHoverElement = nullptr; 613 m_activeHoverElement = nullptr;
610 m_titleElement = nullptr; 614 m_titleElement = nullptr;
611 m_documentElement = nullptr; 615 m_documentElement = nullptr;
612 m_contextFeatures = ContextFeatures::defaultSwitch(); 616 m_contextFeatures = ContextFeatures::defaultSwitch();
haraken 2014/05/06 04:20:16 I'm curious why you can remove this before moving
Mads Ager (chromium) 2014/05/06 08:26:00 m_contextFeatures *is* on the heap and is traced,
613 m_userActionElements.documentDidRemoveLastRef(); 617 m_userActionElements.documentDidRemoveLastRef();
614 m_associatedFormControls.clear(); 618 m_associatedFormControls.clear();
615 619
616 detachParser(); 620 detachParser();
haraken 2014/05/06 04:20:16 Ditto. I'm curious why you can remove this before
Mads Ager (chromium) 2014/05/06 08:26:00 You are right. I was using the fact that detachPar
617 621
618 m_registrationContext.clear(); 622 m_registrationContext.clear();
haraken 2014/05/06 04:20:16 Ditto. I'm curious why you can remove this before
Mads Ager (chromium) 2014/05/06 08:26:00 Let me restore it. Looking at it now I'm not entir
619 623
620 if (m_importsController) { 624 if (m_importsController) {
621 m_importsController->wasDetachedFrom(*this); 625 m_importsController->wasDetachedFrom(*this);
haraken 2014/05/06 04:20:16 I guess we still need this to call HTMLImportsCont
Mads Ager (chromium) 2014/05/06 08:26:00 Restored as well.
622 m_importsController = 0; 626 m_importsController = 0;
623 } 627 }
624 628
625 // removeDetachedChildren() doesn't always unregister IDs, 629 // removeDetachedChildren() doesn't always unregister IDs,
626 // so tear down scope information upfront to avoid having stale references i n the map. 630 // so tear down scope information upfront to avoid having stale references i n the map.
627 destroyTreeScopeData(); 631 destroyTreeScopeData();
haraken 2014/05/06 04:20:16 As far as I read the comment in line 629 and 630,
Mads Ager (chromium) 2014/05/06 08:26:00 We are not calling removeDetachedChildren. The chi
632
628 removeDetachedChildren(); 633 removeDetachedChildren();
634 #endif
635
629 // removeDetachedChildren() can access FormController. 636 // removeDetachedChildren() can access FormController.
630 m_formController.clear(); 637 m_formController.clear();
631 638
639 #if !ENABLE(OILPAN)
632 m_markers->clear(); 640 m_markers->clear();
haraken 2014/05/06 04:20:16 Just to confirm: There is no problem in calling m_
Mads Ager (chromium) 2014/05/06 08:26:00 That's right. As long as the Document stays alive
633 641
634 m_cssCanvasElements.clear(); 642 m_cssCanvasElements.clear();
643 #endif
635 644
636 // FIXME: consider using ActiveDOMObject. 645 // FIXME: consider using ActiveDOMObject.
637 if (m_scriptedAnimationController) 646 if (m_scriptedAnimationController)
638 m_scriptedAnimationController->clearDocumentPointer(); 647 m_scriptedAnimationController->clearDocumentPointer();
639 m_scriptedAnimationController.clear(); 648 m_scriptedAnimationController.clear();
640 649
641 if (svgExtensions()) 650 if (svgExtensions())
642 accessSVGExtensions().pauseAnimations(); 651 accessSVGExtensions().pauseAnimations();
643 652
653 #if !ENABLE(OILPAN)
644 m_lifecycle.advanceTo(DocumentLifecycle::Disposed); 654 m_lifecycle.advanceTo(DocumentLifecycle::Disposed);
haraken 2014/05/06 04:20:16 - I wonder why you need to remove this line. - If
Mads Ager (chromium) 2014/05/06 08:26:00 I removed this because we have collapsed Stopped a
655 #endif
656
645 lifecycleNotifier().notifyDocumentWasDisposed(); 657 lifecycleNotifier().notifyDocumentWasDisposed();
646 } 658 }
647 659
648 SelectorQueryCache& Document::selectorQueryCache() 660 SelectorQueryCache& Document::selectorQueryCache()
649 { 661 {
650 if (!m_selectorQueryCache) 662 if (!m_selectorQueryCache)
651 m_selectorQueryCache = adoptPtr(new SelectorQueryCache()); 663 m_selectorQueryCache = adoptPtr(new SelectorQueryCache());
652 return *m_selectorQueryCache; 664 return *m_selectorQueryCache;
653 } 665 }
654 666
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after
1355 1367
1356 void Document::setTitle(const String& title) 1368 void Document::setTitle(const String& title)
1357 { 1369 {
1358 // Title set by JavaScript -- overrides any title elements. 1370 // Title set by JavaScript -- overrides any title elements.
1359 m_titleSetExplicitly = true; 1371 m_titleSetExplicitly = true;
1360 if (!isHTMLDocument() && !isXHTMLDocument()) 1372 if (!isHTMLDocument() && !isXHTMLDocument())
1361 m_titleElement = nullptr; 1373 m_titleElement = nullptr;
1362 else if (!m_titleElement) { 1374 else if (!m_titleElement) {
1363 if (HTMLElement* headElement = head()) { 1375 if (HTMLElement* headElement = head()) {
1364 m_titleElement = HTMLTitleElement::create(*this); 1376 m_titleElement = HTMLTitleElement::create(*this);
1365 headElement->appendChild(m_titleElement); 1377 headElement->appendChild(m_titleElement.get());
1366 } 1378 }
1367 } 1379 }
1368 1380
1369 if (isHTMLTitleElement(m_titleElement)) 1381 if (isHTMLTitleElement(m_titleElement))
1370 toHTMLTitleElement(m_titleElement)->setText(title); 1382 toHTMLTitleElement(m_titleElement)->setText(title);
1371 else 1383 else
1372 updateTitle(title); 1384 updateTitle(title);
1373 } 1385 }
1374 1386
1375 void Document::setTitleElement(const String& title, Element* titleElement) 1387 void Document::setTitleElement(const String& title, Element* titleElement)
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
2216 // possible to re-attach. Eventually Document::detach() should be renamed, 2228 // possible to re-attach. Eventually Document::detach() should be renamed,
2217 // or this setting of the frame to 0 could be made explicit in each of the 2229 // or this setting of the frame to 0 could be made explicit in each of the
2218 // callers of Document::detach(). 2230 // callers of Document::detach().
2219 m_frame = 0; 2231 m_frame = 0;
2220 2232
2221 if (m_mediaQueryMatcher) 2233 if (m_mediaQueryMatcher)
2222 m_mediaQueryMatcher->documentDestroyed(); 2234 m_mediaQueryMatcher->documentDestroyed();
2223 2235
2224 lifecycleNotifier().notifyDocumentWasDetached(); 2236 lifecycleNotifier().notifyDocumentWasDetached();
2225 m_lifecycle.advanceTo(DocumentLifecycle::Stopped); 2237 m_lifecycle.advanceTo(DocumentLifecycle::Stopped);
2238 #if ENABLE(OILPAN)
2239 dispose();
haraken 2014/05/06 04:20:16 Just help me understand (very fundamental question
Mads Ager (chromium) 2014/05/06 08:26:00 When you detach the document it cannot be attached
2240 #endif
2226 } 2241 }
2227 2242
2228 void Document::prepareForDestruction() 2243 void Document::prepareForDestruction()
2229 { 2244 {
2230 m_markers->prepareForDestruction(); 2245 m_markers->prepareForDestruction();
2231 disconnectDescendantFrames(); 2246 disconnectDescendantFrames();
2232 2247
2233 // The process of disconnecting descendant frames could have already detache d us. 2248 // The process of disconnecting descendant frames could have already detache d us.
2234 if (!isActive()) 2249 if (!isActive())
2235 return; 2250 return;
(...skipping 1282 matching lines...) Expand 10 before | Expand all | Expand 10 after
3518 if (newFocusedElement && (newFocusedElement->document() != this)) 3533 if (newFocusedElement && (newFocusedElement->document() != this))
3519 return true; 3534 return true;
3520 3535
3521 if (NodeChildRemovalTracker::isBeingRemoved(newFocusedElement.get())) 3536 if (NodeChildRemovalTracker::isBeingRemoved(newFocusedElement.get()))
3522 return true; 3537 return true;
3523 3538
3524 if (m_focusedElement == newFocusedElement) 3539 if (m_focusedElement == newFocusedElement)
3525 return true; 3540 return true;
3526 3541
3527 bool focusChangeBlocked = false; 3542 bool focusChangeBlocked = false;
3528 RefPtr<Element> oldFocusedElement = m_focusedElement; 3543 RefPtrWillBeRawPtr<Element> oldFocusedElement = m_focusedElement;
3529 m_focusedElement = nullptr; 3544 m_focusedElement = nullptr;
3530 3545
3531 // Remove focus from the existing focus node (if any) 3546 // Remove focus from the existing focus node (if any)
3532 if (oldFocusedElement) { 3547 if (oldFocusedElement) {
3533 ASSERT(!oldFocusedElement->inDetach()); 3548 ASSERT(!oldFocusedElement->inDetach());
3534 3549
3535 if (oldFocusedElement->active()) 3550 if (oldFocusedElement->active())
3536 oldFocusedElement->setActive(false); 3551 oldFocusedElement->setActive(false);
3537 3552
3538 oldFocusedElement->setFocus(false); 3553 oldFocusedElement->setFocus(false);
(...skipping 1332 matching lines...) Expand 10 before | Expand all | Expand 10 after
4871 is2d = true; 4886 is2d = true;
4872 context2d = toCanvasRenderingContext2D(context); 4887 context2d = toCanvasRenderingContext2D(context);
4873 } else if (context->is3d()) { 4888 } else if (context->is3d()) {
4874 is3d = true; 4889 is3d = true;
4875 context3d = toWebGLRenderingContext(context); 4890 context3d = toWebGLRenderingContext(context);
4876 } 4891 }
4877 } 4892 }
4878 4893
4879 HTMLCanvasElement& Document::getCSSCanvasElement(const String& name) 4894 HTMLCanvasElement& Document::getCSSCanvasElement(const String& name)
4880 { 4895 {
4881 RefPtr<HTMLCanvasElement>& element = m_cssCanvasElements.add(name, nullptr). storedValue->value; 4896 RefPtrWillBeMember<HTMLCanvasElement>& element = m_cssCanvasElements.add(nam e, nullptr).storedValue->value;
haraken 2014/05/06 04:20:16 I forgot the previous discussion, but what was the
Mads Ager (chromium) 2014/05/06 08:26:00 This one is safe. The only way the add/new pattern
4882 if (!element) { 4897 if (!element) {
4883 element = HTMLCanvasElement::create(*this); 4898 element = HTMLCanvasElement::create(*this);
4884 element->setAccelerationDisabled(true); 4899 element->setAccelerationDisabled(true);
4885 } 4900 }
4886 return *element; 4901 return *element;
4887 } 4902 }
4888 4903
4889 void Document::initDNSPrefetch() 4904 void Document::initDNSPrefetch()
4890 { 4905 {
4891 Settings* settings = this->settings(); 4906 Settings* settings = this->settings();
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
5656 if (!visitor->isAlive(it->key)) 5671 if (!visitor->isAlive(it->key))
5657 deadNodes.append(it->key); 5672 deadNodes.append(it->key);
5658 } 5673 }
5659 for (unsigned i = 0; i < deadNodes.size(); ++i) 5674 for (unsigned i = 0; i < deadNodes.size(); ++i)
5660 didClearTouchEventHandlers(deadNodes[i]); 5675 didClearTouchEventHandlers(deadNodes[i]);
5661 } 5676 }
5662 } 5677 }
5663 5678
5664 void Document::trace(Visitor* visitor) 5679 void Document::trace(Visitor* visitor)
5665 { 5680 {
5681 visitor->trace(m_docType);
5682 visitor->trace(m_autofocusElement);
5683 visitor->trace(m_focusedElement);
5684 visitor->trace(m_hoverNode);
5685 visitor->trace(m_activeHoverElement);
5686 visitor->trace(m_documentElement);
5687 visitor->trace(m_titleElement);
5688 visitor->trace(m_currentScriptStack);
5689 visitor->trace(m_transformSourceDocument);
5690 visitor->trace(m_cssCanvasElements);
5691 visitor->trace(m_topLayerElements);
5692 visitor->trace(m_mediaQueryMatcher);
haraken 2014/05/06 04:20:16 You're tracing m_mediaQueryMatcher twice :)
Mads Ager (chromium) 2014/05/06 08:26:00 I REALLY don't want it to go away!!! ;-) Thanks H
5693 visitor->trace(m_elemSheet);
5694 visitor->trace(m_styleEngine);
5666 visitor->trace(m_styleSheetList); 5695 visitor->trace(m_styleSheetList);
5667 visitor->trace(m_mediaQueryMatcher); 5696 visitor->trace(m_mediaQueryMatcher);
5697 visitor->trace(m_associatedFormControls);
5698 visitor->trace(m_templateDocument);
5699 visitor->trace(m_templateDocumentHost);
5668 visitor->trace(m_visibilityObservers); 5700 visitor->trace(m_visibilityObservers);
5669 visitor->trace(m_contextFeatures); 5701 visitor->trace(m_contextFeatures);
5702 visitor->trace(m_userActionElements);
5670 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this); 5703 visitor->registerWeakMembers<Document, &Document::clearWeakMembers>(this);
5671 DocumentSupplementable::trace(visitor); 5704 DocumentSupplementable::trace(visitor);
5672 TreeScope::trace(visitor); 5705 TreeScope::trace(visitor);
5673 ContainerNode::trace(visitor); 5706 ContainerNode::trace(visitor);
5674 ExecutionContext::trace(visitor); 5707 ExecutionContext::trace(visitor);
5675 } 5708 }
5676 5709
5677 } // namespace WebCore 5710 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698