| OLD | NEW |
| 1 #include "config.h" | 1 #include "config.h" |
| 2 | 2 |
| 3 #include <gtest/gtest.h> | 3 #include <gtest/gtest.h> |
| 4 #include "FrameTestHelpers.h" | 4 #include "FrameTestHelpers.h" |
| 5 #include "RuntimeEnabledFeatures.h" | 5 #include "RuntimeEnabledFeatures.h" |
| 6 #include "URLTestHelpers.h" | 6 #include "URLTestHelpers.h" |
| 7 #include "WebFrame.h" | 7 #include "WebFrame.h" |
| 8 #include "WebFrameClient.h" | 8 #include "WebFrameClient.h" |
| 9 #include "WebFrameImpl.h" | 9 #include "WebFrameImpl.h" |
| 10 #include "WebHistoryItem.h" | 10 #include "WebHistoryItem.h" |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 | 75 |
| 76 private: | 76 private: |
| 77 bool m_eventReceived; | 77 bool m_eventReceived; |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 TEST_F(ProgrammaticScrollTest, UserScroll) | 80 TEST_F(ProgrammaticScrollTest, UserScroll) |
| 81 { | 81 { |
| 82 registerMockedHttpURLLoad("short_scroll.html"); | 82 registerMockedHttpURLLoad("short_scroll.html"); |
| 83 TestProgrammaticScrollClient client; | 83 TestProgrammaticScrollClient client; |
| 84 | 84 |
| 85 WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "short
_scroll.html", false, 0, &client); | 85 FrameTestHelpers::WebViewHelper webViewHelper; |
| 86 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "short_scroll
.html", false, 0, &client); |
| 86 webView->resize(WebSize(1000, 1000)); | 87 webView->resize(WebSize(1000, 1000)); |
| 87 webView->layout(); | 88 webView->layout(); |
| 88 | 89 |
| 89 EXPECT_FALSE(client.eventReceived()); | 90 EXPECT_FALSE(client.eventReceived()); |
| 90 | 91 |
| 91 // Non zero page scale and scroll. | 92 // Non zero page scale and scroll. |
| 92 toWebViewImpl(webView)->applyScrollAndScale(WebSize(9, 13), 2.0f); | 93 toWebViewImpl(webView)->applyScrollAndScale(WebSize(9, 13), 2.0f); |
| 93 EXPECT_FALSE(client.eventReceived()); | 94 EXPECT_FALSE(client.eventReceived()); |
| 94 | |
| 95 webView->close(); | |
| 96 } | 95 } |
| 97 | 96 |
| 98 TEST_F(ProgrammaticScrollTest, ProgrammaticScroll) | 97 TEST_F(ProgrammaticScrollTest, ProgrammaticScroll) |
| 99 { | 98 { |
| 100 registerMockedHttpURLLoad("long_scroll.html"); | 99 registerMockedHttpURLLoad("long_scroll.html"); |
| 101 TestProgrammaticScrollClient client; | 100 TestProgrammaticScrollClient client; |
| 102 | 101 |
| 103 WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "long_
scroll.html", true, 0, &client); | 102 FrameTestHelpers::WebViewHelper webViewHelper; |
| 103 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.
html", true, 0, &client); |
| 104 webView->resize(WebSize(1000, 1000)); | 104 webView->resize(WebSize(1000, 1000)); |
| 105 webView->layout(); | 105 webView->layout(); |
| 106 | 106 |
| 107 WebFrameImpl* frameImpl = toWebViewImpl(webView)->mainFrameImpl(); | 107 WebFrameImpl* frameImpl = toWebViewImpl(webView)->mainFrameImpl(); |
| 108 FrameView* frameView = frameImpl->frameView(); | 108 FrameView* frameView = frameImpl->frameView(); |
| 109 | 109 |
| 110 // Slow scroll path. | 110 // Slow scroll path. |
| 111 frameView->setCanBlitOnScroll(false); | 111 frameView->setCanBlitOnScroll(false); |
| 112 EXPECT_FALSE(client.eventReceived()); | 112 EXPECT_FALSE(client.eventReceived()); |
| 113 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); | 113 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); |
| 114 EXPECT_TRUE(client.eventReceived()); | 114 EXPECT_TRUE(client.eventReceived()); |
| 115 client.reset(); | 115 client.reset(); |
| 116 frameImpl->executeScript(WebScriptSource("window.scrollBy(0, 0);")); | 116 frameImpl->executeScript(WebScriptSource("window.scrollBy(0, 0);")); |
| 117 EXPECT_FALSE(client.eventReceived()); | 117 EXPECT_FALSE(client.eventReceived()); |
| 118 client.reset(); | 118 client.reset(); |
| 119 | 119 |
| 120 // Fast scroll path. | 120 // Fast scroll path. |
| 121 frameImpl->frameView()->setCanBlitOnScroll(true); | 121 frameImpl->frameView()->setCanBlitOnScroll(true); |
| 122 EXPECT_FALSE(client.eventReceived()); | 122 EXPECT_FALSE(client.eventReceived()); |
| 123 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 21);")); | 123 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 21);")); |
| 124 EXPECT_TRUE(client.eventReceived()); | 124 EXPECT_TRUE(client.eventReceived()); |
| 125 client.reset(); | 125 client.reset(); |
| 126 frameImpl->executeScript(WebScriptSource("window.scrollBy(0, 0);")); | 126 frameImpl->executeScript(WebScriptSource("window.scrollBy(0, 0);")); |
| 127 EXPECT_FALSE(client.eventReceived()); | 127 EXPECT_FALSE(client.eventReceived()); |
| 128 client.reset(); | 128 client.reset(); |
| 129 | |
| 130 webView->close(); | |
| 131 } | 129 } |
| 132 | 130 |
| 133 TEST_F(ProgrammaticScrollTest, UserScrollOnMainThread) | 131 TEST_F(ProgrammaticScrollTest, UserScrollOnMainThread) |
| 134 { | 132 { |
| 135 registerMockedHttpURLLoad("long_scroll.html"); | 133 registerMockedHttpURLLoad("long_scroll.html"); |
| 136 TestProgrammaticScrollClient client; | 134 TestProgrammaticScrollClient client; |
| 137 | 135 |
| 138 WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "long_
scroll.html", true, 0, &client); | 136 FrameTestHelpers::WebViewHelper webViewHelper; |
| 137 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.
html", true, 0, &client); |
| 139 webView->resize(WebSize(1000, 1000)); | 138 webView->resize(WebSize(1000, 1000)); |
| 140 webView->layout(); | 139 webView->layout(); |
| 141 | 140 |
| 142 WebGestureEvent gesture; | 141 WebGestureEvent gesture; |
| 143 gesture.type = WebInputEvent::GestureScrollBegin; | 142 gesture.type = WebInputEvent::GestureScrollBegin; |
| 144 webView->handleInputEvent(gesture); | 143 webView->handleInputEvent(gesture); |
| 145 FrameTestHelpers::runPendingTasks(); | 144 FrameTestHelpers::runPendingTasks(); |
| 146 EXPECT_FALSE(client.eventReceived()); | 145 EXPECT_FALSE(client.eventReceived()); |
| 147 | 146 |
| 148 gesture.type = WebInputEvent::GestureScrollUpdate; | 147 gesture.type = WebInputEvent::GestureScrollUpdate; |
| 149 gesture.data.scrollUpdate.deltaY = 40; | 148 gesture.data.scrollUpdate.deltaY = 40; |
| 150 webView->handleInputEvent(gesture); | 149 webView->handleInputEvent(gesture); |
| 151 FrameTestHelpers::runPendingTasks(); | 150 FrameTestHelpers::runPendingTasks(); |
| 152 EXPECT_FALSE(client.eventReceived()); | 151 EXPECT_FALSE(client.eventReceived()); |
| 153 | 152 |
| 154 gesture.type = WebInputEvent::GestureScrollEnd; | 153 gesture.type = WebInputEvent::GestureScrollEnd; |
| 155 gesture.data.scrollUpdate.deltaY = 0; | 154 gesture.data.scrollUpdate.deltaY = 0; |
| 156 webView->handleInputEvent(gesture); | 155 webView->handleInputEvent(gesture); |
| 157 FrameTestHelpers::runPendingTasks(); | 156 FrameTestHelpers::runPendingTasks(); |
| 158 EXPECT_FALSE(client.eventReceived()); | 157 EXPECT_FALSE(client.eventReceived()); |
| 159 | |
| 160 webView->close(); | |
| 161 } | 158 } |
| 162 | 159 |
| 163 TEST_F(ProgrammaticScrollTest, RestoreScrollPositionAndViewStateWithScale) | 160 TEST_F(ProgrammaticScrollTest, RestoreScrollPositionAndViewStateWithScale) |
| 164 { | 161 { |
| 165 registerMockedHttpURLLoad("long_scroll.html"); | 162 registerMockedHttpURLLoad("long_scroll.html"); |
| 166 TestProgrammaticScrollClient client; | 163 TestProgrammaticScrollClient client; |
| 167 | 164 |
| 168 WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "long_
scroll.html", true, 0, &client); | 165 FrameTestHelpers::WebViewHelper webViewHelper; |
| 166 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.
html", true, 0, &client); |
| 169 webView->resize(WebSize(1000, 1000)); | 167 webView->resize(WebSize(1000, 1000)); |
| 170 webView->layout(); | 168 webView->layout(); |
| 171 | 169 |
| 172 WebViewImpl* webViewImpl = toWebViewImpl(webView); | 170 WebViewImpl* webViewImpl = toWebViewImpl(webView); |
| 173 FrameView* frameView = webViewImpl->mainFrameImpl()->frameView(); | 171 FrameView* frameView = webViewImpl->mainFrameImpl()->frameView(); |
| 174 HistoryController* history = webViewImpl->page()->mainFrame()->loader()->his
tory(); | 172 HistoryController* history = webViewImpl->page()->mainFrame()->loader()->his
tory(); |
| 175 | 173 |
| 176 // Scale and scroll the page and save that state. Then scale and scroll agai
n and restore. | 174 // Scale and scroll the page and save that state. Then scale and scroll agai
n and restore. |
| 177 webViewImpl->setPageScaleFactor(2.0f, WebPoint(0, 200)); | 175 webViewImpl->setPageScaleFactor(2.0f, WebPoint(0, 200)); |
| 178 history->saveDocumentAndScrollState(); | 176 history->saveDocumentAndScrollState(); |
| 179 webViewImpl->setPageScaleFactor(3.0f, WebPoint(0, 300)); | 177 webViewImpl->setPageScaleFactor(3.0f, WebPoint(0, 300)); |
| 180 // Flip back the wasScrolledByUser flag which was set to true by setPageScal
eFactor | 178 // Flip back the wasScrolledByUser flag which was set to true by setPageScal
eFactor |
| 181 // because otherwise HistoryController::restoreScrollPositionAndViewState do
es nothing. | 179 // because otherwise HistoryController::restoreScrollPositionAndViewState do
es nothing. |
| 182 frameView->setWasScrolledByUser(false); | 180 frameView->setWasScrolledByUser(false); |
| 183 history->restoreScrollPositionAndViewState(); | 181 history->restoreScrollPositionAndViewState(); |
| 184 | 182 |
| 185 // Expect that both scroll and scale were restored, and that it was not a pr
ogrammatic scroll. | 183 // Expect that both scroll and scale were restored, and that it was not a pr
ogrammatic scroll. |
| 186 EXPECT_EQ(2.0f, webViewImpl->pageScaleFactor()); | 184 EXPECT_EQ(2.0f, webViewImpl->pageScaleFactor()); |
| 187 EXPECT_EQ(200, webViewImpl->mainFrameImpl()->scrollOffset().height); | 185 EXPECT_EQ(200, webViewImpl->mainFrameImpl()->scrollOffset().height); |
| 188 EXPECT_TRUE(frameView->wasScrolledByUser()); | 186 EXPECT_TRUE(frameView->wasScrolledByUser()); |
| 189 EXPECT_FALSE(client.eventReceived()); | 187 EXPECT_FALSE(client.eventReceived()); |
| 190 | |
| 191 webView->close(); | |
| 192 } | 188 } |
| 193 | 189 |
| 194 TEST_F(ProgrammaticScrollTest, RestoreScrollPositionAndViewStateWithoutScale) | 190 TEST_F(ProgrammaticScrollTest, RestoreScrollPositionAndViewStateWithoutScale) |
| 195 { | 191 { |
| 196 registerMockedHttpURLLoad("long_scroll.html"); | 192 registerMockedHttpURLLoad("long_scroll.html"); |
| 197 TestProgrammaticScrollClient client; | 193 TestProgrammaticScrollClient client; |
| 198 | 194 |
| 199 WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "long_
scroll.html", true, 0, &client); | 195 FrameTestHelpers::WebViewHelper webViewHelper; |
| 196 WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.
html", true, 0, &client); |
| 200 webView->resize(WebSize(1000, 1000)); | 197 webView->resize(WebSize(1000, 1000)); |
| 201 webView->layout(); | 198 webView->layout(); |
| 202 | 199 |
| 203 WebViewImpl* webViewImpl = toWebViewImpl(webView); | 200 WebViewImpl* webViewImpl = toWebViewImpl(webView); |
| 204 FrameView* frameView = webViewImpl->mainFrameImpl()->frameView(); | 201 FrameView* frameView = webViewImpl->mainFrameImpl()->frameView(); |
| 205 HistoryController* history = webViewImpl->page()->mainFrame()->loader()->his
tory(); | 202 HistoryController* history = webViewImpl->page()->mainFrame()->loader()->his
tory(); |
| 206 | 203 |
| 207 // Scale and scroll the page and save that state, but then set scale to zero
. Then scale and | 204 // Scale and scroll the page and save that state, but then set scale to zero
. Then scale and |
| 208 // scroll again and restore. | 205 // scroll again and restore. |
| 209 webViewImpl->setPageScaleFactor(2.0f, WebPoint(0, 400)); | 206 webViewImpl->setPageScaleFactor(2.0f, WebPoint(0, 400)); |
| 210 history->saveDocumentAndScrollState(); | 207 history->saveDocumentAndScrollState(); |
| 211 webViewImpl->setPageScaleFactor(3.0f, WebPoint(0, 500)); | 208 webViewImpl->setPageScaleFactor(3.0f, WebPoint(0, 500)); |
| 212 // Flip back the wasScrolledByUser flag which was set to true by setPageScal
eFactor | 209 // Flip back the wasScrolledByUser flag which was set to true by setPageScal
eFactor |
| 213 // because otherwise HistoryController::restoreScrollPositionAndViewState do
es nothing. | 210 // because otherwise HistoryController::restoreScrollPositionAndViewState do
es nothing. |
| 214 frameView->setWasScrolledByUser(false); | 211 frameView->setWasScrolledByUser(false); |
| 215 // HistoryController::restoreScrollPositionAndViewState flows differently if
scale is zero. | 212 // HistoryController::restoreScrollPositionAndViewState flows differently if
scale is zero. |
| 216 history->currentItem()->setPageScaleFactor(0.0f); | 213 history->currentItem()->setPageScaleFactor(0.0f); |
| 217 history->restoreScrollPositionAndViewState(); | 214 history->restoreScrollPositionAndViewState(); |
| 218 | 215 |
| 219 // Expect that only the scroll position was restored, and that it was not a
programmatic scroll. | 216 // Expect that only the scroll position was restored, and that it was not a
programmatic scroll. |
| 220 EXPECT_EQ(3.0f, webViewImpl->pageScaleFactor()); | 217 EXPECT_EQ(3.0f, webViewImpl->pageScaleFactor()); |
| 221 EXPECT_EQ(400, webViewImpl->mainFrameImpl()->scrollOffset().height); | 218 EXPECT_EQ(400, webViewImpl->mainFrameImpl()->scrollOffset().height); |
| 222 EXPECT_TRUE(frameView->wasScrolledByUser()); | 219 EXPECT_TRUE(frameView->wasScrolledByUser()); |
| 223 EXPECT_FALSE(client.eventReceived()); | 220 EXPECT_FALSE(client.eventReceived()); |
| 224 | |
| 225 webView->close(); | |
| 226 } | 221 } |
| 227 | 222 |
| 228 } | 223 } |
| OLD | NEW |