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

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 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 if (ownerElement()) 631 if (ownerElement())
632 return documentElement(); 632 return documentElement();
633 633
634 FrameHost* host = frameHost(); 634 FrameHost* host = frameHost();
635 if (!host) 635 if (!host)
636 return nullptr; 636 return nullptr;
637 637
638 RootScroller* rootScroller = host->rootScroller(); 638 RootScroller* rootScroller = host->rootScroller();
639 DCHECK(rootScroller); 639 DCHECK(rootScroller);
640 640
641 updateLayoutIgnorePendingStylesheets(); 641 updateStyleAndLayoutIgnorePendingStylesheets();
642 642
643 return rootScroller->get(); 643 return rootScroller->get();
644 } 644 }
645 645
646 AtomicString Document::convertLocalName(const AtomicString& name) 646 AtomicString Document::convertLocalName(const AtomicString& name)
647 { 647 {
648 return isHTMLDocument() ? name.lower() : name; 648 return isHTMLDocument() ? name.lower() : name;
649 } 649 }
650 650
651 Element* Document::createElement(const AtomicString& name, ExceptionState& excep tionState) 651 Element* Document::createElement(const AtomicString& name, ExceptionState& excep tionState)
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 return nullptr; 1151 return nullptr;
1152 1152
1153 Position rangeCompliantPosition = positionWithAffinity.position().parentAnch oredEquivalent(); 1153 Position rangeCompliantPosition = positionWithAffinity.position().parentAnch oredEquivalent();
1154 return Range::createAdjustedToTreeScope(*this, rangeCompliantPosition); 1154 return Range::createAdjustedToTreeScope(*this, rangeCompliantPosition);
1155 } 1155 }
1156 1156
1157 Element* Document::scrollingElement() 1157 Element* Document::scrollingElement()
1158 { 1158 {
1159 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { 1159 if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) {
1160 if (inQuirksMode()) { 1160 if (inQuirksMode()) {
1161 updateLayoutTree(); 1161 updateStyleAndLayoutTree();
1162 HTMLBodyElement* body = firstBodyElement(); 1162 HTMLBodyElement* body = firstBodyElement();
1163 if (body && body->layoutObject() && body->layoutObject()->hasOverflo wClip()) 1163 if (body && body->layoutObject() && body->layoutObject()->hasOverflo wClip())
1164 return nullptr; 1164 return nullptr;
1165 1165
1166 return body; 1166 return body;
1167 } 1167 }
1168 1168
1169 return documentElement(); 1169 return documentElement();
1170 } 1170 }
1171 1171
(...skipping 515 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 14 matching lines...) Expand all
1722 } 1722 }
1723 1723
1724 if (inStyleRecalc()) 1724 if (inStyleRecalc())
1725 return; 1725 return;
1726 1726
1727 // Entering here from inside layout, paint etc. would be catastrophic since recalcStyle can 1727 // Entering here from inside layout, paint etc. would be catastrophic since recalcStyle can
1728 // tear down the layout tree or (unfortunately) run script. Kill the whole l ayoutObject if 1728 // tear down the layout tree or (unfortunately) run script. Kill the whole l ayoutObject if
1729 // someone managed to get into here in states not allowing tree mutations. 1729 // someone managed to get into here in states not allowing tree mutations.
1730 RELEASE_ASSERT(lifecycle().stateAllowsTreeMutations()); 1730 RELEASE_ASSERT(lifecycle().stateAllowsTreeMutations());
1731 1731
1732 TRACE_EVENT_BEGIN1("blink,devtools.timeline", "UpdateLayoutTree", "beginData ", InspectorRecalculateStylesEvent::data(frame())); 1732 TRACE_EVENT_BEGIN1("blink,devtools.timeline", "UpdateStyleAndLayoutTree", "b eginData", InspectorRecalculateStylesEvent::data(frame()));
1733 TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "UpdateLayoutTree"); 1733 TRACE_EVENT_SCOPED_SAMPLING_STATE("blink", "UpdateStyleAndLayoutTree");
1734 1734
1735 unsigned startElementCount = styleEngine().styleForElementCount(); 1735 unsigned startElementCount = styleEngine().styleForElementCount();
1736 1736
1737 InspectorInstrumentation::StyleRecalc instrumentation(this); 1737 InspectorInstrumentation::StyleRecalc instrumentation(this);
1738 1738
1739 DocumentAnimations::updateAnimationTimingIfNeeded(*this); 1739 DocumentAnimations::updateAnimationTimingIfNeeded(*this);
1740 evaluateMediaQueryListIfNeeded(); 1740 evaluateMediaQueryListIfNeeded();
1741 updateUseShadowTreesIfNeeded(); 1741 updateUseShadowTreesIfNeeded();
1742 updateDistribution(); 1742 updateDistribution();
1743 updateStyleInvalidationIfNeeded(); 1743 updateStyleInvalidationIfNeeded();
(...skipping 16 matching lines...) Expand all
1760 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); 1760 frame()->eventHandler().dispatchFakeMouseMoveEventSoon();
1761 1761
1762 if (m_focusedElement && !m_focusedElement->isFocusable()) 1762 if (m_focusedElement && !m_focusedElement->isFocusable())
1763 clearFocusedElementSoon(); 1763 clearFocusedElementSoon();
1764 layoutView()->clearHitTestCache(); 1764 layoutView()->clearHitTestCache();
1765 1765
1766 DCHECK(!DocumentAnimations::needsAnimationTimingUpdate(*this)); 1766 DCHECK(!DocumentAnimations::needsAnimationTimingUpdate(*this));
1767 1767
1768 unsigned elementCount = styleEngine().styleForElementCount() - startElementC ount; 1768 unsigned elementCount = styleEngine().styleForElementCount() - startElementC ount;
1769 1769
1770 TRACE_EVENT_END1("blink,devtools.timeline", "UpdateLayoutTree", "elementCoun t", elementCount); 1770 TRACE_EVENT_END1("blink,devtools.timeline", "UpdateStyleAndLayoutTree", "ele mentCount", elementCount);
1771 1771
1772 #if DCHECK_IS_ON() 1772 #if DCHECK_IS_ON()
1773 assertLayoutTreeUpdated(*this); 1773 assertLayoutTreeUpdated(*this);
1774 #endif 1774 #endif
1775 } 1775 }
1776 1776
1777 void Document::updateStyle() 1777 void Document::updateStyle()
1778 { 1778 {
1779 DCHECK(!view()->shouldThrottleRendering()); 1779 DCHECK(!view()->shouldThrottleRendering());
1780 TRACE_EVENT_BEGIN0("blink,blink_style", "Document::updateStyle"); 1780 TRACE_EVENT_BEGIN0("blink,blink_style", "Document::updateStyle");
(...skipping 85 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 = ownerElement()) 1905 if (HTMLFrameOwnerElement* owner = ownerElement())
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1952 } 1952 }
1953 1953
1954 void Document::clearFocusedElementSoon() 1954 void Document::clearFocusedElementSoon()
1955 { 1955 {
1956 if (!m_clearFocusedElementTimer.isActive()) 1956 if (!m_clearFocusedElementTimer.isActive())
1957 m_clearFocusedElementTimer.startOneShot(0, BLINK_FROM_HERE); 1957 m_clearFocusedElementTimer.startOneShot(0, BLINK_FROM_HERE);
1958 } 1958 }
1959 1959
1960 void Document::clearFocusedElementTimerFired(Timer<Document>*) 1960 void Document::clearFocusedElementTimerFired(Timer<Document>*)
1961 { 1961 {
1962 updateLayoutTree(); 1962 updateStyleAndLayoutTree();
1963 m_clearFocusedElementTimer.stop(); 1963 m_clearFocusedElementTimer.stop();
1964 1964
1965 if (m_focusedElement && !m_focusedElement->isFocusable()) 1965 if (m_focusedElement && !m_focusedElement->isFocusable())
1966 m_focusedElement->blur(); 1966 m_focusedElement->blur();
1967 } 1967 }
1968 1968
1969 // FIXME: This is a bad idea and needs to be removed eventually. 1969 // FIXME: This is a bad idea and needs to be removed eventually.
1970 // Other browsers load stylesheets before they continue parsing the web page. 1970 // Other browsers load stylesheets before they continue parsing the web page.
1971 // Since we don't, we can run JavaScript code that needs answers before the 1971 // Since we don't, we can run JavaScript code that needs answers before the
1972 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets 1972 // stylesheets are loaded. Doing a layout ignoring the pending stylesheets
1973 // lets us get reasonable answers. The long term solution to this problem is 1973 // lets us get reasonable answers. The long term solution to this problem is
1974 // to instead suspend JavaScript execution. 1974 // to instead suspend JavaScript execution.
1975 void Document::updateLayoutTreeIgnorePendingStylesheets() 1975 void Document::updateStyleAndLayoutTreeIgnorePendingStylesheets()
1976 { 1976 {
1977 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine()); 1977 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine());
1978 1978
1979 if (styleEngine().hasPendingSheets()) { 1979 if (styleEngine().hasPendingSheets()) {
1980 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once. 1980 // FIXME: We are willing to attempt to suppress painting with outdated s tyle info only once.
1981 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page 1981 // Our assumption is that it would be dangerous to try to stop it a seco nd time, after page
1982 // content has already been loaded and displayed with accurate style inf ormation. (Our 1982 // content has already been loaded and displayed with accurate style inf ormation. (Our
1983 // suppression involves blanking the whole page at the moment. If it wer e more refined, we 1983 // suppression involves blanking the whole page at the moment. If it wer e more refined, we
1984 // might be able to do something better.) It's worth noting though that this entire method 1984 // might be able to do something better.) It's worth noting though that this entire method
1985 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with 1985 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with
1986 // inaccurate information. 1986 // inaccurate information.
1987 HTMLElement* bodyElement = body(); 1987 HTMLElement* bodyElement = body();
1988 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) { 1988 if (bodyElement && !bodyElement->layoutObject() && m_pendingSheetLayout == NoLayoutWithPendingSheets) {
1989 m_pendingSheetLayout = DidLayoutWithPendingSheets; 1989 m_pendingSheetLayout = DidLayoutWithPendingSheets;
1990 styleEngine().resolverChanged(FullStyleUpdate); 1990 styleEngine().resolverChanged(FullStyleUpdate);
1991 } else if (m_hasNodesWithPlaceholderStyle) { 1991 } else if (m_hasNodesWithPlaceholderStyle) {
1992 // If new nodes have been added or style recalc has been done with s tyle sheets still 1992 // If new nodes have been added or style recalc has been done with s tyle sheets still
1993 // pending, some nodes may not have had their real style calculated yet. Normally this 1993 // pending, some nodes may not have had their real style calculated yet. Normally this
1994 // gets cleaned when style sheets arrive but here we need up-to-date style immediately. 1994 // gets cleaned when style sheets arrive but here we need up-to-date style immediately.
1995 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :create(StyleChangeReason::CleanupPlaceholderStyles)); 1995 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing: :create(StyleChangeReason::CleanupPlaceholderStyles));
1996 } 1996 }
1997 } 1997 }
1998 updateLayoutTree(); 1998 updateStyleAndLayoutTree();
1999 } 1999 }
2000 2000
2001 void Document::updateLayoutIgnorePendingStylesheets(Document::RunPostLayoutTasks runPostLayoutTasks) 2001 void Document::updateStyleAndLayoutIgnorePendingStylesheets(Document::RunPostLay outTasks runPostLayoutTasks)
2002 { 2002 {
2003 updateLayoutTreeIgnorePendingStylesheets(); 2003 updateStyleAndLayoutTreeIgnorePendingStylesheets();
2004 updateLayout(); 2004 updateStyleAndLayout();
2005 2005
2006 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view()) 2006 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view())
2007 view()->flushAnyPendingPostLayoutTasks(); 2007 view()->flushAnyPendingPostLayoutTasks();
2008 } 2008 }
2009 2009
2010 PassRefPtr<ComputedStyle> Document::styleForElementIgnoringPendingStylesheets(El ement* element) 2010 PassRefPtr<ComputedStyle> Document::styleForElementIgnoringPendingStylesheets(El ement* element)
2011 { 2011 {
2012 DCHECK_EQ(element->document(), this); 2012 DCHECK_EQ(element->document(), this);
2013 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine()); 2013 StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine());
2014 return ensureStyleResolver().styleForElement(element, element->parentNode() ? element->parentNode()->ensureComputedStyle() : 0); 2014 return ensureStyleResolver().styleForElement(element, element->parentNode() ? element->parentNode()->ensureComputedStyle() : 0);
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
2663 // Just bail out. Before or during the onload we were shifted to another page. 2663 // Just bail out. Before or during the onload we were shifted to another page.
2664 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out. 2664 // The old i-Bench suite does this. When this happens don't bother paint ing or laying out.
2665 m_loadEventProgress = LoadEventCompleted; 2665 m_loadEventProgress = LoadEventCompleted;
2666 return; 2666 return;
2667 } 2667 }
2668 2668
2669 // We used to force a synchronous display and flush here. This really isn't 2669 // We used to force a synchronous display and flush here. This really isn't
2670 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps 2670 // necessary and can in fact be actively harmful if pages are loading at a r ate of > 60fps
2671 // (if your platform is syncing flushes and limiting them to 60fps). 2671 // (if your platform is syncing flushes and limiting them to 60fps).
2672 if (!ownerElement() || (ownerElement()->layoutObject() && !ownerElement()->l ayoutObject()->needsLayout())) { 2672 if (!ownerElement() || (ownerElement()->layoutObject() && !ownerElement()->l ayoutObject()->needsLayout())) {
2673 updateLayoutTree(); 2673 updateStyleAndLayoutTree();
2674 2674
2675 // Always do a layout after loading if needed. 2675 // Always do a layout after loading if needed.
2676 if (view() && layoutView() && (!layoutView()->firstChild() || layoutView ()->needsLayout())) 2676 if (view() && layoutView() && (!layoutView()->firstChild() || layoutView ()->needsLayout()))
2677 view()->layout(); 2677 view()->layout();
2678 } 2678 }
2679 2679
2680 m_loadEventProgress = LoadEventCompleted; 2680 m_loadEventProgress = LoadEventCompleted;
2681 2681
2682 if (frame() && layoutView() && settings()->accessibilityEnabled()) { 2682 if (frame() && layoutView() && settings()->accessibilityEnabled()) {
2683 if (AXObjectCache* cache = axObjectCache()) { 2683 if (AXObjectCache* cache = axObjectCache()) {
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
3599 if (view()) { 3599 if (view()) {
3600 Widget* oldWidget = widgetForElement(*oldFocusedElement); 3600 Widget* oldWidget = widgetForElement(*oldFocusedElement);
3601 if (oldWidget) 3601 if (oldWidget)
3602 oldWidget->setFocus(false, params.type); 3602 oldWidget->setFocus(false, params.type);
3603 else 3603 else
3604 view()->setFocus(false, params.type); 3604 view()->setFocus(false, params.type);
3605 } 3605 }
3606 } 3606 }
3607 3607
3608 if (newFocusedElement) 3608 if (newFocusedElement)
3609 updateLayoutTreeForNode(newFocusedElement); 3609 updateStyleAndLayoutTreeForNode(newFocusedElement);
3610 if (newFocusedElement && newFocusedElement->isFocusable()) { 3610 if (newFocusedElement && newFocusedElement->isFocusable()) {
3611 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(* newFocusedElement)) { 3611 if (newFocusedElement->isRootEditableElement() && !acceptsEditingFocus(* newFocusedElement)) {
3612 // delegate blocks focus change 3612 // delegate blocks focus change
3613 focusChangeBlocked = true; 3613 focusChangeBlocked = true;
3614 goto SetFocusedElementDone; 3614 goto SetFocusedElementDone;
3615 } 3615 }
3616 // Set focus on the new node 3616 // Set focus on the new node
3617 m_focusedElement = newFocusedElement; 3617 m_focusedElement = newFocusedElement;
3618 setSequentialFocusNavigationStartingPoint(m_focusedElement.get()); 3618 setSequentialFocusNavigationStartingPoint(m_focusedElement.get());
3619 3619
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
3660 frame()->spellChecker().didBeginEditing(m_focusedElement.get()); 3660 frame()->spellChecker().didBeginEditing(m_focusedElement.get());
3661 3661
3662 // eww, I suck. set the qt focus correctly 3662 // eww, I suck. set the qt focus correctly
3663 // ### find a better place in the code for this 3663 // ### find a better place in the code for this
3664 if (view()) { 3664 if (view()) {
3665 Widget* focusWidget = widgetForElement(*m_focusedElement); 3665 Widget* focusWidget = widgetForElement(*m_focusedElement);
3666 if (focusWidget) { 3666 if (focusWidget) {
3667 // Make sure a widget has the right size before giving it focus. 3667 // Make sure a widget has the right size before giving it focus.
3668 // Otherwise, we are testing edge cases of the Widget code. 3668 // Otherwise, we are testing edge cases of the Widget code.
3669 // Specifically, in WebCore this does not work well for text fie lds. 3669 // Specifically, in WebCore this does not work well for text fie lds.
3670 updateLayout(); 3670 updateStyleAndLayout();
3671 // Re-get the widget in case updating the layout changed things. 3671 // Re-get the widget in case updating the layout changed things.
3672 focusWidget = widgetForElement(*m_focusedElement); 3672 focusWidget = widgetForElement(*m_focusedElement);
3673 } 3673 }
3674 if (focusWidget) 3674 if (focusWidget)
3675 focusWidget->setFocus(true, params.type); 3675 focusWidget->setFocus(true, params.type);
3676 else 3676 else
3677 view()->setFocus(true, params.type); 3677 view()->setFocus(true, params.type);
3678 } 3678 }
3679 } 3679 }
3680 3680
3681 if (!focusChangeBlocked && m_focusedElement) { 3681 if (!focusChangeBlocked && m_focusedElement) {
3682 // Create the AXObject cache in a focus change because Chromium relies o n it. 3682 // Create the AXObject cache in a focus change because Chromium relies o n it.
3683 if (AXObjectCache* cache = axObjectCache()) 3683 if (AXObjectCache* cache = axObjectCache())
3684 cache->handleFocusedUIElementChanged(oldFocusedElement, newFocusedEl ement); 3684 cache->handleFocusedUIElementChanged(oldFocusedElement, newFocusedEl ement);
3685 } 3685 }
3686 3686
3687 if (!focusChangeBlocked && frameHost()) 3687 if (!focusChangeBlocked && frameHost())
3688 frameHost()->chromeClient().focusedNodeChanged(oldFocusedElement, m_focu sedElement.get()); 3688 frameHost()->chromeClient().focusedNodeChanged(oldFocusedElement, m_focu sedElement.get());
3689 3689
3690 SetFocusedElementDone: 3690 SetFocusedElementDone:
3691 updateLayoutTree(); 3691 updateStyleAndLayoutTree();
3692 if (LocalFrame* frame = this->frame()) 3692 if (LocalFrame* frame = this->frame())
3693 frame->selection().didChangeFocus(); 3693 frame->selection().didChangeFocus();
3694 return !focusChangeBlocked; 3694 return !focusChangeBlocked;
3695 } 3695 }
3696 3696
3697 void Document::clearFocusedElement() 3697 void Document::clearFocusedElement()
3698 { 3698 {
3699 setFocusedElement(nullptr, FocusParams(SelectionBehaviorOnFocus::None, WebFo cusTypeNone, nullptr)); 3699 setFocusedElement(nullptr, FocusParams(SelectionBehaviorOnFocus::None, WebFo cusTypeNone, nullptr));
3700 } 3700 }
3701 3701
(...skipping 766 matching lines...) Expand 10 before | Expand all | Expand 10 after
4468 } 4468 }
4469 4469
4470 // Support for Javascript execCommand, and related methods 4470 // Support for Javascript execCommand, and related methods
4471 4471
4472 static Editor::Command command(Document* document, const String& commandName) 4472 static Editor::Command command(Document* document, const String& commandName)
4473 { 4473 {
4474 LocalFrame* frame = document->frame(); 4474 LocalFrame* frame = document->frame();
4475 if (!frame || frame->document() != document) 4475 if (!frame || frame->document() != document)
4476 return Editor::Command(); 4476 return Editor::Command();
4477 4477
4478 document->updateLayoutTree(); 4478 document->updateStyleAndLayoutTree();
4479 return frame->editor().createCommand(commandName, CommandFromDOM); 4479 return frame->editor().createCommand(commandName, CommandFromDOM);
4480 } 4480 }
4481 4481
4482 bool Document::execCommand(const String& commandName, bool, const String& value, ExceptionState& exceptionState) 4482 bool Document::execCommand(const String& commandName, bool, const String& value, ExceptionState& exceptionState)
4483 { 4483 {
4484 if (!isHTMLDocument() && !isXHTMLDocument()) { 4484 if (!isHTMLDocument() && !isXHTMLDocument()) {
4485 exceptionState.throwDOMException(InvalidStateError, "execCommand is only supported on HTML documents."); 4485 exceptionState.throwDOMException(InvalidStateError, "execCommand is only supported on HTML documents.");
4486 return false; 4486 return false;
4487 } 4487 }
4488 if (focusedElement() && isHTMLTextFormControlElement(*focusedElement())) 4488 if (focusedElement() && isHTMLTextFormControlElement(*focusedElement()))
(...skipping 298 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 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
5118 void Document::cancelFocusAppearanceUpdate() 5118 void Document::cancelFocusAppearanceUpdate()
5119 { 5119 {
5120 m_updateFocusAppearanceTimer.stop(); 5120 m_updateFocusAppearanceTimer.stop();
5121 } 5121 }
5122 5122
5123 void Document::updateFocusAppearanceTimerFired(Timer<Document>*) 5123 void Document::updateFocusAppearanceTimerFired(Timer<Document>*)
5124 { 5124 {
5125 Element* element = focusedElement(); 5125 Element* element = focusedElement();
5126 if (!element) 5126 if (!element)
5127 return; 5127 return;
5128 updateLayout(); 5128 updateStyleAndLayout();
5129 if (element->isFocusable()) 5129 if (element->isFocusable())
5130 element->updateFocusAppearance(m_updateFocusAppearanceSelectionBahavior) ; 5130 element->updateFocusAppearance(m_updateFocusAppearanceSelectionBahavior) ;
5131 } 5131 }
5132 5132
5133 void Document::attachRange(Range* range) 5133 void Document::attachRange(Range* range)
5134 { 5134 {
5135 DCHECK(!m_ranges.contains(range)); 5135 DCHECK(!m_ranges.contains(range));
5136 m_ranges.add(range); 5136 m_ranges.add(range);
5137 } 5137 }
5138 5138
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
5367 5367
5368 void Document::loadPluginsSoon() 5368 void Document::loadPluginsSoon()
5369 { 5369 {
5370 // FIXME: Remove this timer once we don't need to compute layout to load plu gins. 5370 // FIXME: Remove this timer once we don't need to compute layout to load plu gins.
5371 if (!m_pluginLoadingTimer.isActive()) 5371 if (!m_pluginLoadingTimer.isActive())
5372 m_pluginLoadingTimer.startOneShot(0, BLINK_FROM_HERE); 5372 m_pluginLoadingTimer.startOneShot(0, BLINK_FROM_HERE);
5373 } 5373 }
5374 5374
5375 void Document::pluginLoadingTimerFired(Timer<Document>*) 5375 void Document::pluginLoadingTimerFired(Timer<Document>*)
5376 { 5376 {
5377 updateLayout(); 5377 updateStyleAndLayout();
5378 } 5378 }
5379 5379
5380 ScriptedAnimationController& Document::ensureScriptedAnimationController() 5380 ScriptedAnimationController& Document::ensureScriptedAnimationController()
5381 { 5381 {
5382 if (!m_scriptedAnimationController) { 5382 if (!m_scriptedAnimationController) {
5383 m_scriptedAnimationController = ScriptedAnimationController::create(this ); 5383 m_scriptedAnimationController = ScriptedAnimationController::create(this );
5384 // We need to make sure that we don't start up the animation controller on a background tab, for example. 5384 // We need to make sure that we don't start up the animation controller on a background tab, for example.
5385 if (!page()) 5385 if (!page())
5386 m_scriptedAnimationController->suspend(); 5386 m_scriptedAnimationController->suspend();
5387 } 5387 }
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
5979 #ifndef NDEBUG 5979 #ifndef NDEBUG
5980 using namespace blink; 5980 using namespace blink;
5981 void showLiveDocumentInstances() 5981 void showLiveDocumentInstances()
5982 { 5982 {
5983 Document::WeakDocumentSet& set = Document::liveDocumentSet(); 5983 Document::WeakDocumentSet& set = Document::liveDocumentSet();
5984 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5984 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
5985 for (Document* document : set) 5985 for (Document* document : set)
5986 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); 5986 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data());
5987 } 5987 }
5988 #endif 5988 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698