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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutObject.cpp

Issue 2448983002: offsetParent() fails to consider continuations when searching for the parent. (Closed)
Patch Set: Added test case. Created 4 years, 1 month 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 | « third_party/WebKit/LayoutTests/fast/inline/inline-offsetParent-continuation.html ('k') | no next file » | 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) 2000 Dirk Mueller (mueller@kde.org) 4 * (C) 2000 Dirk Mueller (mueller@kde.org)
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2009 Google Inc. All rights reserved. 8 * Copyright (C) 2009 Google Inc. All rights reserved.
9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. 9 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved.
10 * (http://www.torchmobile.com/) 10 * (http://www.torchmobile.com/)
(...skipping 3199 matching lines...) Expand 10 before | Expand all | Expand 10 after
3210 return nullptr; 3210 return nullptr;
3211 3211
3212 float effectiveZoom = style()->effectiveZoom(); 3212 float effectiveZoom = style()->effectiveZoom();
3213 Node* node = nullptr; 3213 Node* node = nullptr;
3214 for (LayoutObject* ancestor = parent(); ancestor; 3214 for (LayoutObject* ancestor = parent(); ancestor;
3215 ancestor = ancestor->parent()) { 3215 ancestor = ancestor->parent()) {
3216 // Spec: http://www.w3.org/TR/cssom-view/#offset-attributes 3216 // Spec: http://www.w3.org/TR/cssom-view/#offset-attributes
3217 3217
3218 node = ancestor->node(); 3218 node = ancestor->node();
3219 3219
3220 if (!node) 3220 if (!node) {
3221 continue; 3221 if (!ancestor->virtualContinuation())
3222 continue;
3223
3224 // This is an anonymous continuation; ie. our ancestor is really the split
3225 // inline. Find it by spooling to the end of the continuation chain.
3226
3227 while (LayoutBoxModelObject* cont = ancestor->virtualContinuation())
3228 ancestor = cont;
3229
3230 node = ancestor->node();
3231
3232 DCHECK(node);
3233 }
3222 3234
3223 // TODO(kochi): If |base| or |node| is nested deep in shadow roots, this 3235 // TODO(kochi): If |base| or |node| is nested deep in shadow roots, this
3224 // loop may get expensive, as isUnclosedNodeOf() can take up to O(N+M) time 3236 // loop may get expensive, as isUnclosedNodeOf() can take up to O(N+M) time
3225 // (N and M are depths). 3237 // (N and M are depths).
3226 if (base && 3238 if (base &&
3227 (node->isClosedShadowHiddenFrom(*base) || 3239 (node->isClosedShadowHiddenFrom(*base) ||
3228 (node->isInShadowTree() && 3240 (node->isInShadowTree() &&
3229 node->containingShadowRoot()->type() == ShadowRootType::UserAgent))) { 3241 node->containingShadowRoot()->type() == ShadowRootType::UserAgent))) {
3230 // If 'position: fixed' node is found while traversing up, terminate the 3242 // If 'position: fixed' node is found while traversing up, terminate the
3231 // loop and return null. 3243 // loop and return null.
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
3557 const blink::LayoutObject* root = object1; 3569 const blink::LayoutObject* root = object1;
3558 while (root->parent()) 3570 while (root->parent())
3559 root = root->parent(); 3571 root = root->parent();
3560 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0); 3572 root->showLayoutTreeAndMark(object1, "*", object2, "-", 0);
3561 } else { 3573 } else {
3562 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)"); 3574 WTFLogAlways("%s", "Cannot showLayoutTree. Root is (nil)");
3563 } 3575 }
3564 } 3576 }
3565 3577
3566 #endif 3578 #endif
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/fast/inline/inline-offsetParent-continuation.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698