OLD | NEW |
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 920 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 // date viewport. | 931 // date viewport. |
932 if (host->settings().viewportEnabled() && frame->isMainFrame()) | 932 if (host->settings().viewportEnabled() && frame->isMainFrame()) |
933 frame->document()->updateLayoutIgnorePendingStylesheets(); | 933 frame->document()->updateLayoutIgnorePendingStylesheets(); |
934 | 934 |
935 // FIXME: This is potentially too much work. We really only need to know the
dimensions of the parent frame's layoutObject. | 935 // FIXME: This is potentially too much work. We really only need to know the
dimensions of the parent frame's layoutObject. |
936 if (Frame* parent = frame->tree().parent()) { | 936 if (Frame* parent = frame->tree().parent()) { |
937 if (parent && parent->isLocalFrame()) | 937 if (parent && parent->isLocalFrame()) |
938 toLocalFrame(parent)->document()->updateLayoutIgnorePendingStyleshee
ts(); | 938 toLocalFrame(parent)->document()->updateLayoutIgnorePendingStyleshee
ts(); |
939 } | 939 } |
940 | 940 |
941 return frame->isMainFrame() | 941 return frame->isMainFrame() && !host->settings().inertVisualViewport() |
942 ? host->visualViewport().visibleRect().size() | 942 ? host->visualViewport().visibleRect().size() |
943 : view->visibleContentRect(IncludeScrollbars).size(); | 943 : view->visibleContentRect(IncludeScrollbars).size(); |
944 } | 944 } |
945 | 945 |
946 int LocalDOMWindow::innerHeight() const | 946 int LocalDOMWindow::innerHeight() const |
947 { | 947 { |
948 if (!frame()) | 948 if (!frame()) |
949 return 0; | 949 return 0; |
950 | 950 |
951 FloatSize viewportSize = getViewportSize(frame()); | 951 FloatSize viewportSize = getViewportSize(frame()); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
997 FrameView* view = frame()->view(); | 997 FrameView* view = frame()->view(); |
998 if (!view) | 998 if (!view) |
999 return 0; | 999 return 0; |
1000 | 1000 |
1001 FrameHost* host = frame()->host(); | 1001 FrameHost* host = frame()->host(); |
1002 if (!host) | 1002 if (!host) |
1003 return 0; | 1003 return 0; |
1004 | 1004 |
1005 frame()->document()->updateLayoutIgnorePendingStylesheets(); | 1005 frame()->document()->updateLayoutIgnorePendingStylesheets(); |
1006 | 1006 |
1007 double viewportX = view->scrollableArea()->scrollPositionDouble().x(); | 1007 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la
youtViewportScrollableArea() : view->scrollableArea(); |
| 1008 double viewportX = viewport->scrollPositionDouble().x(); |
1008 return adjustScrollForAbsoluteZoom(viewportX, frame()->pageZoomFactor()); | 1009 return adjustScrollForAbsoluteZoom(viewportX, frame()->pageZoomFactor()); |
1009 } | 1010 } |
1010 | 1011 |
1011 double LocalDOMWindow::scrollY() const | 1012 double LocalDOMWindow::scrollY() const |
1012 { | 1013 { |
1013 if (!frame()) | 1014 if (!frame()) |
1014 return 0; | 1015 return 0; |
1015 | 1016 |
1016 FrameView* view = frame()->view(); | 1017 FrameView* view = frame()->view(); |
1017 if (!view) | 1018 if (!view) |
1018 return 0; | 1019 return 0; |
1019 | 1020 |
1020 FrameHost* host = frame()->host(); | 1021 FrameHost* host = frame()->host(); |
1021 if (!host) | 1022 if (!host) |
1022 return 0; | 1023 return 0; |
1023 | 1024 |
1024 frame()->document()->updateLayoutIgnorePendingStylesheets(); | 1025 frame()->document()->updateLayoutIgnorePendingStylesheets(); |
1025 | 1026 |
1026 double viewportY = view->scrollableArea()->scrollPositionDouble().y(); | 1027 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la
youtViewportScrollableArea() : view->scrollableArea(); |
| 1028 double viewportY = viewport->scrollPositionDouble().y(); |
1027 return adjustScrollForAbsoluteZoom(viewportY, frame()->pageZoomFactor()); | 1029 return adjustScrollForAbsoluteZoom(viewportY, frame()->pageZoomFactor()); |
1028 } | 1030 } |
1029 | 1031 |
1030 const AtomicString& LocalDOMWindow::name() const | 1032 const AtomicString& LocalDOMWindow::name() const |
1031 { | 1033 { |
1032 if (!isCurrentlyDisplayedInFrame()) | 1034 if (!isCurrentlyDisplayedInFrame()) |
1033 return nullAtom; | 1035 return nullAtom; |
1034 | 1036 |
1035 return frame()->tree().name(); | 1037 return frame()->tree().name(); |
1036 } | 1038 } |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1124 { | 1126 { |
1125 if (!isCurrentlyDisplayedInFrame()) | 1127 if (!isCurrentlyDisplayedInFrame()) |
1126 return; | 1128 return; |
1127 | 1129 |
1128 document()->updateLayoutIgnorePendingStylesheets(); | 1130 document()->updateLayoutIgnorePendingStylesheets(); |
1129 | 1131 |
1130 FrameView* view = frame()->view(); | 1132 FrameView* view = frame()->view(); |
1131 if (!view) | 1133 if (!view) |
1132 return; | 1134 return; |
1133 | 1135 |
| 1136 FrameHost* host = frame()->host(); |
| 1137 if (!host) |
| 1138 return; |
| 1139 |
1134 x = ScrollableArea::normalizeNonFiniteScroll(x); | 1140 x = ScrollableArea::normalizeNonFiniteScroll(x); |
1135 y = ScrollableArea::normalizeNonFiniteScroll(y); | 1141 y = ScrollableArea::normalizeNonFiniteScroll(y); |
1136 | 1142 |
1137 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); | 1143 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); |
1138 DoubleSize scaledDelta(x * frame()->pageZoomFactor(), y * frame()->pageZoomF
actor()); | 1144 DoubleSize scaledDelta(x * frame()->pageZoomFactor(), y * frame()->pageZoomF
actor()); |
1139 | 1145 |
1140 view->scrollableArea()->setScrollPosition(currentOffset + scaledDelta, Progr
ammaticScroll, scrollBehavior); | 1146 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la
youtViewportScrollableArea() : view->scrollableArea(); |
| 1147 viewport->setScrollPosition(currentOffset + scaledDelta, ProgrammaticScroll,
scrollBehavior); |
1141 } | 1148 } |
1142 | 1149 |
1143 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const | 1150 void LocalDOMWindow::scrollBy(const ScrollToOptions& scrollToOptions) const |
1144 { | 1151 { |
1145 double x = 0.0; | 1152 double x = 0.0; |
1146 double y = 0.0; | 1153 double y = 0.0; |
1147 if (scrollToOptions.hasLeft()) | 1154 if (scrollToOptions.hasLeft()) |
1148 x = scrollToOptions.left(); | 1155 x = scrollToOptions.left(); |
1149 if (scrollToOptions.hasTop()) | 1156 if (scrollToOptions.hasTop()) |
1150 y = scrollToOptions.top(); | 1157 y = scrollToOptions.top(); |
1151 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; | 1158 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; |
1152 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB
ehavior); | 1159 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB
ehavior); |
1153 scrollBy(x, y, scrollBehavior); | 1160 scrollBy(x, y, scrollBehavior); |
1154 } | 1161 } |
1155 | 1162 |
1156 void LocalDOMWindow::scrollTo(double x, double y) const | 1163 void LocalDOMWindow::scrollTo(double x, double y) const |
1157 { | 1164 { |
1158 if (!isCurrentlyDisplayedInFrame()) | 1165 if (!isCurrentlyDisplayedInFrame()) |
1159 return; | 1166 return; |
1160 | 1167 |
1161 FrameView* view = frame()->view(); | 1168 FrameView* view = frame()->view(); |
1162 if (!view) | 1169 if (!view) |
1163 return; | 1170 return; |
1164 | 1171 |
| 1172 FrameHost* host = frame()->host(); |
| 1173 if (!host) |
| 1174 return; |
| 1175 |
1165 x = ScrollableArea::normalizeNonFiniteScroll(x); | 1176 x = ScrollableArea::normalizeNonFiniteScroll(x); |
1166 y = ScrollableArea::normalizeNonFiniteScroll(y); | 1177 y = ScrollableArea::normalizeNonFiniteScroll(y); |
1167 | 1178 |
1168 // It is only necessary to have an up-to-date layout if the position may be
clamped, | 1179 // It is only necessary to have an up-to-date layout if the position may be
clamped, |
1169 // which is never the case for (0, 0). | 1180 // which is never the case for (0, 0). |
1170 if (x || y) | 1181 if (x || y) |
1171 document()->updateLayoutIgnorePendingStylesheets(); | 1182 document()->updateLayoutIgnorePendingStylesheets(); |
1172 | 1183 |
1173 DoublePoint layoutPos(x * frame()->pageZoomFactor(), y * frame()->pageZoomFa
ctor()); | 1184 DoublePoint layoutPos(x * frame()->pageZoomFactor(), y * frame()->pageZoomFa
ctor()); |
1174 view->scrollableArea()->setScrollPosition(layoutPos, ProgrammaticScroll, Scr
ollBehaviorAuto); | 1185 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la
youtViewportScrollableArea() : view->scrollableArea(); |
| 1186 viewport->setScrollPosition(layoutPos, ProgrammaticScroll, ScrollBehaviorAut
o); |
1175 } | 1187 } |
1176 | 1188 |
1177 void LocalDOMWindow::scrollTo(const ScrollToOptions& scrollToOptions) const | 1189 void LocalDOMWindow::scrollTo(const ScrollToOptions& scrollToOptions) const |
1178 { | 1190 { |
1179 if (!isCurrentlyDisplayedInFrame()) | 1191 if (!isCurrentlyDisplayedInFrame()) |
1180 return; | 1192 return; |
1181 | 1193 |
1182 FrameView* view = frame()->view(); | 1194 FrameView* view = frame()->view(); |
1183 if (!view) | 1195 if (!view) |
1184 return; | 1196 return; |
1185 | 1197 |
| 1198 FrameHost* host = frame()->host(); |
| 1199 if (!host) |
| 1200 return; |
| 1201 |
1186 // It is only necessary to have an up-to-date layout if the position may be
clamped, | 1202 // It is only necessary to have an up-to-date layout if the position may be
clamped, |
1187 // which is never the case for (0, 0). | 1203 // which is never the case for (0, 0). |
1188 if (!scrollToOptions.hasLeft() | 1204 if (!scrollToOptions.hasLeft() |
1189 || !scrollToOptions.hasTop() | 1205 || !scrollToOptions.hasTop() |
1190 || scrollToOptions.left() | 1206 || scrollToOptions.left() |
1191 || scrollToOptions.top()) { | 1207 || scrollToOptions.top()) { |
1192 document()->updateLayoutIgnorePendingStylesheets(); | 1208 document()->updateLayoutIgnorePendingStylesheets(); |
1193 } | 1209 } |
1194 | 1210 |
1195 double scaledX = 0.0; | 1211 double scaledX = 0.0; |
1196 double scaledY = 0.0; | 1212 double scaledY = 0.0; |
1197 | 1213 |
1198 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); | 1214 DoublePoint currentOffset = view->scrollableArea()->scrollPositionDouble(); |
1199 scaledX = currentOffset.x(); | 1215 scaledX = currentOffset.x(); |
1200 scaledY = currentOffset.y(); | 1216 scaledY = currentOffset.y(); |
1201 | 1217 |
1202 if (scrollToOptions.hasLeft()) | 1218 if (scrollToOptions.hasLeft()) |
1203 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left(
)) * frame()->pageZoomFactor(); | 1219 scaledX = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.left(
)) * frame()->pageZoomFactor(); |
1204 | 1220 |
1205 if (scrollToOptions.hasTop()) | 1221 if (scrollToOptions.hasTop()) |
1206 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()
) * frame()->pageZoomFactor(); | 1222 scaledY = ScrollableArea::normalizeNonFiniteScroll(scrollToOptions.top()
) * frame()->pageZoomFactor(); |
1207 | 1223 |
1208 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; | 1224 ScrollBehavior scrollBehavior = ScrollBehaviorAuto; |
1209 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB
ehavior); | 1225 ScrollableArea::scrollBehaviorFromString(scrollToOptions.behavior(), scrollB
ehavior); |
1210 view->scrollableArea()->setScrollPosition(DoublePoint(scaledX, scaledY), Pro
grammaticScroll, scrollBehavior); | 1226 ScrollableArea* viewport = host->settings().inertVisualViewport() ? view->la
youtViewportScrollableArea() : view->scrollableArea(); |
| 1227 viewport->setScrollPosition(DoublePoint(scaledX, scaledY), ProgrammaticScrol
l, scrollBehavior); |
1211 } | 1228 } |
1212 | 1229 |
1213 void LocalDOMWindow::moveBy(int x, int y) const | 1230 void LocalDOMWindow::moveBy(int x, int y) const |
1214 { | 1231 { |
1215 if (!frame() || !frame()->isMainFrame()) | 1232 if (!frame() || !frame()->isMainFrame()) |
1216 return; | 1233 return; |
1217 | 1234 |
1218 FrameHost* host = frame()->host(); | 1235 FrameHost* host = frame()->host(); |
1219 if (!host) | 1236 if (!host) |
1220 return; | 1237 return; |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 DOMWindow::trace(visitor); | 1526 DOMWindow::trace(visitor); |
1510 DOMWindowLifecycleNotifier::trace(visitor); | 1527 DOMWindowLifecycleNotifier::trace(visitor); |
1511 } | 1528 } |
1512 | 1529 |
1513 LocalFrame* LocalDOMWindow::frame() const | 1530 LocalFrame* LocalDOMWindow::frame() const |
1514 { | 1531 { |
1515 return m_frameObserver->frame(); | 1532 return m_frameObserver->frame(); |
1516 } | 1533 } |
1517 | 1534 |
1518 } // namespace blink | 1535 } // namespace blink |
OLD | NEW |