OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. |
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) | 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) |
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 , m_didPostCheckFocusedElementTask(false) | 447 , m_didPostCheckFocusedElementTask(false) |
448 , m_hasAutofocused(false) | 448 , m_hasAutofocused(false) |
449 , m_domTreeVersion(++s_globalTreeVersion) | 449 , m_domTreeVersion(++s_globalTreeVersion) |
450 , m_listenerTypes(0) | 450 , m_listenerTypes(0) |
451 , m_mutationObserverTypes(0) | 451 , m_mutationObserverTypes(0) |
452 , m_visitedLinkState(VisitedLinkState::create(*this)) | 452 , m_visitedLinkState(VisitedLinkState::create(*this)) |
453 , m_visuallyOrdered(false) | 453 , m_visuallyOrdered(false) |
454 , m_readyState(Complete) | 454 , m_readyState(Complete) |
455 , m_bParsing(false) | 455 , m_bParsing(false) |
456 , m_hasPendingStyleRecalc(false) | 456 , m_hasPendingStyleRecalc(false) |
457 , m_inStyleRecalc(false) | |
458 , m_gotoAnchorNeededAfterStylesheetsLoad(false) | 457 , m_gotoAnchorNeededAfterStylesheetsLoad(false) |
459 , m_containsValidityStyleRules(false) | 458 , m_containsValidityStyleRules(false) |
460 , m_updateFocusAppearanceRestoresSelection(false) | 459 , m_updateFocusAppearanceRestoresSelection(false) |
461 , m_containsPlugins(false) | 460 , m_containsPlugins(false) |
462 , m_ignoreDestructiveWriteCount(0) | 461 , m_ignoreDestructiveWriteCount(0) |
463 , m_titleSetExplicitly(false) | 462 , m_titleSetExplicitly(false) |
464 , m_markers(adoptPtr(new DocumentMarkerController)) | 463 , m_markers(adoptPtr(new DocumentMarkerController)) |
465 , m_updateFocusAppearanceTimer(this, &Document::updateFocusAppearanceTimerFi
red) | 464 , m_updateFocusAppearanceTimer(this, &Document::updateFocusAppearanceTimerFi
red) |
466 , m_cssTarget(0) | 465 , m_cssTarget(0) |
467 , m_loadEventProgress(LoadEventNotRun) | 466 , m_loadEventProgress(LoadEventNotRun) |
(...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1599 } | 1598 } |
1600 | 1599 |
1601 void Document::unscheduleStyleRecalc() | 1600 void Document::unscheduleStyleRecalc() |
1602 { | 1601 { |
1603 ASSERT(!isActive() || (!needsStyleRecalc() && !childNeedsStyleRecalc())); | 1602 ASSERT(!isActive() || (!needsStyleRecalc() && !childNeedsStyleRecalc())); |
1604 m_hasPendingStyleRecalc = false; | 1603 m_hasPendingStyleRecalc = false; |
1605 } | 1604 } |
1606 | 1605 |
1607 bool Document::hasPendingForcedStyleRecalc() const | 1606 bool Document::hasPendingForcedStyleRecalc() const |
1608 { | 1607 { |
1609 return m_hasPendingStyleRecalc && !m_inStyleRecalc && styleChangeType() >= S
ubtreeStyleChange; | 1608 return m_hasPendingStyleRecalc && !inStyleRecalc() && styleChangeType() >= S
ubtreeStyleChange; |
1610 } | 1609 } |
1611 | 1610 |
1612 void Document::updateDistributionIfNeeded() | 1611 void Document::updateDistributionIfNeeded() |
1613 { | 1612 { |
1614 if (!childNeedsDistributionRecalc()) | 1613 if (!childNeedsDistributionRecalc()) |
1615 return; | 1614 return; |
1616 TRACE_EVENT0("webkit", "Document::recalcDistribution"); | 1615 TRACE_EVENT0("webkit", "Document::recalcDistribution"); |
1617 recalcDistribution(); | 1616 recalcDistribution(); |
1618 } | 1617 } |
1619 | 1618 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1707 | 1706 |
1708 void Document::recalcStyle(StyleRecalcChange change) | 1707 void Document::recalcStyle(StyleRecalcChange change) |
1709 { | 1708 { |
1710 // we should not enter style recalc while painting | 1709 // we should not enter style recalc while painting |
1711 RELEASE_ASSERT(!view() || !view()->isPainting()); | 1710 RELEASE_ASSERT(!view() || !view()->isPainting()); |
1712 | 1711 |
1713 // FIXME: We should never enter here without a FrameView or with an inactive
document. | 1712 // FIXME: We should never enter here without a FrameView or with an inactive
document. |
1714 if (!isActive() || !view()) | 1713 if (!isActive() || !view()) |
1715 return; | 1714 return; |
1716 | 1715 |
1717 if (m_inStyleRecalc) | 1716 if (inStyleRecalc()) |
1718 return; | 1717 return; |
1719 | 1718 |
1720 TRACE_EVENT0("webkit", "Document::recalcStyle"); | 1719 TRACE_EVENT0("webkit", "Document::recalcStyle"); |
1721 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); | 1720 TRACE_EVENT_SCOPED_SAMPLING_STATE("Blink", "RecalcStyle"); |
1722 | 1721 |
1723 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc
ulateStyle(this); | 1722 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willRecalc
ulateStyle(this); |
1724 | 1723 |
1725 updateDistributionIfNeeded(); | 1724 updateDistributionIfNeeded(); |
1726 updateUseShadowTrees(); | 1725 updateUseShadowTrees(); |
1727 | 1726 |
1728 if (m_evaluateMediaQueriesOnStyleRecalc) { | 1727 if (m_evaluateMediaQueriesOnStyleRecalc) { |
1729 m_evaluateMediaQueriesOnStyleRecalc = false; | 1728 m_evaluateMediaQueriesOnStyleRecalc = false; |
1730 evaluateMediaQueryList(); | 1729 evaluateMediaQueryList(); |
1731 } | 1730 } |
1732 | 1731 |
1733 // FIXME: We should update style on our ancestor chain before proceeding | 1732 // FIXME: We should update style on our ancestor chain before proceeding |
1734 // however doing so currently causes several tests to crash, as Frame::setDo
cument calls Document::attach | 1733 // however doing so currently causes several tests to crash, as Frame::setDo
cument calls Document::attach |
1735 // before setting the DOMWindow on the Frame, or the SecurityOrigin on the d
ocument. The attach, in turn | 1734 // before setting the DOMWindow on the Frame, or the SecurityOrigin on the d
ocument. The attach, in turn |
1736 // resolves style (here) and then when we resolve style on the parent chain,
we may end up | 1735 // resolves style (here) and then when we resolve style on the parent chain,
we may end up |
1737 // re-attaching our containing iframe, which when asked HTMLFrameElementBase
::isURLAllowed | 1736 // re-attaching our containing iframe, which when asked HTMLFrameElementBase
::isURLAllowed |
1738 // hits a null-dereference due to security code always assuming the document
has a SecurityOrigin. | 1737 // hits a null-dereference due to security code always assuming the document
has a SecurityOrigin. |
1739 | 1738 |
1740 if (m_elemSheet && m_elemSheet->contents()->usesRemUnits()) | 1739 if (m_elemSheet && m_elemSheet->contents()->usesRemUnits()) |
1741 m_styleEngine->setUsesRemUnit(true); | 1740 m_styleEngine->setUsesRemUnit(true); |
1742 | 1741 |
1743 { | 1742 { |
1744 PostAttachCallbacks::SuspendScope suspendPostAttachCallbacks; | 1743 PostAttachCallbacks::SuspendScope suspendPostAttachCallbacks; |
1745 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates; | 1744 RenderWidget::UpdateSuspendScope suspendWidgetHierarchyUpdates; |
1746 TemporaryChange<bool> changeInStyleRecalc(m_inStyleRecalc, true); | 1745 m_lifecycle.advanceTo(DocumentLifecycle::InStyleRecalc); |
1747 | 1746 |
1748 if (styleChangeType() >= SubtreeStyleChange) | 1747 if (styleChangeType() >= SubtreeStyleChange) |
1749 change = Force; | 1748 change = Force; |
1750 | 1749 |
1751 // FIXME: Cannot access the ensureStyleResolver() before calling styleFo
rDocument below because | 1750 // FIXME: Cannot access the ensureStyleResolver() before calling styleFo
rDocument below because |
1752 // apparently the StyleResolver's constructor has side effects. We shoul
d fix it. | 1751 // apparently the StyleResolver's constructor has side effects. We shoul
d fix it. |
1753 // See printing/setPrinting.html, printing/width-overflow.html though th
ey only fail on | 1752 // See printing/setPrinting.html, printing/width-overflow.html though th
ey only fail on |
1754 // mac when accessing the resolver by what appears to be a viewport size
difference. | 1753 // mac when accessing the resolver by what appears to be a viewport size
difference. |
1755 | 1754 |
1756 if (change == Force) { | 1755 if (change == Force) { |
(...skipping 27 matching lines...) Expand all Loading... |
1784 | 1783 |
1785 clearChildNeedsStyleRecalc(); | 1784 clearChildNeedsStyleRecalc(); |
1786 unscheduleStyleRecalc(); | 1785 unscheduleStyleRecalc(); |
1787 | 1786 |
1788 if (m_styleEngine->hasResolver()) { | 1787 if (m_styleEngine->hasResolver()) { |
1789 // Pseudo element removal and similar may only work with these flags
still set. Reset them after the style recalc. | 1788 // Pseudo element removal and similar may only work with these flags
still set. Reset them after the style recalc. |
1790 StyleResolver& resolver = m_styleEngine->ensureResolver(); | 1789 StyleResolver& resolver = m_styleEngine->ensureResolver(); |
1791 m_styleEngine->resetCSSFeatureFlags(resolver.ensureRuleFeatureSet())
; | 1790 m_styleEngine->resetCSSFeatureFlags(resolver.ensureRuleFeatureSet())
; |
1792 resolver.clearStyleSharingList(); | 1791 resolver.clearStyleSharingList(); |
1793 } | 1792 } |
| 1793 |
| 1794 ASSERT(inStyleRecalc()); |
| 1795 m_lifecycle.advanceTo(DocumentLifecycle::Clean); |
1794 } | 1796 } |
1795 | 1797 |
1796 InspectorInstrumentation::didRecalculateStyle(cookie); | 1798 InspectorInstrumentation::didRecalculateStyle(cookie); |
1797 | 1799 |
1798 // As a result of the style recalculation, the currently hovered element mig
ht have been | 1800 // As a result of the style recalculation, the currently hovered element mig
ht have been |
1799 // detached (for example, by setting display:none in the :hover style), sche
dule another mouseMove event | 1801 // detached (for example, by setting display:none in the :hover style), sche
dule another mouseMove event |
1800 // to check if any other elements ended up under the mouse pointer due to re
-layout. | 1802 // to check if any other elements ended up under the mouse pointer due to re
-layout. |
1801 if (hoverNode() && !hoverNode()->renderer() && frame()) | 1803 if (hoverNode() && !hoverNode()->renderer() && frame()) |
1802 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); | 1804 frame()->eventHandler().dispatchFakeMouseMoveEventSoon(); |
1803 } | 1805 } |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2057 setRenderer(m_renderView); | 2059 setRenderer(m_renderView); |
2058 | 2060 |
2059 m_renderView->setIsInWindow(true); | 2061 m_renderView->setIsInWindow(true); |
2060 m_renderView->setStyle(StyleResolver::styleForDocument(*this)); | 2062 m_renderView->setStyle(StyleResolver::styleForDocument(*this)); |
2061 view()->updateCompositingLayersAfterStyleChange(); | 2063 view()->updateCompositingLayersAfterStyleChange(); |
2062 | 2064 |
2063 m_styleEngine->didAttach(); | 2065 m_styleEngine->didAttach(); |
2064 | 2066 |
2065 ContainerNode::attach(context); | 2067 ContainerNode::attach(context); |
2066 | 2068 |
2067 m_lifecycle.advanceTo(DocumentLifecycle::Active); | 2069 m_lifecycle.advanceTo(DocumentLifecycle::Clean); |
2068 } | 2070 } |
2069 | 2071 |
2070 void Document::detach(const AttachContext& context) | 2072 void Document::detach(const AttachContext& context) |
2071 { | 2073 { |
2072 ASSERT(isActive()); | 2074 ASSERT(isActive()); |
2073 m_lifecycle.advanceTo(DocumentLifecycle::Stopping); | 2075 m_lifecycle.advanceTo(DocumentLifecycle::Stopping); |
2074 | 2076 |
2075 if (page()) | 2077 if (page()) |
2076 page()->documentDetached(this); | 2078 page()->documentDetached(this); |
2077 | 2079 |
(...skipping 3300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5378 if (!page->focusController().isActive() || !page->focusController().isFocuse
d()) | 5380 if (!page->focusController().isActive() || !page->focusController().isFocuse
d()) |
5379 return false; | 5381 return false; |
5380 if (Frame* focusedFrame = page->focusController().focusedFrame()) { | 5382 if (Frame* focusedFrame = page->focusController().focusedFrame()) { |
5381 if (focusedFrame->tree().isDescendantOf(frame())) | 5383 if (focusedFrame->tree().isDescendantOf(frame())) |
5382 return true; | 5384 return true; |
5383 } | 5385 } |
5384 return false; | 5386 return false; |
5385 } | 5387 } |
5386 | 5388 |
5387 } // namespace WebCore | 5389 } // namespace WebCore |
OLD | NEW |