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

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

Issue 211773002: Rename updateStyle to updateRenderTree (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 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 1503 matching lines...) Expand 10 before | Expand all | Expand 10 after
1514 1514
1515 PassRefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned whatToSho w, PassRefPtr<NodeFilter> filter, ExceptionState& exceptionState) 1515 PassRefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned whatToSho w, PassRefPtr<NodeFilter> filter, ExceptionState& exceptionState)
1516 { 1516 {
1517 if (!root) { 1517 if (!root) {
1518 exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::a rgumentNullOrIncorrectType(1, "Node")); 1518 exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::a rgumentNullOrIncorrectType(1, "Node"));
1519 return nullptr; 1519 return nullptr;
1520 } 1520 }
1521 return TreeWalker::create(root, whatToShow, filter); 1521 return TreeWalker::create(root, whatToShow, filter);
1522 } 1522 }
1523 1523
1524 bool Document::shouldCallRecalcStyleForDocument() 1524 bool Document::needsRenderTreeUpdate() const
1525 { 1525 {
1526 if (!isActive() || !view()) 1526 if (!isActive() || !view())
1527 return false; 1527 return false;
1528 if (needsStyleRecalc() || childNeedsStyleRecalc()) 1528 if (needsStyleRecalc() || childNeedsStyleRecalc())
1529 return true; 1529 return true;
1530 if (childNeedsDistributionRecalc()) 1530 if (childNeedsDistributionRecalc())
1531 return true; 1531 return true;
1532 if (!m_useElementsNeedingUpdate.isEmpty()) 1532 if (!m_useElementsNeedingUpdate.isEmpty())
1533 return true; 1533 return true;
1534 if (!m_layerUpdateElements.isEmpty()) 1534 if (!m_layerUpdateElements.isEmpty())
1535 return true; 1535 return true;
1536 if (childNeedsStyleInvalidation()) 1536 if (childNeedsStyleInvalidation())
1537 return true; 1537 return true;
1538 return false; 1538 return false;
1539 } 1539 }
1540 1540
1541 bool Document::shouldScheduleStyleRecalc() 1541 bool Document::shouldScheduleRenderTreeUpdate() const
1542 { 1542 {
1543 if (!isActive()) 1543 if (!isActive())
1544 return false; 1544 return false;
1545 if (hasPendingStyleRecalc()) 1545 if (hasPendingStyleRecalc())
1546 return false; 1546 return false;
1547 if (inStyleRecalc()) 1547 if (inStyleRecalc())
1548 return false; 1548 return false;
1549 // InPreLayout will recalc style itself. There's no reason to schedule anoth er recalc. 1549 // InPreLayout will recalc style itself. There's no reason to schedule anoth er recalc.
1550 if (m_lifecycle.state() == DocumentLifecycle::InPreLayout) 1550 if (m_lifecycle.state() == DocumentLifecycle::InPreLayout)
1551 return false; 1551 return false;
1552 if (!shouldScheduleLayout()) 1552 if (!shouldScheduleLayout())
1553 return false; 1553 return false;
1554 return true; 1554 return true;
1555 } 1555 }
1556 1556
1557 void Document::scheduleStyleRecalc() 1557 void Document::scheduleRenderTreeUpdate()
1558 { 1558 {
1559 if (!shouldScheduleStyleRecalc()) 1559 if (!shouldScheduleRenderTreeUpdate())
1560 return; 1560 return;
1561 1561
1562 ASSERT(shouldCallRecalcStyleForDocument()); 1562 ASSERT(needsRenderTreeUpdate());
1563 1563
1564 page()->animator().scheduleVisualUpdate(); 1564 page()->animator().scheduleVisualUpdate();
1565 m_lifecycle.advanceTo(DocumentLifecycle::StyleRecalcPending); 1565 m_lifecycle.advanceTo(DocumentLifecycle::StyleRecalcPending);
1566 1566
1567 InspectorInstrumentation::didScheduleStyleRecalculation(this); 1567 InspectorInstrumentation::didScheduleStyleRecalculation(this);
1568 } 1568 }
1569 1569
1570 bool Document::hasPendingForcedStyleRecalc() const 1570 bool Document::hasPendingForcedStyleRecalc() const
1571 { 1571 {
1572 return hasPendingStyleRecalc() && !inStyleRecalc() && styleChangeType() >= S ubtreeStyleChange; 1572 return hasPendingStyleRecalc() && !inStyleRecalc() && styleChangeType() >= S ubtreeStyleChange;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
1699 body->setNeedsStyleRecalc(SubtreeStyleChange); 1699 body->setNeedsStyleRecalc(SubtreeStyleChange);
1700 } 1700 }
1701 } 1701 }
1702 1702
1703 if (RenderStyle* style = documentElement()->renderStyle()) { 1703 if (RenderStyle* style = documentElement()->renderStyle()) {
1704 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode) 1704 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode)
1705 documentElement()->setNeedsStyleRecalc(SubtreeStyleChange); 1705 documentElement()->setNeedsStyleRecalc(SubtreeStyleChange);
1706 } 1706 }
1707 } 1707 }
1708 1708
1709 void Document::updateStyleIfNeeded() 1709 void Document::updateRenderTree(StyleRecalcChange change)
1710 {
1711 updateStyle(NoChange);
1712 }
1713
1714 // FIXME: We need a better name than updateStyleIfNeeded. It's performing style invalidation,
1715 // style recalc, distribution and <use> shadow tree creation.
1716 void Document::updateStyle(StyleRecalcChange change)
1717 { 1710 {
1718 ASSERT(isMainThread()); 1711 ASSERT(isMainThread());
1719 1712
1720 if (change != Force && !shouldCallRecalcStyleForDocument()) 1713 if (change != Force && !needsRenderTreeUpdate())
1721 return; 1714 return;
1722 1715
1723 if (inStyleRecalc()) 1716 if (inStyleRecalc())
1724 return; 1717 return;
1725 1718
1726 // Entering here from inside layout or paint would be catastrophic since rec alcStyle can 1719 // Entering here from inside layout or paint would be catastrophic since rec alcStyle can
1727 // tear down the render tree or (unfortunately) run script. Kill the whole r enderer if 1720 // tear down the render tree or (unfortunately) run script. Kill the whole r enderer if
1728 // someone managed to get into here from inside layout or paint. 1721 // someone managed to get into here from inside layout or paint.
1729 RELEASE_ASSERT(!view()->isInPerformLayout()); 1722 RELEASE_ASSERT(!view()->isInPerformLayout());
1730 RELEASE_ASSERT(!view()->isPainting()); 1723 RELEASE_ASSERT(!view()->isPainting());
1731 1724
1732 // Script can run below in WidgetUpdates, so protect the LocalFrame. 1725 // Script can run below in WidgetUpdates, so protect the LocalFrame.
1733 RefPtr<LocalFrame> protect(m_frame); 1726 RefPtr<LocalFrame> protect(m_frame);
1734 1727
1735 TRACE_EVENT0("webkit", "Document::recalcStyle"); 1728 TRACE_EVENT0("webkit", "Document::updateRenderTree");
1736 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); 1729 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "UpdateRenderTree");
1737 1730
1738 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc ulateStyle(this); 1731 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc ulateStyle(this);
1739 1732
1740 updateDistributionIfNeeded(); 1733 updateDistributionIfNeeded();
1741 updateUseShadowTreesIfNeeded(); 1734 updateUseShadowTreesIfNeeded();
1742 updateStyleInvalidationIfNeeded(); 1735 updateStyleInvalidationIfNeeded();
1743 1736
1744 if (m_evaluateMediaQueriesOnStyleRecalc) { 1737 // This executes media query listeners which runs script.
1745 m_evaluateMediaQueriesOnStyleRecalc = false; 1738 evaluateMediaQueryListIfNeeded();
1746 evaluateMediaQueryList();
1747 }
1748 1739
1749 // FIXME: We should update style on our ancestor chain before proceeding 1740 // FIXME: We should update style on our ancestor chain before proceeding
1750 // however doing so currently causes several tests to crash, as LocalFrame:: setDocument calls Document::attach 1741 // however doing so currently causes several tests to crash, as LocalFrame:: setDocument calls Document::attach
1751 // before setting the DOMWindow on the LocalFrame, or the SecurityOrigin on the document. The attach, in turn 1742 // before setting the DOMWindow on the LocalFrame, or the SecurityOrigin on the document. The attach, in turn
1752 // resolves style (here) and then when we resolve style on the parent chain, we may end up 1743 // resolves style (here) and then when we resolve style on the parent chain, we may end up
1753 // re-attaching our containing iframe, which when asked HTMLFrameElementBase ::isURLAllowed 1744 // re-attaching our containing iframe, which when asked HTMLFrameElementBase ::isURLAllowed
1754 // hits a null-dereference due to security code always assuming the document has a SecurityOrigin. 1745 // hits a null-dereference due to security code always assuming the document has a SecurityOrigin.
1755 1746
1756 if (m_elemSheet && m_elemSheet->contents()->usesRemUnits()) 1747 if (m_elemSheet && m_elemSheet->contents()->usesRemUnits())
1757 m_styleEngine->setUsesRemUnit(true); 1748 m_styleEngine->setUsesRemUnit(true);
1758 1749
1759 { 1750 updateStyle(change);
1760 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates;
1761 m_lifecycle.advanceTo(DocumentLifecycle::InStyleRecalc);
1762
1763 if (styleChangeType() >= SubtreeStyleChange)
1764 change = Force;
1765
1766 // FIXME: Cannot access the ensureStyleResolver() before calling styleFo rDocument below because
1767 // apparently the StyleResolver's constructor has side effects. We shoul d fix it.
1768 // See printing/setPrinting.html, printing/width-overflow.html though th ey only fail on
1769 // mac when accessing the resolver by what appears to be a viewport size difference.
1770
1771 if (change == Force) {
1772 m_hasNodesWithPlaceholderStyle = false;
1773 RefPtr<RenderStyle> documentStyle = StyleResolver::styleForDocument( *this, m_styleEngine->fontSelector());
1774 StyleRecalcChange localChange = RenderStyle::compare(documentStyle.g et(), renderView()->style());
1775 if (localChange != NoChange)
1776 renderView()->setStyle(documentStyle.release());
1777 }
1778
1779 clearNeedsStyleRecalc();
1780
1781 // Uncomment to enable printing of statistics about style sharing and th e matched property cache.
1782 // Optionally pass StyleResolver::ReportSlowStats to print numbers that require crawling the
1783 // entire DOM (where collecting them is very slow).
1784 // FIXME: Expose this as a runtime flag.
1785 // ensureStyleResolver().enableStats(/*StyleResolver::ReportSlowStats*/) ;
1786
1787 if (StyleResolverStats* stats = ensureStyleResolver().stats())
1788 stats->reset();
1789
1790 if (Element* documentElement = this->documentElement()) {
1791 inheritHtmlAndBodyElementStyles(change);
1792 dirtyElementsForLayerUpdate();
1793 if (documentElement->shouldCallRecalcStyle(change))
1794 documentElement->recalcStyle(change);
1795 while (dirtyElementsForLayerUpdate())
1796 documentElement->recalcStyle(NoChange);
1797 }
1798
1799 ensureStyleResolver().printStats();
1800
1801 view()->updateCompositingLayersAfterStyleChange();
1802
1803 clearChildNeedsStyleRecalc();
1804
1805 if (m_styleEngine->hasResolver()) {
1806 // Pseudo element removal and similar may only work with these flags still set. Reset them after the style recalc.
1807 StyleResolver& resolver = m_styleEngine->ensureResolver();
1808 m_styleEngine->resetCSSFeatureFlags(resolver.ensureUpdatedRuleFeatur eSet());
1809 resolver.clearStyleSharingList();
1810 }
1811
1812 ASSERT(!needsStyleRecalc());
1813 ASSERT(!childNeedsStyleRecalc());
1814 ASSERT(inStyleRecalc());
1815 m_lifecycle.advanceTo(DocumentLifecycle::StyleClean);
1816 }
1817 1751
1818 // As a result of the style recalculation, the currently hovered element mig ht have been 1752 // As a result of the style recalculation, the currently hovered element mig ht have been
1819 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event 1753 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event
1820 // to check if any other elements ended up under the mouse pointer due to re -layout. 1754 // to check if any other elements ended up under the mouse pointer due to re -layout.
1821 if (hoverNode() && !hoverNode()->renderer() && frame()) 1755 if (hoverNode() && !hoverNode()->renderer() && frame())
1822 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); 1756 frame()->eventHandler().dispatchFakeMouseMoveEventSoon();
1823 1757
1824 if (m_focusedElement && !m_focusedElement->isFocusable()) 1758 if (m_focusedElement && !m_focusedElement->isFocusable())
1825 clearFocusedElementSoon(); 1759 clearFocusedElementSoon();
1826 1760
1827 #if ENABLE(SVG_FONTS) 1761 #if ENABLE(SVG_FONTS)
1828 if (svgExtensions()) 1762 if (svgExtensions())
1829 accessSVGExtensions().removePendingSVGFontFaceElementsForRemoval(); 1763 accessSVGExtensions().removePendingSVGFontFaceElementsForRemoval();
1830 #endif 1764 #endif
1831 InspectorInstrumentation::didRecalculateStyle(cookie); 1765 InspectorInstrumentation::didRecalculateStyle(cookie);
1832 } 1766 }
1833 1767
1768 void Document::updateStyle(StyleRecalcChange change)
1769 {
1770 TRACE_EVENT0("webkit", "Document::updateStyle");
1771
1772 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates;
1773 m_lifecycle.advanceTo(DocumentLifecycle::InStyleRecalc);
1774
1775 if (styleChangeType() >= SubtreeStyleChange)
1776 change = Force;
1777
1778 // FIXME: Cannot access the ensureStyleResolver() before calling styleForDoc ument below because
1779 // apparently the StyleResolver's constructor has side effects. We should fi x it.
1780 // See printing/setPrinting.html, printing/width-overflow.html though they o nly fail on
1781 // mac when accessing the resolver by what appears to be a viewport size dif ference.
1782
1783 if (change == Force) {
1784 m_hasNodesWithPlaceholderStyle = false;
1785 RefPtr<RenderStyle> documentStyle = StyleResolver::styleForDocument(*thi s, m_styleEngine->fontSelector());
1786 StyleRecalcChange localChange = RenderStyle::compare(documentStyle.get() , renderView()->style());
1787 if (localChange != NoChange)
1788 renderView()->setStyle(documentStyle.release());
1789 }
1790
1791 clearNeedsStyleRecalc();
1792
1793 // Uncomment to enable printing of statistics about style sharing and the ma tched property cache.
1794 // Optionally pass StyleResolver::ReportSlowStats to print numbers that requ ire crawling the
1795 // entire DOM (where collecting them is very slow).
1796 // FIXME: Expose this as a runtime flag.
1797 // ensureStyleResolver().enableStats(/*StyleResolver::ReportSlowStats*/);
1798
1799 if (StyleResolverStats* stats = ensureStyleResolver().stats())
1800 stats->reset();
1801
1802 if (Element* documentElement = this->documentElement()) {
1803 inheritHtmlAndBodyElementStyles(change);
1804 dirtyElementsForLayerUpdate();
1805 if (documentElement->shouldCallRecalcStyle(change))
1806 documentElement->recalcStyle(change);
1807 while (dirtyElementsForLayerUpdate())
1808 documentElement->recalcStyle(NoChange);
1809 }
1810
1811 ensureStyleResolver().printStats();
1812
1813 view()->updateCompositingLayersAfterStyleChange();
1814
1815 clearChildNeedsStyleRecalc();
1816
1817 if (m_styleEngine->hasResolver()) {
1818 // Pseudo element removal and similar may only work with these flags sti ll set. Reset them after the style recalc.
1819 StyleResolver& resolver = m_styleEngine->ensureResolver();
1820 m_styleEngine->resetCSSFeatureFlags(resolver.ensureUpdatedRuleFeatureSet ());
1821 resolver.clearStyleSharingList();
1822 }
1823
1824 ASSERT(!needsStyleRecalc());
1825 ASSERT(!childNeedsStyleRecalc());
1826 ASSERT(inStyleRecalc());
1827 m_lifecycle.advanceTo(DocumentLifecycle::StyleClean);
1828 }
1829
1834 void Document::updateStyleForNodeIfNeeded(Node* node) 1830 void Document::updateStyleForNodeIfNeeded(Node* node)
1835 { 1831 {
1836 if (!shouldCallRecalcStyleForDocument()) 1832 if (!needsRenderTreeUpdate())
1837 return; 1833 return;
1838 1834
1839 // At this point, we know that we need to recalc some style on the document in order to fully update styles. 1835 // At this point, we know that we need to recalc some style on the document in order to fully update styles.
1840 // However, style on 'node' only needs to be recalculated if a global recomp utation is needed, or a node on 1836 // However, style on 'node' only needs to be recalculated if a global recomp utation is needed, or a node on
1841 // the path from 'node' to the root needs style recalc. 1837 // the path from 'node' to the root needs style recalc.
1842 1838
1843 // Global needed. 1839 // Global needed.
1844 bool needsRecalc = needsStyleRecalc() || childNeedsDistributionRecalc() || ! m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidation(); 1840 bool needsRecalc = needsStyleRecalc() || childNeedsDistributionRecalc() || ! m_useElementsNeedingUpdate.isEmpty() || childNeedsStyleInvalidation();
1845 1841
1846 // On the path. 1842 // On the path.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1910 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with 1906 // is a hack, since what we really want to do is suspend JS instead of d oing a layout with
1911 // inaccurate information. 1907 // inaccurate information.
1912 HTMLElement* bodyElement = body(); 1908 HTMLElement* bodyElement = body();
1913 if (bodyElement && !bodyElement->renderer() && m_pendingSheetLayout == N oLayoutWithPendingSheets) { 1909 if (bodyElement && !bodyElement->renderer() && m_pendingSheetLayout == N oLayoutWithPendingSheets) {
1914 m_pendingSheetLayout = DidLayoutWithPendingSheets; 1910 m_pendingSheetLayout = DidLayoutWithPendingSheets;
1915 styleResolverChanged(RecalcStyleImmediately); 1911 styleResolverChanged(RecalcStyleImmediately);
1916 } else if (m_hasNodesWithPlaceholderStyle) { 1912 } else if (m_hasNodesWithPlaceholderStyle) {
1917 // If new nodes have been added or style recalc has been done with s tyle sheets still 1913 // If new nodes have been added or style recalc has been done with s tyle sheets still
1918 // pending, some nodes may not have had their real style calculated yet. Normally this 1914 // pending, some nodes may not have had their real style calculated yet. Normally this
1919 // gets cleaned when style sheets arrive but here we need up-to-date style immediately. 1915 // gets cleaned when style sheets arrive but here we need up-to-date style immediately.
1920 updateStyle(Force); 1916 updateRenderTree(Force);
1921 } 1917 }
1922 } 1918 }
1923 1919
1924 updateLayout(); 1920 updateLayout();
1925 1921
1926 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view()) 1922 if (runPostLayoutTasks == RunPostLayoutTasksSynchronously && view())
1927 view()->flushAnyPendingPostLayoutTasks(); 1923 view()->flushAnyPendingPostLayoutTasks();
1928 } 1924 }
1929 1925
1930 PassRefPtr<RenderStyle> Document::styleForElementIgnoringPendingStylesheets(Elem ent* element) 1926 PassRefPtr<RenderStyle> Document::styleForElementIgnoringPendingStylesheets(Elem ent* element)
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
2002 m_layerUpdateElements.clear(); 1998 m_layerUpdateElements.clear();
2003 return true; 1999 return true;
2004 } 2000 }
2005 2001
2006 void Document::scheduleLayerUpdate(Element& element) 2002 void Document::scheduleLayerUpdate(Element& element)
2007 { 2003 {
2008 if (element.styleChangeType() == NeedsReattachStyleChange) 2004 if (element.styleChangeType() == NeedsReattachStyleChange)
2009 return; 2005 return;
2010 element.setNeedsLayerUpdate(); 2006 element.setNeedsLayerUpdate();
2011 m_layerUpdateElements.add(&element); 2007 m_layerUpdateElements.add(&element);
2012 scheduleStyleRecalc(); 2008 scheduleRenderTreeUpdate();
2013 } 2009 }
2014 2010
2015 void Document::unscheduleLayerUpdate(Element& element) 2011 void Document::unscheduleLayerUpdate(Element& element)
2016 { 2012 {
2017 element.clearNeedsLayerUpdate(); 2013 element.clearNeedsLayerUpdate();
2018 m_layerUpdateElements.remove(&element); 2014 m_layerUpdateElements.remove(&element);
2019 } 2015 }
2020 2016
2021 void Document::scheduleUseShadowTreeUpdate(SVGUseElement& element) 2017 void Document::scheduleUseShadowTreeUpdate(SVGUseElement& element)
2022 { 2018 {
2023 m_useElementsNeedingUpdate.add(&element); 2019 m_useElementsNeedingUpdate.add(&element);
2024 scheduleStyleRecalc(); 2020 scheduleRenderTreeUpdate();
2025 } 2021 }
2026 2022
2027 void Document::unscheduleUseShadowTreeUpdate(SVGUseElement& element) 2023 void Document::unscheduleUseShadowTreeUpdate(SVGUseElement& element)
2028 { 2024 {
2029 m_useElementsNeedingUpdate.remove(&element); 2025 m_useElementsNeedingUpdate.remove(&element);
2030 } 2026 }
2031 2027
2032 void Document::updateUseShadowTreesIfNeeded() 2028 void Document::updateUseShadowTreesIfNeeded()
2033 { 2029 {
2034 if (m_useElementsNeedingUpdate.isEmpty()) 2030 if (m_useElementsNeedingUpdate.isEmpty())
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
2600 } 2596 }
2601 2597
2602 void Document::setParsing(bool b) 2598 void Document::setParsing(bool b)
2603 { 2599 {
2604 m_isParsing = b; 2600 m_isParsing = b;
2605 2601
2606 if (m_isParsing && !m_elementDataCache) 2602 if (m_isParsing && !m_elementDataCache)
2607 m_elementDataCache = ElementDataCache::create(); 2603 m_elementDataCache = ElementDataCache::create();
2608 } 2604 }
2609 2605
2610 bool Document::shouldScheduleLayout() 2606 bool Document::shouldScheduleLayout() const
2611 { 2607 {
2612 // This function will only be called when FrameView thinks a layout is neede d. 2608 // This function will only be called when FrameView thinks a layout is neede d.
2613 // This enforces a couple extra rules. 2609 // This enforces a couple extra rules.
2614 // 2610 //
2615 // (a) Only schedule a layout once the stylesheets are loaded. 2611 // (a) Only schedule a layout once the stylesheets are loaded.
2616 // (b) Only schedule layout once we have a body element. 2612 // (b) Only schedule layout once we have a body element.
2617 2613
2618 return (haveStylesheetsAndImportsLoaded() && body()) 2614 return (haveStylesheetsAndImportsLoaded() && body())
2619 || (documentElement() && !isHTMLHtmlElement(*documentElement())); 2615 || (documentElement() && !isHTMLHtmlElement(*documentElement()));
2620 } 2616 }
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after
3281 { 3277 {
3282 return m_styleEngine->selectedStylesheetSetName(); 3278 return m_styleEngine->selectedStylesheetSetName();
3283 } 3279 }
3284 3280
3285 void Document::setSelectedStylesheetSet(const String& aString) 3281 void Document::setSelectedStylesheetSet(const String& aString)
3286 { 3282 {
3287 m_styleEngine->setSelectedStylesheetSetName(aString); 3283 m_styleEngine->setSelectedStylesheetSetName(aString);
3288 styleResolverChanged(RecalcStyleDeferred); 3284 styleResolverChanged(RecalcStyleDeferred);
3289 } 3285 }
3290 3286
3287 void Document::evaluateMediaQueryListIfNeeded()
3288 {
3289 if (!m_evaluateMediaQueriesOnStyleRecalc)
3290 return;
3291 evaluateMediaQueryList();
3292 m_evaluateMediaQueriesOnStyleRecalc = false;
3293 }
3294
3291 void Document::evaluateMediaQueryList() 3295 void Document::evaluateMediaQueryList()
3292 { 3296 {
3293 if (m_mediaQueryMatcher) 3297 if (m_mediaQueryMatcher)
3294 m_mediaQueryMatcher->styleResolverChanged(); 3298 m_mediaQueryMatcher->styleResolverChanged();
3295 } 3299 }
3296 3300
3297 void Document::notifyResizeForViewportUnits() 3301 void Document::notifyResizeForViewportUnits()
3298 { 3302 {
3299 if (!hasViewportUnits()) 3303 if (!hasViewportUnits())
3300 return; 3304 return;
(...skipping 2193 matching lines...) Expand 10 before | Expand all | Expand 10 after
5494 } 5498 }
5495 5499
5496 void Document::invalidateNodeListCaches(const QualifiedName* attrName) 5500 void Document::invalidateNodeListCaches(const QualifiedName* attrName)
5497 { 5501 {
5498 HashSet<LiveNodeListBase*>::iterator end = m_listsInvalidatedAtDocument.end( ); 5502 HashSet<LiveNodeListBase*>::iterator end = m_listsInvalidatedAtDocument.end( );
5499 for (HashSet<LiveNodeListBase*>::iterator it = m_listsInvalidatedAtDocument. begin(); it != end; ++it) 5503 for (HashSet<LiveNodeListBase*>::iterator it = m_listsInvalidatedAtDocument. begin(); it != end; ++it)
5500 (*it)->invalidateCache(attrName); 5504 (*it)->invalidateCache(attrName);
5501 } 5505 }
5502 5506
5503 } // namespace WebCore 5507 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698