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

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

Issue 1896793002: Rename (updateLayout/updateStyle).*.() to updateStyleAndLayout.*.() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
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 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 if (!isInMainFrame()) 635 if (!isInMainFrame())
636 return documentElement(); 636 return documentElement();
637 637
638 FrameHost* host = frameHost(); 638 FrameHost* host = frameHost();
639 if (!host) 639 if (!host)
640 return nullptr; 640 return nullptr;
641 641
642 RootScroller* rootScroller = host->rootScroller(); 642 RootScroller* rootScroller = host->rootScroller();
643 DCHECK(rootScroller); 643 DCHECK(rootScroller);
644 644
645 updateLayoutIgnorePendingStylesheets(); 645 updateStyleAndLayoutIgnorePendingStylesheets();
646 646
647 return rootScroller->get(); 647 return rootScroller->get();
648 } 648 }
649 649
650 bool Document::isInMainFrame() const 650 bool Document::isInMainFrame() const
651 { 651 {
652 return frame() && frame()->isMainFrame(); 652 return frame() && frame()->isMainFrame();
653 } 653 }
654 654
655 AtomicString Document::convertLocalName(const AtomicString& name) 655 AtomicString Document::convertLocalName(const AtomicString& name)
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 return nullptr; 1160 return nullptr;
1161 1161
1162 Position rangeCompliantPosition = positionWithAffinity.position().parentAnch oredEquivalent(); 1162 Position rangeCompliantPosition = positionWithAffinity.position().parentAnch oredEquivalent();
1163 return Range::createAdjustedToTreeScope(*this, rangeCompliantPosition); 1163 return Range::createAdjustedToTreeScope(*this, rangeCompliantPosition);
1164 } 1164 }
1165 1165
1166 Element* Document::scrollingElement() 1166 Element* Document::scrollingElement()
1167 { 1167 {
1168 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { 1168 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) {
1169 if (inQuirksMode()) { 1169 if (inQuirksMode()) {
1170 updateLayoutTree(); 1170 updateStyleAndLayoutTree();
1171 HTMLBodyElement* body = firstBodyElement(); 1171 HTMLBodyElement* body = firstBodyElement();
1172 if (body && body->layoutObject() && body->layoutObject()->hasOverflo wClip()) 1172 if (body && body->layoutObject() && body->layoutObject()->hasOverflo wClip())
1173 return nullptr; 1173 return nullptr;
1174 1174
1175 return body; 1175 return body;
1176 } 1176 }
1177 1177
1178 return documentElement(); 1178 return documentElement();
1179 } 1179 }
1180 1180
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 DCHECK(!node.childNeedsStyleRecalc()); 1687 DCHECK(!node.childNeedsStyleRecalc());
1688 DCHECK(!node.childNeedsDistributionRecalc()); 1688 DCHECK(!node.childNeedsDistributionRecalc());
1689 DCHECK(!node.needsStyleInvalidation()); 1689 DCHECK(!node.needsStyleInvalidation());
1690 DCHECK(!node.childNeedsStyleInvalidation()); 1690 DCHECK(!node.childNeedsStyleInvalidation());
1691 for (ShadowRoot* shadowRoot = node.youngestShadowRoot(); shadowRoot; sha dowRoot = shadowRoot->olderShadowRoot()) 1691 for (ShadowRoot* shadowRoot = node.youngestShadowRoot(); shadowRoot; sha dowRoot = shadowRoot->olderShadowRoot())
1692 assertLayoutTreeUpdated(*shadowRoot); 1692 assertLayoutTreeUpdated(*shadowRoot);
1693 } 1693 }
1694 } 1694 }
1695 #endif 1695 #endif
1696 1696
1697 void Document::updateLayoutTree() 1697 void Document::updateStyleAndLayoutTree()
1698 { 1698 {
1699 DCHECK(isMainThread()); 1699 DCHECK(isMainThread());
1700 1700
1701 ScriptForbiddenScope forbidScript; 1701 ScriptForbiddenScope forbidScript;
1702 // We should forbid script execution for plugins here because update while l ayout is changing, 1702 // We should forbid script execution for plugins here because update while l ayout is changing,
1703 // HTMLPlugin element can be reattached and plugin can be destroyed. Plugin can execute scripts 1703 // HTMLPlugin element can be reattached and plugin can be destroyed. Plugin can execute scripts
1704 // on destroy. It produces crash without PluginScriptForbiddenScope: crbug.c om/550427. 1704 // on destroy. It produces crash without PluginScriptForbiddenScope: crbug.c om/550427.
1705 PluginScriptForbiddenScope pluginForbidScript; 1705 PluginScriptForbiddenScope pluginForbidScript;
1706 1706
1707 if (!view() || !isActive()) 1707 if (!view() || !isActive())
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1866 1866
1867 if (needsFullLayoutTreeUpdate() || node.needsStyleRecalc() || node.needsStyl eInvalidation()) 1867 if (needsFullLayoutTreeUpdate() || node.needsStyleRecalc() || node.needsStyl eInvalidation())
1868 return true; 1868 return true;
1869 for (const ContainerNode* ancestor = LayoutTreeBuilderTraversal::parent(node ); ancestor; ancestor = LayoutTreeBuilderTraversal::parent(*ancestor)) { 1869 for (const ContainerNode* ancestor = LayoutTreeBuilderTraversal::parent(node ); ancestor; ancestor = LayoutTreeBuilderTraversal::parent(*ancestor)) {
1870 if (ancestor->needsStyleRecalc() || ancestor->needsStyleInvalidation() | | ancestor->needsAdjacentStyleRecalc()) 1870 if (ancestor->needsStyleRecalc() || ancestor->needsStyleInvalidation() | | ancestor->needsAdjacentStyleRecalc())
1871 return true; 1871 return true;
1872 } 1872 }
1873 return false; 1873 return false;
1874 } 1874 }
1875 1875
1876 void Document::updateLayoutTreeForNode(const Node* node) 1876 void Document::updateStyleAndLayoutTreeForNode(const Node* node)
1877 { 1877 {
1878 DCHECK(node); 1878 DCHECK(node);
1879 if (!needsLayoutTreeUpdateForNode(*node)) 1879 if (!needsLayoutTreeUpdateForNode(*node))
1880 return; 1880 return;
1881 updateLayoutTree(); 1881 updateStyleAndLayoutTree();
1882 } 1882 }
1883 1883
1884 void Document::updateLayoutIgnorePendingStylesheetsForNode(Node* node) 1884 void Document::updateStyleAndLayoutIgnorePendingStylesheetsForNode(Node* node)
1885 { 1885 {
1886 DCHECK(node); 1886 DCHECK(node);
1887 if (!node->inActiveDocument()) 1887 if (!node->inActiveDocument())
1888 return; 1888 return;
1889 updateLayoutIgnorePendingStylesheets(); 1889 updateStyleAndLayoutIgnorePendingStylesheets();
1890 } 1890 }
1891 1891
1892 void Document::updateLayout() 1892 void Document::updateStyleAndLayout()
1893 { 1893 {
1894 DCHECK(isMainThread()); 1894 DCHECK(isMainThread());
1895 1895
1896 ScriptForbiddenScope forbidScript; 1896 ScriptForbiddenScope forbidScript;
1897 1897
1898 FrameView* frameView = view(); 1898 FrameView* frameView = view();
1899 if (frameView && frameView->isInPerformLayout()) { 1899 if (frameView && frameView->isInPerformLayout()) {
1900 // View layout should not be re-entrant. 1900 // View layout should not be re-entrant.
1901 ASSERT_NOT_REACHED(); 1901 ASSERT_NOT_REACHED();
1902 return; 1902 return;
1903 } 1903 }
1904 1904
1905 if (HTMLFrameOwnerElement* owner = localOwner()) 1905 if (HTMLFrameOwnerElement* owner = localOwner())
1906 owner->document().updateLayout(); 1906 owner->document().updateStyleAndLayout();
1907 1907
1908 updateLayoutTree(); 1908 updateStyleAndLayoutTree();
1909 1909
1910 if (!isActive()) 1910 if (!isActive())
1911 return; 1911 return;
1912 1912
1913 if (frameView->needsLayout()) 1913 if (frameView->needsLayout())
1914 frameView->layout(); 1914 frameView->layout();
1915 1915
1916 if (lifecycle().state() < DocumentLifecycle::LayoutClean) 1916 if (lifecycle().state() < DocumentLifecycle::LayoutClean)
1917 lifecycle().advanceTo(DocumentLifecycle::LayoutClean); 1917 lifecycle().advanceTo(DocumentLifecycle::LayoutClean);
1918 } 1918 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1953 } 1953 }
1954 1954
1955 void Document::clearFocusedElementSoon() 1955 void Document::clearFocusedElementSoon()
1956 { 1956 {
1957 if (!m_clearFocusedElementTimer.isActive()) 1957 if (!m_clearFocusedElementTimer.isActive())
1958 m_clearFocusedElementTimer.startOneShot(0, BLINK_FROM_HERE); 1958 m_clearFocusedElementTimer.startOneShot(0, BLINK_FROM_HERE);
1959 } 1959 }
1960 1960
1961 void Document::clearFocusedElementTimerFired(Timer<Document>*) 1961 void Document::clearFocusedElementTimerFired(Timer<Document>*)
1962 { 1962 {
1963 updateLayoutTree(); 1963 updateStyleAndLayoutTree();
1964 m_clearFocusedElementTimer.stop(); 1964 m_clearFocusedElementTimer.stop();
1965 1965
1966 if (m_focusedElement && !m_focusedElement->isFocusable()) 1966 if (m_focusedElement && !m_focusedElement->isFocusable())
1967 m_focusedElement->blur(); 1967 m_focusedElement->blur();
1968 } 1968 }
1969 1969
1970 // FIXME: This is a bad idea and needs to be removed eventually. 1970 // FIXME: This is a bad idea and needs to be removed eventually.
1971 // Other browsers load stylesheets before they continue parsing the web page. 1971 // Other browsers load stylesheets before they continue parsing the web page.
1972 // Since we don't, we can run JavaScript code that needs answers before the 1972 // Since we don't, we can run JavaScript code that needs answers before the
1973 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets 1973 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets
1974 // lets us get reasonable answers. The long term solution to this problem is 1974 // lets us get reasonable answers. The long term solution to this problem is
1975 // to instead suspend JavaScript execution. 1975 // to instead suspend JavaScript execution.
1976 void Document::updateLayoutTreeIgnorePendingStylesheets() 1976 void Document::updateStyleAndLayoutTreeIgnorePendingStylesheets()
1977 { 1977 {
1978 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine()); 1978 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine());
1979 1979
1980 if (styleEngine().hasPendingScriptBlockingSheets()) { 1980 if (styleEngine().hasPendingScriptBlockingSheets()) {
1981 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once. 1981 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once.
1982 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page 1982 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page
1983 // content has already been loaded and displayed with accurate style inf ormation. (Our 1983 // content has already been loaded and displayed with accurate style inf ormation. (Our
1984 // suppression involves blanking the whole page at the moment. If it wer e more refined, we 1984 // suppression involves blanking the whole page at the moment. If it wer e more refined, we
1985 // might be able to do something better.) It's worth noting though that this entire method 1985 // might be able to do something better.) It's worth noting though that this entire method
1986 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with 1986 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with
1987 // inaccurate information. 1987 // inaccurate information.
1988 HTMLElement* bodyElement = body(); 1988 HTMLElement* bodyElement = body();
1989 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) { 1989 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) {
1990 m_pendingSheetLayout = DidLayoutWithPendingSheets; 1990 m_pendingSheetLayout = DidLayoutWithPendingSheets;
1991 styleEngine().resolverChanged(FullStyleUpdate); 1991 styleEngine().resolverChanged(FullStyleUpdate);
1992 } else if (m_hasNodesWithPlaceholderStyle) { 1992 } else if (m_hasNodesWithPlaceholderStyle) {
1993 // If new nodes have been added or style recalc has been done with s tyle sheets still 1993 // If new nodes have been added or style recalc has been done with s tyle sheets still
1994 // pending, some nodes may not have had their real style calculated yet. Normally this 1994 // pending, some nodes may not have had their real style calculated yet. Normally this
1995 // gets cleaned when style sheets arrive but here we need up-to-date style immediately. 1995 // gets cleaned when style sheets arrive but here we need up-to-date style immediately.
1996 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :create(StyleChangeReason::CleanupPlaceholderStyles)); 1996 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :create(StyleChangeReason::CleanupPlaceholderStyles));
1997 } 1997 }
1998 } 1998 }
1999 updateLayoutTree(); 1999 updateStyleAndLayoutTree();
2000 } 2000 }
2001 2001
2002 void Document::updateLayoutIgnorePendingStylesheets(Document::RunPostLayoutTasks runPostLayoutTasks) 2002 void Document::updateStyleAndLayoutIgnorePendingStylesheets(Document::RunPostLay outTasks runPostLayoutTasks)
2003 { 2003 {
2004 updateLayoutTreeIgnorePendingStylesheets(); 2004 updateStyleAndLayoutTreeIgnorePendingStylesheets();
2005 updateLayout(); 2005 updateStyleAndLayout();
2006 2006
2007 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view()) 2007 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view())
2008 view()->flushAnyPendingPostLayoutTasks(); 2008 view()->flushAnyPendingPostLayoutTasks();
2009 } 2009 }
2010 2010
2011 PassRefPtr<ComputedStyle> Document::styleForElementIgnoringPendingStylesheets(El ement* element) 2011 PassRefPtr<ComputedStyle> Document::styleForElementIgnoringPendingStylesheets(El ement* element)
2012 { 2012 {
2013 DCHECK_EQ(element->document(), this); 2013 DCHECK_EQ(element->document(), this);
2014 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine()); 2014 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine());
2015 return ensureStyleResolver().styleForElement(element, element->parentNode() ? element->parentNode()->ensureComputedStyle() : 0); 2015 return ensureStyleResolver().styleForElement(element, element->parentNode() ? element->parentNode()->ensureComputedStyle() : 0);
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
2658 // Just bail out. Before or during the onload we were shifted to another page. 2658 // Just bail out. Before or during the onload we were shifted to another page.
2659 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out. 2659 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out.
2660 m_loadEventProgress = LoadEventCompleted; 2660 m_loadEventProgress = LoadEventCompleted;
2661 return; 2661 return;
2662 } 2662 }
2663 2663
2664 // We used to force a synchronous display and flush here. This really isn't 2664 // We used to force a synchronous display and flush here. This really isn't
2665 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps 2665 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps
2666 // (if your platform is syncing flushes and limiting them to 60fps). 2666 // (if your platform is syncing flushes and limiting them to 60fps).
2667 if (!localOwner() || (localOwner()->layoutObject() && !localOwner()->layoutO bject()->needsLayout())) { 2667 if (!localOwner() || (localOwner()->layoutObject() && !localOwner()->layoutO bject()->needsLayout())) {
2668 updateLayoutTree(); 2668 updateStyleAndLayoutTree();
2669 2669
2670 // Always do a layout after loading if needed. 2670 // Always do a layout after loading if needed.
2671 if (view() && layoutView() && (!layoutView()->firstChild() || layoutView ()->needsLayout())) 2671 if (view() && layoutView() && (!layoutView()->firstChild() || layoutView ()->needsLayout()))
2672 view()->layout(); 2672 view()->layout();
2673 } 2673 }
2674 2674
2675 m_loadEventProgress = LoadEventCompleted; 2675 m_loadEventProgress = LoadEventCompleted;
2676 2676
2677 if (frame() && layoutView() && settings()->accessibilityEnabled()) { 2677 if (frame() && layoutView() && settings()->accessibilityEnabled()) {
2678 if (AXObjectCache* cache = axObjectCache()) { 2678 if (AXObjectCache* cache = axObjectCache()) {
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
3593 if (view()) { 3593 if (view()) {
3594 Widget* oldWidget = widgetForElement(*oldFocusedElement); 3594 Widget* oldWidget = widgetForElement(*oldFocusedElement);
3595 if (oldWidget) 3595 if (oldWidget)
3596 oldWidget->setFocus(false, params.type); 3596 oldWidget->setFocus(false, params.type);
3597 else 3597 else
3598 view()->setFocus(false, params.type); 3598 view()->setFocus(false, params.type);
3599 } 3599 }
3600 } 3600 }
3601 3601
3602 if (newFocusedElement) 3602 if (newFocusedElement)
3603 updateLayoutTreeForNode(newFocusedElement); 3603 updateStyleAndLayoutTreeForNode(newFocusedElement);
3604 if (newFocusedElement && newFocusedElement->isFocusable()) { 3604 if (newFocusedElement && newFocusedElement->isFocusable()) {
3605 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(* newFocusedElement)) { 3605 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(* newFocusedElement)) {
3606 // delegate blocks focus change 3606 // delegate blocks focus change
3607 focusChangeBlocked = true; 3607 focusChangeBlocked = true;
3608 goto SetFocusedElementDone; 3608 goto SetFocusedElementDone;
3609 } 3609 }
3610 // Set focus on the new node 3610 // Set focus on the new node
3611 m_focusedElement = newFocusedElement; 3611 m_focusedElement = newFocusedElement;
3612 setSequentialFocusNavigationStartingPoint(m_focusedElement.get()); 3612 setSequentialFocusNavigationStartingPoint(m_focusedElement.get());
3613 3613
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
3654 frame()->spellChecker().didBeginEditing(m_focusedElement.get()); 3654 frame()->spellChecker().didBeginEditing(m_focusedElement.get());
3655 3655
3656 // eww, I suck. set the qt focus correctly 3656 // eww, I suck. set the qt focus correctly
3657 // ### find a better place in the code for this 3657 // ### find a better place in the code for this
3658 if (view()) { 3658 if (view()) {
3659 Widget* focusWidget = widgetForElement(*m_focusedElement); 3659 Widget* focusWidget = widgetForElement(*m_focusedElement);
3660 if (focusWidget) { 3660 if (focusWidget) {
3661 // Make sure a widget has the right size before giving it focus. 3661 // Make sure a widget has the right size before giving it focus.
3662 // Otherwise, we are testing edge cases of the Widget code. 3662 // Otherwise, we are testing edge cases of the Widget code.
3663 // Specifically, in WebCore this does not work well for text fie lds. 3663 // Specifically, in WebCore this does not work well for text fie lds.
3664 updateLayout(); 3664 updateStyleAndLayout();
3665 // Re-get the widget in case updating the layout changed things. 3665 // Re-get the widget in case updating the layout changed things.
3666 focusWidget = widgetForElement(*m_focusedElement); 3666 focusWidget = widgetForElement(*m_focusedElement);
3667 } 3667 }
3668 if (focusWidget) 3668 if (focusWidget)
3669 focusWidget->setFocus(true, params.type); 3669 focusWidget->setFocus(true, params.type);
3670 else 3670 else
3671 view()->setFocus(true, params.type); 3671 view()->setFocus(true, params.type);
3672 } 3672 }
3673 } 3673 }
3674 3674
3675 if (!focusChangeBlocked && m_focusedElement) { 3675 if (!focusChangeBlocked && m_focusedElement) {
3676 // Create the AXObject cache in a focus change because Chromium relies o n it. 3676 // Create the AXObject cache in a focus change because Chromium relies o n it.
3677 if (AXObjectCache* cache = axObjectCache()) 3677 if (AXObjectCache* cache = axObjectCache())
3678 cache->handleFocusedUIElementChanged(oldFocusedElement, newFocusedEl ement); 3678 cache->handleFocusedUIElementChanged(oldFocusedElement, newFocusedEl ement);
3679 } 3679 }
3680 3680
3681 if (!focusChangeBlocked && frameHost()) 3681 if (!focusChangeBlocked && frameHost())
3682 frameHost()->chromeClient().focusedNodeChanged(oldFocusedElement, m_focu sedElement.get()); 3682 frameHost()->chromeClient().focusedNodeChanged(oldFocusedElement, m_focu sedElement.get());
3683 3683
3684 SetFocusedElementDone: 3684 SetFocusedElementDone:
3685 updateLayoutTree(); 3685 updateStyleAndLayoutTree();
3686 if (LocalFrame* frame = this->frame()) 3686 if (LocalFrame* frame = this->frame())
3687 frame->selection().didChangeFocus(); 3687 frame->selection().didChangeFocus();
3688 return !focusChangeBlocked; 3688 return !focusChangeBlocked;
3689 } 3689 }
3690 3690
3691 void Document::clearFocusedElement() 3691 void Document::clearFocusedElement()
3692 { 3692 {
3693 setFocusedElement(nullptr, FocusParams(SelectionBehaviorOnFocus::None, WebFo cusTypeNone, nullptr)); 3693 setFocusedElement(nullptr, FocusParams(SelectionBehaviorOnFocus::None, WebFo cusTypeNone, nullptr));
3694 } 3694 }
3695 3695
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after
4463 } 4463 }
4464 4464
4465 // Support for Javascript execCommand, and related methods 4465 // Support for Javascript execCommand, and related methods
4466 4466
4467 static Editor::Command command(Document* document, const String& commandName) 4467 static Editor::Command command(Document* document, const String& commandName)
4468 { 4468 {
4469 LocalFrame* frame = document->frame(); 4469 LocalFrame* frame = document->frame();
4470 if (!frame || frame->document() != document) 4470 if (!frame || frame->document() != document)
4471 return Editor::Command(); 4471 return Editor::Command();
4472 4472
4473 document->updateLayoutTree(); 4473 document->updateStyleAndLayoutTree();
4474 return frame->editor().createCommand(commandName, CommandFromDOM); 4474 return frame->editor().createCommand(commandName, CommandFromDOM);
4475 } 4475 }
4476 4476
4477 bool Document::execCommand(const String& commandName, bool, const String& value, ExceptionState& exceptionState) 4477 bool Document::execCommand(const String& commandName, bool, const String& value, ExceptionState& exceptionState)
4478 { 4478 {
4479 if (!isHTMLDocument() && !isXHTMLDocument()) { 4479 if (!isHTMLDocument() && !isXHTMLDocument()) {
4480 exceptionState.throwDOMException(InvalidStateError, "execCommand is only supported on HTML documents."); 4480 exceptionState.throwDOMException(InvalidStateError, "execCommand is only supported on HTML documents.");
4481 return false; 4481 return false;
4482 } 4482 }
4483 if (focusedElement() && isHTMLTextFormControlElement(*focusedElement())) 4483 if (focusedElement() && isHTMLTextFormControlElement(*focusedElement()))
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
4787 const bool mainResourceWasAlreadyRequested = frame->loader().stateMachin e()->committedFirstRealDocumentLoad(); 4787 const bool mainResourceWasAlreadyRequested = frame->loader().stateMachin e()->committedFirstRealDocumentLoad();
4788 4788
4789 // FrameLoader::finishedParsing() might end up calling Document::implici tClose() if all 4789 // FrameLoader::finishedParsing() might end up calling Document::implici tClose() if all
4790 // resource loads are complete. HTMLObjectElements can start loading the ir resources from 4790 // resource loads are complete. HTMLObjectElements can start loading the ir resources from
4791 // post attach callbacks triggered by recalcStyle(). This means if we p arse out an <object> 4791 // post attach callbacks triggered by recalcStyle(). This means if we p arse out an <object>
4792 // tag and then reach the end of the document without updating styles, w e might not have yet 4792 // tag and then reach the end of the document without updating styles, w e might not have yet
4793 // started the resource load and might fire the window load event too ea rly. To avoid this 4793 // started the resource load and might fire the window load event too ea rly. To avoid this
4794 // we force the styles to be up to date before calling FrameLoader::fini shedParsing(). 4794 // we force the styles to be up to date before calling FrameLoader::fini shedParsing().
4795 // See https://bugs.webkit.org/show_bug.cgi?id=36864 starting around com ment 35. 4795 // See https://bugs.webkit.org/show_bug.cgi?id=36864 starting around com ment 35.
4796 if (mainResourceWasAlreadyRequested) 4796 if (mainResourceWasAlreadyRequested)
4797 updateLayoutTree(); 4797 updateStyleAndLayoutTree();
4798 4798
4799 beginLifecycleUpdatesIfRenderingReady(); 4799 beginLifecycleUpdatesIfRenderingReady();
4800 4800
4801 frame->loader().finishedParsing(); 4801 frame->loader().finishedParsing();
4802 4802
4803 TRACE_EVENT_INSTANT1("devtools.timeline", "MarkDOMContent", TRACE_EVENT_ SCOPE_THREAD, "data", InspectorMarkLoadEvent::data(frame)); 4803 TRACE_EVENT_INSTANT1("devtools.timeline", "MarkDOMContent", TRACE_EVENT_ SCOPE_THREAD, "data", InspectorMarkLoadEvent::data(frame));
4804 InspectorInstrumentation::domContentLoadedEventFired(frame); 4804 InspectorInstrumentation::domContentLoadedEventFired(frame);
4805 } 4805 }
4806 4806
4807 // Schedule dropping of the ElementDataCache. We keep it alive for a while a fter parsing finishes 4807 // Schedule dropping of the ElementDataCache. We keep it alive for a while a fter parsing finishes
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
5124 void Document::cancelFocusAppearanceUpdate() 5124 void Document::cancelFocusAppearanceUpdate()
5125 { 5125 {
5126 m_updateFocusAppearanceTimer.stop(); 5126 m_updateFocusAppearanceTimer.stop();
5127 } 5127 }
5128 5128
5129 void Document::updateFocusAppearanceTimerFired(Timer<Document>*) 5129 void Document::updateFocusAppearanceTimerFired(Timer<Document>*)
5130 { 5130 {
5131 Element* element = focusedElement(); 5131 Element* element = focusedElement();
5132 if (!element) 5132 if (!element)
5133 return; 5133 return;
5134 updateLayout(); 5134 updateStyleAndLayout();
5135 if (element->isFocusable()) 5135 if (element->isFocusable())
5136 element->updateFocusAppearance(m_updateFocusAppearanceSelectionBahavior) ; 5136 element->updateFocusAppearance(m_updateFocusAppearanceSelectionBahavior) ;
5137 } 5137 }
5138 5138
5139 void Document::attachRange(Range* range) 5139 void Document::attachRange(Range* range)
5140 { 5140 {
5141 DCHECK(!m_ranges.contains(range)); 5141 DCHECK(!m_ranges.contains(range));
5142 m_ranges.add(range); 5142 m_ranges.add(range);
5143 } 5143 }
5144 5144
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
5373 5373
5374 void Document::loadPluginsSoon() 5374 void Document::loadPluginsSoon()
5375 { 5375 {
5376 // FIXME: Remove this timer once we don't need to compute layout to load plu gins. 5376 // FIXME: Remove this timer once we don't need to compute layout to load plu gins.
5377 if (!m_pluginLoadingTimer.isActive()) 5377 if (!m_pluginLoadingTimer.isActive())
5378 m_pluginLoadingTimer.startOneShot(0, BLINK_FROM_HERE); 5378 m_pluginLoadingTimer.startOneShot(0, BLINK_FROM_HERE);
5379 } 5379 }
5380 5380
5381 void Document::pluginLoadingTimerFired(Timer<Document>*) 5381 void Document::pluginLoadingTimerFired(Timer<Document>*)
5382 { 5382 {
5383 updateLayout(); 5383 updateStyleAndLayout();
5384 } 5384 }
5385 5385
5386 ScriptedAnimationController& Document::ensureScriptedAnimationController() 5386 ScriptedAnimationController& Document::ensureScriptedAnimationController()
5387 { 5387 {
5388 if (!m_scriptedAnimationController) { 5388 if (!m_scriptedAnimationController) {
5389 m_scriptedAnimationController = ScriptedAnimationController::create(this ); 5389 m_scriptedAnimationController = ScriptedAnimationController::create(this );
5390 // We need to make sure that we don't start up the animation controller on a background tab, for example. 5390 // We need to make sure that we don't start up the animation controller on a background tab, for example.
5391 if (!page()) 5391 if (!page())
5392 m_scriptedAnimationController->suspend(); 5392 m_scriptedAnimationController->suspend();
5393 } 5393 }
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
6016 #ifndef NDEBUG 6016 #ifndef NDEBUG
6017 using namespace blink; 6017 using namespace blink;
6018 void showLiveDocumentInstances() 6018 void showLiveDocumentInstances()
6019 { 6019 {
6020 Document::WeakDocumentSet& set = Document::liveDocumentSet(); 6020 Document::WeakDocumentSet& set = Document::liveDocumentSet();
6021 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 6021 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6022 for (Document* document : set) 6022 for (Document* document : set)
6023 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); 6023 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data());
6024 } 6024 }
6025 #endif 6025 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.h ('k') | third_party/WebKit/Source/core/dom/DocumentStatisticsCollector.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698