Index: Source/core/dom/Element.cpp |
diff --git a/Source/core/dom/Element.cpp b/Source/core/dom/Element.cpp |
index 01a776123369040ba8f456d07d240bc9561a6aba..0fb87fd82ba96ed9c6922149e4532f81f10bc1bc 100644 |
--- a/Source/core/dom/Element.cpp |
+++ b/Source/core/dom/Element.cpp |
@@ -677,7 +677,13 @@ int Element::scrollLeft() |
{ |
document().updateLayoutIgnorePendingStylesheets(); |
- if (document().documentElement() == this) { |
+ if (document().documentElement() != this) { |
+ if (RenderBox* rend = renderBox()) |
+ return adjustForAbsoluteZoom(rend->scrollLeft(), rend); |
+ return 0; |
+ } |
+ |
+ if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
if (document().inQuirksMode()) |
return 0; |
@@ -687,8 +693,6 @@ int Element::scrollLeft() |
} |
} |
- if (RenderBox* rend = renderBox()) |
- return adjustForAbsoluteZoom(rend->scrollLeft(), rend); |
return 0; |
} |
@@ -696,7 +700,13 @@ int Element::scrollTop() |
{ |
document().updateLayoutIgnorePendingStylesheets(); |
- if (document().documentElement() == this) { |
+ if (document().documentElement() != this) { |
+ if (RenderBox* rend = renderBox()) |
+ return adjustForAbsoluteZoom(rend->scrollTop(), rend); |
+ return 0; |
+ } |
+ |
+ if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
if (document().inQuirksMode()) |
return 0; |
@@ -706,8 +716,6 @@ int Element::scrollTop() |
} |
} |
- if (RenderBox* rend = renderBox()) |
- return adjustForAbsoluteZoom(rend->scrollTop(), rend); |
return 0; |
} |
@@ -715,7 +723,13 @@ void Element::setScrollLeft(int newLeft) |
{ |
document().updateLayoutIgnorePendingStylesheets(); |
- if (document().documentElement() == this) { |
+ if (document().documentElement() != this) { |
+ if (RenderBox* rend = renderBox()) |
+ rend->setScrollLeft(static_cast<int>(newLeft * rend->style()->effectiveZoom())); |
+ return; |
+ } |
+ |
+ if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
if (document().inQuirksMode()) |
return; |
@@ -726,24 +740,21 @@ void Element::setScrollLeft(int newLeft) |
if (!view) |
return; |
- // WHATWG spec says [1]: "If the element is the root element invoke scroll() |
- // with x as first argument and zero as second". Blink intentionally matches |
- // other engine's behaviors here, instead, where the 'y' scroll position is |
- // preversed. See [2]. |
- // [1] http://dev.w3.org/csswg/cssom-view/#dom-element-scrollleft |
- // [2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=23448 |
view->setScrollPosition(IntPoint(static_cast<int>(newLeft * frame->pageZoomFactor()), view->scrollY())); |
} |
- |
- if (RenderBox* rend = renderBox()) |
- rend->setScrollLeft(static_cast<int>(newLeft * rend->style()->effectiveZoom())); |
} |
void Element::setScrollTop(int newTop) |
{ |
document().updateLayoutIgnorePendingStylesheets(); |
- if (document().documentElement() == this) { |
+ if (document().documentElement() != this) { |
+ if (RenderBox* rend = renderBox()) |
+ rend->setScrollTop(static_cast<int>(newTop * rend->style()->effectiveZoom())); |
+ return; |
+ } |
+ |
+ if (RuntimeEnabledFeatures::scrollTopLeftInteropEnabled()) { |
if (document().inQuirksMode()) |
return; |
@@ -754,17 +765,8 @@ void Element::setScrollTop(int newTop) |
if (!view) |
return; |
- // WHATWG spec says [1]: "If the element is the root element invoke scroll() |
- // with zero as first argument and y as second". Blink intentionally |
- // matches other engine's behaviors here, instead, where the 'x' scroll |
- // position is preversed. See [2]. |
- // [1] http://dev.w3.org/csswg/cssom-view/#dom-element-scrolltop |
- // [2] https://www.w3.org/Bugs/Public/show_bug.cgi?id=23448 |
view->setScrollPosition(IntPoint(view->scrollX(), static_cast<int>(newTop * frame->pageZoomFactor()))); |
} |
- |
- if (RenderBox* rend = renderBox()) |
- rend->setScrollTop(static_cast<int>(newTop * rend->style()->effectiveZoom())); |
} |
int Element::scrollWidth() |