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

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

Issue 16951003: Fix broken AttachContext from r152289 (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Final patch Created 7 years, 6 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
« no previous file with comments | « Source/core/dom/ContainerNode.cpp ('k') | Source/core/dom/Element.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1754 matching lines...) Expand 10 before | Expand all | Expand 10 after
1765 void Document::updateStyleIfNeeded() 1765 void Document::updateStyleIfNeeded()
1766 { 1766 {
1767 ASSERT(isMainThread()); 1767 ASSERT(isMainThread());
1768 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting())); 1768 ASSERT(!view() || (!view()->isInLayout() && !view()->isPainting()));
1769 1769
1770 if (!m_pendingStyleRecalcShouldForce && !childNeedsStyleRecalc()) 1770 if (!m_pendingStyleRecalcShouldForce && !childNeedsStyleRecalc())
1771 return; 1771 return;
1772 1772
1773 AnimationUpdateBlock animationUpdateBlock(m_frame ? m_frame->animation() : 0 ); 1773 AnimationUpdateBlock animationUpdateBlock(m_frame ? m_frame->animation() : 0 );
1774 recalcStyle(NoChange); 1774 recalcStyle(NoChange);
1775
1776 // As a result of the style recalculation, the currently hovered element mig ht have been
1777 // detached (for example, by setting display:none in the :hover style), sche dule another mouseMove event
1778 // to check if any other elements ended up under the mouse pointer due to re -layout.
1779 if (hoverNode() && !hoverNode()->renderer() && frame())
1780 frame()->eventHandler()->dispatchFakeMouseMoveEventSoon();
esprehn 2013/06/17 22:00:27 Hmm, there's a number of other places where we mig
stavila 2013/06/18 08:54:00 Yes, I know Document::recalcStyle is called in mul
1775 } 1781 }
1776 1782
1777 void Document::updateLayout() 1783 void Document::updateLayout()
1778 { 1784 {
1779 ASSERT(isMainThread()); 1785 ASSERT(isMainThread());
1780 1786
1781 FrameView* frameView = view(); 1787 FrameView* frameView = view();
1782 if (frameView && frameView->isInLayout()) { 1788 if (frameView && frameView->isInLayout()) {
1783 // View layout should not be re-entrant. 1789 // View layout should not be re-entrant.
1784 ASSERT_NOT_REACHED(); 1790 ASSERT_NOT_REACHED();
(...skipping 3258 matching lines...) Expand 10 before | Expand all | Expand 10 after
5043 RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0; 5049 RenderObject* newHoverObj = newHoverNode ? newHoverNode->renderer() : 0;
5044 5050
5045 // Locate the common ancestor render object for the two renderers. 5051 // Locate the common ancestor render object for the two renderers.
5046 RenderObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj ); 5052 RenderObject* ancestor = nearestCommonHoverAncestor(oldHoverObj, newHoverObj );
5047 5053
5048 Vector<RefPtr<Node>, 32> nodesToRemoveFromChain; 5054 Vector<RefPtr<Node>, 32> nodesToRemoveFromChain;
5049 Vector<RefPtr<Node>, 32> nodesToAddToChain; 5055 Vector<RefPtr<Node>, 32> nodesToAddToChain;
5050 5056
5051 if (oldHoverObj != newHoverObj) { 5057 if (oldHoverObj != newHoverObj) {
5052 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style 5058 // If the old hovered node is not nil but it's renderer is, it was proba bly detached as part of the :hover style
5053 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element 5059 // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element (and its ancestors)
5054 // must be updated, to ensure it's normal style is re-applied. 5060 // must be updated, to ensure it's normal style is re-applied.
5055 if (oldHoverNode && !oldHoverObj) { 5061 if (oldHoverNode && !oldHoverObj) {
5056 if (!mustBeInActiveChain || oldHoverNode->inActiveChain()) 5062 for (Node* node = oldHoverNode.get(); node; node = node->parentNode( )) {
5057 nodesToRemoveFromChain.append(oldHoverNode); 5063 if (!mustBeInActiveChain || (node->isElementNode() && toElement( node)->inActiveChain()))
5064 nodesToRemoveFromChain.append(node);
5065 }
5066
5058 } 5067 }
5059 5068
5060 // The old hover path only needs to be cleared up to (and not including) the common ancestor; 5069 // The old hover path only needs to be cleared up to (and not including) the common ancestor;
5061 for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) { 5070 for (RenderObject* curr = oldHoverObj; curr && curr != ancestor; curr = curr->hoverAncestor()) {
5062 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain())) 5071 if (curr->node() && !curr->isText() && (!mustBeInActiveChain || curr ->node()->inActiveChain()))
5063 nodesToRemoveFromChain.append(curr->node()); 5072 nodesToRemoveFromChain.append(curr->node());
5064 } 5073 }
5065 } 5074 }
5066 5075
5067 // Now set the hover state for our new object up to the root. 5076 // Now set the hover state for our new object up to the root.
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
5227 } 5236 }
5228 5237
5229 void Document::addLifecycleObserver(DocumentLifecycleObserver* observer) 5238 void Document::addLifecycleObserver(DocumentLifecycleObserver* observer)
5230 { 5239 {
5231 if (!m_lifecycleNotifier) 5240 if (!m_lifecycleNotifier)
5232 m_lifecycleNotifier = DocumentLifecycleNotifier::create(); 5241 m_lifecycleNotifier = DocumentLifecycleNotifier::create();
5233 m_lifecycleNotifier->addObserver(observer); 5242 m_lifecycleNotifier->addObserver(observer);
5234 } 5243 }
5235 5244
5236 } // namespace WebCore 5245 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/dom/ContainerNode.cpp ('k') | Source/core/dom/Element.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698