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

Side by Side Diff: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp

Issue 1419143007: Fix bug in CSSOM window.scroll api (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: inert scroll events for visual viewport Created 5 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 | « no previous file | third_party/WebKit/Source/core/frame/VisualViewport.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) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 1117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 if (!view) 1128 if (!view)
1129 return; 1129 return;
1130 1130
1131 FrameHost* host = frame()->host(); 1131 FrameHost* host = frame()->host();
1132 if (!host) 1132 if (!host)
1133 return; 1133 return;
1134 1134
1135 x = ScrollableArea::normalizeNonFiniteScroll(x); 1135 x = ScrollableArea::normalizeNonFiniteScroll(x);
1136 y = ScrollableArea::normalizeNonFiniteScroll(y); 1136 y = ScrollableArea::normalizeNonFiniteScroll(y);
1137 1137
1138 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); 1138 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la youtViewportScrollableArea() : view->scrollableArea();
1139
1140 DoublePoint currentOffset = viewport->scrollPositionDouble();
1139 DoubleSize scaledDelta(x * frame()->pageZoomFactor(), y * frame()->pageZoomF actor()); 1141 DoubleSize scaledDelta(x * frame()->pageZoomFactor(), y * frame()->pageZoomF actor());
1140 1142
1141 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la youtViewportScrollableArea() : view->scrollableArea();
1142 viewport->setScrollPosition(currentOffset + scaledDelta, ProgrammaticScroll, scrollBehavior); 1143 viewport->setScrollPosition(currentOffset + scaledDelta, ProgrammaticScroll, scrollBehavior);
1143 } 1144 }
1144 1145
1145 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const 1146 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const
1146 { 1147 {
1147 double x = 0.0; 1148 double x = 0.0;
1148 double y = 0.0; 1149 double y = 0.0;
1149 if (scrollToOptions.hasLeft()) 1150 if (scrollToOptions.hasLeft())
1150 x = scrollToOptions.left(); 1151 x = scrollToOptions.left();
1151 if (scrollToOptions.hasTop()) 1152 if (scrollToOptions.hasTop())
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 if (!scrollToOptions.hasLeft() 1200 if (!scrollToOptions.hasLeft()
1200 || !scrollToOptions.hasTop() 1201 || !scrollToOptions.hasTop()
1201 || scrollToOptions.left() 1202 || scrollToOptions.left()
1202 || scrollToOptions.top()) { 1203 || scrollToOptions.top()) {
1203 document()->updateLayoutIgnorePendingStylesheets(); 1204 document()->updateLayoutIgnorePendingStylesheets();
1204 } 1205 }
1205 1206
1206 double scaledX = 0.0; 1207 double scaledX = 0.0;
1207 double scaledY = 0.0; 1208 double scaledY = 0.0;
1208 1209
1209 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); 1210 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la youtViewportScrollableArea() : view->scrollableArea();
1211
1212 DoublePoint currentOffset = viewport->scrollPositionDouble();
1210 scaledX = currentOffset.x(); 1213 scaledX = currentOffset.x();
1211 scaledY = currentOffset.y(); 1214 scaledY = currentOffset.y();
1212 1215
1213 if (scrollToOptions.hasLeft()) 1216 if (scrollToOptions.hasLeft())
1214 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left( )) * frame()->pageZoomFactor(); 1217 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left( )) * frame()->pageZoomFactor();
1215 1218
1216 if (scrollToOptions.hasTop()) 1219 if (scrollToOptions.hasTop())
1217 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top() ) * frame()->pageZoomFactor(); 1220 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top() ) * frame()->pageZoomFactor();
1218 1221
1219 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; 1222 ScrollBehavior scrollBehavior = ScrollBehaviorAuto;
1220 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB ehavior); 1223 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB ehavior);
1221 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la youtViewportScrollableArea() : view->scrollableArea(); 1224
1222 viewport->setScrollPosition(DoublePoint(scaledX, scaledY), ProgrammaticScrol l, scrollBehavior); 1225 viewport->setScrollPosition(DoublePoint(scaledX, scaledY), ProgrammaticScrol l, scrollBehavior);
1223 } 1226 }
1224 1227
1225 void LocalDOMWindow::moveBy(int x, int y) const 1228 void LocalDOMWindow::moveBy(int x, int y) const
1226 { 1229 {
1227 if (!frame() || !frame()->isMainFrame()) 1230 if (!frame() || !frame()->isMainFrame())
1228 return; 1231 return;
1229 1232
1230 FrameHost* host = frame()->host(); 1233 FrameHost* host = frame()->host();
1231 if (!host) 1234 if (!host)
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 { 1530 {
1528 // If the LocalDOMWindow still has a frame reference, that frame must point 1531 // If the LocalDOMWindow still has a frame reference, that frame must point
1529 // back to this LocalDOMWindow: otherwise, it's easy to get into a situation 1532 // back to this LocalDOMWindow: otherwise, it's easy to get into a situation
1530 // where script execution leaks between different LocalDOMWindows. 1533 // where script execution leaks between different LocalDOMWindows.
1531 if (m_frameObserver->frame()) 1534 if (m_frameObserver->frame())
1532 ASSERT_WITH_SECURITY_IMPLICATION(m_frameObserver->frame()->domWindow() = = this); 1535 ASSERT_WITH_SECURITY_IMPLICATION(m_frameObserver->frame()->domWindow() = = this);
1533 return m_frameObserver->frame(); 1536 return m_frameObserver->frame();
1534 } 1537 }
1535 1538
1536 } // namespace blink 1539 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/frame/VisualViewport.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698