OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 return m_layerTreeView.get(); | 127 return m_layerTreeView.get(); |
128 } | 128 } |
129 | 129 |
130 FakeWebFrameClient m_fakeWebFrameClient; | 130 FakeWebFrameClient m_fakeWebFrameClient; |
131 | 131 |
132 private: | 132 private: |
133 OwnPtr<WebLayerTreeView> m_layerTreeView; | 133 OwnPtr<WebLayerTreeView> m_layerTreeView; |
134 }; | 134 }; |
135 | 135 |
136 class WebFrameTest : public testing::Test { | 136 class WebFrameTest : public testing::Test { |
137 public: | 137 protected: |
138 WebFrameTest() | 138 WebFrameTest() |
139 : m_baseURL("http://www.test.com/") | 139 : m_baseURL("http://www.test.com/") |
140 , m_chromeURL("chrome://") | 140 , m_chromeURL("chrome://") |
141 , m_webView(0) | |
142 { | 141 { |
143 } | 142 } |
144 | 143 |
145 virtual ~WebFrameTest() | 144 virtual ~WebFrameTest() |
146 { | 145 { |
147 if (m_webView) | |
148 m_webView->close(); | |
149 } | |
150 | |
151 virtual void TearDown() | |
152 { | |
153 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); | 146 Platform::current()->unitTestSupport()->unregisterAllMockedURLs(); |
154 } | 147 } |
155 | 148 |
156 void registerMockedHttpURLLoad(const std::string& fileName) | 149 void registerMockedHttpURLLoad(const std::string& fileName) |
157 { | 150 { |
158 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU
RL.c_str()), WebString::fromUTF8(fileName.c_str())); | 151 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseU
RL.c_str()), WebString::fromUTF8(fileName.c_str())); |
159 } | 152 } |
160 | 153 |
161 void registerMockedChromeURLLoad(const std::string& fileName) | 154 void registerMockedChromeURLLoad(const std::string& fileName) |
162 { | 155 { |
163 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_chrom
eURL.c_str()), WebString::fromUTF8(fileName.c_str())); | 156 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_chrom
eURL.c_str()), WebString::fromUTF8(fileName.c_str())); |
164 } | 157 } |
165 | 158 |
166 void createCompositingWebView() | 159 static void configueCompositingWebView(WebSettings* settings) |
167 { | 160 { |
168 m_fakeCompositingWebViewClient = adoptPtr(new FakeCompositingWebViewClie
nt()); | 161 settings->setForceCompositingMode(true); |
169 m_webView = WebView::create(m_fakeCompositingWebViewClient.get()); | 162 settings->setAcceleratedCompositingEnabled(true); |
170 m_webView->settings()->setJavaScriptEnabled(true); | 163 settings->setAcceleratedCompositingForFixedPositionEnabled(true); |
171 m_webView->settings()->setForceCompositingMode(true); | 164 settings->setAcceleratedCompositingForOverflowScrollEnabled(true); |
172 m_webView->settings()->setAcceleratedCompositingEnabled(true); | 165 settings->setAcceleratedCompositingForScrollableFramesEnabled(true); |
173 m_webView->settings()->setAcceleratedCompositingForFixedPositionEnabled(
true); | 166 settings->setCompositedScrollingForFramesEnabled(true); |
174 m_webView->settings()->setAcceleratedCompositingForOverflowScrollEnabled
(true); | 167 settings->setFixedPositionCreatesStackingContext(true); |
175 m_webView->settings()->setAcceleratedCompositingForScrollableFramesEnabl
ed(true); | |
176 m_webView->settings()->setCompositedScrollingForFramesEnabled(true); | |
177 m_webView->settings()->setFixedPositionCreatesStackingContext(true); | |
178 m_webView->initializeMainFrame(&m_fakeCompositingWebViewClient->m_fakeWe
bFrameClient); | |
179 } | 168 } |
180 | 169 |
181 protected: | 170 void initializeTextSelectionWebView(const std::string& url, FrameTestHelpers
::WebViewHelper* webViewHelper) |
182 WebViewImpl* webViewImpl() const { return toWebViewImpl(m_webView); } | 171 { |
| 172 webViewHelper->initializeAndLoad(url, true); |
| 173 webViewHelper->webView()->settings()->setDefaultFontSize(12); |
| 174 webViewHelper->webView()->enableFixedLayoutMode(false); |
| 175 webViewHelper->webView()->resize(WebSize(640, 480)); |
| 176 } |
183 | 177 |
184 std::string m_baseURL; | 178 std::string m_baseURL; |
185 std::string m_chromeURL; | 179 std::string m_chromeURL; |
186 OwnPtr<FakeCompositingWebViewClient> m_fakeCompositingWebViewClient; | |
187 | |
188 WebView* m_webView; | |
189 }; | 180 }; |
190 | 181 |
191 class UseMockScrollbarSettings { | 182 class UseMockScrollbarSettings { |
192 public: | 183 public: |
193 UseMockScrollbarSettings() | 184 UseMockScrollbarSettings() |
194 { | 185 { |
195 WebCore::Settings::setMockScrollbarsEnabled(true); | 186 WebCore::Settings::setMockScrollbarsEnabled(true); |
196 WebCore::RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(true); | 187 WebCore::RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(true); |
197 EXPECT_TRUE(WebCore::ScrollbarTheme::theme()->usesOverlayScrollbars()); | 188 EXPECT_TRUE(WebCore::ScrollbarTheme::theme()->usesOverlayScrollbars()); |
198 } | 189 } |
199 | 190 |
200 ~UseMockScrollbarSettings() | 191 ~UseMockScrollbarSettings() |
201 { | 192 { |
202 WebCore::Settings::setMockScrollbarsEnabled(false); | 193 WebCore::Settings::setMockScrollbarsEnabled(false); |
203 WebCore::RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false); | 194 WebCore::RuntimeEnabledFeatures::setOverlayScrollbarsEnabled(false); |
204 } | 195 } |
205 }; | 196 }; |
206 | 197 |
207 TEST_F(WebFrameTest, ContentText) | 198 TEST_F(WebFrameTest, ContentText) |
208 { | 199 { |
209 registerMockedHttpURLLoad("iframes_test.html"); | 200 registerMockedHttpURLLoad("iframes_test.html"); |
210 registerMockedHttpURLLoad("visible_iframe.html"); | 201 registerMockedHttpURLLoad("visible_iframe.html"); |
211 registerMockedHttpURLLoad("invisible_iframe.html"); | 202 registerMockedHttpURLLoad("invisible_iframe.html"); |
212 registerMockedHttpURLLoad("zero_sized_iframe.html"); | 203 registerMockedHttpURLLoad("zero_sized_iframe.html"); |
213 | 204 |
214 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "iframes_test
.html"); | 205 FrameTestHelpers::WebViewHelper webViewHelper; |
| 206 webViewHelper.initializeAndLoad(m_baseURL + "iframes_test.html"); |
215 | 207 |
216 // Now retrieve the frames text and test it only includes visible elements. | 208 // Now retrieve the frames text and test it only includes visible elements. |
217 std::string content = std::string(m_webView->mainFrame()->contentAsText(1024
).utf8().data()); | 209 std::string content = std::string(webViewHelper.webView()->mainFrame()->cont
entAsText(1024).utf8().data()); |
218 EXPECT_NE(std::string::npos, content.find(" visible paragraph")); | 210 EXPECT_NE(std::string::npos, content.find(" visible paragraph")); |
219 EXPECT_NE(std::string::npos, content.find(" visible iframe")); | 211 EXPECT_NE(std::string::npos, content.find(" visible iframe")); |
220 EXPECT_EQ(std::string::npos, content.find(" invisible pararaph")); | 212 EXPECT_EQ(std::string::npos, content.find(" invisible pararaph")); |
221 EXPECT_EQ(std::string::npos, content.find(" invisible iframe")); | 213 EXPECT_EQ(std::string::npos, content.find(" invisible iframe")); |
222 EXPECT_EQ(std::string::npos, content.find("iframe with zero size")); | 214 EXPECT_EQ(std::string::npos, content.find("iframe with zero size")); |
223 } | 215 } |
224 | 216 |
225 TEST_F(WebFrameTest, FrameForEnteredContext) | 217 TEST_F(WebFrameTest, FrameForEnteredContext) |
226 { | 218 { |
227 registerMockedHttpURLLoad("iframes_test.html"); | 219 registerMockedHttpURLLoad("iframes_test.html"); |
228 registerMockedHttpURLLoad("visible_iframe.html"); | 220 registerMockedHttpURLLoad("visible_iframe.html"); |
229 registerMockedHttpURLLoad("invisible_iframe.html"); | 221 registerMockedHttpURLLoad("invisible_iframe.html"); |
230 registerMockedHttpURLLoad("zero_sized_iframe.html"); | 222 registerMockedHttpURLLoad("zero_sized_iframe.html"); |
231 | 223 |
232 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "iframes_test
.html", true); | 224 FrameTestHelpers::WebViewHelper webViewHelper; |
| 225 webViewHelper.initializeAndLoad(m_baseURL + "iframes_test.html", true); |
233 | 226 |
234 v8::HandleScope scope(v8::Isolate::GetCurrent()); | 227 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
235 EXPECT_EQ(m_webView->mainFrame(), | 228 EXPECT_EQ(webViewHelper.webView()->mainFrame(), WebFrame::frameForContext(we
bViewHelper.webView()->mainFrame()->mainWorldScriptContext())); |
236 WebFrame::frameForContext( | 229 EXPECT_EQ(webViewHelper.webView()->mainFrame()->firstChild(), WebFrame::fram
eForContext(webViewHelper.webView()->mainFrame()->firstChild()->mainWorldScriptC
ontext())); |
237 m_webView->mainFrame()->mainWorldScriptContext())); | |
238 EXPECT_EQ(m_webView->mainFrame()->firstChild(), | |
239 WebFrame::frameForContext( | |
240 m_webView->mainFrame()->firstChild()->mainWorldScriptContext()
)); | |
241 } | 230 } |
242 | 231 |
243 TEST_F(WebFrameTest, FormWithNullFrame) | 232 TEST_F(WebFrameTest, FormWithNullFrame) |
244 { | 233 { |
245 registerMockedHttpURLLoad("form.html"); | 234 registerMockedHttpURLLoad("form.html"); |
246 | 235 |
247 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "form.html"); | 236 FrameTestHelpers::WebViewHelper webViewHelper; |
| 237 webViewHelper.initializeAndLoad(m_baseURL + "form.html"); |
248 | 238 |
249 WebVector<WebFormElement> forms; | 239 WebVector<WebFormElement> forms; |
250 m_webView->mainFrame()->document().forms(forms); | 240 webViewHelper.webView()->mainFrame()->document().forms(forms); |
251 m_webView->close(); | 241 webViewHelper.reset(); |
252 m_webView = 0; | |
253 | 242 |
254 EXPECT_EQ(forms.size(), 1U); | 243 EXPECT_EQ(forms.size(), 1U); |
255 | 244 |
256 // This test passes if this doesn't crash. | 245 // This test passes if this doesn't crash. |
257 WebSearchableFormData searchableDataForm(forms[0]); | 246 WebSearchableFormData searchableDataForm(forms[0]); |
258 } | 247 } |
259 | 248 |
260 TEST_F(WebFrameTest, ChromePageJavascript) | 249 TEST_F(WebFrameTest, ChromePageJavascript) |
261 { | 250 { |
262 registerMockedChromeURLLoad("history.html"); | 251 registerMockedChromeURLLoad("history.html"); |
263 | 252 |
264 // Pass true to enable JavaScript. | 253 // Pass true to enable JavaScript. |
265 m_webView = FrameTestHelpers::createWebViewAndLoad(m_chromeURL + "history.ht
ml", true); | 254 FrameTestHelpers::WebViewHelper webViewHelper; |
| 255 webViewHelper.initializeAndLoad(m_chromeURL + "history.html", true); |
266 | 256 |
267 // Try to run JS against the chrome-style URL. | 257 // Try to run JS against the chrome-style URL. |
268 FrameTestHelpers::loadFrame(m_webView->mainFrame(), "javascript:document.bod
y.appendChild(document.createTextNode('Clobbered'))"); | 258 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascrip
t:document.body.appendChild(document.createTextNode('Clobbered'))"); |
269 | 259 |
270 // Required to see any updates in contentAsText. | 260 // Required to see any updates in contentAsText. |
271 m_webView->layout(); | 261 webViewHelper.webView()->layout(); |
272 | 262 |
273 // Now retrieve the frame's text and ensure it was modified by running javas
cript. | 263 // Now retrieve the frame's text and ensure it was modified by running javas
cript. |
274 std::string content = std::string(m_webView->mainFrame()->contentAsText(1024
).utf8().data()); | 264 std::string content = std::string(webViewHelper.webView()->mainFrame()->cont
entAsText(1024).utf8().data()); |
275 EXPECT_NE(std::string::npos, content.find("Clobbered")); | 265 EXPECT_NE(std::string::npos, content.find("Clobbered")); |
276 } | 266 } |
277 | 267 |
278 TEST_F(WebFrameTest, ChromePageNoJavascript) | 268 TEST_F(WebFrameTest, ChromePageNoJavascript) |
279 { | 269 { |
280 registerMockedChromeURLLoad("history.html"); | 270 registerMockedChromeURLLoad("history.html"); |
281 | 271 |
282 /// Pass true to enable JavaScript. | 272 /// Pass true to enable JavaScript. |
283 m_webView = FrameTestHelpers::createWebViewAndLoad(m_chromeURL + "history.ht
ml", true); | 273 FrameTestHelpers::WebViewHelper webViewHelper; |
| 274 webViewHelper.initializeAndLoad(m_chromeURL + "history.html", true); |
284 | 275 |
285 // Try to run JS against the chrome-style URL after prohibiting it. | 276 // Try to run JS against the chrome-style URL after prohibiting it. |
286 WebSecurityPolicy::registerURLSchemeAsNotAllowingJavascriptURLs("chrome"); | 277 WebSecurityPolicy::registerURLSchemeAsNotAllowingJavascriptURLs("chrome"); |
287 FrameTestHelpers::loadFrame(m_webView->mainFrame(), "javascript:document.bod
y.appendChild(document.createTextNode('Clobbered'))"); | 278 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascrip
t:document.body.appendChild(document.createTextNode('Clobbered'))"); |
288 | 279 |
289 // Required to see any updates in contentAsText. | 280 // Required to see any updates in contentAsText. |
290 m_webView->layout(); | 281 webViewHelper.webView()->layout(); |
291 | 282 |
292 // Now retrieve the frame's text and ensure it wasn't modified by running ja
vascript. | 283 // Now retrieve the frame's text and ensure it wasn't modified by running ja
vascript. |
293 std::string content = std::string(m_webView->mainFrame()->contentAsText(1024
).utf8().data()); | 284 std::string content = std::string(webViewHelper.webView()->mainFrame()->cont
entAsText(1024).utf8().data()); |
294 EXPECT_EQ(std::string::npos, content.find("Clobbered")); | 285 EXPECT_EQ(std::string::npos, content.find("Clobbered")); |
295 } | 286 } |
296 | 287 |
297 TEST_F(WebFrameTest, DispatchMessageEventWithOriginCheck) | 288 TEST_F(WebFrameTest, DispatchMessageEventWithOriginCheck) |
298 { | 289 { |
299 registerMockedHttpURLLoad("postmessage_test.html"); | 290 registerMockedHttpURLLoad("postmessage_test.html"); |
300 | 291 |
301 // Pass true to enable JavaScript. | 292 // Pass true to enable JavaScript. |
302 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "postmessage_
test.html", true); | 293 FrameTestHelpers::WebViewHelper webViewHelper; |
| 294 webViewHelper.initializeAndLoad(m_baseURL + "postmessage_test.html", true); |
303 | 295 |
304 // Send a message with the correct origin. | 296 // Send a message with the correct origin. |
305 WebSecurityOrigin correctOrigin(WebSecurityOrigin::create(toKURL(m_baseURL))
); | 297 WebSecurityOrigin correctOrigin(WebSecurityOrigin::create(toKURL(m_baseURL))
); |
306 WebDOMEvent event = m_webView->mainFrame()->document().createEvent("MessageE
vent"); | 298 WebDOMEvent event = webViewHelper.webView()->mainFrame()->document().createE
vent("MessageEvent"); |
307 WebDOMMessageEvent message = event.to<WebDOMMessageEvent>(); | 299 WebDOMMessageEvent message = event.to<WebDOMMessageEvent>(); |
308 WebSerializedScriptValue data(WebSerializedScriptValue::fromString("foo")); | 300 WebSerializedScriptValue data(WebSerializedScriptValue::fromString("foo")); |
309 message.initMessageEvent("message", false, false, data, "http://origin.com",
0, ""); | 301 message.initMessageEvent("message", false, false, data, "http://origin.com",
0, ""); |
310 m_webView->mainFrame()->dispatchMessageEventWithOriginCheck(correctOrigin, m
essage); | 302 webViewHelper.webView()->mainFrame()->dispatchMessageEventWithOriginCheck(co
rrectOrigin, message); |
311 | 303 |
312 // Send another message with incorrect origin. | 304 // Send another message with incorrect origin. |
313 WebSecurityOrigin incorrectOrigin(WebSecurityOrigin::create(toKURL(m_chromeU
RL))); | 305 WebSecurityOrigin incorrectOrigin(WebSecurityOrigin::create(toKURL(m_chromeU
RL))); |
314 m_webView->mainFrame()->dispatchMessageEventWithOriginCheck(incorrectOrigin,
message); | 306 webViewHelper.webView()->mainFrame()->dispatchMessageEventWithOriginCheck(in
correctOrigin, message); |
315 | 307 |
316 // Required to see any updates in contentAsText. | 308 // Required to see any updates in contentAsText. |
317 m_webView->layout(); | 309 webViewHelper.webView()->layout(); |
318 | 310 |
319 // Verify that only the first addition is in the body of the page. | 311 // Verify that only the first addition is in the body of the page. |
320 std::string content = std::string(m_webView->mainFrame()->contentAsText(1024
).utf8().data()); | 312 std::string content = std::string(webViewHelper.webView()->mainFrame()->cont
entAsText(1024).utf8().data()); |
321 EXPECT_NE(std::string::npos, content.find("Message 1.")); | 313 EXPECT_NE(std::string::npos, content.find("Message 1.")); |
322 EXPECT_EQ(std::string::npos, content.find("Message 2.")); | 314 EXPECT_EQ(std::string::npos, content.find("Message 2.")); |
323 } | 315 } |
324 | 316 |
325 class FixedLayoutTestWebViewClient : public WebViewClient { | 317 class FixedLayoutTestWebViewClient : public WebViewClient { |
326 public: | 318 public: |
327 virtual WebScreenInfo screenInfo() OVERRIDE { return m_screenInfo; } | 319 virtual WebScreenInfo screenInfo() OVERRIDE { return m_screenInfo; } |
328 | 320 |
329 WebScreenInfo m_screenInfo; | 321 WebScreenInfo m_screenInfo; |
330 }; | 322 }; |
331 | 323 |
332 TEST_F(WebFrameTest, FrameViewNeedsLayoutOnFixedLayoutResize) | 324 TEST_F(WebFrameTest, FrameViewNeedsLayoutOnFixedLayoutResize) |
333 { | 325 { |
334 registerMockedHttpURLLoad("fixed_layout.html"); | 326 registerMockedHttpURLLoad("fixed_layout.html"); |
335 | 327 |
336 FixedLayoutTestWebViewClient client; | 328 FixedLayoutTestWebViewClient client; |
337 int viewportWidth = 640; | 329 int viewportWidth = 640; |
338 int viewportHeight = 480; | 330 int viewportHeight = 480; |
339 | 331 |
340 // Make sure we initialize to minimum scale, even if the window size | 332 // Make sure we initialize to minimum scale, even if the window size |
341 // only becomes available after the load begins. | 333 // only becomes available after the load begins. |
342 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 334 FrameTestHelpers::WebViewHelper webViewHelper; |
343 m_webView->enableFixedLayoutMode(true); | 335 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
344 m_webView->settings()->setViewportEnabled(true); | 336 webViewHelper.webView()->enableFixedLayoutMode(true); |
345 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 337 webViewHelper.webView()->settings()->setViewportEnabled(true); |
346 m_webView->layout(); | 338 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 339 webViewHelper.webView()->layout(); |
347 | 340 |
348 webViewImpl()->mainFrameImpl()->frameView()->setFixedLayoutSize(WebCore::Int
Size(100, 100)); | 341 webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->setFixedLayoutSiz
e(WebCore::IntSize(100, 100)); |
349 EXPECT_TRUE(webViewImpl()->mainFrameImpl()->frameView()->needsLayout()); | 342 EXPECT_TRUE(webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->needs
Layout()); |
350 | 343 |
351 int prevLayoutCount = webViewImpl()->mainFrameImpl()->frameView()->layoutCou
nt(); | 344 int prevLayoutCount = webViewHelper.webViewImpl()->mainFrameImpl()->frameVie
w()->layoutCount(); |
352 webViewImpl()->mainFrameImpl()->frameView()->setFrameRect(WebCore::IntRect(0
, 0, 641, 481)); | 345 webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->setFrameRect(WebC
ore::IntRect(0, 0, 641, 481)); |
353 EXPECT_EQ(prevLayoutCount, webViewImpl()->mainFrameImpl()->frameView()->layo
utCount()); | 346 EXPECT_EQ(prevLayoutCount, webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView()->layoutCount()); |
354 | 347 |
355 webViewImpl()->layout(); | 348 webViewHelper.webViewImpl()->layout(); |
356 } | 349 } |
357 | 350 |
358 TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) | 351 TEST_F(WebFrameTest, ChangeInFixedLayoutTriggersTextAutosizingRecalculate) |
359 { | 352 { |
360 registerMockedHttpURLLoad("fixed_layout.html"); | 353 registerMockedHttpURLLoad("fixed_layout.html"); |
361 | 354 |
362 FixedLayoutTestWebViewClient client; | 355 FixedLayoutTestWebViewClient client; |
363 int viewportWidth = 640; | 356 int viewportWidth = 640; |
364 int viewportHeight = 480; | 357 int viewportHeight = 480; |
365 | 358 |
366 // Make sure we initialize to minimum scale, even if the window size | 359 // Make sure we initialize to minimum scale, even if the window size |
367 // only becomes available after the load begins. | 360 // only becomes available after the load begins. |
368 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 361 FrameTestHelpers::WebViewHelper webViewHelper; |
369 m_webView->enableFixedLayoutMode(true); | 362 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
370 m_webView->settings()->setViewportEnabled(true); | 363 webViewHelper.webView()->enableFixedLayoutMode(true); |
| 364 webViewHelper.webView()->settings()->setViewportEnabled(true); |
371 | 365 |
372 WebCore::Document* document = webViewImpl()->page()->mainFrame()->document()
; | 366 WebCore::Document* document = webViewHelper.webViewImpl()->page()->mainFrame
()->document(); |
373 document->settings()->setTextAutosizingEnabled(true); | 367 document->settings()->setTextAutosizingEnabled(true); |
374 EXPECT_TRUE(document->settings()->textAutosizingEnabled()); | 368 EXPECT_TRUE(document->settings()->textAutosizingEnabled()); |
375 webViewImpl()->resize(WebSize(viewportWidth, viewportHeight)); | 369 webViewHelper.webViewImpl()->resize(WebSize(viewportWidth, viewportHeight)); |
376 webViewImpl()->layout(); | 370 webViewHelper.webViewImpl()->layout(); |
377 | 371 |
378 WebCore::RenderObject* renderer = document->renderer(); | 372 WebCore::RenderObject* renderer = document->renderer(); |
379 bool multiplierSetAtLeastOnce = false; | 373 bool multiplierSetAtLeastOnce = false; |
380 while (renderer) { | 374 while (renderer) { |
381 if (renderer->style()) { | 375 if (renderer->style()) { |
382 renderer->style()->setTextAutosizingMultiplier(2); | 376 renderer->style()->setTextAutosizingMultiplier(2); |
383 EXPECT_EQ(2, renderer->style()->textAutosizingMultiplier()); | 377 EXPECT_EQ(2, renderer->style()->textAutosizingMultiplier()); |
384 multiplierSetAtLeastOnce = true; | 378 multiplierSetAtLeastOnce = true; |
385 } | 379 } |
386 renderer = renderer->nextInPreOrder(); | 380 renderer = renderer->nextInPreOrder(); |
387 } | 381 } |
388 EXPECT_TRUE(multiplierSetAtLeastOnce); | 382 EXPECT_TRUE(multiplierSetAtLeastOnce); |
389 | 383 |
390 WebCore::ViewportArguments arguments = document->viewportArguments(); | 384 WebCore::ViewportArguments arguments = document->viewportArguments(); |
391 // Choose a width that's not going match the viewport width of the loaded do
cument. | 385 // Choose a width that's not going match the viewport width of the loaded do
cument. |
392 arguments.minWidth = WebCore::Length(100, WebCore::Fixed); | 386 arguments.minWidth = WebCore::Length(100, WebCore::Fixed); |
393 arguments.maxWidth = WebCore::Length(100, WebCore::Fixed); | 387 arguments.maxWidth = WebCore::Length(100, WebCore::Fixed); |
394 webViewImpl()->updatePageDefinedPageScaleConstraints(arguments); | 388 webViewHelper.webViewImpl()->updatePageDefinedPageScaleConstraints(arguments
); |
395 | 389 |
396 bool multiplierCheckedAtLeastOnce = false; | 390 bool multiplierCheckedAtLeastOnce = false; |
397 renderer = document->renderer(); | 391 renderer = document->renderer(); |
398 while (renderer) { | 392 while (renderer) { |
399 if (renderer->style()) { | 393 if (renderer->style()) { |
400 EXPECT_EQ(1, renderer->style()->textAutosizingMultiplier()); | 394 EXPECT_EQ(1, renderer->style()->textAutosizingMultiplier()); |
401 multiplierCheckedAtLeastOnce = true; | 395 multiplierCheckedAtLeastOnce = true; |
402 } | 396 } |
403 renderer = renderer->nextInPreOrder(); | 397 renderer = renderer->nextInPreOrder(); |
404 } | 398 } |
405 EXPECT_TRUE(multiplierCheckedAtLeastOnce); | 399 EXPECT_TRUE(multiplierCheckedAtLeastOnce); |
406 } | 400 } |
407 | 401 |
408 TEST_F(WebFrameTest, FixedLayoutSizeStopsResizeFromChangingLayoutSize) | 402 TEST_F(WebFrameTest, FixedLayoutSizeStopsResizeFromChangingLayoutSize) |
409 { | 403 { |
410 registerMockedHttpURLLoad("fixed_layout.html"); | 404 registerMockedHttpURLLoad("fixed_layout.html"); |
411 | 405 |
412 int viewportWidth = 640; | 406 int viewportWidth = 640; |
413 int viewportHeight = 480; | 407 int viewportHeight = 480; |
414 | 408 |
415 int fixedLayoutWidth = viewportWidth / 2; | 409 int fixedLayoutWidth = viewportWidth / 2; |
416 int fixedLayoutHeight = viewportHeight / 2; | 410 int fixedLayoutHeight = viewportHeight / 2; |
417 | 411 |
418 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html"); | 412 FrameTestHelpers::WebViewHelper webViewHelper; |
419 m_webView->enableFixedLayoutMode(true); | 413 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html"); |
420 m_webView->settings()->setViewportEnabled(true); | 414 webViewHelper.webView()->enableFixedLayoutMode(true); |
421 m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); | 415 webViewHelper.webView()->settings()->setViewportEnabled(true); |
422 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 416 webViewHelper.webView()->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedL
ayoutHeight)); |
423 m_webView->layout(); | 417 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 418 webViewHelper.webView()->layout(); |
424 | 419 |
425 EXPECT_EQ(fixedLayoutWidth, m_webView->fixedLayoutSize().width); | 420 EXPECT_EQ(fixedLayoutWidth, webViewHelper.webView()->fixedLayoutSize().width
); |
426 EXPECT_EQ(fixedLayoutHeight, m_webView->fixedLayoutSize().height); | 421 EXPECT_EQ(fixedLayoutHeight, webViewHelper.webView()->fixedLayoutSize().heig
ht); |
427 } | 422 } |
428 | 423 |
429 TEST_F(WebFrameTest, FixedLayoutSizePreventsResizeFromChangingPageScale) | 424 TEST_F(WebFrameTest, FixedLayoutSizePreventsResizeFromChangingPageScale) |
430 { | 425 { |
431 registerMockedHttpURLLoad("fixed_layout.html"); | 426 registerMockedHttpURLLoad("fixed_layout.html"); |
432 | 427 |
433 int viewportWidth = 640; | 428 int viewportWidth = 640; |
434 int viewportHeight = 480; | 429 int viewportHeight = 480; |
435 | 430 |
436 int fixedLayoutWidth = viewportWidth / 2; | 431 int fixedLayoutWidth = viewportWidth / 2; |
437 int fixedLayoutHeight = viewportHeight / 2; | 432 int fixedLayoutHeight = viewportHeight / 2; |
438 | 433 |
439 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html"); | 434 FrameTestHelpers::WebViewHelper webViewHelper; |
440 m_webView->enableFixedLayoutMode(true); | 435 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html"); |
441 m_webView->settings()->setViewportEnabled(true); | 436 webViewHelper.webView()->enableFixedLayoutMode(true); |
442 m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); | 437 webViewHelper.webView()->settings()->setViewportEnabled(true); |
443 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 438 webViewHelper.webView()->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedL
ayoutHeight)); |
444 m_webView->layout(); | 439 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
445 float pageScaleFactor = m_webView->pageScaleFactor(); | 440 webViewHelper.webView()->layout(); |
| 441 float pageScaleFactor = webViewHelper.webView()->pageScaleFactor(); |
446 | 442 |
447 m_webView->resize(WebSize(viewportWidth * 2, viewportHeight * 2)); | 443 webViewHelper.webView()->resize(WebSize(viewportWidth * 2, viewportHeight *
2)); |
448 | 444 |
449 EXPECT_EQ(pageScaleFactor, m_webView->pageScaleFactor()); | 445 EXPECT_EQ(pageScaleFactor, webViewHelper.webView()->pageScaleFactor()); |
450 } | 446 } |
451 | 447 |
452 TEST_F(WebFrameTest, FixedLayoutSizePreventsLayoutFromChangingPageScale) | 448 TEST_F(WebFrameTest, FixedLayoutSizePreventsLayoutFromChangingPageScale) |
453 { | 449 { |
454 registerMockedHttpURLLoad("fixed_layout.html"); | 450 registerMockedHttpURLLoad("fixed_layout.html"); |
455 | 451 |
456 int viewportWidth = 640; | 452 int viewportWidth = 640; |
457 int viewportHeight = 480; | 453 int viewportHeight = 480; |
458 | 454 |
459 int fixedLayoutWidth = viewportWidth * 2; | 455 int fixedLayoutWidth = viewportWidth * 2; |
460 int fixedLayoutHeight = viewportHeight * 2; | 456 int fixedLayoutHeight = viewportHeight * 2; |
461 | 457 |
462 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html"); | 458 FrameTestHelpers::WebViewHelper webViewHelper; |
463 m_webView->enableFixedLayoutMode(true); | 459 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html"); |
464 m_webView->settings()->setViewportEnabled(true); | 460 webViewHelper.webView()->enableFixedLayoutMode(true); |
465 m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); | 461 webViewHelper.webView()->settings()->setViewportEnabled(true); |
466 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 462 webViewHelper.webView()->setFixedLayoutSize(WebSize(viewportWidth, viewportH
eight)); |
467 m_webView->layout(); | 463 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
468 float pageScaleFactor = m_webView->pageScaleFactor(); | 464 webViewHelper.webView()->layout(); |
| 465 float pageScaleFactor = webViewHelper.webView()->pageScaleFactor(); |
469 | 466 |
470 m_webView->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedLayoutHeight)); | 467 webViewHelper.webView()->setFixedLayoutSize(WebSize(fixedLayoutWidth, fixedL
ayoutHeight)); |
471 m_webView->layout(); | 468 webViewHelper.webView()->layout(); |
472 | 469 |
473 EXPECT_EQ(pageScaleFactor, m_webView->pageScaleFactor()); | 470 EXPECT_EQ(pageScaleFactor, webViewHelper.webView()->pageScaleFactor()); |
474 } | 471 } |
475 | 472 |
476 TEST_F(WebFrameTest, PreferredSizeAndContentSizeReportedCorrectlyWithZeroHeightF
ixedLayout) | 473 TEST_F(WebFrameTest, PreferredSizeAndContentSizeReportedCorrectlyWithZeroHeightF
ixedLayout) |
477 { | 474 { |
478 registerMockedHttpURLLoad("200-by-300.html"); | 475 registerMockedHttpURLLoad("200-by-300.html"); |
479 | 476 |
480 int windowWidth = 100; | 477 int windowWidth = 100; |
481 int windowHeight = 100; | 478 int windowHeight = 100; |
482 int viewportWidth = 100; | 479 int viewportWidth = 100; |
483 int viewportHeight = 0; | 480 int viewportHeight = 0; |
484 int divWidth = 200; | 481 int divWidth = 200; |
485 int divHeight = 300; | 482 int divHeight = 300; |
486 | 483 |
487 FixedLayoutTestWebViewClient client; | 484 FixedLayoutTestWebViewClient client; |
488 client.m_screenInfo.deviceScaleFactor = 1; | 485 client.m_screenInfo.deviceScaleFactor = 1; |
489 | 486 |
490 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "200-by-300.h
tml", true, 0, &client); | 487 FrameTestHelpers::WebViewHelper webViewHelper; |
491 m_webView->enableFixedLayoutMode(true); | 488 webViewHelper.initializeAndLoad(m_baseURL + "200-by-300.html", true, 0, &cli
ent); |
492 m_webView->settings()->setViewportEnabled(true); | 489 webViewHelper.webView()->enableFixedLayoutMode(true); |
493 m_webView->resize(WebSize(windowWidth, windowHeight)); | 490 webViewHelper.webView()->settings()->setViewportEnabled(true); |
494 m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); | 491 webViewHelper.webView()->resize(WebSize(windowWidth, windowHeight)); |
495 m_webView->layout(); | 492 webViewHelper.webView()->setFixedLayoutSize(WebSize(viewportWidth, viewportH
eight)); |
| 493 webViewHelper.webView()->layout(); |
496 | 494 |
497 EXPECT_EQ(divWidth, m_webView->mainFrame()->contentsSize().width); | 495 EXPECT_EQ(divWidth, webViewHelper.webView()->mainFrame()->contentsSize().wid
th); |
498 EXPECT_EQ(divHeight, m_webView->mainFrame()->contentsSize().height); | 496 EXPECT_EQ(divHeight, webViewHelper.webView()->mainFrame()->contentsSize().he
ight); |
499 | 497 |
500 EXPECT_EQ(divWidth, m_webView->contentsPreferredMinimumSize().width); | 498 EXPECT_EQ(divWidth, webViewHelper.webView()->contentsPreferredMinimumSize().
width); |
501 EXPECT_EQ(divHeight, m_webView->contentsPreferredMinimumSize().height); | 499 EXPECT_EQ(divHeight, webViewHelper.webView()->contentsPreferredMinimumSize()
.height); |
502 } | 500 } |
503 | 501 |
504 TEST_F(WebFrameTest, DisablingFixedLayoutSizeSetsCorrectLayoutSize) | 502 TEST_F(WebFrameTest, DisablingFixedLayoutSizeSetsCorrectLayoutSize) |
505 { | 503 { |
506 registerMockedHttpURLLoad("no_viewport_tag.html"); | 504 registerMockedHttpURLLoad("no_viewport_tag.html"); |
507 | 505 |
508 FixedLayoutTestWebViewClient client; | 506 FixedLayoutTestWebViewClient client; |
509 client.m_screenInfo.deviceScaleFactor = 1; | 507 client.m_screenInfo.deviceScaleFactor = 1; |
510 int viewportWidth = 640; | 508 int viewportWidth = 640; |
511 int viewportHeight = 480; | 509 int viewportHeight = 480; |
512 | 510 |
513 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "no_viewport_
tag.html", true, 0, &client); | 511 FrameTestHelpers::WebViewHelper webViewHelper; |
514 m_webView->settings()->setSupportDeprecatedTargetDensityDPI(true); | 512 webViewHelper.initializeAndLoad(m_baseURL + "no_viewport_tag.html", true, 0,
&client); |
515 m_webView->enableFixedLayoutMode(true); | 513 webViewHelper.webView()->settings()->setSupportDeprecatedTargetDensityDPI(tr
ue); |
516 m_webView->settings()->setUseWideViewport(true); | 514 webViewHelper.webView()->enableFixedLayoutMode(true); |
517 m_webView->settings()->setViewportEnabled(true); | 515 webViewHelper.webView()->settings()->setUseWideViewport(true); |
518 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 516 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 517 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
519 | 518 |
520 m_webView->setFixedLayoutSize(WebSize(viewportWidth, viewportHeight)); | 519 webViewHelper.webView()->setFixedLayoutSize(WebSize(viewportWidth, viewportH
eight)); |
521 EXPECT_TRUE(webViewImpl()->mainFrameImpl()->frameView()->needsLayout()); | 520 EXPECT_TRUE(webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->needs
Layout()); |
522 m_webView->layout(); | 521 webViewHelper.webView()->layout(); |
523 EXPECT_EQ(viewportWidth, webViewImpl()->mainFrameImpl()->frameView()->conten
tsSize().width()); | 522 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->contentsSize().width()); |
524 | 523 |
525 m_webView->setFixedLayoutSize(WebSize(0, 0)); | 524 webViewHelper.webView()->setFixedLayoutSize(WebSize(0, 0)); |
526 EXPECT_TRUE(webViewImpl()->mainFrameImpl()->frameView()->needsLayout()); | 525 EXPECT_TRUE(webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->needs
Layout()); |
527 m_webView->layout(); | 526 webViewHelper.webView()->layout(); |
528 EXPECT_EQ(980, webViewImpl()->mainFrameImpl()->frameView()->contentsSize().w
idth()); | 527 EXPECT_EQ(980, webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->co
ntentsSize().width()); |
529 } | 528 } |
530 | 529 |
531 TEST_F(WebFrameTest, DeviceScaleFactorUsesDefaultWithoutViewportTag) | 530 TEST_F(WebFrameTest, DeviceScaleFactorUsesDefaultWithoutViewportTag) |
532 { | 531 { |
533 registerMockedHttpURLLoad("no_viewport_tag.html"); | 532 registerMockedHttpURLLoad("no_viewport_tag.html"); |
534 | 533 |
535 int viewportWidth = 640; | 534 int viewportWidth = 640; |
536 int viewportHeight = 480; | 535 int viewportHeight = 480; |
537 | 536 |
538 FixedLayoutTestWebViewClient client; | 537 FixedLayoutTestWebViewClient client; |
539 client.m_screenInfo.deviceScaleFactor = 2; | 538 client.m_screenInfo.deviceScaleFactor = 2; |
540 | 539 |
541 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "no_viewport_
tag.html", true, 0, &client); | 540 FrameTestHelpers::WebViewHelper webViewHelper; |
| 541 webViewHelper.initializeAndLoad(m_baseURL + "no_viewport_tag.html", true, 0,
&client); |
542 | 542 |
543 m_webView->settings()->setViewportEnabled(true); | 543 webViewHelper.webView()->settings()->setViewportEnabled(true); |
544 m_webView->enableFixedLayoutMode(true); | 544 webViewHelper.webView()->enableFixedLayoutMode(true); |
545 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 545 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
546 m_webView->layout(); | 546 webViewHelper.webView()->layout(); |
547 | 547 |
548 EXPECT_EQ(2, m_webView->deviceScaleFactor()); | 548 EXPECT_EQ(2, webViewHelper.webView()->deviceScaleFactor()); |
549 | 549 |
550 // Device scale factor should be independent of page scale. | 550 // Device scale factor should be independent of page scale. |
551 m_webView->setPageScaleFactorLimits(1, 2); | 551 webViewHelper.webView()->setPageScaleFactorLimits(1, 2); |
552 m_webView->setPageScaleFactorPreservingScrollOffset(0.5); | 552 webViewHelper.webView()->setPageScaleFactorPreservingScrollOffset(0.5); |
553 m_webView->layout(); | 553 webViewHelper.webView()->layout(); |
554 EXPECT_EQ(1, m_webView->pageScaleFactor()); | 554 EXPECT_EQ(1, webViewHelper.webView()->pageScaleFactor()); |
555 | 555 |
556 // Force the layout to happen before leaving the test. | 556 // Force the layout to happen before leaving the test. |
557 m_webView->mainFrame()->contentAsText(1024).utf8(); | 557 webViewHelper.webView()->mainFrame()->contentAsText(1024).utf8(); |
558 } | 558 } |
559 | 559 |
560 TEST_F(WebFrameTest, FixedLayoutInitializeAtMinimumScale) | 560 TEST_F(WebFrameTest, FixedLayoutInitializeAtMinimumScale) |
561 { | 561 { |
562 UseMockScrollbarSettings mockScrollbarSettings; | 562 UseMockScrollbarSettings mockScrollbarSettings; |
563 | 563 |
564 registerMockedHttpURLLoad("fixed_layout.html"); | 564 registerMockedHttpURLLoad("fixed_layout.html"); |
565 | 565 |
566 FixedLayoutTestWebViewClient client; | 566 FixedLayoutTestWebViewClient client; |
567 client.m_screenInfo.deviceScaleFactor = 1; | 567 client.m_screenInfo.deviceScaleFactor = 1; |
568 int viewportWidth = 640; | 568 int viewportWidth = 640; |
569 int viewportHeight = 480; | 569 int viewportHeight = 480; |
570 | 570 |
571 // Make sure we initialize to minimum scale, even if the window size | 571 // Make sure we initialize to minimum scale, even if the window size |
572 // only becomes available after the load begins. | 572 // only becomes available after the load begins. |
573 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 573 FrameTestHelpers::WebViewHelper webViewHelper; |
574 m_webView->enableFixedLayoutMode(true); | 574 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
575 m_webView->settings()->setViewportEnabled(true); | 575 webViewHelper.webView()->enableFixedLayoutMode(true); |
576 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 576 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 577 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
577 | 578 |
578 int defaultFixedLayoutWidth = 980; | 579 int defaultFixedLayoutWidth = 980; |
579 float minimumPageScaleFactor = viewportWidth / (float) defaultFixedLayoutWid
th; | 580 float minimumPageScaleFactor = viewportWidth / (float) defaultFixedLayoutWid
th; |
580 EXPECT_EQ(minimumPageScaleFactor, m_webView->pageScaleFactor()); | 581 EXPECT_EQ(minimumPageScaleFactor, webViewHelper.webView()->pageScaleFactor()
); |
581 EXPECT_EQ(minimumPageScaleFactor, m_webView->minimumPageScaleFactor()); | 582 EXPECT_EQ(minimumPageScaleFactor, webViewHelper.webView()->minimumPageScaleF
actor()); |
582 | 583 |
583 // Assume the user has pinch zoomed to page scale factor 2. | 584 // Assume the user has pinch zoomed to page scale factor 2. |
584 float userPinchPageScaleFactor = 2; | 585 float userPinchPageScaleFactor = 2; |
585 m_webView->setPageScaleFactorPreservingScrollOffset(userPinchPageScaleFactor
); | 586 webViewHelper.webView()->setPageScaleFactorPreservingScrollOffset(userPinchP
ageScaleFactor); |
586 m_webView->layout(); | 587 webViewHelper.webView()->layout(); |
587 | 588 |
588 // Make sure we don't reset to initial scale if the page continues to load. | 589 // Make sure we don't reset to initial scale if the page continues to load. |
589 bool isNewNavigation; | 590 bool isNewNavigation; |
590 webViewImpl()->didCommitLoad(&isNewNavigation, false); | 591 webViewHelper.webViewImpl()->didCommitLoad(&isNewNavigation, false); |
591 webViewImpl()->didChangeContentsSize(); | 592 webViewHelper.webViewImpl()->didChangeContentsSize(); |
592 EXPECT_EQ(userPinchPageScaleFactor, m_webView->pageScaleFactor()); | 593 EXPECT_EQ(userPinchPageScaleFactor, webViewHelper.webView()->pageScaleFactor
()); |
593 | 594 |
594 // Make sure we don't reset to initial scale if the viewport size changes. | 595 // Make sure we don't reset to initial scale if the viewport size changes. |
595 m_webView->resize(WebSize(viewportWidth, viewportHeight + 100)); | 596 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight + 100)
); |
596 EXPECT_EQ(userPinchPageScaleFactor, m_webView->pageScaleFactor()); | 597 EXPECT_EQ(userPinchPageScaleFactor, webViewHelper.webView()->pageScaleFactor
()); |
597 } | 598 } |
598 | 599 |
599 TEST_F(WebFrameTest, WideDocumentInitializeAtMinimumScale) | 600 TEST_F(WebFrameTest, WideDocumentInitializeAtMinimumScale) |
600 { | 601 { |
601 UseMockScrollbarSettings mockScrollbarSettings; | 602 UseMockScrollbarSettings mockScrollbarSettings; |
602 | 603 |
603 registerMockedHttpURLLoad("wide_document.html"); | 604 registerMockedHttpURLLoad("wide_document.html"); |
604 | 605 |
605 FixedLayoutTestWebViewClient client; | 606 FixedLayoutTestWebViewClient client; |
606 client.m_screenInfo.deviceScaleFactor = 1; | 607 client.m_screenInfo.deviceScaleFactor = 1; |
607 int viewportWidth = 640; | 608 int viewportWidth = 640; |
608 int viewportHeight = 480; | 609 int viewportHeight = 480; |
609 | 610 |
610 // Make sure we initialize to minimum scale, even if the window size | 611 // Make sure we initialize to minimum scale, even if the window size |
611 // only becomes available after the load begins. | 612 // only becomes available after the load begins. |
612 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "wide_documen
t.html", true, 0, &client); | 613 FrameTestHelpers::WebViewHelper webViewHelper; |
613 m_webView->enableFixedLayoutMode(true); | 614 webViewHelper.initializeAndLoad(m_baseURL + "wide_document.html", true, 0, &
client); |
614 m_webView->settings()->setViewportEnabled(true); | 615 webViewHelper.webView()->enableFixedLayoutMode(true); |
615 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 616 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 617 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
616 | 618 |
617 int wideDocumentWidth = 1500; | 619 int wideDocumentWidth = 1500; |
618 float minimumPageScaleFactor = viewportWidth / (float) wideDocumentWidth; | 620 float minimumPageScaleFactor = viewportWidth / (float) wideDocumentWidth; |
619 EXPECT_EQ(minimumPageScaleFactor, m_webView->pageScaleFactor()); | 621 EXPECT_EQ(minimumPageScaleFactor, webViewHelper.webView()->pageScaleFactor()
); |
620 EXPECT_EQ(minimumPageScaleFactor, m_webView->minimumPageScaleFactor()); | 622 EXPECT_EQ(minimumPageScaleFactor, webViewHelper.webView()->minimumPageScaleF
actor()); |
621 | 623 |
622 // Assume the user has pinch zoomed to page scale factor 2. | 624 // Assume the user has pinch zoomed to page scale factor 2. |
623 float userPinchPageScaleFactor = 2; | 625 float userPinchPageScaleFactor = 2; |
624 m_webView->setPageScaleFactorPreservingScrollOffset(userPinchPageScaleFactor
); | 626 webViewHelper.webView()->setPageScaleFactorPreservingScrollOffset(userPinchP
ageScaleFactor); |
625 m_webView->layout(); | 627 webViewHelper.webView()->layout(); |
626 | 628 |
627 // Make sure we don't reset to initial scale if the page continues to load. | 629 // Make sure we don't reset to initial scale if the page continues to load. |
628 bool isNewNavigation; | 630 bool isNewNavigation; |
629 webViewImpl()->didCommitLoad(&isNewNavigation, false); | 631 webViewHelper.webViewImpl()->didCommitLoad(&isNewNavigation, false); |
630 webViewImpl()->didChangeContentsSize(); | 632 webViewHelper.webViewImpl()->didChangeContentsSize(); |
631 EXPECT_EQ(userPinchPageScaleFactor, m_webView->pageScaleFactor()); | 633 EXPECT_EQ(userPinchPageScaleFactor, webViewHelper.webView()->pageScaleFactor
()); |
632 | 634 |
633 // Make sure we don't reset to initial scale if the viewport size changes. | 635 // Make sure we don't reset to initial scale if the viewport size changes. |
634 m_webView->resize(WebSize(viewportWidth, viewportHeight + 100)); | 636 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight + 100)
); |
635 EXPECT_EQ(userPinchPageScaleFactor, m_webView->pageScaleFactor()); | 637 EXPECT_EQ(userPinchPageScaleFactor, webViewHelper.webView()->pageScaleFactor
()); |
636 } | 638 } |
637 | 639 |
638 TEST_F(WebFrameTest, setLoadWithOverviewModeToFalse) | 640 TEST_F(WebFrameTest, setLoadWithOverviewModeToFalse) |
639 { | 641 { |
640 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); | 642 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); |
641 | 643 |
642 FixedLayoutTestWebViewClient client; | 644 FixedLayoutTestWebViewClient client; |
643 client.m_screenInfo.deviceScaleFactor = 1; | 645 client.m_screenInfo.deviceScaleFactor = 1; |
644 int viewportWidth = 640; | 646 int viewportWidth = 640; |
645 int viewportHeight = 480; | 647 int viewportHeight = 480; |
646 | 648 |
647 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-aut
o-initial-scale.html", true, 0, &client); | 649 FrameTestHelpers::WebViewHelper webViewHelper; |
648 m_webView->enableFixedLayoutMode(true); | 650 webViewHelper.initializeAndLoad(m_baseURL + "viewport-auto-initial-scale.htm
l", true, 0, &client); |
649 m_webView->settings()->setViewportEnabled(true); | 651 webViewHelper.webView()->enableFixedLayoutMode(true); |
650 m_webView->settings()->setWideViewportQuirkEnabled(true); | 652 webViewHelper.webView()->settings()->setViewportEnabled(true); |
651 m_webView->settings()->setLoadWithOverviewMode(false); | 653 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
652 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 654 webViewHelper.webView()->settings()->setLoadWithOverviewMode(false); |
| 655 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
653 | 656 |
654 // The page must be displayed at 100% zoom. | 657 // The page must be displayed at 100% zoom. |
655 EXPECT_EQ(1.0f, m_webView->pageScaleFactor()); | 658 EXPECT_EQ(1.0f, webViewHelper.webView()->pageScaleFactor()); |
656 } | 659 } |
657 | 660 |
658 TEST_F(WebFrameTest, SetLoadWithOverviewModeToFalseAndNoWideViewport) | 661 TEST_F(WebFrameTest, SetLoadWithOverviewModeToFalseAndNoWideViewport) |
659 { | 662 { |
660 registerMockedHttpURLLoad("large-div.html"); | 663 registerMockedHttpURLLoad("large-div.html"); |
661 | 664 |
662 FixedLayoutTestWebViewClient client; | 665 FixedLayoutTestWebViewClient client; |
663 client.m_screenInfo.deviceScaleFactor = 1; | 666 client.m_screenInfo.deviceScaleFactor = 1; |
664 int viewportWidth = 640; | 667 int viewportWidth = 640; |
665 int viewportHeight = 480; | 668 int viewportHeight = 480; |
666 | 669 |
667 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "large-div.ht
ml", true, 0, &client); | 670 FrameTestHelpers::WebViewHelper webViewHelper; |
668 m_webView->enableFixedLayoutMode(true); | 671 webViewHelper.initializeAndLoad(m_baseURL + "large-div.html", true, 0, &clie
nt); |
669 m_webView->settings()->setViewportEnabled(true); | 672 webViewHelper.webView()->enableFixedLayoutMode(true); |
670 m_webView->settings()->setLoadWithOverviewMode(false); | 673 webViewHelper.webView()->settings()->setViewportEnabled(true); |
671 m_webView->settings()->setWideViewportQuirkEnabled(true); | 674 webViewHelper.webView()->settings()->setLoadWithOverviewMode(false); |
672 m_webView->settings()->setUseWideViewport(false); | 675 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
673 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 676 webViewHelper.webView()->settings()->setUseWideViewport(false); |
| 677 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
674 | 678 |
675 // The page must be displayed at 100% zoom, despite that it hosts a wide div
element. | 679 // The page must be displayed at 100% zoom, despite that it hosts a wide div
element. |
676 EXPECT_EQ(1.0f, m_webView->pageScaleFactor()); | 680 EXPECT_EQ(1.0f, webViewHelper.webView()->pageScaleFactor()); |
677 } | 681 } |
678 | 682 |
679 TEST_F(WebFrameTest, NoWideViewportIgnoresPageViewportWidth) | 683 TEST_F(WebFrameTest, NoWideViewportIgnoresPageViewportWidth) |
680 { | 684 { |
681 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); | 685 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); |
682 | 686 |
683 FixedLayoutTestWebViewClient client; | 687 FixedLayoutTestWebViewClient client; |
684 client.m_screenInfo.deviceScaleFactor = 1; | 688 client.m_screenInfo.deviceScaleFactor = 1; |
685 int viewportWidth = 640; | 689 int viewportWidth = 640; |
686 int viewportHeight = 480; | 690 int viewportHeight = 480; |
687 | 691 |
688 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-aut
o-initial-scale.html", true, 0, &client); | 692 FrameTestHelpers::WebViewHelper webViewHelper; |
689 m_webView->enableFixedLayoutMode(true); | 693 webViewHelper.initializeAndLoad(m_baseURL + "viewport-auto-initial-scale.htm
l", true, 0, &client); |
690 m_webView->settings()->setViewportEnabled(true); | 694 webViewHelper.webView()->enableFixedLayoutMode(true); |
691 m_webView->settings()->setWideViewportQuirkEnabled(true); | 695 webViewHelper.webView()->settings()->setViewportEnabled(true); |
692 m_webView->settings()->setUseWideViewport(false); | 696 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
693 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 697 webViewHelper.webView()->settings()->setUseWideViewport(false); |
| 698 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
694 | 699 |
695 // The page sets viewport width to 3000, but with UseWideViewport == false i
s must be ignored. | 700 // The page sets viewport width to 3000, but with UseWideViewport == false i
s must be ignored. |
696 EXPECT_EQ(viewportWidth, webViewImpl()->mainFrameImpl()->frameView()->conten
tsSize().width()); | 701 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->contentsSize().width()); |
697 EXPECT_EQ(viewportHeight, webViewImpl()->mainFrameImpl()->frameView()->conte
ntsSize().height()); | 702 EXPECT_EQ(viewportHeight, webViewHelper.webViewImpl()->mainFrameImpl()->fram
eView()->contentsSize().height()); |
698 } | 703 } |
699 | 704 |
700 TEST_F(WebFrameTest, NoWideViewportIgnoresPageViewportWidthButAccountsScale) | 705 TEST_F(WebFrameTest, NoWideViewportIgnoresPageViewportWidthButAccountsScale) |
701 { | 706 { |
702 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); | 707 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); |
703 | 708 |
704 FixedLayoutTestWebViewClient client; | 709 FixedLayoutTestWebViewClient client; |
705 client.m_screenInfo.deviceScaleFactor = 1; | 710 client.m_screenInfo.deviceScaleFactor = 1; |
706 int viewportWidth = 640; | 711 int viewportWidth = 640; |
707 int viewportHeight = 480; | 712 int viewportHeight = 480; |
708 | 713 |
709 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-wid
e-2x-initial-scale.html", true, 0, &client); | 714 FrameTestHelpers::WebViewHelper webViewHelper; |
710 m_webView->enableFixedLayoutMode(true); | 715 webViewHelper.initializeAndLoad(m_baseURL + "viewport-wide-2x-initial-scale.
html", true, 0, &client); |
711 m_webView->settings()->setViewportEnabled(true); | 716 webViewHelper.webView()->enableFixedLayoutMode(true); |
712 m_webView->settings()->setWideViewportQuirkEnabled(true); | 717 webViewHelper.webView()->settings()->setViewportEnabled(true); |
713 m_webView->settings()->setUseWideViewport(false); | 718 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
714 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 719 webViewHelper.webView()->settings()->setUseWideViewport(false); |
| 720 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
715 | 721 |
716 // The page sets viewport width to 3000, but with UseWideViewport == false i
s must be ignored. | 722 // The page sets viewport width to 3000, but with UseWideViewport == false i
s must be ignored. |
717 // While the initial scale specified by the page must be accounted. | 723 // While the initial scale specified by the page must be accounted. |
718 EXPECT_EQ(viewportWidth / 2, webViewImpl()->mainFrameImpl()->frameView()->co
ntentsSize().width()); | 724 EXPECT_EQ(viewportWidth / 2, webViewHelper.webViewImpl()->mainFrameImpl()->f
rameView()->contentsSize().width()); |
719 EXPECT_EQ(viewportHeight / 2, webViewImpl()->mainFrameImpl()->frameView()->c
ontentsSize().height()); | 725 EXPECT_EQ(viewportHeight / 2, webViewHelper.webViewImpl()->mainFrameImpl()->
frameView()->contentsSize().height()); |
720 } | 726 } |
721 | 727 |
722 TEST_F(WebFrameTest, WideViewportSetsTo980WithoutViewportTag) | 728 TEST_F(WebFrameTest, WideViewportSetsTo980WithoutViewportTag) |
723 { | 729 { |
724 registerMockedHttpURLLoad("no_viewport_tag.html"); | 730 registerMockedHttpURLLoad("no_viewport_tag.html"); |
725 | 731 |
726 FixedLayoutTestWebViewClient client; | 732 FixedLayoutTestWebViewClient client; |
727 client.m_screenInfo.deviceScaleFactor = 1; | 733 client.m_screenInfo.deviceScaleFactor = 1; |
728 int viewportWidth = 640; | 734 int viewportWidth = 640; |
729 int viewportHeight = 480; | 735 int viewportHeight = 480; |
730 | 736 |
731 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "no_viewport_
tag.html", true, 0, &client); | 737 FrameTestHelpers::WebViewHelper webViewHelper; |
732 m_webView->enableFixedLayoutMode(true); | 738 webViewHelper.initializeAndLoad(m_baseURL + "no_viewport_tag.html", true, 0,
&client); |
733 m_webView->settings()->setWideViewportQuirkEnabled(true); | 739 webViewHelper.webView()->enableFixedLayoutMode(true); |
734 m_webView->settings()->setUseWideViewport(true); | 740 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
735 m_webView->settings()->setViewportEnabled(true); | 741 webViewHelper.webView()->settings()->setUseWideViewport(true); |
736 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 742 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 743 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
737 | 744 |
738 EXPECT_EQ(980, webViewImpl()->mainFrameImpl()->frameView()->contentsSize().w
idth()); | 745 EXPECT_EQ(980, webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->co
ntentsSize().width()); |
739 EXPECT_EQ(980.0 / viewportWidth * viewportHeight, webViewImpl()->mainFrameIm
pl()->frameView()->contentsSize().height()); | 746 EXPECT_EQ(980.0 / viewportWidth * viewportHeight, webViewHelper.webViewImpl(
)->mainFrameImpl()->frameView()->contentsSize().height()); |
740 } | 747 } |
741 | 748 |
742 TEST_F(WebFrameTest, NoWideViewportAndHeightInMeta) | 749 TEST_F(WebFrameTest, NoWideViewportAndHeightInMeta) |
743 { | 750 { |
744 registerMockedHttpURLLoad("viewport-height-1000.html"); | 751 registerMockedHttpURLLoad("viewport-height-1000.html"); |
745 | 752 |
746 FixedLayoutTestWebViewClient client; | 753 FixedLayoutTestWebViewClient client; |
747 client.m_screenInfo.deviceScaleFactor = 1; | 754 client.m_screenInfo.deviceScaleFactor = 1; |
748 int viewportWidth = 640; | 755 int viewportWidth = 640; |
749 int viewportHeight = 480; | 756 int viewportHeight = 480; |
750 | 757 |
751 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-hei
ght-1000.html", true, 0, &client); | 758 FrameTestHelpers::WebViewHelper webViewHelper; |
752 m_webView->enableFixedLayoutMode(true); | 759 webViewHelper.initializeAndLoad(m_baseURL + "viewport-height-1000.html", tru
e, 0, &client); |
753 m_webView->settings()->setWideViewportQuirkEnabled(true); | 760 webViewHelper.webView()->enableFixedLayoutMode(true); |
754 m_webView->settings()->setUseWideViewport(false); | 761 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
755 m_webView->settings()->setViewportEnabled(true); | 762 webViewHelper.webView()->settings()->setUseWideViewport(false); |
756 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 763 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 764 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
757 | 765 |
758 EXPECT_EQ(viewportWidth, webViewImpl()->mainFrameImpl()->frameView()->conten
tsSize().width()); | 766 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->contentsSize().width()); |
759 } | 767 } |
760 | 768 |
761 TEST_F(WebFrameTest, WideViewportSetsTo980WithAutoWidth) | 769 TEST_F(WebFrameTest, WideViewportSetsTo980WithAutoWidth) |
762 { | 770 { |
763 registerMockedHttpURLLoad("viewport-2x-initial-scale.html"); | 771 registerMockedHttpURLLoad("viewport-2x-initial-scale.html"); |
764 | 772 |
765 FixedLayoutTestWebViewClient client; | 773 FixedLayoutTestWebViewClient client; |
766 client.m_screenInfo.deviceScaleFactor = 1; | 774 client.m_screenInfo.deviceScaleFactor = 1; |
767 int viewportWidth = 640; | 775 int viewportWidth = 640; |
768 int viewportHeight = 480; | 776 int viewportHeight = 480; |
769 | 777 |
770 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-2x-
initial-scale.html", true, 0, &client); | 778 FrameTestHelpers::WebViewHelper webViewHelper; |
771 m_webView->enableFixedLayoutMode(true); | 779 webViewHelper.initializeAndLoad(m_baseURL + "viewport-2x-initial-scale.html"
, true, 0, &client); |
772 m_webView->settings()->setWideViewportQuirkEnabled(true); | 780 webViewHelper.webView()->enableFixedLayoutMode(true); |
773 m_webView->settings()->setUseWideViewport(true); | 781 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
774 m_webView->settings()->setViewportEnabled(true); | 782 webViewHelper.webView()->settings()->setUseWideViewport(true); |
775 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 783 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 784 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
776 | 785 |
777 EXPECT_EQ(980, webViewImpl()->mainFrameImpl()->frameView()->contentsSize().w
idth()); | 786 EXPECT_EQ(980, webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->co
ntentsSize().width()); |
778 EXPECT_EQ(980.0 / viewportWidth * viewportHeight, webViewImpl()->mainFrameIm
pl()->frameView()->contentsSize().height()); | 787 EXPECT_EQ(980.0 / viewportWidth * viewportHeight, webViewHelper.webViewImpl(
)->mainFrameImpl()->frameView()->contentsSize().height()); |
779 } | 788 } |
780 | 789 |
781 TEST_F(WebFrameTest, PageViewportInitialScaleOverridesLoadWithOverviewMode) | 790 TEST_F(WebFrameTest, PageViewportInitialScaleOverridesLoadWithOverviewMode) |
782 { | 791 { |
783 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); | 792 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); |
784 | 793 |
785 FixedLayoutTestWebViewClient client; | 794 FixedLayoutTestWebViewClient client; |
786 client.m_screenInfo.deviceScaleFactor = 1; | 795 client.m_screenInfo.deviceScaleFactor = 1; |
787 int viewportWidth = 640; | 796 int viewportWidth = 640; |
788 int viewportHeight = 480; | 797 int viewportHeight = 480; |
789 | 798 |
790 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-wid
e-2x-initial-scale.html", true, 0, &client); | 799 FrameTestHelpers::WebViewHelper webViewHelper; |
791 m_webView->enableFixedLayoutMode(true); | 800 webViewHelper.initializeAndLoad(m_baseURL + "viewport-wide-2x-initial-scale.
html", true, 0, &client); |
792 m_webView->settings()->setViewportEnabled(true); | 801 webViewHelper.webView()->enableFixedLayoutMode(true); |
793 m_webView->settings()->setLoadWithOverviewMode(false); | 802 webViewHelper.webView()->settings()->setViewportEnabled(true); |
794 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 803 webViewHelper.webView()->settings()->setLoadWithOverviewMode(false); |
| 804 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
795 | 805 |
796 // The page must be displayed at 200% zoom, as specified in its viewport met
a tag. | 806 // The page must be displayed at 200% zoom, as specified in its viewport met
a tag. |
797 EXPECT_EQ(2.0f, m_webView->pageScaleFactor()); | 807 EXPECT_EQ(2.0f, webViewHelper.webView()->pageScaleFactor()); |
798 } | 808 } |
799 | 809 |
800 TEST_F(WebFrameTest, setInitialPageScaleFactorPermanently) | 810 TEST_F(WebFrameTest, setInitialPageScaleFactorPermanently) |
801 { | 811 { |
802 UseMockScrollbarSettings mockScrollbarSettings; | 812 UseMockScrollbarSettings mockScrollbarSettings; |
803 | 813 |
804 registerMockedHttpURLLoad("fixed_layout.html"); | 814 registerMockedHttpURLLoad("fixed_layout.html"); |
805 | 815 |
806 FixedLayoutTestWebViewClient client; | 816 FixedLayoutTestWebViewClient client; |
807 client.m_screenInfo.deviceScaleFactor = 1; | 817 client.m_screenInfo.deviceScaleFactor = 1; |
808 float enforcedPageScaleFactor = 2.0f; | 818 float enforcedPageScaleFactor = 2.0f; |
809 | 819 |
810 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 820 FrameTestHelpers::WebViewHelper webViewHelper; |
811 m_webView->settings()->setWideViewportQuirkEnabled(true); | 821 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
812 m_webView->settings()->setLoadWithOverviewMode(false); | 822 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
813 m_webView->setInitialPageScaleOverride(enforcedPageScaleFactor); | 823 webViewHelper.webView()->settings()->setLoadWithOverviewMode(false); |
814 m_webView->enableFixedLayoutMode(true); | 824 webViewHelper.webView()->setInitialPageScaleOverride(enforcedPageScaleFactor
); |
815 m_webView->settings()->setViewportEnabled(true); | 825 webViewHelper.webView()->enableFixedLayoutMode(true); |
816 m_webView->layout(); | 826 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 827 webViewHelper.webView()->layout(); |
817 | 828 |
818 EXPECT_EQ(enforcedPageScaleFactor, m_webView->pageScaleFactor()); | 829 EXPECT_EQ(enforcedPageScaleFactor, webViewHelper.webView()->pageScaleFactor(
)); |
819 | 830 |
820 int viewportWidth = 640; | 831 int viewportWidth = 640; |
821 int viewportHeight = 480; | 832 int viewportHeight = 480; |
822 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 833 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
823 m_webView->layout(); | 834 webViewHelper.webView()->layout(); |
824 | 835 |
825 EXPECT_EQ(enforcedPageScaleFactor, m_webView->pageScaleFactor()); | 836 EXPECT_EQ(enforcedPageScaleFactor, webViewHelper.webView()->pageScaleFactor(
)); |
826 | 837 |
827 m_webView->setInitialPageScaleOverride(-1); | 838 webViewHelper.webView()->setInitialPageScaleOverride(-1); |
828 m_webView->layout(); | 839 webViewHelper.webView()->layout(); |
829 EXPECT_EQ(1.0, m_webView->pageScaleFactor()); | 840 EXPECT_EQ(1.0, webViewHelper.webView()->pageScaleFactor()); |
830 } | 841 } |
831 | 842 |
832 TEST_F(WebFrameTest, PermanentInitialPageScaleFactorOverridesLoadWithOverviewMod
e) | 843 TEST_F(WebFrameTest, PermanentInitialPageScaleFactorOverridesLoadWithOverviewMod
e) |
833 { | 844 { |
834 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); | 845 registerMockedHttpURLLoad("viewport-auto-initial-scale.html"); |
835 | 846 |
836 FixedLayoutTestWebViewClient client; | 847 FixedLayoutTestWebViewClient client; |
837 client.m_screenInfo.deviceScaleFactor = 1; | 848 client.m_screenInfo.deviceScaleFactor = 1; |
838 int viewportWidth = 640; | 849 int viewportWidth = 640; |
839 int viewportHeight = 480; | 850 int viewportHeight = 480; |
840 float enforcedPageScalePactor = 0.5f; | 851 float enforcedPageScalePactor = 0.5f; |
841 | 852 |
842 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-aut
o-initial-scale.html", true, 0, &client); | 853 FrameTestHelpers::WebViewHelper webViewHelper; |
843 m_webView->enableFixedLayoutMode(true); | 854 webViewHelper.initializeAndLoad(m_baseURL + "viewport-auto-initial-scale.htm
l", true, 0, &client); |
844 m_webView->settings()->setViewportEnabled(true); | 855 webViewHelper.webView()->enableFixedLayoutMode(true); |
845 m_webView->settings()->setLoadWithOverviewMode(false); | 856 webViewHelper.webView()->settings()->setViewportEnabled(true); |
846 m_webView->setInitialPageScaleOverride(enforcedPageScalePactor); | 857 webViewHelper.webView()->settings()->setLoadWithOverviewMode(false); |
847 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 858 webViewHelper.webView()->setInitialPageScaleOverride(enforcedPageScalePactor
); |
| 859 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
848 | 860 |
849 EXPECT_EQ(enforcedPageScalePactor, m_webView->pageScaleFactor()); | 861 EXPECT_EQ(enforcedPageScalePactor, webViewHelper.webView()->pageScaleFactor(
)); |
850 } | 862 } |
851 | 863 |
852 TEST_F(WebFrameTest, PermanentInitialPageScaleFactorOverridesPageViewportInitial
Scale) | 864 TEST_F(WebFrameTest, PermanentInitialPageScaleFactorOverridesPageViewportInitial
Scale) |
853 { | 865 { |
854 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); | 866 registerMockedHttpURLLoad("viewport-wide-2x-initial-scale.html"); |
855 | 867 |
856 FixedLayoutTestWebViewClient client; | 868 FixedLayoutTestWebViewClient client; |
857 client.m_screenInfo.deviceScaleFactor = 1; | 869 client.m_screenInfo.deviceScaleFactor = 1; |
858 int viewportWidth = 640; | 870 int viewportWidth = 640; |
859 int viewportHeight = 480; | 871 int viewportHeight = 480; |
860 float enforcedPageScalePactor = 0.5f; | 872 float enforcedPageScalePactor = 0.5f; |
861 | 873 |
862 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-wid
e-2x-initial-scale.html", true, 0, &client); | 874 FrameTestHelpers::WebViewHelper webViewHelper; |
863 m_webView->enableFixedLayoutMode(true); | 875 webViewHelper.initializeAndLoad(m_baseURL + "viewport-wide-2x-initial-scale.
html", true, 0, &client); |
864 m_webView->settings()->setViewportEnabled(true); | 876 webViewHelper.webView()->enableFixedLayoutMode(true); |
865 m_webView->setInitialPageScaleOverride(enforcedPageScalePactor); | 877 webViewHelper.webView()->settings()->setViewportEnabled(true); |
866 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 878 webViewHelper.webView()->setInitialPageScaleOverride(enforcedPageScalePactor
); |
| 879 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
867 | 880 |
868 EXPECT_EQ(enforcedPageScalePactor, m_webView->pageScaleFactor()); | 881 EXPECT_EQ(enforcedPageScalePactor, webViewHelper.webView()->pageScaleFactor(
)); |
869 } | 882 } |
870 | 883 |
871 TEST_F(WebFrameTest, WideViewportInitialScaleDoesNotExpandFixedLayoutWidth) | 884 TEST_F(WebFrameTest, WideViewportInitialScaleDoesNotExpandFixedLayoutWidth) |
872 { | 885 { |
873 registerMockedHttpURLLoad("viewport-device-0.5x-initial-scale.html"); | 886 registerMockedHttpURLLoad("viewport-device-0.5x-initial-scale.html"); |
874 | 887 |
875 FixedLayoutTestWebViewClient client; | 888 FixedLayoutTestWebViewClient client; |
876 client.m_screenInfo.deviceScaleFactor = 1; | 889 client.m_screenInfo.deviceScaleFactor = 1; |
877 int viewportWidth = 640; | 890 int viewportWidth = 640; |
878 int viewportHeight = 480; | 891 int viewportHeight = 480; |
879 | 892 |
880 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport-dev
ice-0.5x-initial-scale.html", true, 0, &client); | 893 FrameTestHelpers::WebViewHelper webViewHelper; |
881 m_webView->enableFixedLayoutMode(true); | 894 webViewHelper.initializeAndLoad(m_baseURL + "viewport-device-0.5x-initial-sc
ale.html", true, 0, &client); |
882 m_webView->settings()->setViewportEnabled(true); | 895 webViewHelper.webView()->enableFixedLayoutMode(true); |
883 m_webView->settings()->setWideViewportQuirkEnabled(true); | 896 webViewHelper.webView()->settings()->setViewportEnabled(true); |
884 m_webView->settings()->setUseWideViewport(true); | 897 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
885 m_webView->settings()->setViewportMetaLayoutSizeQuirk(true); | 898 webViewHelper.webView()->settings()->setUseWideViewport(true); |
886 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 899 webViewHelper.webView()->settings()->setViewportMetaLayoutSizeQuirk(true); |
| 900 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
887 | 901 |
888 WebViewImpl* webViewImpl = toWebViewImpl(m_webView); | 902 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->fixedLayoutSize().width()); |
889 EXPECT_EQ(viewportWidth, webViewImpl->mainFrameImpl()->frameView()->fixedLay
outSize().width()); | |
890 } | 903 } |
891 | 904 |
892 TEST_F(WebFrameTest, ZeroValuesQuirk) | 905 TEST_F(WebFrameTest, ZeroValuesQuirk) |
893 { | 906 { |
894 registerMockedHttpURLLoad("viewport-zero-values.html"); | 907 registerMockedHttpURLLoad("viewport-zero-values.html"); |
895 | 908 |
896 FixedLayoutTestWebViewClient client; | 909 FixedLayoutTestWebViewClient client; |
897 client.m_screenInfo.deviceScaleFactor = 1; | 910 client.m_screenInfo.deviceScaleFactor = 1; |
898 int viewportWidth = 640; | 911 int viewportWidth = 640; |
899 int viewportHeight = 480; | 912 int viewportHeight = 480; |
900 | 913 |
901 m_webView = FrameTestHelpers::createWebView(true, 0, &client); | 914 FrameTestHelpers::WebViewHelper webViewHelper; |
902 m_webView->enableFixedLayoutMode(true); | 915 webViewHelper.initialize(true, 0, &client); |
903 m_webView->settings()->setViewportEnabled(true); | 916 webViewHelper.webView()->enableFixedLayoutMode(true); |
904 m_webView->settings()->setViewportMetaZeroValuesQuirk(true); | 917 webViewHelper.webView()->settings()->setViewportEnabled(true); |
905 m_webView->settings()->setWideViewportQuirkEnabled(true); | 918 webViewHelper.webView()->settings()->setViewportMetaZeroValuesQuirk(true); |
906 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "viewport-ze
ro-values.html"); | 919 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
| 920 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "viewport-zero-values.html"); |
907 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 921 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
908 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 922 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
909 | 923 |
910 WebViewImpl* webViewImpl = toWebViewImpl(m_webView); | 924 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->fixedLayoutSize().width()); |
911 EXPECT_EQ(viewportWidth, webViewImpl->mainFrameImpl()->frameView()->fixedLay
outSize().width()); | 925 EXPECT_EQ(1.0f, webViewHelper.webView()->pageScaleFactor()); |
912 EXPECT_EQ(1.0f, m_webView->pageScaleFactor()); | |
913 | 926 |
914 m_webView->settings()->setUseWideViewport(true); | 927 webViewHelper.webView()->settings()->setUseWideViewport(true); |
915 m_webView->layout(); | 928 webViewHelper.webView()->layout(); |
916 EXPECT_EQ(viewportWidth, webViewImpl->mainFrameImpl()->frameView()->fixedLay
outSize().width()); | 929 EXPECT_EQ(viewportWidth, webViewHelper.webViewImpl()->mainFrameImpl()->frame
View()->fixedLayoutSize().width()); |
917 EXPECT_EQ(1.0f, m_webView->pageScaleFactor()); | 930 EXPECT_EQ(1.0f, webViewHelper.webView()->pageScaleFactor()); |
918 } | 931 } |
919 | 932 |
920 TEST_F(WebFrameTest, OverflowHiddenDisablesScrolling) | 933 TEST_F(WebFrameTest, OverflowHiddenDisablesScrolling) |
921 { | 934 { |
922 registerMockedHttpURLLoad("body-overflow-hidden.html"); | 935 registerMockedHttpURLLoad("body-overflow-hidden.html"); |
923 | 936 |
924 FixedLayoutTestWebViewClient client; | 937 FixedLayoutTestWebViewClient client; |
925 client.m_screenInfo.deviceScaleFactor = 1; | 938 client.m_screenInfo.deviceScaleFactor = 1; |
926 int viewportWidth = 640; | 939 int viewportWidth = 640; |
927 int viewportHeight = 480; | 940 int viewportHeight = 480; |
928 | 941 |
929 m_webView = FrameTestHelpers::createWebView(true, 0, &client); | 942 FrameTestHelpers::WebViewHelper webViewHelper; |
930 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "body-overfl
ow-hidden.html"); | 943 webViewHelper.initialize(true, 0, &client); |
| 944 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "body-overflow-hidden.html"); |
931 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 945 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
932 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 946 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
933 | 947 |
934 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 948 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
935 EXPECT_FALSE(view->userInputScrollable(WebCore::VerticalScrollbar)); | 949 EXPECT_FALSE(view->userInputScrollable(WebCore::VerticalScrollbar)); |
936 } | 950 } |
937 | 951 |
938 TEST_F(WebFrameTest, IgnoreOverflowHiddenQuirk) | 952 TEST_F(WebFrameTest, IgnoreOverflowHiddenQuirk) |
939 { | 953 { |
940 registerMockedHttpURLLoad("body-overflow-hidden.html"); | 954 registerMockedHttpURLLoad("body-overflow-hidden.html"); |
941 | 955 |
942 FixedLayoutTestWebViewClient client; | 956 FixedLayoutTestWebViewClient client; |
943 client.m_screenInfo.deviceScaleFactor = 1; | 957 client.m_screenInfo.deviceScaleFactor = 1; |
944 int viewportWidth = 640; | 958 int viewportWidth = 640; |
945 int viewportHeight = 480; | 959 int viewportHeight = 480; |
946 | 960 |
947 m_webView = FrameTestHelpers::createWebView(true, 0, &client); | 961 FrameTestHelpers::WebViewHelper webViewHelper; |
948 m_webView->settings()->setIgnoreMainFrameOverflowHiddenQuirk(true); | 962 webViewHelper.initialize(true, 0, &client); |
949 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "body-overfl
ow-hidden.html"); | 963 webViewHelper.webView()->settings()->setIgnoreMainFrameOverflowHiddenQuirk(t
rue); |
| 964 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "body-overflow-hidden.html"); |
950 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 965 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
951 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 966 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
952 | 967 |
953 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 968 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
954 EXPECT_TRUE(view->userInputScrollable(WebCore::VerticalScrollbar)); | 969 EXPECT_TRUE(view->userInputScrollable(WebCore::VerticalScrollbar)); |
955 } | 970 } |
956 | 971 |
957 TEST_F(WebFrameTest, NonZeroValuesNoQuirk) | 972 TEST_F(WebFrameTest, NonZeroValuesNoQuirk) |
958 { | 973 { |
959 registerMockedHttpURLLoad("viewport-nonzero-values.html"); | 974 registerMockedHttpURLLoad("viewport-nonzero-values.html"); |
960 | 975 |
961 FixedLayoutTestWebViewClient client; | 976 FixedLayoutTestWebViewClient client; |
962 client.m_screenInfo.deviceScaleFactor = 1; | 977 client.m_screenInfo.deviceScaleFactor = 1; |
963 int viewportWidth = 640; | 978 int viewportWidth = 640; |
964 int viewportHeight = 480; | 979 int viewportHeight = 480; |
965 float expectedPageScaleFactor = 0.5f; | 980 float expectedPageScaleFactor = 0.5f; |
966 | 981 |
967 m_webView = FrameTestHelpers::createWebView(true, 0, &client); | 982 FrameTestHelpers::WebViewHelper webViewHelper; |
968 m_webView->enableFixedLayoutMode(true); | 983 webViewHelper.initialize(true, 0, &client); |
969 m_webView->settings()->setViewportEnabled(true); | 984 webViewHelper.webView()->enableFixedLayoutMode(true); |
970 m_webView->settings()->setViewportMetaZeroValuesQuirk(true); | 985 webViewHelper.webView()->settings()->setViewportEnabled(true); |
971 m_webView->settings()->setWideViewportQuirkEnabled(true); | 986 webViewHelper.webView()->settings()->setViewportMetaZeroValuesQuirk(true); |
972 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "viewport-no
nzero-values.html"); | 987 webViewHelper.webView()->settings()->setWideViewportQuirkEnabled(true); |
| 988 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "viewport-nonzero-values.html"); |
973 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 989 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
974 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 990 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
975 | 991 |
976 WebViewImpl* webViewImpl = toWebViewImpl(m_webView); | 992 EXPECT_EQ(viewportWidth / expectedPageScaleFactor, webViewHelper.webViewImpl
()->mainFrameImpl()->frameView()->fixedLayoutSize().width()); |
977 EXPECT_EQ(viewportWidth / expectedPageScaleFactor, webViewImpl->mainFrameImp
l()->frameView()->fixedLayoutSize().width()); | 993 EXPECT_EQ(expectedPageScaleFactor, webViewHelper.webView()->pageScaleFactor(
)); |
978 EXPECT_EQ(expectedPageScaleFactor, m_webView->pageScaleFactor()); | |
979 | 994 |
980 m_webView->settings()->setUseWideViewport(true); | 995 webViewHelper.webView()->settings()->setUseWideViewport(true); |
981 m_webView->layout(); | 996 webViewHelper.webView()->layout(); |
982 EXPECT_EQ(viewportWidth / expectedPageScaleFactor, webViewImpl->mainFrameImp
l()->frameView()->fixedLayoutSize().width()); | 997 EXPECT_EQ(viewportWidth / expectedPageScaleFactor, webViewHelper.webViewImpl
()->mainFrameImpl()->frameView()->fixedLayoutSize().width()); |
983 EXPECT_EQ(expectedPageScaleFactor, m_webView->pageScaleFactor()); | 998 EXPECT_EQ(expectedPageScaleFactor, webViewHelper.webView()->pageScaleFactor(
)); |
984 } | 999 } |
985 | 1000 |
986 TEST_F(WebFrameTest, ScaleFactorShouldNotOscillate) | 1001 TEST_F(WebFrameTest, ScaleFactorShouldNotOscillate) |
987 { | 1002 { |
988 registerMockedHttpURLLoad("scale_oscillate.html"); | 1003 registerMockedHttpURLLoad("scale_oscillate.html"); |
989 | 1004 |
990 FixedLayoutTestWebViewClient client; | 1005 FixedLayoutTestWebViewClient client; |
991 client.m_screenInfo.deviceScaleFactor = static_cast<float>(1.325); | 1006 client.m_screenInfo.deviceScaleFactor = static_cast<float>(1.325); |
992 int viewportWidth = 800; | 1007 int viewportWidth = 800; |
993 int viewportHeight = 1057; | 1008 int viewportHeight = 1057; |
994 | 1009 |
995 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "scale_oscill
ate.html", true, 0, &client); | 1010 FrameTestHelpers::WebViewHelper webViewHelper; |
996 m_webView->enableFixedLayoutMode(true); | 1011 webViewHelper.initializeAndLoad(m_baseURL + "scale_oscillate.html", true, 0,
&client); |
997 m_webView->settings()->setViewportEnabled(true); | 1012 webViewHelper.webView()->enableFixedLayoutMode(true); |
998 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1013 webViewHelper.webView()->settings()->setViewportEnabled(true); |
999 m_webView->layout(); | 1014 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1015 webViewHelper.webView()->layout(); |
1000 } | 1016 } |
1001 | 1017 |
1002 TEST_F(WebFrameTest, setPageScaleFactorDoesNotLayout) | 1018 TEST_F(WebFrameTest, setPageScaleFactorDoesNotLayout) |
1003 { | 1019 { |
1004 registerMockedHttpURLLoad("fixed_layout.html"); | 1020 registerMockedHttpURLLoad("fixed_layout.html"); |
1005 | 1021 |
1006 FixedLayoutTestWebViewClient client; | 1022 FixedLayoutTestWebViewClient client; |
1007 client.m_screenInfo.deviceScaleFactor = 1; | 1023 client.m_screenInfo.deviceScaleFactor = 1; |
1008 // Small viewport to ensure there are always scrollbars. | 1024 // Small viewport to ensure there are always scrollbars. |
1009 int viewportWidth = 64; | 1025 int viewportWidth = 64; |
1010 int viewportHeight = 48; | 1026 int viewportHeight = 48; |
1011 | 1027 |
1012 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 1028 FrameTestHelpers::WebViewHelper webViewHelper; |
1013 m_webView->enableFixedLayoutMode(true); | 1029 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
1014 m_webView->settings()->setViewportEnabled(true); | 1030 webViewHelper.webView()->enableFixedLayoutMode(true); |
1015 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1031 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1016 m_webView->layout(); | 1032 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1033 webViewHelper.webView()->layout(); |
1017 | 1034 |
1018 int prevLayoutCount = webViewImpl()->mainFrameImpl()->frameView()->layoutCou
nt(); | 1035 int prevLayoutCount = webViewHelper.webViewImpl()->mainFrameImpl()->frameVie
w()->layoutCount(); |
1019 webViewImpl()->setPageScaleFactor(3, WebPoint()); | 1036 webViewHelper.webViewImpl()->setPageScaleFactor(3, WebPoint()); |
1020 EXPECT_FALSE(webViewImpl()->mainFrameImpl()->frameView()->needsLayout()); | 1037 EXPECT_FALSE(webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->need
sLayout()); |
1021 EXPECT_EQ(prevLayoutCount, webViewImpl()->mainFrameImpl()->frameView()->layo
utCount()); | 1038 EXPECT_EQ(prevLayoutCount, webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView()->layoutCount()); |
1022 } | 1039 } |
1023 | 1040 |
1024 TEST_F(WebFrameTest, setPageScaleFactorWithOverlayScrollbarsDoesNotLayout) | 1041 TEST_F(WebFrameTest, setPageScaleFactorWithOverlayScrollbarsDoesNotLayout) |
1025 { | 1042 { |
1026 UseMockScrollbarSettings mockScrollbarSettings; | 1043 UseMockScrollbarSettings mockScrollbarSettings; |
1027 | 1044 |
1028 registerMockedHttpURLLoad("fixed_layout.html"); | 1045 registerMockedHttpURLLoad("fixed_layout.html"); |
1029 | 1046 |
1030 FixedLayoutTestWebViewClient client; | 1047 FixedLayoutTestWebViewClient client; |
1031 client.m_screenInfo.deviceScaleFactor = 1; | 1048 client.m_screenInfo.deviceScaleFactor = 1; |
1032 int viewportWidth = 640; | 1049 int viewportWidth = 640; |
1033 int viewportHeight = 480; | 1050 int viewportHeight = 480; |
1034 | 1051 |
1035 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 1052 FrameTestHelpers::WebViewHelper webViewHelper; |
1036 m_webView->enableFixedLayoutMode(true); | 1053 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
1037 m_webView->settings()->setViewportEnabled(true); | 1054 webViewHelper.webView()->enableFixedLayoutMode(true); |
1038 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1055 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1039 m_webView->layout(); | 1056 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1057 webViewHelper.webView()->layout(); |
1040 | 1058 |
1041 int prevLayoutCount = webViewImpl()->mainFrameImpl()->frameView()->layoutCou
nt(); | 1059 int prevLayoutCount = webViewHelper.webViewImpl()->mainFrameImpl()->frameVie
w()->layoutCount(); |
1042 webViewImpl()->setPageScaleFactor(30, WebPoint()); | 1060 webViewHelper.webViewImpl()->setPageScaleFactor(30, WebPoint()); |
1043 EXPECT_FALSE(webViewImpl()->mainFrameImpl()->frameView()->needsLayout()); | 1061 EXPECT_FALSE(webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->need
sLayout()); |
1044 EXPECT_EQ(prevLayoutCount, webViewImpl()->mainFrameImpl()->frameView()->layo
utCount()); | 1062 EXPECT_EQ(prevLayoutCount, webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView()->layoutCount()); |
1045 | 1063 |
1046 } | 1064 } |
1047 | 1065 |
1048 TEST_F(WebFrameTest, setPageScaleFactorBeforeFrameHasView) | 1066 TEST_F(WebFrameTest, setPageScaleFactorBeforeFrameHasView) |
1049 { | 1067 { |
1050 registerMockedHttpURLLoad("fixed_layout.html"); | 1068 registerMockedHttpURLLoad("fixed_layout.html"); |
1051 | 1069 |
1052 float pageScaleFactor = 3; | 1070 float pageScaleFactor = 3; |
1053 m_webView = FrameTestHelpers::createWebViewAndLoad("about:html", true, 0, 0)
; | 1071 FrameTestHelpers::WebViewHelper webViewHelper; |
1054 m_webView->setPageScaleFactor(pageScaleFactor, WebPoint()); | 1072 webViewHelper.initializeAndLoad("about:html", true, 0, 0); |
| 1073 webViewHelper.webView()->setPageScaleFactor(pageScaleFactor, WebPoint()); |
1055 | 1074 |
1056 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "fixed_layou
t.html"); | 1075 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "fixed_layout.html"); |
1057 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 1076 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1058 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 1077 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
1059 EXPECT_EQ(pageScaleFactor, view->visibleContentScaleFactor()); | 1078 EXPECT_EQ(pageScaleFactor, view->visibleContentScaleFactor()); |
1060 } | 1079 } |
1061 | 1080 |
1062 TEST_F(WebFrameTest, pageScaleFactorWrittenToHistoryItem) | 1081 TEST_F(WebFrameTest, pageScaleFactorWrittenToHistoryItem) |
1063 { | 1082 { |
1064 registerMockedHttpURLLoad("fixed_layout.html"); | 1083 registerMockedHttpURLLoad("fixed_layout.html"); |
1065 | 1084 |
1066 FixedLayoutTestWebViewClient client; | 1085 FixedLayoutTestWebViewClient client; |
1067 client.m_screenInfo.deviceScaleFactor = 1; | 1086 client.m_screenInfo.deviceScaleFactor = 1; |
1068 int viewportWidth = 640; | 1087 int viewportWidth = 640; |
1069 int viewportHeight = 480; | 1088 int viewportHeight = 480; |
1070 | 1089 |
1071 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 1090 FrameTestHelpers::WebViewHelper webViewHelper; |
1072 m_webView->enableFixedLayoutMode(true); | 1091 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
1073 m_webView->settings()->setViewportEnabled(true); | 1092 webViewHelper.webView()->enableFixedLayoutMode(true); |
1074 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1093 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1075 m_webView->layout(); | 1094 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1095 webViewHelper.webView()->layout(); |
1076 | 1096 |
1077 m_webView->setPageScaleFactor(3, WebPoint()); | 1097 webViewHelper.webView()->setPageScaleFactor(3, WebPoint()); |
1078 webViewImpl()->page()->mainFrame()->loader()->history()->saveDocumentAndScro
llState(); | 1098 webViewHelper.webViewImpl()->page()->mainFrame()->loader()->history()->saveD
ocumentAndScrollState(); |
1079 m_webView->setPageScaleFactor(1, WebPoint()); | 1099 webViewHelper.webView()->setPageScaleFactor(1, WebPoint()); |
1080 webViewImpl()->page()->mainFrame()->loader()->history()->restoreScrollPositi
onAndViewState(); | 1100 webViewHelper.webViewImpl()->page()->mainFrame()->loader()->history()->resto
reScrollPositionAndViewState(); |
1081 EXPECT_EQ(3, m_webView->pageScaleFactor()); | 1101 EXPECT_EQ(3, webViewHelper.webView()->pageScaleFactor()); |
1082 } | 1102 } |
1083 | 1103 |
1084 TEST_F(WebFrameTest, pageScaleFactorShrinksViewport) | 1104 TEST_F(WebFrameTest, pageScaleFactorShrinksViewport) |
1085 { | 1105 { |
1086 registerMockedHttpURLLoad("large-div.html"); | 1106 registerMockedHttpURLLoad("large-div.html"); |
1087 | 1107 |
1088 FixedLayoutTestWebViewClient client; | 1108 FixedLayoutTestWebViewClient client; |
1089 client.m_screenInfo.deviceScaleFactor = 1; | 1109 client.m_screenInfo.deviceScaleFactor = 1; |
1090 // Small viewport to ensure there are always scrollbars. | 1110 // Small viewport to ensure there are always scrollbars. |
1091 int viewportWidth = 64; | 1111 int viewportWidth = 64; |
1092 int viewportHeight = 48; | 1112 int viewportHeight = 48; |
1093 | 1113 |
1094 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "large-div.ht
ml", true, 0, &client); | 1114 FrameTestHelpers::WebViewHelper webViewHelper; |
1095 m_webView->enableFixedLayoutMode(true); | 1115 webViewHelper.initializeAndLoad(m_baseURL + "large-div.html", true, 0, &clie
nt); |
1096 m_webView->settings()->setViewportEnabled(true); | 1116 webViewHelper.webView()->enableFixedLayoutMode(true); |
1097 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1117 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1098 m_webView->layout(); | 1118 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1119 webViewHelper.webView()->layout(); |
1099 | 1120 |
1100 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 1121 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
1101 int viewportWidthMinusScrollbar = viewportWidth - (view->verticalScrollbar()
->isOverlayScrollbar() ? 0 : 15); | 1122 int viewportWidthMinusScrollbar = viewportWidth - (view->verticalScrollbar()
->isOverlayScrollbar() ? 0 : 15); |
1102 int viewportHeightMinusScrollbar = viewportHeight - (view->horizontalScrollb
ar()->isOverlayScrollbar() ? 0 : 15); | 1123 int viewportHeightMinusScrollbar = viewportHeight - (view->horizontalScrollb
ar()->isOverlayScrollbar() ? 0 : 15); |
1103 | 1124 |
1104 m_webView->setPageScaleFactor(2, WebPoint()); | 1125 webViewHelper.webView()->setPageScaleFactor(2, WebPoint()); |
1105 | 1126 |
1106 WebCore::IntSize unscaledSize = view->unscaledVisibleContentSize(WebCore::Sc
rollableArea::IncludeScrollbars); | 1127 WebCore::IntSize unscaledSize = view->unscaledVisibleContentSize(WebCore::Sc
rollableArea::IncludeScrollbars); |
1107 EXPECT_EQ(viewportWidth, unscaledSize.width()); | 1128 EXPECT_EQ(viewportWidth, unscaledSize.width()); |
1108 EXPECT_EQ(viewportHeight, unscaledSize.height()); | 1129 EXPECT_EQ(viewportHeight, unscaledSize.height()); |
1109 | 1130 |
1110 WebCore::IntSize unscaledSizeMinusScrollbar = view->unscaledVisibleContentSi
ze(WebCore::ScrollableArea::ExcludeScrollbars); | 1131 WebCore::IntSize unscaledSizeMinusScrollbar = view->unscaledVisibleContentSi
ze(WebCore::ScrollableArea::ExcludeScrollbars); |
1111 EXPECT_EQ(viewportWidthMinusScrollbar, unscaledSizeMinusScrollbar.width()); | 1132 EXPECT_EQ(viewportWidthMinusScrollbar, unscaledSizeMinusScrollbar.width()); |
1112 EXPECT_EQ(viewportHeightMinusScrollbar, unscaledSizeMinusScrollbar.height())
; | 1133 EXPECT_EQ(viewportHeightMinusScrollbar, unscaledSizeMinusScrollbar.height())
; |
1113 | 1134 |
1114 WebCore::IntSize scaledSize = view->visibleContentRect().size(); | 1135 WebCore::IntSize scaledSize = view->visibleContentRect().size(); |
1115 EXPECT_EQ(ceil(viewportWidthMinusScrollbar / 2.0), scaledSize.width()); | 1136 EXPECT_EQ(ceil(viewportWidthMinusScrollbar / 2.0), scaledSize.width()); |
1116 EXPECT_EQ(ceil(viewportHeightMinusScrollbar / 2.0), scaledSize.height()); | 1137 EXPECT_EQ(ceil(viewportHeightMinusScrollbar / 2.0), scaledSize.height()); |
1117 } | 1138 } |
1118 | 1139 |
1119 TEST_F(WebFrameTest, pageScaleFactorDoesNotApplyCssTransform) | 1140 TEST_F(WebFrameTest, pageScaleFactorDoesNotApplyCssTransform) |
1120 { | 1141 { |
1121 registerMockedHttpURLLoad("fixed_layout.html"); | 1142 registerMockedHttpURLLoad("fixed_layout.html"); |
1122 | 1143 |
1123 FixedLayoutTestWebViewClient client; | 1144 FixedLayoutTestWebViewClient client; |
1124 client.m_screenInfo.deviceScaleFactor = 1; | 1145 client.m_screenInfo.deviceScaleFactor = 1; |
1125 int viewportWidth = 640; | 1146 int viewportWidth = 640; |
1126 int viewportHeight = 480; | 1147 int viewportHeight = 480; |
1127 | 1148 |
1128 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 1149 FrameTestHelpers::WebViewHelper webViewHelper; |
1129 m_webView->enableFixedLayoutMode(true); | 1150 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
1130 m_webView->settings()->setViewportEnabled(true); | 1151 webViewHelper.webView()->enableFixedLayoutMode(true); |
1131 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1152 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1132 m_webView->layout(); | 1153 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1154 webViewHelper.webView()->layout(); |
1133 | 1155 |
1134 m_webView->setPageScaleFactor(2, WebPoint()); | 1156 webViewHelper.webView()->setPageScaleFactor(2, WebPoint()); |
1135 | 1157 |
1136 EXPECT_EQ(980, webViewImpl()->page()->mainFrame()->contentRenderer()->unscal
edDocumentRect().width()); | 1158 EXPECT_EQ(980, webViewHelper.webViewImpl()->page()->mainFrame()->contentRend
erer()->unscaledDocumentRect().width()); |
1137 EXPECT_EQ(980, webViewImpl()->mainFrameImpl()->frameView()->contentsSize().w
idth()); | 1159 EXPECT_EQ(980, webViewHelper.webViewImpl()->mainFrameImpl()->frameView()->co
ntentsSize().width()); |
1138 } | 1160 } |
1139 | 1161 |
1140 TEST_F(WebFrameTest, targetDensityDpiHigh) | 1162 TEST_F(WebFrameTest, targetDensityDpiHigh) |
1141 { | 1163 { |
1142 UseMockScrollbarSettings mockScrollbarSettings; | 1164 UseMockScrollbarSettings mockScrollbarSettings; |
1143 registerMockedHttpURLLoad("viewport-target-densitydpi-high.html"); | 1165 registerMockedHttpURLLoad("viewport-target-densitydpi-high.html"); |
1144 | 1166 |
1145 FixedLayoutTestWebViewClient client; | 1167 FixedLayoutTestWebViewClient client; |
1146 // high-dpi = 240 | 1168 // high-dpi = 240 |
1147 float targetDpi = 240.0f; | 1169 float targetDpi = 240.0f; |
1148 float deviceScaleFactors[] = { 1.0f, 4.0f / 3.0f, 2.0f }; | 1170 float deviceScaleFactors[] = { 1.0f, 4.0f / 3.0f, 2.0f }; |
1149 int viewportWidth = 640; | 1171 int viewportWidth = 640; |
1150 int viewportHeight = 480; | 1172 int viewportHeight = 480; |
1151 | 1173 |
1152 for (size_t i = 0; i < ARRAY_SIZE(deviceScaleFactors); ++i) { | 1174 for (size_t i = 0; i < ARRAY_SIZE(deviceScaleFactors); ++i) { |
1153 float deviceScaleFactor = deviceScaleFactors[i]; | 1175 float deviceScaleFactor = deviceScaleFactors[i]; |
1154 float deviceDpi = deviceScaleFactor * 160.0f; | 1176 float deviceDpi = deviceScaleFactor * 160.0f; |
1155 client.m_screenInfo.deviceScaleFactor = deviceScaleFactor; | 1177 client.m_screenInfo.deviceScaleFactor = deviceScaleFactor; |
1156 | 1178 |
1157 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport
-target-densitydpi-high.html", true, 0, &client); | 1179 FrameTestHelpers::WebViewHelper webViewHelper; |
1158 m_webView->enableFixedLayoutMode(true); | 1180 webViewHelper.initializeAndLoad(m_baseURL + "viewport-target-densitydpi-high
.html", true, 0, &client); |
1159 m_webView->settings()->setViewportEnabled(true); | 1181 webViewHelper.webView()->enableFixedLayoutMode(true); |
1160 m_webView->settings()->setSupportDeprecatedTargetDensityDPI(true); | 1182 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1161 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1183 webViewHelper.webView()->settings()->setSupportDeprecatedTargetDensityDP
I(true); |
| 1184 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1162 | 1185 |
1163 // We need to account for the fact that logical pixels are unconditional
ly multiplied by deviceScaleFactor to produce | 1186 // We need to account for the fact that logical pixels are unconditional
ly multiplied by deviceScaleFactor to produce |
1164 // physical pixels. | 1187 // physical pixels. |
1165 float densityDpiScaleRatio = deviceScaleFactor * targetDpi / deviceDpi; | 1188 float densityDpiScaleRatio = deviceScaleFactor * targetDpi / deviceDpi; |
1166 EXPECT_NEAR(viewportWidth * densityDpiScaleRatio, m_webView->fixedLayout
Size().width, 1.0f); | 1189 EXPECT_NEAR(viewportWidth * densityDpiScaleRatio, webViewHelper.webView(
)->fixedLayoutSize().width, 1.0f); |
1167 EXPECT_NEAR(viewportHeight * densityDpiScaleRatio, m_webView->fixedLayou
tSize().height, 1.0f); | 1190 EXPECT_NEAR(viewportHeight * densityDpiScaleRatio, webViewHelper.webView
()->fixedLayoutSize().height, 1.0f); |
1168 EXPECT_NEAR(1.0f / densityDpiScaleRatio, m_webView->pageScaleFactor(), 0
.01f); | 1191 EXPECT_NEAR(1.0f / densityDpiScaleRatio, webViewHelper.webView()->pageSc
aleFactor(), 0.01f); |
1169 | |
1170 m_webView->close(); | |
1171 m_webView = 0; | |
1172 } | 1192 } |
1173 } | 1193 } |
1174 | 1194 |
1175 TEST_F(WebFrameTest, targetDensityDpiDevice) | 1195 TEST_F(WebFrameTest, targetDensityDpiDevice) |
1176 { | 1196 { |
1177 UseMockScrollbarSettings mockScrollbarSettings; | 1197 UseMockScrollbarSettings mockScrollbarSettings; |
1178 registerMockedHttpURLLoad("viewport-target-densitydpi-device.html"); | 1198 registerMockedHttpURLLoad("viewport-target-densitydpi-device.html"); |
1179 | 1199 |
1180 float deviceScaleFactors[] = { 1.0f, 4.0f / 3.0f, 2.0f }; | 1200 float deviceScaleFactors[] = { 1.0f, 4.0f / 3.0f, 2.0f }; |
1181 | 1201 |
1182 FixedLayoutTestWebViewClient client; | 1202 FixedLayoutTestWebViewClient client; |
1183 int viewportWidth = 640; | 1203 int viewportWidth = 640; |
1184 int viewportHeight = 480; | 1204 int viewportHeight = 480; |
1185 | 1205 |
1186 for (size_t i = 0; i < ARRAY_SIZE(deviceScaleFactors); ++i) { | 1206 for (size_t i = 0; i < ARRAY_SIZE(deviceScaleFactors); ++i) { |
1187 client.m_screenInfo.deviceScaleFactor = deviceScaleFactors[i]; | 1207 client.m_screenInfo.deviceScaleFactor = deviceScaleFactors[i]; |
1188 | 1208 |
1189 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "viewport
-target-densitydpi-device.html", true, 0, &client); | 1209 FrameTestHelpers::WebViewHelper webViewHelper; |
1190 m_webView->enableFixedLayoutMode(true); | 1210 webViewHelper.initializeAndLoad(m_baseURL + "viewport-target-densitydpi-devi
ce.html", true, 0, &client); |
1191 m_webView->settings()->setViewportEnabled(true); | 1211 webViewHelper.webView()->enableFixedLayoutMode(true); |
1192 m_webView->settings()->setSupportDeprecatedTargetDensityDPI(true); | 1212 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1193 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1213 webViewHelper.webView()->settings()->setSupportDeprecatedTargetDensityDP
I(true); |
| 1214 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1194 | 1215 |
1195 EXPECT_NEAR(viewportWidth * client.m_screenInfo.deviceScaleFactor, m_web
View->fixedLayoutSize().width, 1.0f); | 1216 EXPECT_NEAR(viewportWidth * client.m_screenInfo.deviceScaleFactor, webVi
ewHelper.webView()->fixedLayoutSize().width, 1.0f); |
1196 EXPECT_NEAR(viewportHeight * client.m_screenInfo.deviceScaleFactor, m_we
bView->fixedLayoutSize().height, 1.0f); | 1217 EXPECT_NEAR(viewportHeight * client.m_screenInfo.deviceScaleFactor, webV
iewHelper.webView()->fixedLayoutSize().height, 1.0f); |
1197 EXPECT_NEAR(1.0f / client.m_screenInfo.deviceScaleFactor, m_webView->pag
eScaleFactor(), 0.01f); | 1218 EXPECT_NEAR(1.0f / client.m_screenInfo.deviceScaleFactor, webViewHelper.
webView()->pageScaleFactor(), 0.01f); |
1198 | |
1199 m_webView->close(); | |
1200 m_webView = 0; | |
1201 } | 1219 } |
1202 } | 1220 } |
1203 | 1221 |
1204 class WebFrameResizeTest : public WebFrameTest { | 1222 class WebFrameResizeTest : public WebFrameTest { |
1205 protected: | 1223 protected: |
1206 | 1224 |
1207 static WebCore::FloatSize computeRelativeOffset(const WebCore::IntPoint& abs
oluteOffset, const WebCore::LayoutRect& rect) | 1225 static WebCore::FloatSize computeRelativeOffset(const WebCore::IntPoint& abs
oluteOffset, const WebCore::LayoutRect& rect) |
1208 { | 1226 { |
1209 WebCore::FloatSize relativeOffset = WebCore::FloatPoint(absoluteOffset)
- rect.location(); | 1227 WebCore::FloatSize relativeOffset = WebCore::FloatPoint(absoluteOffset)
- rect.location(); |
1210 relativeOffset.scale(1.f / rect.width(), 1.f / rect.height()); | 1228 relativeOffset.scale(1.f / rect.width(), 1.f / rect.height()); |
1211 return relativeOffset; | 1229 return relativeOffset; |
1212 } | 1230 } |
1213 | 1231 |
1214 void testResizeYieldsCorrectScrollAndScale(const char* url, | 1232 void testResizeYieldsCorrectScrollAndScale(const char* url, |
1215 const float initialPageScaleFacto
r, | 1233 const float initialPageScaleFacto
r, |
1216 const WebSize scrollOffset, | 1234 const WebSize scrollOffset, |
1217 const WebSize viewportSize, | 1235 const WebSize viewportSize, |
1218 const bool shouldScaleRelativeToV
iewportWidth) { | 1236 const bool shouldScaleRelativeToV
iewportWidth) { |
1219 registerMockedHttpURLLoad(url); | 1237 registerMockedHttpURLLoad(url); |
1220 | 1238 |
1221 const float aspectRatio = static_cast<float>(viewportSize.width) / viewp
ortSize.height; | 1239 const float aspectRatio = static_cast<float>(viewportSize.width) / viewp
ortSize.height; |
1222 | 1240 |
1223 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + url, true
); | 1241 FrameTestHelpers::WebViewHelper webViewHelper; |
1224 m_webView->settings()->setViewportEnabled(true); | 1242 webViewHelper.initializeAndLoad(m_baseURL + url, true); |
1225 m_webView->enableFixedLayoutMode(true); | 1243 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 1244 webViewHelper.webView()->enableFixedLayoutMode(true); |
1226 | 1245 |
1227 // Origin scrollOffsets preserved under resize. | 1246 // Origin scrollOffsets preserved under resize. |
1228 { | 1247 { |
1229 webViewImpl()->resize(WebSize(viewportSize.width, viewportSize.heigh
t)); | 1248 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.width, view
portSize.height)); |
1230 webViewImpl()->setPageScaleFactor(initialPageScaleFactor, WebPoint()
); | 1249 webViewHelper.webViewImpl()->setPageScaleFactor(initialPageScaleFact
or, WebPoint()); |
1231 ASSERT_EQ(viewportSize, webViewImpl()->size()); | 1250 ASSERT_EQ(viewportSize, webViewHelper.webViewImpl()->size()); |
1232 ASSERT_EQ(initialPageScaleFactor, webViewImpl()->pageScaleFactor()); | 1251 ASSERT_EQ(initialPageScaleFactor, webViewHelper.webViewImpl()->pageS
caleFactor()); |
1233 webViewImpl()->resize(WebSize(viewportSize.height, viewportSize.widt
h)); | 1252 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.height, vie
wportSize.width)); |
1234 float expectedPageScaleFactor = initialPageScaleFactor * (shouldScal
eRelativeToViewportWidth ? 1 / aspectRatio : 1); | 1253 float expectedPageScaleFactor = initialPageScaleFactor * (shouldScal
eRelativeToViewportWidth ? 1 / aspectRatio : 1); |
1235 EXPECT_NEAR(expectedPageScaleFactor, webViewImpl()->pageScaleFactor(
), 0.05f); | 1254 EXPECT_NEAR(expectedPageScaleFactor, webViewHelper.webViewImpl()->pa
geScaleFactor(), 0.05f); |
1236 EXPECT_EQ(WebSize(), webViewImpl()->mainFrame()->scrollOffset()); | 1255 EXPECT_EQ(WebSize(), webViewHelper.webViewImpl()->mainFrame()->scrol
lOffset()); |
1237 } | 1256 } |
1238 | 1257 |
1239 // Resizing just the height should not affect pageScaleFactor or scrollO
ffset. | 1258 // Resizing just the height should not affect pageScaleFactor or scrollO
ffset. |
1240 { | 1259 { |
1241 webViewImpl()->resize(WebSize(viewportSize.width, viewportSize.heigh
t)); | 1260 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.width, view
portSize.height)); |
1242 webViewImpl()->setPageScaleFactor(initialPageScaleFactor, WebPoint(s
crollOffset.width, scrollOffset.height)); | 1261 webViewHelper.webViewImpl()->setPageScaleFactor(initialPageScaleFact
or, WebPoint(scrollOffset.width, scrollOffset.height)); |
1243 webViewImpl()->layout(); | 1262 webViewHelper.webViewImpl()->layout(); |
1244 const WebSize expectedScrollOffset = webViewImpl()->mainFrame()->scr
ollOffset(); | 1263 const WebSize expectedScrollOffset = webViewHelper.webViewImpl()->ma
inFrame()->scrollOffset(); |
1245 webViewImpl()->resize(WebSize(viewportSize.width, viewportSize.heigh
t * 0.8f)); | 1264 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.width, view
portSize.height * 0.8f)); |
1246 EXPECT_EQ(initialPageScaleFactor, webViewImpl()->pageScaleFactor()); | 1265 EXPECT_EQ(initialPageScaleFactor, webViewHelper.webViewImpl()->pageS
caleFactor()); |
1247 EXPECT_EQ(expectedScrollOffset, webViewImpl()->mainFrame()->scrollOf
fset()); | 1266 EXPECT_EQ(expectedScrollOffset, webViewHelper.webViewImpl()->mainFra
me()->scrollOffset()); |
1248 webViewImpl()->resize(WebSize(viewportSize.width, viewportSize.heigh
t * 0.8f)); | 1267 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.width, view
portSize.height * 0.8f)); |
1249 EXPECT_EQ(initialPageScaleFactor, webViewImpl()->pageScaleFactor()); | 1268 EXPECT_EQ(initialPageScaleFactor, webViewHelper.webViewImpl()->pageS
caleFactor()); |
1250 EXPECT_EQ(expectedScrollOffset, webViewImpl()->mainFrame()->scrollOf
fset()); | 1269 EXPECT_EQ(expectedScrollOffset, webViewHelper.webViewImpl()->mainFra
me()->scrollOffset()); |
1251 } | 1270 } |
1252 | 1271 |
1253 // Generic resize preserves scrollOffset relative to anchor node located | 1272 // Generic resize preserves scrollOffset relative to anchor node located |
1254 // the top center of the screen. | 1273 // the top center of the screen. |
1255 { | 1274 { |
1256 webViewImpl()->resize(WebSize(viewportSize.height, viewportSize.widt
h)); | 1275 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.height, vie
wportSize.width)); |
1257 float pageScaleFactor = webViewImpl()->pageScaleFactor(); | 1276 float pageScaleFactor = webViewHelper.webViewImpl()->pageScaleFactor
(); |
1258 webViewImpl()->resize(WebSize(viewportSize.width, viewportSize.heigh
t)); | 1277 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.width, view
portSize.height)); |
1259 float expectedPageScaleFactor = pageScaleFactor * (shouldScaleRelati
veToViewportWidth ? aspectRatio : 1); | 1278 float expectedPageScaleFactor = pageScaleFactor * (shouldScaleRelati
veToViewportWidth ? aspectRatio : 1); |
1260 EXPECT_NEAR(expectedPageScaleFactor, webViewImpl()->pageScaleFactor(
), 0.05f); | 1279 EXPECT_NEAR(expectedPageScaleFactor, webViewHelper.webViewImpl()->pa
geScaleFactor(), 0.05f); |
1261 webViewImpl()->mainFrame()->setScrollOffset(scrollOffset); | 1280 webViewHelper.webViewImpl()->mainFrame()->setScrollOffset(scrollOffs
et); |
1262 | 1281 |
1263 WebCore::IntPoint anchorPoint = WebCore::IntPoint(scrollOffset) + We
bCore::IntPoint(viewportSize.width / 2, 0); | 1282 WebCore::IntPoint anchorPoint = WebCore::IntPoint(scrollOffset) + We
bCore::IntPoint(viewportSize.width / 2, 0); |
1264 RefPtr<WebCore::Node> anchorNode = webViewImpl()->mainFrameImpl()->f
rame()->eventHandler()->hitTestResultAtPoint(anchorPoint, HitTestRequest::ReadOn
ly | HitTestRequest::Active | HitTestRequest::DisallowShadowContent).innerNode()
; | 1283 RefPtr<WebCore::Node> anchorNode = webViewHelper.webViewImpl()->main
FrameImpl()->frame()->eventHandler()->hitTestResultAtPoint(anchorPoint, HitTestR
equest::ReadOnly | HitTestRequest::Active | HitTestRequest::DisallowShadowConten
t).innerNode(); |
1265 ASSERT(anchorNode); | 1284 ASSERT(anchorNode); |
1266 | 1285 |
1267 pageScaleFactor = webViewImpl()->pageScaleFactor(); | 1286 pageScaleFactor = webViewHelper.webViewImpl()->pageScaleFactor(); |
1268 const WebCore::FloatSize preResizeRelativeOffset | 1287 const WebCore::FloatSize preResizeRelativeOffset |
1269 = computeRelativeOffset(anchorPoint, anchorNode->boundingBox()); | 1288 = computeRelativeOffset(anchorPoint, anchorNode->boundingBox()); |
1270 webViewImpl()->resize(WebSize(viewportSize.height, viewportSize.widt
h)); | 1289 webViewHelper.webViewImpl()->resize(WebSize(viewportSize.height, vie
wportSize.width)); |
1271 WebCore::IntPoint newAnchorPoint = WebCore::IntPoint(webViewImpl()->
mainFrame()->scrollOffset()) + WebCore::IntPoint(viewportSize.height / 2, 0); | 1290 WebCore::IntPoint newAnchorPoint = WebCore::IntPoint(webViewHelper.w
ebViewImpl()->mainFrame()->scrollOffset()) + WebCore::IntPoint(viewportSize.heig
ht / 2, 0); |
1272 const WebCore::FloatSize postResizeRelativeOffset | 1291 const WebCore::FloatSize postResizeRelativeOffset |
1273 = computeRelativeOffset(newAnchorPoint, anchorNode->boundingBox(
)); | 1292 = computeRelativeOffset(newAnchorPoint, anchorNode->boundingBox(
)); |
1274 EXPECT_NEAR(preResizeRelativeOffset.width(), postResizeRelativeOffse
t.width(), 0.15f); | 1293 EXPECT_NEAR(preResizeRelativeOffset.width(), postResizeRelativeOffse
t.width(), 0.15f); |
1275 expectedPageScaleFactor = pageScaleFactor * (shouldScaleRelativeToVi
ewportWidth ? 1 / aspectRatio : 1); | 1294 expectedPageScaleFactor = pageScaleFactor * (shouldScaleRelativeToVi
ewportWidth ? 1 / aspectRatio : 1); |
1276 EXPECT_NEAR(expectedPageScaleFactor, webViewImpl()->pageScaleFactor(
), 0.05f); | 1295 EXPECT_NEAR(expectedPageScaleFactor, webViewHelper.webViewImpl()->pa
geScaleFactor(), 0.05f); |
1277 } | 1296 } |
1278 } | 1297 } |
1279 }; | 1298 }; |
1280 | 1299 |
1281 TEST_F(WebFrameResizeTest, ResizeYieldsCorrectScrollAndScaleForWidthEqualsDevice
Width) | 1300 TEST_F(WebFrameResizeTest, ResizeYieldsCorrectScrollAndScaleForWidthEqualsDevice
Width) |
1282 { | 1301 { |
1283 // With width=device-width, pageScaleFactor is preserved across resizes as | 1302 // With width=device-width, pageScaleFactor is preserved across resizes as |
1284 // long as the content adjusts according to the device-width. | 1303 // long as the content adjusts according to the device-width. |
1285 const char* url = "resize_scroll_mobile.html"; | 1304 const char* url = "resize_scroll_mobile.html"; |
1286 const float initialPageScaleFactor = 1; | 1305 const float initialPageScaleFactor = 1; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 TEST_F(WebFrameTest, pageScaleFactorScalesPaintClip) | 1340 TEST_F(WebFrameTest, pageScaleFactorScalesPaintClip) |
1322 { | 1341 { |
1323 UseMockScrollbarSettings mockScrollbarSettings; | 1342 UseMockScrollbarSettings mockScrollbarSettings; |
1324 registerMockedHttpURLLoad("large-div.html"); | 1343 registerMockedHttpURLLoad("large-div.html"); |
1325 | 1344 |
1326 FixedLayoutTestWebViewClient client; | 1345 FixedLayoutTestWebViewClient client; |
1327 client.m_screenInfo.deviceScaleFactor = 1; | 1346 client.m_screenInfo.deviceScaleFactor = 1; |
1328 int viewportWidth = 50; | 1347 int viewportWidth = 50; |
1329 int viewportHeight = 50; | 1348 int viewportHeight = 50; |
1330 | 1349 |
1331 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "large-div.ht
ml", true, 0, &client); | 1350 FrameTestHelpers::WebViewHelper webViewHelper; |
1332 m_webView->enableFixedLayoutMode(true); | 1351 webViewHelper.initializeAndLoad(m_baseURL + "large-div.html", true, 0, &clie
nt); |
1333 m_webView->settings()->setViewportEnabled(true); | 1352 webViewHelper.webView()->enableFixedLayoutMode(true); |
1334 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1353 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1335 m_webView->layout(); | 1354 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1355 webViewHelper.webView()->layout(); |
1336 | 1356 |
1337 // Set <1 page scale so that the clip rect should be larger than | 1357 // Set <1 page scale so that the clip rect should be larger than |
1338 // the viewport size as passed into resize(). | 1358 // the viewport size as passed into resize(). |
1339 m_webView->setPageScaleFactor(0.5, WebPoint()); | 1359 webViewHelper.webView()->setPageScaleFactor(0.5, WebPoint()); |
1340 | 1360 |
1341 SkBitmap bitmap; | 1361 SkBitmap bitmap; |
1342 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); | 1362 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200); |
1343 bitmap.allocPixels(); | 1363 bitmap.allocPixels(); |
1344 bitmap.eraseColor(0); | 1364 bitmap.eraseColor(0); |
1345 SkCanvas canvas(bitmap); | 1365 SkCanvas canvas(bitmap); |
1346 | 1366 |
1347 WebCore::GraphicsContext context(&canvas); | 1367 WebCore::GraphicsContext context(&canvas); |
1348 context.setTrackOpaqueRegion(true); | 1368 context.setTrackOpaqueRegion(true); |
1349 | 1369 |
1350 EXPECT_EQ_RECT(WebCore::IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()
); | 1370 EXPECT_EQ_RECT(WebCore::IntRect(0, 0, 0, 0), context.opaqueRegion().asRect()
); |
1351 | 1371 |
1352 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 1372 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
1353 WebCore::IntRect paintRect(0, 0, 200, 200); | 1373 WebCore::IntRect paintRect(0, 0, 200, 200); |
1354 view->paint(&context, paintRect); | 1374 view->paint(&context, paintRect); |
1355 | 1375 |
1356 int viewportWidthMinusScrollbar = 50 - (view->verticalScrollbar()->isOverlay
Scrollbar() ? 0 : 15); | 1376 int viewportWidthMinusScrollbar = 50 - (view->verticalScrollbar()->isOverlay
Scrollbar() ? 0 : 15); |
1357 int viewportHeightMinusScrollbar = 50 - (view->horizontalScrollbar()->isOver
layScrollbar() ? 0 : 15); | 1377 int viewportHeightMinusScrollbar = 50 - (view->horizontalScrollbar()->isOver
layScrollbar() ? 0 : 15); |
1358 WebCore::IntRect clippedRect(0, 0, viewportWidthMinusScrollbar * 2, viewport
HeightMinusScrollbar * 2); | 1378 WebCore::IntRect clippedRect(0, 0, viewportWidthMinusScrollbar * 2, viewport
HeightMinusScrollbar * 2); |
1359 EXPECT_EQ_RECT(clippedRect, context.opaqueRegion().asRect()); | 1379 EXPECT_EQ_RECT(clippedRect, context.opaqueRegion().asRect()); |
1360 } | 1380 } |
1361 | 1381 |
1362 TEST_F(WebFrameTest, pageScaleFactorUpdatesScrollbars) | 1382 TEST_F(WebFrameTest, pageScaleFactorUpdatesScrollbars) |
1363 { | 1383 { |
1364 UseMockScrollbarSettings mockScrollbarSettings; | 1384 UseMockScrollbarSettings mockScrollbarSettings; |
1365 registerMockedHttpURLLoad("fixed_layout.html"); | 1385 registerMockedHttpURLLoad("fixed_layout.html"); |
1366 | 1386 |
1367 FixedLayoutTestWebViewClient client; | 1387 FixedLayoutTestWebViewClient client; |
1368 client.m_screenInfo.deviceScaleFactor = 1; | 1388 client.m_screenInfo.deviceScaleFactor = 1; |
1369 int viewportWidth = 640; | 1389 int viewportWidth = 640; |
1370 int viewportHeight = 480; | 1390 int viewportHeight = 480; |
1371 | 1391 |
1372 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fixed_layout
.html", true, 0, &client); | 1392 FrameTestHelpers::WebViewHelper webViewHelper; |
1373 m_webView->enableFixedLayoutMode(true); | 1393 webViewHelper.initializeAndLoad(m_baseURL + "fixed_layout.html", true, 0, &c
lient); |
1374 m_webView->settings()->setViewportEnabled(true); | 1394 webViewHelper.webView()->enableFixedLayoutMode(true); |
1375 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1395 webViewHelper.webView()->settings()->setViewportEnabled(true); |
1376 m_webView->layout(); | 1396 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1397 webViewHelper.webView()->layout(); |
1377 | 1398 |
1378 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 1399 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
1379 EXPECT_EQ(view->scrollSize(WebCore::HorizontalScrollbar), view->contentsSize
().width() - view->visibleContentRect().width()); | 1400 EXPECT_EQ(view->scrollSize(WebCore::HorizontalScrollbar), view->contentsSize
().width() - view->visibleContentRect().width()); |
1380 EXPECT_EQ(view->scrollSize(WebCore::VerticalScrollbar), view->contentsSize()
.height() - view->visibleContentRect().height()); | 1401 EXPECT_EQ(view->scrollSize(WebCore::VerticalScrollbar), view->contentsSize()
.height() - view->visibleContentRect().height()); |
1381 | 1402 |
1382 m_webView->setPageScaleFactor(10, WebPoint()); | 1403 webViewHelper.webView()->setPageScaleFactor(10, WebPoint()); |
1383 | 1404 |
1384 EXPECT_EQ(view->scrollSize(WebCore::HorizontalScrollbar), view->contentsSize
().width() - view->visibleContentRect().width()); | 1405 EXPECT_EQ(view->scrollSize(WebCore::HorizontalScrollbar), view->contentsSize
().width() - view->visibleContentRect().width()); |
1385 EXPECT_EQ(view->scrollSize(WebCore::VerticalScrollbar), view->contentsSize()
.height() - view->visibleContentRect().height()); | 1406 EXPECT_EQ(view->scrollSize(WebCore::VerticalScrollbar), view->contentsSize()
.height() - view->visibleContentRect().height()); |
1386 } | 1407 } |
1387 | 1408 |
1388 TEST_F(WebFrameTest, CanOverrideScaleLimits) | 1409 TEST_F(WebFrameTest, CanOverrideScaleLimits) |
1389 { | 1410 { |
1390 UseMockScrollbarSettings mockScrollbarSettings; | 1411 UseMockScrollbarSettings mockScrollbarSettings; |
1391 | 1412 |
1392 registerMockedHttpURLLoad("no_scale_for_you.html"); | 1413 registerMockedHttpURLLoad("no_scale_for_you.html"); |
1393 | 1414 |
1394 FixedLayoutTestWebViewClient client; | 1415 FixedLayoutTestWebViewClient client; |
1395 client.m_screenInfo.deviceScaleFactor = 1; | 1416 client.m_screenInfo.deviceScaleFactor = 1; |
1396 int viewportWidth = 640; | 1417 int viewportWidth = 640; |
1397 int viewportHeight = 480; | 1418 int viewportHeight = 480; |
1398 | 1419 |
1399 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "no_scale_for
_you.html", true, 0, &client); | 1420 FrameTestHelpers::WebViewHelper webViewHelper; |
1400 m_webView->enableFixedLayoutMode(true); | 1421 webViewHelper.initializeAndLoad(m_baseURL + "no_scale_for_you.html", true, 0
, &client); |
1401 m_webView->settings()->setViewportEnabled(true); | 1422 webViewHelper.webView()->enableFixedLayoutMode(true); |
1402 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1423 webViewHelper.webView()->settings()->setViewportEnabled(true); |
| 1424 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1403 | 1425 |
1404 EXPECT_EQ(2.0f, m_webView->minimumPageScaleFactor()); | 1426 EXPECT_EQ(2.0f, webViewHelper.webView()->minimumPageScaleFactor()); |
1405 EXPECT_EQ(2.0f, m_webView->maximumPageScaleFactor()); | 1427 EXPECT_EQ(2.0f, webViewHelper.webView()->maximumPageScaleFactor()); |
1406 | 1428 |
1407 m_webView->setIgnoreViewportTagScaleLimits(true); | 1429 webViewHelper.webView()->setIgnoreViewportTagScaleLimits(true); |
1408 m_webView->layout(); | 1430 webViewHelper.webView()->layout(); |
1409 | 1431 |
1410 EXPECT_EQ(1.0f, m_webView->minimumPageScaleFactor()); | 1432 EXPECT_EQ(1.0f, webViewHelper.webView()->minimumPageScaleFactor()); |
1411 EXPECT_EQ(5.0f, m_webView->maximumPageScaleFactor()); | 1433 EXPECT_EQ(5.0f, webViewHelper.webView()->maximumPageScaleFactor()); |
1412 | 1434 |
1413 m_webView->setIgnoreViewportTagScaleLimits(false); | 1435 webViewHelper.webView()->setIgnoreViewportTagScaleLimits(false); |
1414 m_webView->layout(); | 1436 webViewHelper.webView()->layout(); |
1415 | 1437 |
1416 EXPECT_EQ(2.0f, m_webView->minimumPageScaleFactor()); | 1438 EXPECT_EQ(2.0f, webViewHelper.webView()->minimumPageScaleFactor()); |
1417 EXPECT_EQ(2.0f, m_webView->maximumPageScaleFactor()); | 1439 EXPECT_EQ(2.0f, webViewHelper.webView()->maximumPageScaleFactor()); |
1418 } | 1440 } |
1419 | 1441 |
1420 TEST_F(WebFrameTest, updateOverlayScrollbarLayers) | 1442 TEST_F(WebFrameTest, updateOverlayScrollbarLayers) |
1421 { | 1443 { |
1422 UseMockScrollbarSettings mockScrollbarSettings; | 1444 UseMockScrollbarSettings mockScrollbarSettings; |
1423 | 1445 |
1424 registerMockedHttpURLLoad("large-div.html"); | 1446 registerMockedHttpURLLoad("large-div.html"); |
1425 | 1447 |
1426 int viewWidth = 500; | 1448 int viewWidth = 500; |
1427 int viewHeight = 500; | 1449 int viewHeight = 500; |
1428 | 1450 |
1429 createCompositingWebView(); | 1451 OwnPtr<FakeCompositingWebViewClient> fakeCompositingWebViewClient = adoptPtr
(new FakeCompositingWebViewClient()); |
1430 m_webView->resize(WebSize(viewWidth, viewHeight)); | 1452 FrameTestHelpers::WebViewHelper webViewHelper; |
1431 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "large-div.h
tml"); | 1453 webViewHelper.initialize(true, &fakeCompositingWebViewClient->m_fakeWebFrame
Client, fakeCompositingWebViewClient.get(), &configueCompositingWebView); |
| 1454 |
| 1455 webViewHelper.webView()->resize(WebSize(viewWidth, viewHeight)); |
| 1456 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "large-div.html"); |
1432 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 1457 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1433 m_webView->layout(); | 1458 webViewHelper.webView()->layout(); |
1434 | 1459 |
1435 WebCore::FrameView* view = webViewImpl()->mainFrameImpl()->frameView(); | 1460 WebCore::FrameView* view = webViewHelper.webViewImpl()->mainFrameImpl()->fra
meView(); |
1436 EXPECT_TRUE(view->renderView()->compositor()->layerForHorizontalScrollbar())
; | 1461 EXPECT_TRUE(view->renderView()->compositor()->layerForHorizontalScrollbar())
; |
1437 EXPECT_TRUE(view->renderView()->compositor()->layerForVerticalScrollbar()); | 1462 EXPECT_TRUE(view->renderView()->compositor()->layerForVerticalScrollbar()); |
1438 | 1463 |
1439 m_webView->resize(WebSize(viewWidth * 10, viewHeight * 10)); | 1464 webViewHelper.webView()->resize(WebSize(viewWidth * 10, viewHeight * 10)); |
1440 m_webView->layout(); | 1465 webViewHelper.webView()->layout(); |
1441 EXPECT_FALSE(view->renderView()->compositor()->layerForHorizontalScrollbar()
); | 1466 EXPECT_FALSE(view->renderView()->compositor()->layerForHorizontalScrollbar()
); |
1442 EXPECT_FALSE(view->renderView()->compositor()->layerForVerticalScrollbar()); | 1467 EXPECT_FALSE(view->renderView()->compositor()->layerForVerticalScrollbar()); |
1443 } | 1468 } |
1444 | 1469 |
1445 void setScaleAndScrollAndLayout(WebKit::WebView* webView, WebPoint scroll, float
scale) | 1470 void setScaleAndScrollAndLayout(WebKit::WebView* webView, WebPoint scroll, float
scale) |
1446 { | 1471 { |
1447 webView->setPageScaleFactor(scale, WebPoint(scroll.x, scroll.y)); | 1472 webView->setPageScaleFactor(scale, WebPoint(scroll.x, scroll.y)); |
1448 webView->layout(); | 1473 webView->layout(); |
1449 } | 1474 } |
1450 | 1475 |
1451 TEST_F(WebFrameTest, DivAutoZoomParamsTest) | 1476 TEST_F(WebFrameTest, DivAutoZoomParamsTest) |
1452 { | 1477 { |
1453 registerMockedHttpURLLoad("get_scale_for_auto_zoom_into_div_test.html"); | 1478 registerMockedHttpURLLoad("get_scale_for_auto_zoom_into_div_test.html"); |
1454 | 1479 |
1455 const float deviceScaleFactor = 2.0f; | 1480 const float deviceScaleFactor = 2.0f; |
1456 int viewportWidth = 640 / deviceScaleFactor; | 1481 int viewportWidth = 640 / deviceScaleFactor; |
1457 int viewportHeight = 1280 / deviceScaleFactor; | 1482 int viewportHeight = 1280 / deviceScaleFactor; |
1458 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1483 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1459 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo
r_auto_zoom_into_div_test.html"); // | 1484 FrameTestHelpers::WebViewHelper webViewHelper; |
1460 m_webView->setDeviceScaleFactor(deviceScaleFactor); | 1485 webViewHelper.initializeAndLoad(m_baseURL + "get_scale_for_auto_zoom_into_di
v_test.html"); |
1461 m_webView->setPageScaleFactorLimits(0.01f, 4); | 1486 webViewHelper.webView()->setDeviceScaleFactor(deviceScaleFactor); |
1462 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0)); | 1487 webViewHelper.webView()->setPageScaleFactorLimits(0.01f, 4); |
1463 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1488 webViewHelper.webView()->setPageScaleFactor(0.5f, WebPoint(0, 0)); |
1464 m_webView->enableFixedLayoutMode(true); | 1489 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1465 m_webView->layout(); | 1490 webViewHelper.webView()->enableFixedLayoutMode(true); |
| 1491 webViewHelper.webView()->layout(); |
1466 | 1492 |
1467 WebRect wideDiv(200, 100, 400, 150); | 1493 WebRect wideDiv(200, 100, 400, 150); |
1468 WebRect tallDiv(200, 300, 400, 800); | 1494 WebRect tallDiv(200, 300, 400, 800); |
1469 WebRect doubleTapPointWide(wideDiv.x + 50, wideDiv.y + 50, touchPointPadding
, touchPointPadding); | 1495 WebRect doubleTapPointWide(wideDiv.x + 50, wideDiv.y + 50, touchPointPadding
, touchPointPadding); |
1470 WebRect doubleTapPointTall(tallDiv.x + 50, tallDiv.y + 50, touchPointPadding
, touchPointPadding); | 1496 WebRect doubleTapPointTall(tallDiv.x + 50, tallDiv.y + 50, touchPointPadding
, touchPointPadding); |
1471 WebRect wideBlockBounds; | 1497 WebRect wideBlockBounds; |
1472 WebRect tallBlockBounds; | 1498 WebRect tallBlockBounds; |
1473 float scale; | 1499 float scale; |
1474 WebPoint scroll; | 1500 WebPoint scroll; |
1475 | 1501 |
1476 float doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFact
or() * doubleTapZoomAlreadyLegibleRatio; | 1502 float doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimu
mPageScaleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1477 | 1503 |
1478 // Test double-tap zooming into wide div. | 1504 // Test double-tap zooming into wide div. |
1479 wideBlockBounds = webViewImpl()->computeBlockBounds(doubleTapPointWide, fals
e); | 1505 wideBlockBounds = webViewHelper.webViewImpl()->computeBlockBounds(doubleTapP
ointWide, false); |
1480 webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doubleTapPointWide
.x, doubleTapPointWide.y), wideBlockBounds, touchPointPadding, doubleTapZoomAlre
adyLegibleScale, scale, scroll); | 1506 webViewHelper.webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doub
leTapPointWide.x, doubleTapPointWide.y), wideBlockBounds, touchPointPadding, dou
bleTapZoomAlreadyLegibleScale, scale, scroll); |
1481 // The div should horizontally fill the screen (modulo margins), and | 1507 // The div should horizontally fill the screen (modulo margins), and |
1482 // vertically centered (modulo integer rounding). | 1508 // vertically centered (modulo integer rounding). |
1483 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); | 1509 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); |
1484 EXPECT_NEAR(wideDiv.x, scroll.x, 20); | 1510 EXPECT_NEAR(wideDiv.x, scroll.x, 20); |
1485 EXPECT_EQ(0, scroll.y); | 1511 EXPECT_EQ(0, scroll.y); |
1486 | 1512 |
1487 setScaleAndScrollAndLayout(webViewImpl(), scroll, scale); | 1513 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), scroll, scale); |
1488 | 1514 |
1489 // Test zoom out back to minimum scale. | 1515 // Test zoom out back to minimum scale. |
1490 wideBlockBounds = webViewImpl()->computeBlockBounds(doubleTapPointWide, fals
e); | 1516 wideBlockBounds = webViewHelper.webViewImpl()->computeBlockBounds(doubleTapP
ointWide, false); |
1491 webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doubleTapPointWide
.x, doubleTapPointWide.y), wideBlockBounds, touchPointPadding, doubleTapZoomAlre
adyLegibleScale, scale, scroll); | 1517 webViewHelper.webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doub
leTapPointWide.x, doubleTapPointWide.y), wideBlockBounds, touchPointPadding, dou
bleTapZoomAlreadyLegibleScale, scale, scroll); |
1492 | 1518 |
1493 scale = webViewImpl()->minimumPageScaleFactor(); | 1519 scale = webViewHelper.webViewImpl()->minimumPageScaleFactor(); |
1494 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), scale); | 1520 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), scal
e); |
1495 | 1521 |
1496 // Test double-tap zooming into tall div. | 1522 // Test double-tap zooming into tall div. |
1497 tallBlockBounds = webViewImpl()->computeBlockBounds(doubleTapPointTall, fals
e); | 1523 tallBlockBounds = webViewHelper.webViewImpl()->computeBlockBounds(doubleTapP
ointTall, false); |
1498 webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doubleTapPointTall
.x, doubleTapPointTall.y), tallBlockBounds, touchPointPadding, doubleTapZoomAlre
adyLegibleScale, scale, scroll); | 1524 webViewHelper.webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(doub
leTapPointTall.x, doubleTapPointTall.y), tallBlockBounds, touchPointPadding, dou
bleTapZoomAlreadyLegibleScale, scale, scroll); |
1499 // The div should start at the top left of the viewport. | 1525 // The div should start at the top left of the viewport. |
1500 EXPECT_NEAR(viewportWidth / (float) tallDiv.width, scale, 0.1); | 1526 EXPECT_NEAR(viewportWidth / (float) tallDiv.width, scale, 0.1); |
1501 EXPECT_NEAR(tallDiv.x, scroll.x, 20); | 1527 EXPECT_NEAR(tallDiv.x, scroll.x, 20); |
1502 EXPECT_NEAR(tallDiv.y, scroll.y, 20); | 1528 EXPECT_NEAR(tallDiv.y, scroll.y, 20); |
1503 | 1529 |
1504 // Test for Non-doubletap scaling | 1530 // Test for Non-doubletap scaling |
1505 // Test zooming into div. | 1531 // Test zooming into div. |
1506 webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(250, 250), webView
Impl()->computeBlockBounds(WebRect(250, 250, 10, 10), true), 0, doubleTapZoomAlr
eadyLegibleScale, scale, scroll); | 1532 webViewHelper.webViewImpl()->computeScaleAndScrollForBlockRect(WebPoint(250,
250), webViewHelper.webViewImpl()->computeBlockBounds(WebRect(250, 250, 10, 10)
, true), 0, doubleTapZoomAlreadyLegibleScale, scale, scroll); |
1507 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); | 1533 EXPECT_NEAR(viewportWidth / (float) wideDiv.width, scale, 0.1); |
1508 } | 1534 } |
1509 | 1535 |
1510 void simulatePageScale(WebViewImpl* webViewImpl, float& scale) | 1536 void simulatePageScale(WebViewImpl* webViewImpl, float& scale) |
1511 { | 1537 { |
1512 WebCore::IntSize scrollDelta = webViewImpl->fakePageScaleAnimationTargetPosi
tionForTesting() - webViewImpl->mainFrameImpl()->frameView()->scrollPosition(); | 1538 WebCore::IntSize scrollDelta = webViewImpl->fakePageScaleAnimationTargetPosi
tionForTesting() - webViewImpl->mainFrameImpl()->frameView()->scrollPosition(); |
1513 float scaleDelta = webViewImpl->fakePageScaleAnimationPageScaleForTesting()
/ webViewImpl->pageScaleFactor(); | 1539 float scaleDelta = webViewImpl->fakePageScaleAnimationPageScaleForTesting()
/ webViewImpl->pageScaleFactor(); |
1514 webViewImpl->applyScrollAndScale(scrollDelta, scaleDelta); | 1540 webViewImpl->applyScrollAndScale(scrollDelta, scaleDelta); |
1515 scale = webViewImpl->pageScaleFactor(); | 1541 scale = webViewImpl->pageScaleFactor(); |
1516 } | 1542 } |
(...skipping 12 matching lines...) Expand all Loading... |
1529 } | 1555 } |
1530 | 1556 |
1531 TEST_F(WebFrameTest, DivAutoZoomWideDivTest) | 1557 TEST_F(WebFrameTest, DivAutoZoomWideDivTest) |
1532 { | 1558 { |
1533 registerMockedHttpURLLoad("get_wide_div_for_auto_zoom_test.html"); | 1559 registerMockedHttpURLLoad("get_wide_div_for_auto_zoom_test.html"); |
1534 | 1560 |
1535 const float deviceScaleFactor = 2.0f; | 1561 const float deviceScaleFactor = 2.0f; |
1536 int viewportWidth = 640 / deviceScaleFactor; | 1562 int viewportWidth = 640 / deviceScaleFactor; |
1537 int viewportHeight = 1280 / deviceScaleFactor; | 1563 int viewportHeight = 1280 / deviceScaleFactor; |
1538 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1564 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1539 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_wide_div
_for_auto_zoom_test.html"); | 1565 FrameTestHelpers::WebViewHelper webViewHelper; |
1540 m_webView->enableFixedLayoutMode(true); | 1566 webViewHelper.initializeAndLoad(m_baseURL + "get_wide_div_for_auto_zoom_test
.html"); |
1541 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1567 webViewHelper.webView()->enableFixedLayoutMode(true); |
1542 m_webView->setPageScaleFactorLimits(1.0f, 4); | 1568 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1543 m_webView->setDeviceScaleFactor(deviceScaleFactor); | 1569 webViewHelper.webView()->setPageScaleFactorLimits(1.0f, 4); |
1544 m_webView->setPageScaleFactor(1.0f, WebPoint(0, 0)); | 1570 webViewHelper.webView()->setDeviceScaleFactor(deviceScaleFactor); |
1545 m_webView->layout(); | 1571 webViewHelper.webView()->setPageScaleFactor(1.0f, WebPoint(0, 0)); |
| 1572 webViewHelper.webView()->layout(); |
1546 | 1573 |
1547 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1574 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1548 | 1575 |
1549 float doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFact
or() * doubleTapZoomAlreadyLegibleRatio; | 1576 float doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimu
mPageScaleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1550 | 1577 |
1551 WebRect div(0, 100, viewportWidth, 150); | 1578 WebRect div(0, 100, viewportWidth, 150); |
1552 WebPoint point(div.x + 50, div.y + 50); | 1579 WebPoint point(div.x + 50, div.y + 50); |
1553 float scale; | 1580 float scale; |
1554 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1581 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1555 | 1582 |
1556 simulateDoubleTap(webViewImpl(), point, scale); | 1583 simulateDoubleTap(webViewHelper.webViewImpl(), point, scale); |
1557 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1584 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1558 simulateDoubleTap(webViewImpl(), point, scale); | 1585 simulateDoubleTap(webViewHelper.webViewImpl(), point, scale); |
1559 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1586 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1560 } | 1587 } |
1561 | 1588 |
1562 TEST_F(WebFrameTest, DivAutoZoomVeryTallTest) | 1589 TEST_F(WebFrameTest, DivAutoZoomVeryTallTest) |
1563 { | 1590 { |
1564 // When a block is taller than the viewport and a zoom targets a lower part | 1591 // When a block is taller than the viewport and a zoom targets a lower part |
1565 // of it, then we should keep the target point onscreen instead of snapping | 1592 // of it, then we should keep the target point onscreen instead of snapping |
1566 // back up the top of the block. | 1593 // back up the top of the block. |
1567 registerMockedHttpURLLoad("very_tall_div.html"); | 1594 registerMockedHttpURLLoad("very_tall_div.html"); |
1568 | 1595 |
1569 const float deviceScaleFactor = 2.0f; | 1596 const float deviceScaleFactor = 2.0f; |
1570 int viewportWidth = 640 / deviceScaleFactor; | 1597 int viewportWidth = 640 / deviceScaleFactor; |
1571 int viewportHeight = 1280 / deviceScaleFactor; | 1598 int viewportHeight = 1280 / deviceScaleFactor; |
1572 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "very_tall_di
v.html"); | 1599 FrameTestHelpers::WebViewHelper webViewHelper; |
1573 m_webView->enableFixedLayoutMode(true); | 1600 webViewHelper.initializeAndLoad(m_baseURL + "very_tall_div.html"); |
1574 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1601 webViewHelper.webView()->enableFixedLayoutMode(true); |
1575 m_webView->setPageScaleFactorLimits(1.0f, 4); | 1602 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1576 m_webView->setDeviceScaleFactor(deviceScaleFactor); | 1603 webViewHelper.webView()->setPageScaleFactorLimits(1.0f, 4); |
1577 m_webView->setPageScaleFactor(1.0f, WebPoint(0, 0)); | 1604 webViewHelper.webView()->setDeviceScaleFactor(deviceScaleFactor); |
1578 m_webView->layout(); | 1605 webViewHelper.webView()->setPageScaleFactor(1.0f, WebPoint(0, 0)); |
| 1606 webViewHelper.webView()->layout(); |
1579 | 1607 |
1580 WebRect div(200, 300, 400, 5000); | 1608 WebRect div(200, 300, 400, 5000); |
1581 WebPoint point(div.x + 50, div.y + 3000); | 1609 WebPoint point(div.x + 50, div.y + 3000); |
1582 float scale; | 1610 float scale; |
1583 WebPoint scroll; | 1611 WebPoint scroll; |
1584 | 1612 |
1585 WebRect blockBounds = webViewImpl()->computeBlockBounds(WebRect(point.x, poi
nt.y, 0, 0), true); | 1613 WebRect blockBounds = webViewHelper.webViewImpl()->computeBlockBounds(WebRec
t(point.x, point.y, 0, 0), true); |
1586 webViewImpl()->computeScaleAndScrollForBlockRect(point, blockBounds, 0, 1.0f
, scale, scroll); | 1614 webViewHelper.webViewImpl()->computeScaleAndScrollForBlockRect(point, blockB
ounds, 0, 1.0f, scale, scroll); |
1587 EXPECT_EQ(scale, 1.0f); | 1615 EXPECT_EQ(scale, 1.0f); |
1588 EXPECT_EQ(scroll.y, 2660); | 1616 EXPECT_EQ(scroll.y, 2660); |
1589 } | 1617 } |
1590 | 1618 |
1591 TEST_F(WebFrameTest, DivAutoZoomMultipleDivsTest) | 1619 TEST_F(WebFrameTest, DivAutoZoomMultipleDivsTest) |
1592 { | 1620 { |
1593 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html"); | 1621 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html"); |
1594 | 1622 |
1595 const float deviceScaleFactor = 2.0f; | 1623 const float deviceScaleFactor = 2.0f; |
1596 int viewportWidth = 640 / deviceScaleFactor; | 1624 int viewportWidth = 640 / deviceScaleFactor; |
1597 int viewportHeight = 1280 / deviceScaleFactor; | 1625 int viewportHeight = 1280 / deviceScaleFactor; |
1598 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1626 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1599 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_multiple
_divs_for_auto_zoom_test.html"); | 1627 FrameTestHelpers::WebViewHelper webViewHelper; |
1600 m_webView->enableFixedLayoutMode(true); | 1628 webViewHelper.initializeAndLoad(m_baseURL + "get_multiple_divs_for_auto_zoom
_test.html"); |
1601 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1629 webViewHelper.webView()->enableFixedLayoutMode(true); |
1602 m_webView->setPageScaleFactorLimits(0.5f, 4); | 1630 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1603 m_webView->setDeviceScaleFactor(deviceScaleFactor); | 1631 webViewHelper.webView()->setPageScaleFactorLimits(0.5f, 4); |
1604 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0)); | 1632 webViewHelper.webView()->setDeviceScaleFactor(deviceScaleFactor); |
1605 m_webView->layout(); | 1633 webViewHelper.webView()->setPageScaleFactor(0.5f, WebPoint(0, 0)); |
| 1634 webViewHelper.webView()->layout(); |
1606 | 1635 |
1607 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1636 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1608 | 1637 |
1609 WebRect topDiv(200, 100, 200, 150); | 1638 WebRect topDiv(200, 100, 200, 150); |
1610 WebRect bottomDiv(200, 300, 200, 150); | 1639 WebRect bottomDiv(200, 300, 200, 150); |
1611 WebPoint topPoint(topDiv.x + 50, topDiv.y + 50); | 1640 WebPoint topPoint(topDiv.x + 50, topDiv.y + 50); |
1612 WebPoint bottomPoint(bottomDiv.x + 50, bottomDiv.y + 50); | 1641 WebPoint bottomPoint(bottomDiv.x + 50, bottomDiv.y + 50); |
1613 float scale; | 1642 float scale; |
1614 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1643 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1615 | 1644 |
1616 // Test double tap on two different divs | 1645 // Test double tap on two different divs |
1617 // After first zoom, we should go back to minimum page scale with a second d
ouble tap. | 1646 // After first zoom, we should go back to minimum page scale with a second d
ouble tap. |
1618 simulateDoubleTap(webViewImpl(), topPoint, scale); | 1647 simulateDoubleTap(webViewHelper.webViewImpl(), topPoint, scale); |
1619 EXPECT_FLOAT_EQ(1, scale); | 1648 EXPECT_FLOAT_EQ(1, scale); |
1620 simulateDoubleTap(webViewImpl(), bottomPoint, scale); | 1649 simulateDoubleTap(webViewHelper.webViewImpl(), bottomPoint, scale); |
1621 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1650 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1622 | 1651 |
1623 // If the user pinch zooms after double tap, a second double tap should zoom
back to the div. | 1652 // If the user pinch zooms after double tap, a second double tap should zoom
back to the div. |
1624 simulateDoubleTap(webViewImpl(), topPoint, scale); | 1653 simulateDoubleTap(webViewHelper.webViewImpl(), topPoint, scale); |
1625 EXPECT_FLOAT_EQ(1, scale); | 1654 EXPECT_FLOAT_EQ(1, scale); |
1626 webViewImpl()->applyScrollAndScale(WebSize(), 0.6f); | 1655 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 0.6f); |
1627 simulateDoubleTap(webViewImpl(), bottomPoint, scale); | 1656 simulateDoubleTap(webViewHelper.webViewImpl(), bottomPoint, scale); |
1628 EXPECT_FLOAT_EQ(1, scale); | 1657 EXPECT_FLOAT_EQ(1, scale); |
1629 simulateDoubleTap(webViewImpl(), bottomPoint, scale); | 1658 simulateDoubleTap(webViewHelper.webViewImpl(), bottomPoint, scale); |
1630 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1659 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1631 | 1660 |
1632 // If we didn't yet get an auto-zoom update and a second double-tap arrives,
should go back to minimum scale. | 1661 // If we didn't yet get an auto-zoom update and a second double-tap arrives,
should go back to minimum scale. |
1633 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1662 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1634 webViewImpl()->animateDoubleTapZoom(topPoint); | 1663 webViewHelper.webViewImpl()->animateDoubleTapZoom(topPoint); |
1635 EXPECT_TRUE(webViewImpl()->fakeDoubleTapAnimationPendingForTesting()); | 1664 EXPECT_TRUE(webViewHelper.webViewImpl()->fakeDoubleTapAnimationPendingForTes
ting()); |
1636 simulateDoubleTap(webViewImpl(), bottomPoint, scale); | 1665 simulateDoubleTap(webViewHelper.webViewImpl(), bottomPoint, scale); |
1637 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1666 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1638 } | 1667 } |
1639 | 1668 |
1640 TEST_F(WebFrameTest, DivAutoZoomScaleBoundsTest) | 1669 TEST_F(WebFrameTest, DivAutoZoomScaleBoundsTest) |
1641 { | 1670 { |
1642 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html"); | 1671 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html"); |
1643 | 1672 |
1644 int viewportWidth = 320; | 1673 int viewportWidth = 320; |
1645 int viewportHeight = 480; | 1674 int viewportHeight = 480; |
1646 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1675 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1647 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo
unds_check_for_auto_zoom_test.html"); | 1676 FrameTestHelpers::WebViewHelper webViewHelper; |
1648 m_webView->enableFixedLayoutMode(true); | 1677 webViewHelper.initializeAndLoad(m_baseURL + "get_scale_bounds_check_for_auto
_zoom_test.html"); |
1649 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1678 webViewHelper.webView()->enableFixedLayoutMode(true); |
1650 m_webView->setDeviceScaleFactor(1.5f); | 1679 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1651 m_webView->layout(); | 1680 webViewHelper.webView()->setDeviceScaleFactor(1.5f); |
| 1681 webViewHelper.webView()->layout(); |
1652 | 1682 |
1653 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1683 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1654 | 1684 |
1655 WebRect div(200, 100, 200, 150); | 1685 WebRect div(200, 100, 200, 150); |
1656 WebPoint doubleTapPoint(div.x + 50, div.y + 50); | 1686 WebPoint doubleTapPoint(div.x + 50, div.y + 50); |
1657 float scale; | 1687 float scale; |
1658 | 1688 |
1659 // Test double tap scale bounds. | 1689 // Test double tap scale bounds. |
1660 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 | 1690 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 |
1661 m_webView->setPageScaleFactorLimits(0.5f, 4); | 1691 webViewHelper.webView()->setPageScaleFactorLimits(0.5f, 4); |
1662 m_webView->layout(); | 1692 webViewHelper.webView()->layout(); |
1663 float doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFact
or() * doubleTapZoomAlreadyLegibleRatio; | 1693 float doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimu
mPageScaleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1664 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1694 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1665 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1695 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1666 EXPECT_FLOAT_EQ(1, scale); | 1696 EXPECT_FLOAT_EQ(1, scale); |
1667 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1697 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1668 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1698 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1669 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1699 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1670 EXPECT_FLOAT_EQ(1, scale); | 1700 EXPECT_FLOAT_EQ(1, scale); |
1671 | 1701 |
1672 // Zoom in to reset double_tap_zoom_in_effect flag. | 1702 // Zoom in to reset double_tap_zoom_in_effect flag. |
1673 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1703 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1674 // 1 < minimumPageScale < doubleTapZoomAlreadyLegibleScale | 1704 // 1 < minimumPageScale < doubleTapZoomAlreadyLegibleScale |
1675 m_webView->setPageScaleFactorLimits(1.1f, 4); | 1705 webViewHelper.webView()->setPageScaleFactorLimits(1.1f, 4); |
1676 m_webView->layout(); | 1706 webViewHelper.webView()->layout(); |
1677 doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFactor() *
doubleTapZoomAlreadyLegibleRatio; | 1707 doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimumPageS
caleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1678 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1708 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1679 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1709 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1680 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1710 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1681 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1711 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1682 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1712 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1683 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1713 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1684 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1714 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1685 | 1715 |
1686 // Zoom in to reset double_tap_zoom_in_effect flag. | 1716 // Zoom in to reset double_tap_zoom_in_effect flag. |
1687 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1717 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1688 // minimumPageScale < 1 < doubleTapZoomAlreadyLegibleScale | 1718 // minimumPageScale < 1 < doubleTapZoomAlreadyLegibleScale |
1689 m_webView->setPageScaleFactorLimits(0.95f, 4); | 1719 webViewHelper.webView()->setPageScaleFactorLimits(0.95f, 4); |
1690 m_webView->layout(); | 1720 webViewHelper.webView()->layout(); |
1691 doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFactor() *
doubleTapZoomAlreadyLegibleRatio; | 1721 doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimumPageS
caleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1692 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1722 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1693 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1723 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1694 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1724 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1695 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1725 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1696 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1726 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1697 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1727 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1698 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1728 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1699 } | 1729 } |
1700 | 1730 |
1701 TEST_F(WebFrameTest, DivAutoZoomScaleFontScaleFactorTest) | 1731 TEST_F(WebFrameTest, DivAutoZoomScaleFontScaleFactorTest) |
1702 { | 1732 { |
1703 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html"); | 1733 registerMockedHttpURLLoad("get_scale_bounds_check_for_auto_zoom_test.html"); |
1704 | 1734 |
1705 int viewportWidth = 320; | 1735 int viewportWidth = 320; |
1706 int viewportHeight = 480; | 1736 int viewportHeight = 480; |
1707 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1737 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1708 float textAutosizingFontScaleFactor = 1.13f; | 1738 float textAutosizingFontScaleFactor = 1.13f; |
1709 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_bo
unds_check_for_auto_zoom_test.html"); | 1739 FrameTestHelpers::WebViewHelper webViewHelper; |
1710 m_webView->enableFixedLayoutMode(true); | 1740 webViewHelper.initializeAndLoad(m_baseURL + "get_scale_bounds_check_for_auto
_zoom_test.html"); |
1711 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1741 webViewHelper.webView()->enableFixedLayoutMode(true); |
1712 m_webView->layout(); | 1742 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 1743 webViewHelper.webView()->layout(); |
1713 | 1744 |
1714 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1745 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1715 webViewImpl()->page()->settings().setTextAutosizingEnabled(true); | 1746 webViewHelper.webViewImpl()->page()->settings().setTextAutosizingEnabled(tru
e); |
1716 webViewImpl()->page()->settings().setTextAutosizingFontScaleFactor(textAutos
izingFontScaleFactor); | 1747 webViewHelper.webViewImpl()->page()->settings().setTextAutosizingFontScaleFa
ctor(textAutosizingFontScaleFactor); |
1717 | 1748 |
1718 WebRect div(200, 100, 200, 150); | 1749 WebRect div(200, 100, 200, 150); |
1719 WebPoint doubleTapPoint(div.x + 50, div.y + 50); | 1750 WebPoint doubleTapPoint(div.x + 50, div.y + 50); |
1720 float scale; | 1751 float scale; |
1721 | 1752 |
1722 // Test double tap scale bounds. | 1753 // Test double tap scale bounds. |
1723 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 < textAutosizingF
ontScaleFactor | 1754 // minimumPageScale < doubleTapZoomAlreadyLegibleScale < 1 < textAutosizingF
ontScaleFactor |
1724 float legibleScale = textAutosizingFontScaleFactor; | 1755 float legibleScale = textAutosizingFontScaleFactor; |
1725 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1756 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1726 float doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFact
or() * doubleTapZoomAlreadyLegibleRatio; | 1757 float doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimu
mPageScaleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1727 m_webView->setPageScaleFactorLimits(0.5f, 4); | 1758 webViewHelper.webView()->setPageScaleFactorLimits(0.5f, 4); |
1728 m_webView->layout(); | 1759 webViewHelper.webView()->layout(); |
1729 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1760 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1730 EXPECT_FLOAT_EQ(legibleScale, scale); | 1761 EXPECT_FLOAT_EQ(legibleScale, scale); |
1731 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1762 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1732 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1763 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1733 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1764 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1734 EXPECT_FLOAT_EQ(legibleScale, scale); | 1765 EXPECT_FLOAT_EQ(legibleScale, scale); |
1735 | 1766 |
1736 // Zoom in to reset double_tap_zoom_in_effect flag. | 1767 // Zoom in to reset double_tap_zoom_in_effect flag. |
1737 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1768 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1738 // 1 < textAutosizingFontScaleFactor < minimumPageScale < doubleTapZoomAlrea
dyLegibleScale | 1769 // 1 < textAutosizingFontScaleFactor < minimumPageScale < doubleTapZoomAlrea
dyLegibleScale |
1739 m_webView->setPageScaleFactorLimits(1.0f, 4); | 1770 webViewHelper.webView()->setPageScaleFactorLimits(1.0f, 4); |
1740 m_webView->layout(); | 1771 webViewHelper.webView()->layout(); |
1741 doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFactor() *
doubleTapZoomAlreadyLegibleRatio; | 1772 doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimumPageS
caleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1742 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1773 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1743 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1774 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1744 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1775 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1745 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1776 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1746 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1777 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1747 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1778 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1748 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1779 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1749 | 1780 |
1750 // Zoom in to reset double_tap_zoom_in_effect flag. | 1781 // Zoom in to reset double_tap_zoom_in_effect flag. |
1751 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1782 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1752 // minimumPageScale < 1 < textAutosizingFontScaleFactor < doubleTapZoomAlrea
dyLegibleScale | 1783 // minimumPageScale < 1 < textAutosizingFontScaleFactor < doubleTapZoomAlrea
dyLegibleScale |
1753 m_webView->setPageScaleFactorLimits(0.95f, 4); | 1784 webViewHelper.webView()->setPageScaleFactorLimits(0.95f, 4); |
1754 m_webView->layout(); | 1785 webViewHelper.webView()->layout(); |
1755 doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFactor() *
doubleTapZoomAlreadyLegibleRatio; | 1786 doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimumPageS
caleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1756 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1787 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1757 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1788 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1758 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1789 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1759 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1790 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1760 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1791 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1761 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1792 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1762 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); | 1793 EXPECT_FLOAT_EQ(doubleTapZoomAlreadyLegibleScale, scale); |
1763 | 1794 |
1764 // Zoom in to reset double_tap_zoom_in_effect flag. | 1795 // Zoom in to reset double_tap_zoom_in_effect flag. |
1765 webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); | 1796 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.1f); |
1766 // minimumPageScale < 1 < doubleTapZoomAlreadyLegibleScale < textAutosizingF
ontScaleFactor | 1797 // minimumPageScale < 1 < doubleTapZoomAlreadyLegibleScale < textAutosizingF
ontScaleFactor |
1767 m_webView->setPageScaleFactorLimits(0.9f, 4); | 1798 webViewHelper.webView()->setPageScaleFactorLimits(0.9f, 4); |
1768 m_webView->layout(); | 1799 webViewHelper.webView()->layout(); |
1769 doubleTapZoomAlreadyLegibleScale = webViewImpl()->minimumPageScaleFactor() *
doubleTapZoomAlreadyLegibleRatio; | 1800 doubleTapZoomAlreadyLegibleScale = webViewHelper.webViewImpl()->minimumPageS
caleFactor() * doubleTapZoomAlreadyLegibleRatio; |
1770 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1801 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1771 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1802 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1772 EXPECT_FLOAT_EQ(legibleScale, scale); | 1803 EXPECT_FLOAT_EQ(legibleScale, scale); |
1773 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1804 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1774 EXPECT_FLOAT_EQ(webViewImpl()->minimumPageScaleFactor(), scale); | 1805 EXPECT_FLOAT_EQ(webViewHelper.webViewImpl()->minimumPageScaleFactor(), scale
); |
1775 simulateDoubleTap(webViewImpl(), doubleTapPoint, scale); | 1806 simulateDoubleTap(webViewHelper.webViewImpl(), doubleTapPoint, scale); |
1776 EXPECT_FLOAT_EQ(legibleScale, scale); | 1807 EXPECT_FLOAT_EQ(legibleScale, scale); |
1777 } | 1808 } |
1778 | 1809 |
1779 TEST_F(WebFrameTest, DivMultipleTargetZoomMultipleDivsTest) | 1810 TEST_F(WebFrameTest, DivMultipleTargetZoomMultipleDivsTest) |
1780 { | 1811 { |
1781 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html"); | 1812 registerMockedHttpURLLoad("get_multiple_divs_for_auto_zoom_test.html"); |
1782 | 1813 |
1783 const float deviceScaleFactor = 2.0f; | 1814 const float deviceScaleFactor = 2.0f; |
1784 int viewportWidth = 640 / deviceScaleFactor; | 1815 int viewportWidth = 640 / deviceScaleFactor; |
1785 int viewportHeight = 1280 / deviceScaleFactor; | 1816 int viewportHeight = 1280 / deviceScaleFactor; |
1786 float doubleTapZoomAlreadyLegibleRatio = 1.2f; | 1817 float doubleTapZoomAlreadyLegibleRatio = 1.2f; |
1787 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_multiple
_divs_for_auto_zoom_test.html"); | 1818 FrameTestHelpers::WebViewHelper webViewHelper; |
1788 m_webView->enableFixedLayoutMode(true); | 1819 webViewHelper.initializeAndLoad(m_baseURL + "get_multiple_divs_for_auto_zoom
_test.html"); |
1789 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1820 webViewHelper.webView()->enableFixedLayoutMode(true); |
1790 m_webView->setPageScaleFactorLimits(0.5f, 4); | 1821 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1791 m_webView->setDeviceScaleFactor(deviceScaleFactor); | 1822 webViewHelper.webView()->setPageScaleFactorLimits(0.5f, 4); |
1792 m_webView->setPageScaleFactor(0.5f, WebPoint(0, 0)); | 1823 webViewHelper.webView()->setDeviceScaleFactor(deviceScaleFactor); |
1793 m_webView->layout(); | 1824 webViewHelper.webView()->setPageScaleFactor(0.5f, WebPoint(0, 0)); |
| 1825 webViewHelper.webView()->layout(); |
1794 | 1826 |
1795 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1827 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1796 | 1828 |
1797 WebRect viewportRect(0, 0, viewportWidth, viewportHeight); | 1829 WebRect viewportRect(0, 0, viewportWidth, viewportHeight); |
1798 WebRect topDiv(200, 100, 200, 150); | 1830 WebRect topDiv(200, 100, 200, 150); |
1799 WebRect bottomDiv(200, 300, 200, 150); | 1831 WebRect bottomDiv(200, 300, 200, 150); |
1800 float scale; | 1832 float scale; |
1801 setScaleAndScrollAndLayout(webViewImpl(), WebPoint(0, 0), (webViewImpl()->mi
nimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyLegibleRatio) / 2); | 1833 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), WebPoint(0, 0), (web
ViewHelper.webViewImpl()->minimumPageScaleFactor()) * (1 + doubleTapZoomAlreadyL
egibleRatio) / 2); |
1802 | 1834 |
1803 simulateMultiTargetZoom(webViewImpl(), topDiv, scale); | 1835 simulateMultiTargetZoom(webViewHelper.webViewImpl(), topDiv, scale); |
1804 EXPECT_FLOAT_EQ(1, scale); | 1836 EXPECT_FLOAT_EQ(1, scale); |
1805 simulateMultiTargetZoom(webViewImpl(), bottomDiv, scale); | 1837 simulateMultiTargetZoom(webViewHelper.webViewImpl(), bottomDiv, scale); |
1806 EXPECT_FLOAT_EQ(1, scale); | 1838 EXPECT_FLOAT_EQ(1, scale); |
1807 simulateMultiTargetZoom(webViewImpl(), viewportRect, scale); | 1839 simulateMultiTargetZoom(webViewHelper.webViewImpl(), viewportRect, scale); |
1808 EXPECT_FLOAT_EQ(1, scale); | 1840 EXPECT_FLOAT_EQ(1, scale); |
1809 webViewImpl()->setPageScaleFactor(webViewImpl()->minimumPageScaleFactor(), W
ebPoint(0, 0)); | 1841 webViewHelper.webViewImpl()->setPageScaleFactor(webViewHelper.webViewImpl()-
>minimumPageScaleFactor(), WebPoint(0, 0)); |
1810 simulateMultiTargetZoom(webViewImpl(), topDiv, scale); | 1842 simulateMultiTargetZoom(webViewHelper.webViewImpl(), topDiv, scale); |
1811 EXPECT_FLOAT_EQ(1, scale); | 1843 EXPECT_FLOAT_EQ(1, scale); |
1812 } | 1844 } |
1813 | 1845 |
1814 TEST_F(WebFrameTest, DivScrollIntoEditableTest) | 1846 TEST_F(WebFrameTest, DivScrollIntoEditableTest) |
1815 { | 1847 { |
1816 registerMockedHttpURLLoad("get_scale_for_zoom_into_editable_test.html"); | 1848 registerMockedHttpURLLoad("get_scale_for_zoom_into_editable_test.html"); |
1817 | 1849 |
1818 int viewportWidth = 450; | 1850 int viewportWidth = 450; |
1819 int viewportHeight = 300; | 1851 int viewportHeight = 300; |
1820 float leftBoxRatio = 0.3f; | 1852 float leftBoxRatio = 0.3f; |
1821 int caretPadding = 10; | 1853 int caretPadding = 10; |
1822 float minReadableCaretHeight = 18.0f; | 1854 float minReadableCaretHeight = 18.0f; |
1823 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "get_scale_fo
r_zoom_into_editable_test.html"); | 1855 FrameTestHelpers::WebViewHelper webViewHelper; |
1824 m_webView->enableFixedLayoutMode(true); | 1856 webViewHelper.initializeAndLoad(m_baseURL + "get_scale_for_zoom_into_editabl
e_test.html"); |
1825 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1857 webViewHelper.webView()->enableFixedLayoutMode(true); |
1826 m_webView->setPageScaleFactorLimits(1, 4); | 1858 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1827 m_webView->layout(); | 1859 webViewHelper.webView()->setPageScaleFactorLimits(1, 4); |
1828 m_webView->setDeviceScaleFactor(1.5f); | 1860 webViewHelper.webView()->layout(); |
1829 m_webView->settings()->setAutoZoomFocusedNodeToLegibleScale(true); | 1861 webViewHelper.webView()->setDeviceScaleFactor(1.5f); |
| 1862 webViewHelper.webView()->settings()->setAutoZoomFocusedNodeToLegibleScale(tr
ue); |
1830 | 1863 |
1831 webViewImpl()->enableFakePageScaleAnimationForTesting(true); | 1864 webViewHelper.webViewImpl()->enableFakePageScaleAnimationForTesting(true); |
1832 | 1865 |
1833 WebRect editBoxWithText(200, 200, 250, 20); | 1866 WebRect editBoxWithText(200, 200, 250, 20); |
1834 WebRect editBoxWithNoText(200, 250, 250, 20); | 1867 WebRect editBoxWithNoText(200, 250, 250, 20); |
1835 | 1868 |
1836 // Test scrolling the focused node | 1869 // Test scrolling the focused node |
1837 // The edit box is shorter and narrower than the viewport when legible. | 1870 // The edit box is shorter and narrower than the viewport when legible. |
1838 m_webView->advanceFocus(false); | 1871 webViewHelper.webView()->advanceFocus(false); |
1839 // Set the caret to the end of the input box. | 1872 // Set the caret to the end of the input box. |
1840 m_webView->mainFrame()->document().getElementById("EditBoxWithText").to<WebI
nputElement>().setSelectionRange(1000, 1000); | 1873 webViewHelper.webView()->mainFrame()->document().getElementById("EditBoxWith
Text").to<WebInputElement>().setSelectionRange(1000, 1000); |
1841 setScaleAndScrollAndLayout(m_webView, WebPoint(0, 0), 1); | 1874 setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1); |
1842 WebRect rect, caret; | 1875 WebRect rect, caret; |
1843 webViewImpl()->selectionBounds(caret, rect); | 1876 webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
1844 | 1877 |
1845 float scale; | 1878 float scale; |
1846 WebCore::IntPoint scroll; | 1879 WebCore::IntPoint scroll; |
1847 bool needAnimation; | 1880 bool needAnimation; |
1848 webViewImpl()->computeScaleAndScrollForFocusedNode(webViewImpl()->focusedEle
ment(), scale, scroll, needAnimation); | 1881 webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelp
er.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
1849 EXPECT_TRUE(needAnimation); | 1882 EXPECT_TRUE(needAnimation); |
1850 // The edit box should be left aligned with a margin for possible label. | 1883 // The edit box should be left aligned with a margin for possible label. |
1851 int hScroll = editBoxWithText.x - leftBoxRatio * viewportWidth / scale; | 1884 int hScroll = editBoxWithText.x - leftBoxRatio * viewportWidth / scale; |
1852 EXPECT_NEAR(hScroll, scroll.x(), 1); | 1885 EXPECT_NEAR(hScroll, scroll.x(), 1); |
1853 int vScroll = editBoxWithText.y - (viewportHeight / scale - editBoxWithText.
height) / 2; | 1886 int vScroll = editBoxWithText.y - (viewportHeight / scale - editBoxWithText.
height) / 2; |
1854 EXPECT_NEAR(vScroll, scroll.y(), 1); | 1887 EXPECT_NEAR(vScroll, scroll.y(), 1); |
1855 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); | 1888 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
1856 | 1889 |
1857 // The edit box is wider than the viewport when legible. | 1890 // The edit box is wider than the viewport when legible. |
1858 viewportWidth = 200; | 1891 viewportWidth = 200; |
1859 viewportHeight = 150; | 1892 viewportHeight = 150; |
1860 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 1893 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
1861 setScaleAndScrollAndLayout(m_webView, WebPoint(0, 0), 1); | 1894 setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1); |
1862 webViewImpl()->selectionBounds(caret, rect); | 1895 webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
1863 webViewImpl()->computeScaleAndScrollForFocusedNode(webViewImpl()->focusedEle
ment(), scale, scroll, needAnimation); | 1896 webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelp
er.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
1864 EXPECT_TRUE(needAnimation); | 1897 EXPECT_TRUE(needAnimation); |
1865 // The caret should be right aligned since the caret would be offscreen when
the edit box is left aligned. | 1898 // The caret should be right aligned since the caret would be offscreen when
the edit box is left aligned. |
1866 hScroll = caret.x + caret.width + caretPadding - viewportWidth / scale; | 1899 hScroll = caret.x + caret.width + caretPadding - viewportWidth / scale; |
1867 EXPECT_NEAR(hScroll, scroll.x(), 1); | 1900 EXPECT_NEAR(hScroll, scroll.x(), 1); |
1868 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); | 1901 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
1869 | 1902 |
1870 setScaleAndScrollAndLayout(m_webView, WebPoint(0, 0), 1); | 1903 setScaleAndScrollAndLayout(webViewHelper.webView(), WebPoint(0, 0), 1); |
1871 // Move focus to edit box with text. | 1904 // Move focus to edit box with text. |
1872 m_webView->advanceFocus(false); | 1905 webViewHelper.webView()->advanceFocus(false); |
1873 webViewImpl()->selectionBounds(caret, rect); | 1906 webViewHelper.webViewImpl()->selectionBounds(caret, rect); |
1874 webViewImpl()->computeScaleAndScrollForFocusedNode(webViewImpl()->focusedEle
ment(), scale, scroll, needAnimation); | 1907 webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelp
er.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
1875 EXPECT_TRUE(needAnimation); | 1908 EXPECT_TRUE(needAnimation); |
1876 // The edit box should be left aligned. | 1909 // The edit box should be left aligned. |
1877 hScroll = editBoxWithNoText.x; | 1910 hScroll = editBoxWithNoText.x; |
1878 EXPECT_NEAR(hScroll, scroll.x(), 1); | 1911 EXPECT_NEAR(hScroll, scroll.x(), 1); |
1879 vScroll = editBoxWithNoText.y - (viewportHeight / scale - editBoxWithNoText.
height) / 2; | 1912 vScroll = editBoxWithNoText.y - (viewportHeight / scale - editBoxWithNoText.
height) / 2; |
1880 EXPECT_NEAR(vScroll, scroll.y(), 1); | 1913 EXPECT_NEAR(vScroll, scroll.y(), 1); |
1881 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); | 1914 EXPECT_NEAR(minReadableCaretHeight / caret.height, scale, 0.1); |
1882 | 1915 |
1883 setScaleAndScrollAndLayout(webViewImpl(), scroll, scale); | 1916 setScaleAndScrollAndLayout(webViewHelper.webViewImpl(), scroll, scale); |
1884 | 1917 |
1885 // Move focus back to the first edit box. | 1918 // Move focus back to the first edit box. |
1886 m_webView->advanceFocus(true); | 1919 webViewHelper.webView()->advanceFocus(true); |
1887 webViewImpl()->computeScaleAndScrollForFocusedNode(webViewImpl()->focusedEle
ment(), scale, scroll, needAnimation); | 1920 webViewHelper.webViewImpl()->computeScaleAndScrollForFocusedNode(webViewHelp
er.webViewImpl()->focusedElement(), scale, scroll, needAnimation); |
1888 // The position should have stayed the same since this box was already on sc
reen with the right scale. | 1921 // The position should have stayed the same since this box was already on sc
reen with the right scale. |
1889 EXPECT_FALSE(needAnimation); | 1922 EXPECT_FALSE(needAnimation); |
1890 } | 1923 } |
1891 | 1924 |
1892 class TestReloadDoesntRedirectWebFrameClient : public WebFrameClient { | 1925 class TestReloadDoesntRedirectWebFrameClient : public WebFrameClient { |
1893 public: | 1926 public: |
1894 virtual WebNavigationPolicy decidePolicyForNavigation( | 1927 virtual WebNavigationPolicy decidePolicyForNavigation( |
1895 WebFrame*, WebDataSource::ExtraData*, const WebURLRequest&, WebNavigatio
nType, | 1928 WebFrame*, WebDataSource::ExtraData*, const WebURLRequest&, WebNavigatio
nType, |
1896 WebNavigationPolicy defaultPolicy, bool isRedirect) OVERRIDE | 1929 WebNavigationPolicy defaultPolicy, bool isRedirect) OVERRIDE |
1897 { | 1930 { |
1898 EXPECT_FALSE(isRedirect); | 1931 EXPECT_FALSE(isRedirect); |
1899 return WebNavigationPolicyCurrentTab; | 1932 return WebNavigationPolicyCurrentTab; |
1900 } | 1933 } |
1901 }; | 1934 }; |
1902 | 1935 |
1903 TEST_F(WebFrameTest, ReloadDoesntSetRedirect) | 1936 TEST_F(WebFrameTest, ReloadDoesntSetRedirect) |
1904 { | 1937 { |
1905 // Test for case in http://crbug.com/73104. Reloading a frame very quickly | 1938 // Test for case in http://crbug.com/73104. Reloading a frame very quickly |
1906 // would sometimes call decidePolicyForNavigation with isRedirect=true | 1939 // would sometimes call decidePolicyForNavigation with isRedirect=true |
1907 registerMockedHttpURLLoad("form.html"); | 1940 registerMockedHttpURLLoad("form.html"); |
1908 | 1941 |
1909 TestReloadDoesntRedirectWebFrameClient webFrameClient; | 1942 TestReloadDoesntRedirectWebFrameClient webFrameClient; |
1910 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "form.html",
false, &webFrameClient); | 1943 FrameTestHelpers::WebViewHelper webViewHelper; |
| 1944 webViewHelper.initializeAndLoad(m_baseURL + "form.html", false, &webFrameCli
ent); |
1911 | 1945 |
1912 m_webView->mainFrame()->reload(true); | 1946 webViewHelper.webView()->mainFrame()->reload(true); |
1913 // start reload before request is delivered. | 1947 // start reload before request is delivered. |
1914 m_webView->mainFrame()->reload(true); | 1948 webViewHelper.webView()->mainFrame()->reload(true); |
1915 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 1949 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1916 | |
1917 m_webView->close(); | |
1918 m_webView = 0; | |
1919 } | 1950 } |
1920 | 1951 |
1921 TEST_F(WebFrameTest, ReloadWithOverrideURLPreservesState) | 1952 TEST_F(WebFrameTest, ReloadWithOverrideURLPreservesState) |
1922 { | 1953 { |
1923 const std::string firstURL = "find.html"; | 1954 const std::string firstURL = "find.html"; |
1924 const std::string secondURL = "form.html"; | 1955 const std::string secondURL = "form.html"; |
1925 const std::string thirdURL = "history.html"; | 1956 const std::string thirdURL = "history.html"; |
1926 const float pageScaleFactor = 1.1684f; | 1957 const float pageScaleFactor = 1.1684f; |
1927 const int pageWidth = 640; | 1958 const int pageWidth = 640; |
1928 const int pageHeight = 480; | 1959 const int pageHeight = 480; |
1929 | 1960 |
1930 registerMockedHttpURLLoad(firstURL); | 1961 registerMockedHttpURLLoad(firstURL); |
1931 registerMockedHttpURLLoad(secondURL); | 1962 registerMockedHttpURLLoad(secondURL); |
1932 registerMockedHttpURLLoad(thirdURL); | 1963 registerMockedHttpURLLoad(thirdURL); |
1933 | 1964 |
1934 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + firstURL, tru
e); | 1965 FrameTestHelpers::WebViewHelper webViewHelper; |
1935 webViewImpl()->resize(WebSize(pageWidth, pageHeight)); | 1966 webViewHelper.initializeAndLoad(m_baseURL + firstURL, true); |
1936 webViewImpl()->mainFrame()->setScrollOffset(WebSize(pageWidth / 4, pageHeigh
t / 4)); | 1967 webViewHelper.webViewImpl()->resize(WebSize(pageWidth, pageHeight)); |
1937 webViewImpl()->setPageScaleFactorPreservingScrollOffset(pageScaleFactor); | 1968 webViewHelper.webViewImpl()->mainFrame()->setScrollOffset(WebSize(pageWidth
/ 4, pageHeight / 4)); |
| 1969 webViewHelper.webViewImpl()->setPageScaleFactorPreservingScrollOffset(pageSc
aleFactor); |
1938 | 1970 |
1939 WebSize previousOffset = webViewImpl()->mainFrame()->scrollOffset(); | 1971 WebSize previousOffset = webViewHelper.webViewImpl()->mainFrame()->scrollOff
set(); |
1940 float previousScale = webViewImpl()->pageScaleFactor(); | 1972 float previousScale = webViewHelper.webViewImpl()->pageScaleFactor(); |
1941 | 1973 |
1942 // Reload the page using the cache. | 1974 // Reload the page using the cache. |
1943 webViewImpl()->mainFrame()->reloadWithOverrideURL(toKURL(m_baseURL + secondU
RL), false); | 1975 webViewHelper.webViewImpl()->mainFrame()->reloadWithOverrideURL(toKURL(m_bas
eURL + secondURL), false); |
1944 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 1976 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1945 ASSERT_EQ(previousOffset, webViewImpl()->mainFrame()->scrollOffset()); | 1977 ASSERT_EQ(previousOffset, webViewHelper.webViewImpl()->mainFrame()->scrollOf
fset()); |
1946 ASSERT_EQ(previousScale, webViewImpl()->pageScaleFactor()); | 1978 ASSERT_EQ(previousScale, webViewHelper.webViewImpl()->pageScaleFactor()); |
1947 | 1979 |
1948 // Reload the page while ignoring the cache. | 1980 // Reload the page while ignoring the cache. |
1949 webViewImpl()->mainFrame()->reloadWithOverrideURL(toKURL(m_baseURL + thirdUR
L), true); | 1981 webViewHelper.webViewImpl()->mainFrame()->reloadWithOverrideURL(toKURL(m_bas
eURL + thirdURL), true); |
1950 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 1982 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1951 ASSERT_EQ(previousOffset, webViewImpl()->mainFrame()->scrollOffset()); | 1983 ASSERT_EQ(previousOffset, webViewHelper.webViewImpl()->mainFrame()->scrollOf
fset()); |
1952 ASSERT_EQ(previousScale, webViewImpl()->pageScaleFactor()); | 1984 ASSERT_EQ(previousScale, webViewHelper.webViewImpl()->pageScaleFactor()); |
1953 } | 1985 } |
1954 | 1986 |
1955 class TestReloadWhileProvisionalFrameClient : public WebFrameClient { | 1987 class TestReloadWhileProvisionalFrameClient : public WebFrameClient { |
1956 }; | 1988 }; |
1957 | 1989 |
1958 TEST_F(WebFrameTest, ReloadWhileProvisional) | 1990 TEST_F(WebFrameTest, ReloadWhileProvisional) |
1959 { | 1991 { |
1960 // Test that reloading while the previous load is still pending does not cau
se the initial | 1992 // Test that reloading while the previous load is still pending does not cau
se the initial |
1961 // request to get lost. | 1993 // request to get lost. |
1962 registerMockedHttpURLLoad("fixed_layout.html"); | 1994 registerMockedHttpURLLoad("fixed_layout.html"); |
1963 | 1995 |
1964 TestReloadWhileProvisionalFrameClient webFrameClient; | 1996 TestReloadWhileProvisionalFrameClient webFrameClient; |
1965 m_webView = FrameTestHelpers::createWebView(false, &webFrameClient); | 1997 FrameTestHelpers::WebViewHelper webViewHelper; |
1966 FrameTestHelpers::loadFrame(m_webView->mainFrame(), m_baseURL + "fixed_layou
t.html"); | 1998 webViewHelper.initialize(false, &webFrameClient); |
| 1999 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), m_baseURL
+ "fixed_layout.html"); |
1967 // start reload before first request is delivered. | 2000 // start reload before first request is delivered. |
1968 m_webView->mainFrame()->reload(true); | 2001 webViewHelper.webView()->mainFrame()->reload(true); |
1969 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 2002 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
1970 ASSERT_EQ(WebURL(toKURL(m_baseURL + "fixed_layout.html")), | 2003 ASSERT_EQ(WebURL(toKURL(m_baseURL + "fixed_layout.html")), |
1971 m_webView->mainFrame()->dataSource()->request().url()); | 2004 webViewHelper.webView()->mainFrame()->dataSource()->request().url()); |
1972 | |
1973 m_webView->close(); | |
1974 m_webView = 0; | |
1975 } | 2005 } |
1976 | 2006 |
1977 TEST_F(WebFrameTest, IframeRedirect) | 2007 TEST_F(WebFrameTest, IframeRedirect) |
1978 { | 2008 { |
1979 registerMockedHttpURLLoad("iframe_redirect.html"); | 2009 registerMockedHttpURLLoad("iframe_redirect.html"); |
1980 registerMockedHttpURLLoad("visible_iframe.html"); | 2010 registerMockedHttpURLLoad("visible_iframe.html"); |
1981 | 2011 |
1982 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "iframe_redir
ect.html", true); | 2012 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2013 webViewHelper.initializeAndLoad(m_baseURL + "iframe_redirect.html", true); |
1983 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); /
/ Load the iframe. | 2014 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); /
/ Load the iframe. |
1984 | 2015 |
1985 WebFrame* iframe = m_webView->findFrameByName(WebString::fromUTF8("ifr")); | 2016 WebFrame* iframe = webViewHelper.webView()->findFrameByName(WebString::fromU
TF8("ifr")); |
1986 ASSERT_TRUE(iframe); | 2017 ASSERT_TRUE(iframe); |
1987 WebDataSource* iframeDataSource = iframe->dataSource(); | 2018 WebDataSource* iframeDataSource = iframe->dataSource(); |
1988 ASSERT_TRUE(iframeDataSource); | 2019 ASSERT_TRUE(iframeDataSource); |
1989 WebVector<WebURL> redirects; | 2020 WebVector<WebURL> redirects; |
1990 iframeDataSource->redirectChain(redirects); | 2021 iframeDataSource->redirectChain(redirects); |
1991 ASSERT_EQ(2U, redirects.size()); | 2022 ASSERT_EQ(2U, redirects.size()); |
1992 EXPECT_EQ(toKURL("about:blank"), toKURL(redirects[0].spec().data())); | 2023 EXPECT_EQ(toKURL("about:blank"), toKURL(redirects[0].spec().data())); |
1993 EXPECT_EQ(toKURL("http://www.test.com/visible_iframe.html"), toKURL(redirect
s[1].spec().data())); | 2024 EXPECT_EQ(toKURL("http://www.test.com/visible_iframe.html"), toKURL(redirect
s[1].spec().data())); |
1994 } | 2025 } |
1995 | 2026 |
1996 TEST_F(WebFrameTest, ClearFocusedNodeTest) | 2027 TEST_F(WebFrameTest, ClearFocusedNodeTest) |
1997 { | 2028 { |
1998 registerMockedHttpURLLoad("iframe_clear_focused_node_test.html"); | 2029 registerMockedHttpURLLoad("iframe_clear_focused_node_test.html"); |
1999 registerMockedHttpURLLoad("autofocus_input_field_iframe.html"); | 2030 registerMockedHttpURLLoad("autofocus_input_field_iframe.html"); |
2000 | 2031 |
2001 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "iframe_clear
_focused_node_test.html", true); | 2032 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2033 webViewHelper.initializeAndLoad(m_baseURL + "iframe_clear_focused_node_test.
html", true); |
2002 | 2034 |
2003 // Clear the focused node. | 2035 // Clear the focused node. |
2004 m_webView->clearFocusedNode(); | 2036 webViewHelper.webView()->clearFocusedNode(); |
2005 | 2037 |
2006 // Now retrieve the FocusedNode and test it should be null. | 2038 // Now retrieve the FocusedNode and test it should be null. |
2007 EXPECT_EQ(0, webViewImpl()->focusedElement()); | 2039 EXPECT_EQ(0, webViewHelper.webViewImpl()->focusedElement()); |
2008 } | 2040 } |
2009 | 2041 |
2010 // Implementation of WebFrameClient that tracks the v8 contexts that are created | 2042 // Implementation of WebFrameClient that tracks the v8 contexts that are created |
2011 // and destroyed for verification. | 2043 // and destroyed for verification. |
2012 class ContextLifetimeTestWebFrameClient : public WebFrameClient { | 2044 class ContextLifetimeTestWebFrameClient : public WebFrameClient { |
2013 public: | 2045 public: |
2014 struct Notification { | 2046 struct Notification { |
2015 public: | 2047 public: |
2016 Notification(WebFrame* frame, v8::Handle<v8::Context> context, int world
Id) | 2048 Notification(WebFrame* frame, v8::Handle<v8::Context> context, int world
Id) |
2017 : frame(frame) | 2049 : frame(frame) |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2070 // TODO(aa): Deflake this test. | 2102 // TODO(aa): Deflake this test. |
2071 TEST_F(WebFrameTest, FLAKY_ContextNotificationsLoadUnload) | 2103 TEST_F(WebFrameTest, FLAKY_ContextNotificationsLoadUnload) |
2072 { | 2104 { |
2073 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); | 2105 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); |
2074 | 2106 |
2075 registerMockedHttpURLLoad("context_notifications_test.html"); | 2107 registerMockedHttpURLLoad("context_notifications_test.html"); |
2076 registerMockedHttpURLLoad("context_notifications_test_frame.html"); | 2108 registerMockedHttpURLLoad("context_notifications_test_frame.html"); |
2077 | 2109 |
2078 // Load a frame with an iframe, make sure we get the right create notificati
ons. | 2110 // Load a frame with an iframe, make sure we get the right create notificati
ons. |
2079 ContextLifetimeTestWebFrameClient webFrameClient; | 2111 ContextLifetimeTestWebFrameClient webFrameClient; |
2080 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "context_noti
fications_test.html", true, &webFrameClient); | 2112 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2113 webViewHelper.initializeAndLoad(m_baseURL + "context_notifications_test.html
", true, &webFrameClient); |
2081 | 2114 |
2082 WebFrame* mainFrame = m_webView->mainFrame(); | 2115 WebFrame* mainFrame = webViewHelper.webView()->mainFrame(); |
2083 WebFrame* childFrame = mainFrame->firstChild(); | 2116 WebFrame* childFrame = mainFrame->firstChild(); |
2084 | 2117 |
2085 ASSERT_EQ(2u, webFrameClient.createNotifications.size()); | 2118 ASSERT_EQ(2u, webFrameClient.createNotifications.size()); |
2086 EXPECT_EQ(0u, webFrameClient.releaseNotifications.size()); | 2119 EXPECT_EQ(0u, webFrameClient.releaseNotifications.size()); |
2087 | 2120 |
2088 ContextLifetimeTestWebFrameClient::Notification* firstCreateNotification = w
ebFrameClient.createNotifications[0]; | 2121 ContextLifetimeTestWebFrameClient::Notification* firstCreateNotification = w
ebFrameClient.createNotifications[0]; |
2089 ContextLifetimeTestWebFrameClient::Notification* secondCreateNotification =
webFrameClient.createNotifications[1]; | 2122 ContextLifetimeTestWebFrameClient::Notification* secondCreateNotification =
webFrameClient.createNotifications[1]; |
2090 | 2123 |
2091 EXPECT_EQ(mainFrame, firstCreateNotification->frame); | 2124 EXPECT_EQ(mainFrame, firstCreateNotification->frame); |
2092 EXPECT_EQ(mainFrame->mainWorldScriptContext(), firstCreateNotification->cont
ext); | 2125 EXPECT_EQ(mainFrame->mainWorldScriptContext(), firstCreateNotification->cont
ext); |
2093 EXPECT_EQ(0, firstCreateNotification->worldId); | 2126 EXPECT_EQ(0, firstCreateNotification->worldId); |
2094 | 2127 |
2095 EXPECT_EQ(childFrame, secondCreateNotification->frame); | 2128 EXPECT_EQ(childFrame, secondCreateNotification->frame); |
2096 EXPECT_EQ(childFrame->mainWorldScriptContext(), secondCreateNotification->co
ntext); | 2129 EXPECT_EQ(childFrame->mainWorldScriptContext(), secondCreateNotification->co
ntext); |
2097 EXPECT_EQ(0, secondCreateNotification->worldId); | 2130 EXPECT_EQ(0, secondCreateNotification->worldId); |
2098 | 2131 |
2099 // Close the view. We should get two release notifications that are exactly
the same as the create ones, in reverse order. | 2132 // Close the view. We should get two release notifications that are exactly
the same as the create ones, in reverse order. |
2100 m_webView->close(); | 2133 webViewHelper.reset(); |
2101 m_webView = 0; | |
2102 | 2134 |
2103 ASSERT_EQ(2u, webFrameClient.releaseNotifications.size()); | 2135 ASSERT_EQ(2u, webFrameClient.releaseNotifications.size()); |
2104 ContextLifetimeTestWebFrameClient::Notification* firstReleaseNotification =
webFrameClient.releaseNotifications[0]; | 2136 ContextLifetimeTestWebFrameClient::Notification* firstReleaseNotification =
webFrameClient.releaseNotifications[0]; |
2105 ContextLifetimeTestWebFrameClient::Notification* secondReleaseNotification =
webFrameClient.releaseNotifications[1]; | 2137 ContextLifetimeTestWebFrameClient::Notification* secondReleaseNotification =
webFrameClient.releaseNotifications[1]; |
2106 | 2138 |
2107 ASSERT_TRUE(firstCreateNotification->Equals(secondReleaseNotification)); | 2139 ASSERT_TRUE(firstCreateNotification->Equals(secondReleaseNotification)); |
2108 ASSERT_TRUE(secondCreateNotification->Equals(firstReleaseNotification)); | 2140 ASSERT_TRUE(secondCreateNotification->Equals(firstReleaseNotification)); |
2109 } | 2141 } |
2110 | 2142 |
2111 TEST_F(WebFrameTest, ContextNotificationsReload) | 2143 TEST_F(WebFrameTest, ContextNotificationsReload) |
2112 { | 2144 { |
2113 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); | 2145 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); |
2114 | 2146 |
2115 registerMockedHttpURLLoad("context_notifications_test.html"); | 2147 registerMockedHttpURLLoad("context_notifications_test.html"); |
2116 registerMockedHttpURLLoad("context_notifications_test_frame.html"); | 2148 registerMockedHttpURLLoad("context_notifications_test_frame.html"); |
2117 | 2149 |
2118 ContextLifetimeTestWebFrameClient webFrameClient; | 2150 ContextLifetimeTestWebFrameClient webFrameClient; |
2119 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "context_noti
fications_test.html", true, &webFrameClient); | 2151 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2152 webViewHelper.initializeAndLoad(m_baseURL + "context_notifications_test.html
", true, &webFrameClient); |
2120 | 2153 |
2121 // Refresh, we should get two release notifications and two more create noti
fications. | 2154 // Refresh, we should get two release notifications and two more create noti
fications. |
2122 m_webView->mainFrame()->reload(false); | 2155 webViewHelper.webView()->mainFrame()->reload(false); |
2123 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 2156 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
2124 ASSERT_EQ(4u, webFrameClient.createNotifications.size()); | 2157 ASSERT_EQ(4u, webFrameClient.createNotifications.size()); |
2125 ASSERT_EQ(2u, webFrameClient.releaseNotifications.size()); | 2158 ASSERT_EQ(2u, webFrameClient.releaseNotifications.size()); |
2126 | 2159 |
2127 // The two release notifications we got should be exactly the same as the fi
rst two create notifications. | 2160 // The two release notifications we got should be exactly the same as the fi
rst two create notifications. |
2128 for (size_t i = 0; i < webFrameClient.releaseNotifications.size(); ++i) { | 2161 for (size_t i = 0; i < webFrameClient.releaseNotifications.size(); ++i) { |
2129 EXPECT_TRUE(webFrameClient.releaseNotifications[i]->Equals( | 2162 EXPECT_TRUE(webFrameClient.releaseNotifications[i]->Equals( |
2130 webFrameClient.createNotifications[webFrameClient.createNotifications.
size() - 3 - i])); | 2163 webFrameClient.createNotifications[webFrameClient.createNotifications.
size() - 3 - i])); |
2131 } | 2164 } |
2132 | 2165 |
2133 // The last two create notifications should be for the current frames and co
ntext. | 2166 // The last two create notifications should be for the current frames and co
ntext. |
2134 WebFrame* mainFrame = m_webView->mainFrame(); | 2167 WebFrame* mainFrame = webViewHelper.webView()->mainFrame(); |
2135 WebFrame* childFrame = mainFrame->firstChild(); | 2168 WebFrame* childFrame = mainFrame->firstChild(); |
2136 ContextLifetimeTestWebFrameClient::Notification* firstRefreshNotification =
webFrameClient.createNotifications[2]; | 2169 ContextLifetimeTestWebFrameClient::Notification* firstRefreshNotification =
webFrameClient.createNotifications[2]; |
2137 ContextLifetimeTestWebFrameClient::Notification* secondRefreshNotification =
webFrameClient.createNotifications[3]; | 2170 ContextLifetimeTestWebFrameClient::Notification* secondRefreshNotification =
webFrameClient.createNotifications[3]; |
2138 | 2171 |
2139 EXPECT_EQ(mainFrame, firstRefreshNotification->frame); | 2172 EXPECT_EQ(mainFrame, firstRefreshNotification->frame); |
2140 EXPECT_EQ(mainFrame->mainWorldScriptContext(), firstRefreshNotification->con
text); | 2173 EXPECT_EQ(mainFrame->mainWorldScriptContext(), firstRefreshNotification->con
text); |
2141 EXPECT_EQ(0, firstRefreshNotification->worldId); | 2174 EXPECT_EQ(0, firstRefreshNotification->worldId); |
2142 | 2175 |
2143 EXPECT_EQ(childFrame, secondRefreshNotification->frame); | 2176 EXPECT_EQ(childFrame, secondRefreshNotification->frame); |
2144 EXPECT_EQ(childFrame->mainWorldScriptContext(), secondRefreshNotification->c
ontext); | 2177 EXPECT_EQ(childFrame->mainWorldScriptContext(), secondRefreshNotification->c
ontext); |
2145 EXPECT_EQ(0, secondRefreshNotification->worldId); | 2178 EXPECT_EQ(0, secondRefreshNotification->worldId); |
2146 | |
2147 m_webView->close(); | |
2148 m_webView = 0; | |
2149 } | 2179 } |
2150 | 2180 |
2151 TEST_F(WebFrameTest, ContextNotificationsIsolatedWorlds) | 2181 TEST_F(WebFrameTest, ContextNotificationsIsolatedWorlds) |
2152 { | 2182 { |
2153 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 2183 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
2154 v8::HandleScope handleScope(isolate); | 2184 v8::HandleScope handleScope(isolate); |
2155 | 2185 |
2156 registerMockedHttpURLLoad("context_notifications_test.html"); | 2186 registerMockedHttpURLLoad("context_notifications_test.html"); |
2157 registerMockedHttpURLLoad("context_notifications_test_frame.html"); | 2187 registerMockedHttpURLLoad("context_notifications_test_frame.html"); |
2158 | 2188 |
2159 ContextLifetimeTestWebFrameClient webFrameClient; | 2189 ContextLifetimeTestWebFrameClient webFrameClient; |
2160 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "context_noti
fications_test.html", true, &webFrameClient); | 2190 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2191 webViewHelper.initializeAndLoad(m_baseURL + "context_notifications_test.html
", true, &webFrameClient); |
2161 | 2192 |
2162 // Add an isolated world. | 2193 // Add an isolated world. |
2163 webFrameClient.reset(); | 2194 webFrameClient.reset(); |
2164 | 2195 |
2165 int isolatedWorldId = 42; | 2196 int isolatedWorldId = 42; |
2166 WebScriptSource scriptSource("hi!"); | 2197 WebScriptSource scriptSource("hi!"); |
2167 int numSources = 1; | 2198 int numSources = 1; |
2168 int extensionGroup = 0; | 2199 int extensionGroup = 0; |
2169 m_webView->mainFrame()->executeScriptInIsolatedWorld(isolatedWorldId, &scrip
tSource, numSources, extensionGroup); | 2200 webViewHelper.webView()->mainFrame()->executeScriptInIsolatedWorld(isolatedW
orldId, &scriptSource, numSources, extensionGroup); |
2170 | 2201 |
2171 // We should now have a new create notification. | 2202 // We should now have a new create notification. |
2172 ASSERT_EQ(1u, webFrameClient.createNotifications.size()); | 2203 ASSERT_EQ(1u, webFrameClient.createNotifications.size()); |
2173 ContextLifetimeTestWebFrameClient::Notification* notification = webFrameClie
nt.createNotifications[0]; | 2204 ContextLifetimeTestWebFrameClient::Notification* notification = webFrameClie
nt.createNotifications[0]; |
2174 ASSERT_EQ(isolatedWorldId, notification->worldId); | 2205 ASSERT_EQ(isolatedWorldId, notification->worldId); |
2175 ASSERT_EQ(m_webView->mainFrame(), notification->frame); | 2206 ASSERT_EQ(webViewHelper.webView()->mainFrame(), notification->frame); |
2176 | 2207 |
2177 // We don't have an API to enumarate isolated worlds for a frame, but we can
at least assert that the context we got is *not* the main world's context. | 2208 // We don't have an API to enumarate isolated worlds for a frame, but we can
at least assert that the context we got is *not* the main world's context. |
2178 ASSERT_NE(m_webView->mainFrame()->mainWorldScriptContext(), v8::Local<v8::Co
ntext>::New(isolate, notification->context)); | 2209 ASSERT_NE(webViewHelper.webView()->mainFrame()->mainWorldScriptContext(), v8
::Local<v8::Context>::New(isolate, notification->context)); |
2179 | 2210 |
2180 m_webView->close(); | 2211 webViewHelper.reset(); |
2181 m_webView = 0; | |
2182 | 2212 |
2183 // We should have gotten three release notifications (one for each of the fr
ames, plus one for the isolated context). | 2213 // We should have gotten three release notifications (one for each of the fr
ames, plus one for the isolated context). |
2184 ASSERT_EQ(3u, webFrameClient.releaseNotifications.size()); | 2214 ASSERT_EQ(3u, webFrameClient.releaseNotifications.size()); |
2185 | 2215 |
2186 // And one of them should be exactly the same as the create notification for
the isolated context. | 2216 // And one of them should be exactly the same as the create notification for
the isolated context. |
2187 int matchCount = 0; | 2217 int matchCount = 0; |
2188 for (size_t i = 0; i < webFrameClient.releaseNotifications.size(); ++i) { | 2218 for (size_t i = 0; i < webFrameClient.releaseNotifications.size(); ++i) { |
2189 if (webFrameClient.releaseNotifications[i]->Equals(webFrameClient.createNo
tifications[0])) | 2219 if (webFrameClient.releaseNotifications[i]->Equals(webFrameClient.createNo
tifications[0])) |
2190 ++matchCount; | 2220 ++matchCount; |
2191 } | 2221 } |
2192 EXPECT_EQ(1, matchCount); | 2222 EXPECT_EQ(1, matchCount); |
2193 } | 2223 } |
2194 | 2224 |
2195 TEST_F(WebFrameTest, FindInPage) | 2225 TEST_F(WebFrameTest, FindInPage) |
2196 { | 2226 { |
2197 registerMockedHttpURLLoad("find.html"); | 2227 registerMockedHttpURLLoad("find.html"); |
2198 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find.html"); | 2228 FrameTestHelpers::WebViewHelper webViewHelper; |
2199 WebFrame* frame = m_webView->mainFrame(); | 2229 webViewHelper.initializeAndLoad(m_baseURL + "find.html"); |
| 2230 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
2200 const int findIdentifier = 12345; | 2231 const int findIdentifier = 12345; |
2201 WebFindOptions options; | 2232 WebFindOptions options; |
2202 | 2233 |
2203 // Find in a <div> element. | 2234 // Find in a <div> element. |
2204 EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar1"), options
, false, 0)); | 2235 EXPECT_TRUE(frame->find(findIdentifier, WebString::fromUTF8("bar1"), options
, false, 0)); |
2205 frame->stopFinding(false); | 2236 frame->stopFinding(false); |
2206 WebRange range = frame->selectionRange(); | 2237 WebRange range = frame->selectionRange(); |
2207 EXPECT_EQ(5, range.startOffset()); | 2238 EXPECT_EQ(5, range.startOffset()); |
2208 EXPECT_EQ(9, range.endOffset()); | 2239 EXPECT_EQ(9, range.endOffset()); |
2209 EXPECT_TRUE(frame->document().focusedNode().isNull()); | 2240 EXPECT_TRUE(frame->document().focusedNode().isNull()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2243 EXPECT_FALSE(frame->find(findIdentifier, WebString::fromUTF8("bar5"), option
s, false, 0)); | 2274 EXPECT_FALSE(frame->find(findIdentifier, WebString::fromUTF8("bar5"), option
s, false, 0)); |
2244 // If there are any matches, stopFinding will set the selection on the found
text. | 2275 // If there are any matches, stopFinding will set the selection on the found
text. |
2245 // However, we do not expect any matches, so check that the selection is nul
l. | 2276 // However, we do not expect any matches, so check that the selection is nul
l. |
2246 frame->stopFinding(false); | 2277 frame->stopFinding(false); |
2247 range = frame->selectionRange(); | 2278 range = frame->selectionRange(); |
2248 ASSERT_TRUE(range.isNull()); | 2279 ASSERT_TRUE(range.isNull()); |
2249 } | 2280 } |
2250 | 2281 |
2251 TEST_F(WebFrameTest, GetContentAsPlainText) | 2282 TEST_F(WebFrameTest, GetContentAsPlainText) |
2252 { | 2283 { |
2253 m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true); | 2284 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2285 webViewHelper.initializeAndLoad("about:blank", true); |
2254 // We set the size because it impacts line wrapping, which changes the | 2286 // We set the size because it impacts line wrapping, which changes the |
2255 // resulting text value. | 2287 // resulting text value. |
2256 m_webView->resize(WebSize(640, 480)); | 2288 webViewHelper.webView()->resize(WebSize(640, 480)); |
2257 WebFrame* frame = m_webView->mainFrame(); | 2289 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
2258 | 2290 |
2259 // Generate a simple test case. | 2291 // Generate a simple test case. |
2260 const char simpleSource[] = "<div>Foo bar</div><div></div>baz"; | 2292 const char simpleSource[] = "<div>Foo bar</div><div></div>baz"; |
2261 WebCore::KURL testURL = toKURL("about:blank"); | 2293 WebCore::KURL testURL = toKURL("about:blank"); |
2262 frame->loadHTMLString(simpleSource, testURL); | 2294 frame->loadHTMLString(simpleSource, testURL); |
2263 runPendingTasks(); | 2295 runPendingTasks(); |
2264 | 2296 |
2265 // Make sure it comes out OK. | 2297 // Make sure it comes out OK. |
2266 const std::string expected("Foo bar\nbaz"); | 2298 const std::string expected("Foo bar\nbaz"); |
2267 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); | 2299 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); |
(...skipping 19 matching lines...) Expand all Loading... |
2287 EXPECT_EQ("Hello world\n\nsub\ntext", std::string(text.utf8().data())); | 2319 EXPECT_EQ("Hello world\n\nsub\ntext", std::string(text.utf8().data())); |
2288 | 2320 |
2289 // Get the frame text where the subframe separator falls on the boundary of | 2321 // Get the frame text where the subframe separator falls on the boundary of |
2290 // what we'll take. There used to be a crash in this case. | 2322 // what we'll take. There used to be a crash in this case. |
2291 text = frame->contentAsText(12); | 2323 text = frame->contentAsText(12); |
2292 EXPECT_EQ("Hello world", std::string(text.utf8().data())); | 2324 EXPECT_EQ("Hello world", std::string(text.utf8().data())); |
2293 } | 2325 } |
2294 | 2326 |
2295 TEST_F(WebFrameTest, GetFullHtmlOfPage) | 2327 TEST_F(WebFrameTest, GetFullHtmlOfPage) |
2296 { | 2328 { |
2297 m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true); | 2329 FrameTestHelpers::WebViewHelper webViewHelper; |
2298 WebFrame* frame = m_webView->mainFrame(); | 2330 webViewHelper.initializeAndLoad("about:blank", true); |
| 2331 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
2299 | 2332 |
2300 // Generate a simple test case. | 2333 // Generate a simple test case. |
2301 const char simpleSource[] = "<p>Hello</p><p>World</p>"; | 2334 const char simpleSource[] = "<p>Hello</p><p>World</p>"; |
2302 WebCore::KURL testURL = toKURL("about:blank"); | 2335 WebCore::KURL testURL = toKURL("about:blank"); |
2303 frame->loadHTMLString(simpleSource, testURL); | 2336 frame->loadHTMLString(simpleSource, testURL); |
2304 runPendingTasks(); | 2337 runPendingTasks(); |
2305 | 2338 |
2306 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); | 2339 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); |
2307 EXPECT_EQ("Hello\n\nWorld", std::string(text.utf8().data())); | 2340 EXPECT_EQ("Hello\n\nWorld", std::string(text.utf8().data())); |
2308 | 2341 |
(...skipping 24 matching lines...) Expand all Loading... |
2333 { | 2366 { |
2334 frame->executeScript(WebScriptSource("window.history = 'replaced';")); | 2367 frame->executeScript(WebScriptSource("window.history = 'replaced';")); |
2335 } | 2368 } |
2336 }; | 2369 }; |
2337 | 2370 |
2338 TEST_F(WebFrameTest, ExecuteScriptDuringDidCreateScriptContext) | 2371 TEST_F(WebFrameTest, ExecuteScriptDuringDidCreateScriptContext) |
2339 { | 2372 { |
2340 registerMockedHttpURLLoad("hello_world.html"); | 2373 registerMockedHttpURLLoad("hello_world.html"); |
2341 | 2374 |
2342 TestExecuteScriptDuringDidCreateScriptContext webFrameClient; | 2375 TestExecuteScriptDuringDidCreateScriptContext webFrameClient; |
2343 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "hello_world.
html", true, &webFrameClient); | 2376 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2377 webViewHelper.initializeAndLoad(m_baseURL + "hello_world.html", true, &webFr
ameClient); |
2344 | 2378 |
2345 m_webView->mainFrame()->reload(); | 2379 webViewHelper.webView()->mainFrame()->reload(); |
2346 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 2380 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
2347 | |
2348 m_webView->close(); | |
2349 m_webView = 0; | |
2350 } | 2381 } |
2351 | 2382 |
2352 class TestDidCreateFrameWebFrameClient : public WebFrameClient { | 2383 class TestDidCreateFrameWebFrameClient : public WebFrameClient { |
2353 public: | 2384 public: |
2354 TestDidCreateFrameWebFrameClient() : m_frameCount(0), m_parent(0) | 2385 TestDidCreateFrameWebFrameClient() : m_frameCount(0), m_parent(0) |
2355 { | 2386 { |
2356 } | 2387 } |
2357 | 2388 |
2358 virtual void didCreateFrame(WebFrame* parent, WebFrame* child) | 2389 virtual void didCreateFrame(WebFrame* parent, WebFrame* child) |
2359 { | 2390 { |
2360 m_frameCount++; | 2391 m_frameCount++; |
2361 if (!m_parent) | 2392 if (!m_parent) |
2362 m_parent = parent; | 2393 m_parent = parent; |
2363 } | 2394 } |
2364 | 2395 |
2365 int m_frameCount; | 2396 int m_frameCount; |
2366 WebFrame* m_parent; | 2397 WebFrame* m_parent; |
2367 }; | 2398 }; |
2368 | 2399 |
2369 TEST_F(WebFrameTest, DidCreateFrame) | 2400 TEST_F(WebFrameTest, DidCreateFrame) |
2370 { | 2401 { |
2371 registerMockedHttpURLLoad("iframes_test.html"); | 2402 registerMockedHttpURLLoad("iframes_test.html"); |
2372 registerMockedHttpURLLoad("visible_iframe.html"); | 2403 registerMockedHttpURLLoad("visible_iframe.html"); |
2373 registerMockedHttpURLLoad("invisible_iframe.html"); | 2404 registerMockedHttpURLLoad("invisible_iframe.html"); |
2374 registerMockedHttpURLLoad("zero_sized_iframe.html"); | 2405 registerMockedHttpURLLoad("zero_sized_iframe.html"); |
2375 | 2406 |
2376 TestDidCreateFrameWebFrameClient webFrameClient; | 2407 TestDidCreateFrameWebFrameClient webFrameClient; |
2377 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "iframes_test
.html", false, &webFrameClient); | 2408 FrameTestHelpers::WebViewHelper webViewHelper; |
| 2409 webViewHelper.initializeAndLoad(m_baseURL + "iframes_test.html", false, &web
FrameClient); |
2378 | 2410 |
2379 EXPECT_EQ(webFrameClient.m_frameCount, 3); | 2411 EXPECT_EQ(webFrameClient.m_frameCount, 3); |
2380 EXPECT_EQ(webFrameClient.m_parent, m_webView->mainFrame()); | 2412 EXPECT_EQ(webFrameClient.m_parent, webViewHelper.webView()->mainFrame()); |
2381 | |
2382 m_webView->close(); | |
2383 m_webView = 0; | |
2384 } | 2413 } |
2385 | 2414 |
2386 class FindUpdateWebFrameClient : public WebFrameClient { | 2415 class FindUpdateWebFrameClient : public WebFrameClient { |
2387 public: | 2416 public: |
2388 FindUpdateWebFrameClient() | 2417 FindUpdateWebFrameClient() |
2389 : m_findResultsAreReady(false) | 2418 : m_findResultsAreReady(false) |
2390 , m_count(-1) | 2419 , m_count(-1) |
2391 { | 2420 { |
2392 } | 2421 } |
2393 | 2422 |
(...skipping 16 matching lines...) Expand all Loading... |
2410 #if OS(MACOSX) | 2439 #if OS(MACOSX) |
2411 TEST_F(WebFrameTest, DISABLED_FindInPageMatchRects) | 2440 TEST_F(WebFrameTest, DISABLED_FindInPageMatchRects) |
2412 #else | 2441 #else |
2413 TEST_F(WebFrameTest, FindInPageMatchRects) | 2442 TEST_F(WebFrameTest, FindInPageMatchRects) |
2414 #endif | 2443 #endif |
2415 { | 2444 { |
2416 registerMockedHttpURLLoad("find_in_page.html"); | 2445 registerMockedHttpURLLoad("find_in_page.html"); |
2417 registerMockedHttpURLLoad("find_in_page_frame.html"); | 2446 registerMockedHttpURLLoad("find_in_page_frame.html"); |
2418 | 2447 |
2419 FindUpdateWebFrameClient client; | 2448 FindUpdateWebFrameClient client; |
2420 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find_in_page
.html", true, &client); | 2449 FrameTestHelpers::WebViewHelper webViewHelper; |
2421 m_webView->resize(WebSize(640, 480)); | 2450 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie
nt); |
2422 m_webView->layout(); | 2451 webViewHelper.webView()->resize(WebSize(640, 480)); |
| 2452 webViewHelper.webView()->layout(); |
2423 runPendingTasks(); | 2453 runPendingTasks(); |
2424 | 2454 |
2425 // Note that the 'result 19' in the <select> element is not expected to prod
uce a match. | 2455 // Note that the 'result 19' in the <select> element is not expected to prod
uce a match. |
2426 static const char* kFindString = "result"; | 2456 static const char* kFindString = "result"; |
2427 static const int kFindIdentifier = 12345; | 2457 static const int kFindIdentifier = 12345; |
2428 static const int kNumResults = 19; | 2458 static const int kNumResults = 19; |
2429 | 2459 |
2430 WebFindOptions options; | 2460 WebFindOptions options; |
2431 WebString searchText = WebString::fromUTF8(kFindString); | 2461 WebString searchText = WebString::fromUTF8(kFindString); |
2432 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2462 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2433 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; | 2463 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; |
2434 | 2464 |
2435 mainFrame->resetMatchCount(); | 2465 mainFrame->resetMatchCount(); |
2436 | 2466 |
2437 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2467 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2438 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); | 2468 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); |
2439 | 2469 |
2440 runPendingTasks(); | 2470 runPendingTasks(); |
2441 EXPECT_TRUE(client.findResultsAreReady()); | 2471 EXPECT_TRUE(client.findResultsAreReady()); |
2442 | 2472 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2517 EXPECT_TRUE(webMatchRects[12].y < webMatchRects[14].y); | 2547 EXPECT_TRUE(webMatchRects[12].y < webMatchRects[14].y); |
2518 | 2548 |
2519 // Result 16 should be below result 15. | 2549 // Result 16 should be below result 15. |
2520 EXPECT_TRUE(webMatchRects[15].y > webMatchRects[14].y); | 2550 EXPECT_TRUE(webMatchRects[15].y > webMatchRects[14].y); |
2521 | 2551 |
2522 // Result 18 should be normalized with respect to the position:relative div,
and not it's | 2552 // Result 18 should be normalized with respect to the position:relative div,
and not it's |
2523 // immediate containing div. Consequently, result 18 should be above result
17. | 2553 // immediate containing div. Consequently, result 18 should be above result
17. |
2524 EXPECT_TRUE(webMatchRects[17].y > webMatchRects[18].y); | 2554 EXPECT_TRUE(webMatchRects[17].y > webMatchRects[18].y); |
2525 | 2555 |
2526 // Resizing should update the rects version. | 2556 // Resizing should update the rects version. |
2527 m_webView->resize(WebSize(800, 600)); | 2557 webViewHelper.webView()->resize(WebSize(800, 600)); |
2528 runPendingTasks(); | 2558 runPendingTasks(); |
2529 EXPECT_TRUE(mainFrame->findMatchMarkersVersion() != rectsVersion); | 2559 EXPECT_TRUE(mainFrame->findMatchMarkersVersion() != rectsVersion); |
2530 | |
2531 m_webView->close(); | |
2532 m_webView = 0; | |
2533 } | 2560 } |
2534 | 2561 |
2535 TEST_F(WebFrameTest, FindInPageSkipsHiddenFrames) | 2562 TEST_F(WebFrameTest, FindInPageSkipsHiddenFrames) |
2536 { | 2563 { |
2537 registerMockedHttpURLLoad("find_in_hidden_frame.html"); | 2564 registerMockedHttpURLLoad("find_in_hidden_frame.html"); |
2538 | 2565 |
2539 FindUpdateWebFrameClient client; | 2566 FindUpdateWebFrameClient client; |
2540 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find_in_hidd
en_frame.html", true, &client); | 2567 FrameTestHelpers::WebViewHelper webViewHelper; |
2541 m_webView->resize(WebSize(640, 480)); | 2568 webViewHelper.initializeAndLoad(m_baseURL + "find_in_hidden_frame.html", tru
e, &client); |
2542 m_webView->layout(); | 2569 webViewHelper.webView()->resize(WebSize(640, 480)); |
| 2570 webViewHelper.webView()->layout(); |
2543 runPendingTasks(); | 2571 runPendingTasks(); |
2544 | 2572 |
2545 static const char* kFindString = "hello"; | 2573 static const char* kFindString = "hello"; |
2546 static const int kFindIdentifier = 12345; | 2574 static const int kFindIdentifier = 12345; |
2547 static const int kNumResults = 1; | 2575 static const int kNumResults = 1; |
2548 | 2576 |
2549 WebFindOptions options; | 2577 WebFindOptions options; |
2550 WebString searchText = WebString::fromUTF8(kFindString); | 2578 WebString searchText = WebString::fromUTF8(kFindString); |
2551 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2579 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2552 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; | 2580 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; |
2553 | 2581 |
2554 mainFrame->resetMatchCount(); | 2582 mainFrame->resetMatchCount(); |
2555 | 2583 |
2556 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2584 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2557 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); | 2585 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); |
2558 | 2586 |
2559 runPendingTasks(); | 2587 runPendingTasks(); |
2560 EXPECT_TRUE(client.findResultsAreReady()); | 2588 EXPECT_TRUE(client.findResultsAreReady()); |
2561 EXPECT_EQ(kNumResults, client.count()); | 2589 EXPECT_EQ(kNumResults, client.count()); |
2562 | |
2563 m_webView->close(); | |
2564 m_webView = 0; | |
2565 } | 2590 } |
2566 | 2591 |
2567 TEST_F(WebFrameTest, FindOnDetachedFrame) | 2592 TEST_F(WebFrameTest, FindOnDetachedFrame) |
2568 { | 2593 { |
2569 registerMockedHttpURLLoad("find_in_page.html"); | 2594 registerMockedHttpURLLoad("find_in_page.html"); |
2570 registerMockedHttpURLLoad("find_in_page_frame.html"); | 2595 registerMockedHttpURLLoad("find_in_page_frame.html"); |
2571 | 2596 |
2572 FindUpdateWebFrameClient client; | 2597 FindUpdateWebFrameClient client; |
2573 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find_in_page
.html", true, &client); | 2598 FrameTestHelpers::WebViewHelper webViewHelper; |
2574 m_webView->resize(WebSize(640, 480)); | 2599 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie
nt); |
2575 m_webView->layout(); | 2600 webViewHelper.webView()->resize(WebSize(640, 480)); |
| 2601 webViewHelper.webView()->layout(); |
2576 runPendingTasks(); | 2602 runPendingTasks(); |
2577 | 2603 |
2578 static const char* kFindString = "result"; | 2604 static const char* kFindString = "result"; |
2579 static const int kFindIdentifier = 12345; | 2605 static const int kFindIdentifier = 12345; |
2580 | 2606 |
2581 WebFindOptions options; | 2607 WebFindOptions options; |
2582 WebString searchText = WebString::fromUTF8(kFindString); | 2608 WebString searchText = WebString::fromUTF8(kFindString); |
2583 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2609 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2584 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); | 2610 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); |
2585 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); | 2611 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); |
2586 | 2612 |
2587 // Detach the frame before finding. | 2613 // Detach the frame before finding. |
2588 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); | 2614 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); |
2589 | 2615 |
2590 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; | 2616 EXPECT_TRUE(mainFrame->find(kFindIdentifier, searchText, options, false, 0))
; |
2591 EXPECT_FALSE(secondFrame->find(kFindIdentifier, searchText, options, false,
0)); | 2617 EXPECT_FALSE(secondFrame->find(kFindIdentifier, searchText, options, false,
0)); |
2592 | 2618 |
2593 runPendingTasks(); | 2619 runPendingTasks(); |
2594 EXPECT_FALSE(client.findResultsAreReady()); | 2620 EXPECT_FALSE(client.findResultsAreReady()); |
2595 | 2621 |
2596 mainFrame->resetMatchCount(); | 2622 mainFrame->resetMatchCount(); |
2597 | 2623 |
2598 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2624 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2599 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); | 2625 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); |
2600 | 2626 |
2601 runPendingTasks(); | 2627 runPendingTasks(); |
2602 EXPECT_TRUE(client.findResultsAreReady()); | 2628 EXPECT_TRUE(client.findResultsAreReady()); |
2603 | 2629 |
2604 holdSecondFrame.release(); | 2630 holdSecondFrame.release(); |
2605 | |
2606 m_webView->close(); | |
2607 m_webView = 0; | |
2608 } | 2631 } |
2609 | 2632 |
2610 TEST_F(WebFrameTest, FindDetachFrameBeforeScopeStrings) | 2633 TEST_F(WebFrameTest, FindDetachFrameBeforeScopeStrings) |
2611 { | 2634 { |
2612 registerMockedHttpURLLoad("find_in_page.html"); | 2635 registerMockedHttpURLLoad("find_in_page.html"); |
2613 registerMockedHttpURLLoad("find_in_page_frame.html"); | 2636 registerMockedHttpURLLoad("find_in_page_frame.html"); |
2614 | 2637 |
2615 FindUpdateWebFrameClient client; | 2638 FindUpdateWebFrameClient client; |
2616 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find_in_page
.html", true, &client); | 2639 FrameTestHelpers::WebViewHelper webViewHelper; |
2617 m_webView->resize(WebSize(640, 480)); | 2640 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie
nt); |
2618 m_webView->layout(); | 2641 webViewHelper.webView()->resize(WebSize(640, 480)); |
| 2642 webViewHelper.webView()->layout(); |
2619 runPendingTasks(); | 2643 runPendingTasks(); |
2620 | 2644 |
2621 static const char* kFindString = "result"; | 2645 static const char* kFindString = "result"; |
2622 static const int kFindIdentifier = 12345; | 2646 static const int kFindIdentifier = 12345; |
2623 | 2647 |
2624 WebFindOptions options; | 2648 WebFindOptions options; |
2625 WebString searchText = WebString::fromUTF8(kFindString); | 2649 WebString searchText = WebString::fromUTF8(kFindString); |
2626 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2650 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2627 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); | 2651 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); |
2628 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); | 2652 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); |
2629 | 2653 |
2630 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2654 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2631 EXPECT_TRUE(frame->find(kFindIdentifier, searchText, options, false, 0))
; | 2655 EXPECT_TRUE(frame->find(kFindIdentifier, searchText, options, false, 0))
; |
2632 | 2656 |
2633 runPendingTasks(); | 2657 runPendingTasks(); |
2634 EXPECT_FALSE(client.findResultsAreReady()); | 2658 EXPECT_FALSE(client.findResultsAreReady()); |
2635 | 2659 |
2636 // Detach the frame between finding and scoping. | 2660 // Detach the frame between finding and scoping. |
2637 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); | 2661 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); |
2638 | 2662 |
2639 mainFrame->resetMatchCount(); | 2663 mainFrame->resetMatchCount(); |
2640 | 2664 |
2641 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2665 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2642 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); | 2666 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); |
2643 | 2667 |
2644 runPendingTasks(); | 2668 runPendingTasks(); |
2645 EXPECT_TRUE(client.findResultsAreReady()); | 2669 EXPECT_TRUE(client.findResultsAreReady()); |
2646 | 2670 |
2647 holdSecondFrame.release(); | 2671 holdSecondFrame.release(); |
2648 | |
2649 m_webView->close(); | |
2650 m_webView = 0; | |
2651 } | 2672 } |
2652 | 2673 |
2653 TEST_F(WebFrameTest, FindDetachFrameWhileScopingStrings) | 2674 TEST_F(WebFrameTest, FindDetachFrameWhileScopingStrings) |
2654 { | 2675 { |
2655 registerMockedHttpURLLoad("find_in_page.html"); | 2676 registerMockedHttpURLLoad("find_in_page.html"); |
2656 registerMockedHttpURLLoad("find_in_page_frame.html"); | 2677 registerMockedHttpURLLoad("find_in_page_frame.html"); |
2657 | 2678 |
2658 FindUpdateWebFrameClient client; | 2679 FindUpdateWebFrameClient client; |
2659 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "find_in_page
.html", true, &client); | 2680 FrameTestHelpers::WebViewHelper webViewHelper; |
2660 m_webView->resize(WebSize(640, 480)); | 2681 webViewHelper.initializeAndLoad(m_baseURL + "find_in_page.html", true, &clie
nt); |
2661 m_webView->layout(); | 2682 webViewHelper.webView()->resize(WebSize(640, 480)); |
| 2683 webViewHelper.webView()->layout(); |
2662 runPendingTasks(); | 2684 runPendingTasks(); |
2663 | 2685 |
2664 static const char* kFindString = "result"; | 2686 static const char* kFindString = "result"; |
2665 static const int kFindIdentifier = 12345; | 2687 static const int kFindIdentifier = 12345; |
2666 | 2688 |
2667 WebFindOptions options; | 2689 WebFindOptions options; |
2668 WebString searchText = WebString::fromUTF8(kFindString); | 2690 WebString searchText = WebString::fromUTF8(kFindString); |
2669 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2691 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2670 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); | 2692 WebFrameImpl* secondFrame = toWebFrameImpl(mainFrame->traverseNext(false)); |
2671 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); | 2693 RefPtr<WebCore::Frame> holdSecondFrame = secondFrame->frame(); |
2672 | 2694 |
2673 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2695 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2674 EXPECT_TRUE(frame->find(kFindIdentifier, searchText, options, false, 0))
; | 2696 EXPECT_TRUE(frame->find(kFindIdentifier, searchText, options, false, 0))
; |
2675 | 2697 |
2676 runPendingTasks(); | 2698 runPendingTasks(); |
2677 EXPECT_FALSE(client.findResultsAreReady()); | 2699 EXPECT_FALSE(client.findResultsAreReady()); |
2678 | 2700 |
2679 mainFrame->resetMatchCount(); | 2701 mainFrame->resetMatchCount(); |
2680 | 2702 |
2681 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) | 2703 for (WebFrame* frame = mainFrame; frame; frame = frame->traverseNext(false)) |
2682 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); | 2704 frame->scopeStringMatches(kFindIdentifier, searchText, options, true); |
2683 | 2705 |
2684 // The first scopeStringMatches will have reset the state. Detach before it
actually scopes. | 2706 // The first scopeStringMatches will have reset the state. Detach before it
actually scopes. |
2685 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); | 2707 EXPECT_TRUE(mainFrame->document().getElementById("frame").remove()); |
2686 | 2708 |
2687 runPendingTasks(); | 2709 runPendingTasks(); |
2688 EXPECT_TRUE(client.findResultsAreReady()); | 2710 EXPECT_TRUE(client.findResultsAreReady()); |
2689 | 2711 |
2690 holdSecondFrame.release(); | 2712 holdSecondFrame.release(); |
2691 | |
2692 m_webView->close(); | |
2693 m_webView = 0; | |
2694 } | |
2695 | |
2696 static WebView* createWebViewForTextSelection(const std::string& url) | |
2697 { | |
2698 WebView* webView = FrameTestHelpers::createWebViewAndLoad(url, true); | |
2699 webView->settings()->setDefaultFontSize(12); | |
2700 webView->enableFixedLayoutMode(false); | |
2701 webView->resize(WebSize(640, 480)); | |
2702 return webView; | |
2703 } | 2713 } |
2704 | 2714 |
2705 static WebPoint topLeft(const WebRect& rect) | 2715 static WebPoint topLeft(const WebRect& rect) |
2706 { | 2716 { |
2707 return WebPoint(rect.x, rect.y); | 2717 return WebPoint(rect.x, rect.y); |
2708 } | 2718 } |
2709 | 2719 |
2710 static WebPoint bottomRightMinusOne(const WebRect& rect) | 2720 static WebPoint bottomRightMinusOne(const WebRect& rect) |
2711 { | 2721 { |
2712 // FIXME: If we don't subtract 1 from the x- and y-coordinates of the | 2722 // FIXME: If we don't subtract 1 from the x- and y-coordinates of the |
(...skipping 15 matching lines...) Expand all Loading... |
2728 | 2738 |
2729 TEST_F(WebFrameTest, SelectRange) | 2739 TEST_F(WebFrameTest, SelectRange) |
2730 { | 2740 { |
2731 WebFrame* frame; | 2741 WebFrame* frame; |
2732 WebRect startWebRect; | 2742 WebRect startWebRect; |
2733 WebRect endWebRect; | 2743 WebRect endWebRect; |
2734 | 2744 |
2735 registerMockedHttpURLLoad("select_range_basic.html"); | 2745 registerMockedHttpURLLoad("select_range_basic.html"); |
2736 registerMockedHttpURLLoad("select_range_scroll.html"); | 2746 registerMockedHttpURLLoad("select_range_scroll.html"); |
2737 | 2747 |
2738 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_basic.ht
ml"); | 2748 FrameTestHelpers::WebViewHelper webViewHelper; |
2739 frame = m_webView->mainFrame(); | 2749 initializeTextSelectionWebView(m_baseURL + "select_range_basic.html", &webVi
ewHelper); |
| 2750 frame = webViewHelper.webView()->mainFrame(); |
2740 EXPECT_EQ("Some test text for testing.", selectionAsString(frame)); | 2751 EXPECT_EQ("Some test text for testing.", selectionAsString(frame)); |
2741 m_webView->selectionBounds(startWebRect, endWebRect); | 2752 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2742 frame->executeCommand(WebString::fromUTF8("Unselect")); | 2753 frame->executeCommand(WebString::fromUTF8("Unselect")); |
2743 EXPECT_EQ("", selectionAsString(frame)); | 2754 EXPECT_EQ("", selectionAsString(frame)); |
2744 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); | 2755 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); |
2745 EXPECT_EQ("Some test text for testing.", selectionAsString(frame)); | 2756 EXPECT_EQ("Some test text for testing.", selectionAsString(frame)); |
2746 m_webView->close(); | |
2747 m_webView = 0; | |
2748 | 2757 |
2749 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_scroll.h
tml"); | 2758 initializeTextSelectionWebView(m_baseURL + "select_range_scroll.html", &webV
iewHelper); |
2750 frame = m_webView->mainFrame(); | 2759 frame = webViewHelper.webView()->mainFrame(); |
2751 EXPECT_EQ("Some offscreen test text for testing.", selectionAsString(frame))
; | 2760 EXPECT_EQ("Some offscreen test text for testing.", selectionAsString(frame))
; |
2752 m_webView->selectionBounds(startWebRect, endWebRect); | 2761 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2753 frame->executeCommand(WebString::fromUTF8("Unselect")); | 2762 frame->executeCommand(WebString::fromUTF8("Unselect")); |
2754 EXPECT_EQ("", selectionAsString(frame)); | 2763 EXPECT_EQ("", selectionAsString(frame)); |
2755 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); | 2764 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); |
2756 EXPECT_EQ("Some offscreen test text for testing.", selectionAsString(frame))
; | 2765 EXPECT_EQ("Some offscreen test text for testing.", selectionAsString(frame))
; |
2757 m_webView->close(); | |
2758 m_webView = 0; | |
2759 } | 2766 } |
2760 | 2767 |
2761 TEST_F(WebFrameTest, SelectRangeInIframe) | 2768 TEST_F(WebFrameTest, SelectRangeInIframe) |
2762 { | 2769 { |
2763 WebFrame* frame; | 2770 WebFrame* frame; |
2764 WebRect startWebRect; | 2771 WebRect startWebRect; |
2765 WebRect endWebRect; | 2772 WebRect endWebRect; |
2766 | 2773 |
2767 registerMockedHttpURLLoad("select_range_iframe.html"); | 2774 registerMockedHttpURLLoad("select_range_iframe.html"); |
2768 registerMockedHttpURLLoad("select_range_basic.html"); | 2775 registerMockedHttpURLLoad("select_range_basic.html"); |
2769 | 2776 |
2770 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_iframe.h
tml"); | 2777 FrameTestHelpers::WebViewHelper webViewHelper; |
2771 frame = m_webView->mainFrame(); | 2778 initializeTextSelectionWebView(m_baseURL + "select_range_iframe.html", &webV
iewHelper); |
| 2779 frame = webViewHelper.webView()->mainFrame(); |
2772 WebFrame* subframe = frame->findChildByExpression(WebString::fromUTF8("/html
/body/iframe")); | 2780 WebFrame* subframe = frame->findChildByExpression(WebString::fromUTF8("/html
/body/iframe")); |
2773 EXPECT_EQ("Some test text for testing.", selectionAsString(subframe)); | 2781 EXPECT_EQ("Some test text for testing.", selectionAsString(subframe)); |
2774 m_webView->selectionBounds(startWebRect, endWebRect); | 2782 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2775 subframe->executeCommand(WebString::fromUTF8("Unselect")); | 2783 subframe->executeCommand(WebString::fromUTF8("Unselect")); |
2776 EXPECT_EQ("", selectionAsString(subframe)); | 2784 EXPECT_EQ("", selectionAsString(subframe)); |
2777 subframe->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)
); | 2785 subframe->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)
); |
2778 EXPECT_EQ("Some test text for testing.", selectionAsString(subframe)); | 2786 EXPECT_EQ("Some test text for testing.", selectionAsString(subframe)); |
2779 m_webView->close(); | |
2780 m_webView = 0; | |
2781 } | 2787 } |
2782 | 2788 |
2783 TEST_F(WebFrameTest, SelectRangeDivContentEditable) | 2789 TEST_F(WebFrameTest, SelectRangeDivContentEditable) |
2784 { | 2790 { |
2785 WebFrame* frame; | 2791 WebFrame* frame; |
2786 WebRect startWebRect; | 2792 WebRect startWebRect; |
2787 WebRect endWebRect; | 2793 WebRect endWebRect; |
2788 | 2794 |
2789 registerMockedHttpURLLoad("select_range_div_editable.html"); | 2795 registerMockedHttpURLLoad("select_range_div_editable.html"); |
2790 | 2796 |
2791 // Select the middle of an editable element, then try to extend the selectio
n to the top of the document. | 2797 // Select the middle of an editable element, then try to extend the selectio
n to the top of the document. |
2792 // The selection range should be clipped to the bounds of the editable eleme
nt. | 2798 // The selection range should be clipped to the bounds of the editable eleme
nt. |
2793 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_div_edit
able.html"); | 2799 FrameTestHelpers::WebViewHelper webViewHelper; |
2794 frame = m_webView->mainFrame(); | 2800 initializeTextSelectionWebView(m_baseURL + "select_range_div_editable.html",
&webViewHelper); |
| 2801 frame = webViewHelper.webView()->mainFrame(); |
2795 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); | 2802 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); |
2796 m_webView->selectionBounds(startWebRect, endWebRect); | 2803 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2797 | 2804 |
2798 frame->selectRange(bottomRightMinusOne(endWebRect), WebPoint(0, 0)); | 2805 frame->selectRange(bottomRightMinusOne(endWebRect), WebPoint(0, 0)); |
2799 EXPECT_EQ("16-char header. This text is initially selected.", selectionAsStr
ing(frame)); | 2806 EXPECT_EQ("16-char header. This text is initially selected.", selectionAsStr
ing(frame)); |
2800 m_webView->close(); | |
2801 m_webView = 0; | |
2802 | 2807 |
2803 // As above, but extending the selection to the bottom of the document. | 2808 // As above, but extending the selection to the bottom of the document. |
2804 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_div_edit
able.html"); | 2809 initializeTextSelectionWebView(m_baseURL + "select_range_div_editable.html",
&webViewHelper); |
2805 frame = m_webView->mainFrame(); | 2810 frame = webViewHelper.webView()->mainFrame(); |
2806 | 2811 |
2807 m_webView->selectionBounds(startWebRect, endWebRect); | 2812 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2808 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); | 2813 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); |
2809 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); | 2814 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); |
2810 m_webView->selectionBounds(startWebRect, endWebRect); | 2815 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2811 | 2816 |
2812 m_webView->selectionBounds(startWebRect, endWebRect); | 2817 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2813 frame->selectRange(topLeft(startWebRect), WebPoint(640, 480)); | 2818 frame->selectRange(topLeft(startWebRect), WebPoint(640, 480)); |
2814 EXPECT_EQ("This text is initially selected. 16-char footer.", selectionAsStr
ing(frame)); | 2819 EXPECT_EQ("This text is initially selected. 16-char footer.", selectionAsStr
ing(frame)); |
2815 m_webView->close(); | |
2816 m_webView = 0; | |
2817 } | 2820 } |
2818 | 2821 |
2819 // positionForPoint returns the wrong values for contenteditable spans. See | 2822 // positionForPoint returns the wrong values for contenteditable spans. See |
2820 // http://crbug.com/238334. | 2823 // http://crbug.com/238334. |
2821 TEST_F(WebFrameTest, DISABLED_SelectRangeSpanContentEditable) | 2824 TEST_F(WebFrameTest, DISABLED_SelectRangeSpanContentEditable) |
2822 { | 2825 { |
2823 WebFrame* frame; | 2826 WebFrame* frame; |
2824 WebRect startWebRect; | 2827 WebRect startWebRect; |
2825 WebRect endWebRect; | 2828 WebRect endWebRect; |
2826 | 2829 |
2827 registerMockedHttpURLLoad("select_range_span_editable.html"); | 2830 registerMockedHttpURLLoad("select_range_span_editable.html"); |
2828 | 2831 |
2829 // Select the middle of an editable element, then try to extend the selectio
n to the top of the document. | 2832 // Select the middle of an editable element, then try to extend the selectio
n to the top of the document. |
2830 // The selection range should be clipped to the bounds of the editable eleme
nt. | 2833 // The selection range should be clipped to the bounds of the editable eleme
nt. |
2831 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_span_edi
table.html"); | 2834 FrameTestHelpers::WebViewHelper webViewHelper; |
2832 frame = m_webView->mainFrame(); | 2835 initializeTextSelectionWebView(m_baseURL + "select_range_span_editable.html"
, &webViewHelper); |
| 2836 frame = webViewHelper.webView()->mainFrame(); |
2833 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); | 2837 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); |
2834 m_webView->selectionBounds(startWebRect, endWebRect); | 2838 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2835 | 2839 |
2836 frame->selectRange(bottomRightMinusOne(endWebRect), WebPoint(0, 0)); | 2840 frame->selectRange(bottomRightMinusOne(endWebRect), WebPoint(0, 0)); |
2837 EXPECT_EQ("16-char header. This text is initially selected.", selectionAsStr
ing(frame)); | 2841 EXPECT_EQ("16-char header. This text is initially selected.", selectionAsStr
ing(frame)); |
2838 m_webView->close(); | |
2839 m_webView = 0; | |
2840 | 2842 |
2841 // As above, but extending the selection to the bottom of the document. | 2843 // As above, but extending the selection to the bottom of the document. |
2842 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_span_edi
table.html"); | 2844 initializeTextSelectionWebView(m_baseURL + "select_range_span_editable.html"
, &webViewHelper); |
2843 frame = m_webView->mainFrame(); | 2845 frame = webViewHelper.webView()->mainFrame(); |
2844 | 2846 |
2845 m_webView->selectionBounds(startWebRect, endWebRect); | 2847 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2846 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); | 2848 frame->selectRange(topLeft(startWebRect), bottomRightMinusOne(endWebRect)); |
2847 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); | 2849 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); |
2848 m_webView->selectionBounds(startWebRect, endWebRect); | 2850 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2849 | 2851 |
2850 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); | 2852 EXPECT_EQ("This text is initially selected.", selectionAsString(frame)); |
2851 m_webView->selectionBounds(startWebRect, endWebRect); | 2853 webViewHelper.webView()->selectionBounds(startWebRect, endWebRect); |
2852 frame->selectRange(topLeft(startWebRect), WebPoint(640, 480)); | 2854 frame->selectRange(topLeft(startWebRect), WebPoint(640, 480)); |
2853 EXPECT_EQ("This text is initially selected. 16-char footer.", selectionAsStr
ing(frame)); | 2855 EXPECT_EQ("This text is initially selected. 16-char footer.", selectionAsStr
ing(frame)); |
2854 m_webView->close(); | |
2855 m_webView = 0; | |
2856 } | 2856 } |
2857 | 2857 |
2858 TEST_F(WebFrameTest, SelectRangeCanMoveSelectionStart) | 2858 TEST_F(WebFrameTest, SelectRangeCanMoveSelectionStart) |
2859 { | 2859 { |
2860 registerMockedHttpURLLoad("text_selection.html"); | 2860 registerMockedHttpURLLoad("text_selection.html"); |
2861 m_webView = createWebViewForTextSelection(m_baseURL + "text_selection.html")
; | 2861 FrameTestHelpers::WebViewHelper webViewHelper; |
2862 WebFrame* frame = m_webView->mainFrame(); | 2862 initializeTextSelectionWebView(m_baseURL + "text_selection.html", &webViewHe
lper); |
| 2863 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
2863 | 2864 |
2864 // Select second span. We can move the start to include the first span. | 2865 // Select second span. We can move the start to include the first span. |
2865 frame->executeScript(WebScriptSource("selectElement('header_2');")); | 2866 frame->executeScript(WebScriptSource("selectElement('header_2');")); |
2866 EXPECT_EQ("Header 2.", selectionAsString(frame)); | 2867 EXPECT_EQ("Header 2.", selectionAsString(frame)); |
2867 frame->selectRange(bottomRightMinusOne(elementBounds(frame, "header_2")), to
pLeft(elementBounds(frame, "header_1"))); | 2868 frame->selectRange(bottomRightMinusOne(elementBounds(frame, "header_2")), to
pLeft(elementBounds(frame, "header_1"))); |
2868 EXPECT_EQ("Header 1. Header 2.", selectionAsString(frame)); | 2869 EXPECT_EQ("Header 1. Header 2.", selectionAsString(frame)); |
2869 | 2870 |
2870 // We can move the start and end together. | 2871 // We can move the start and end together. |
2871 frame->executeScript(WebScriptSource("selectElement('header_1');")); | 2872 frame->executeScript(WebScriptSource("selectElement('header_1');")); |
2872 EXPECT_EQ("Header 1.", selectionAsString(frame)); | 2873 EXPECT_EQ("Header 1.", selectionAsString(frame)); |
(...skipping 25 matching lines...) Expand all Loading... |
2898 EXPECT_EQ("Editable 2.", selectionAsString(frame)); | 2899 EXPECT_EQ("Editable 2.", selectionAsString(frame)); |
2899 frame->selectRange(bottomRightMinusOne(elementBounds(frame, "editable_2")),
topLeft(elementBounds(frame, "header_2"))); | 2900 frame->selectRange(bottomRightMinusOne(elementBounds(frame, "editable_2")),
topLeft(elementBounds(frame, "header_2"))); |
2900 // positionForPoint returns the wrong values for contenteditable spans. See | 2901 // positionForPoint returns the wrong values for contenteditable spans. See |
2901 // http://crbug.com/238334. | 2902 // http://crbug.com/238334. |
2902 // EXPECT_EQ("[ Editable 1. Editable 2.", selectionAsString(frame)); | 2903 // EXPECT_EQ("[ Editable 1. Editable 2.", selectionAsString(frame)); |
2903 } | 2904 } |
2904 | 2905 |
2905 TEST_F(WebFrameTest, SelectRangeCanMoveSelectionEnd) | 2906 TEST_F(WebFrameTest, SelectRangeCanMoveSelectionEnd) |
2906 { | 2907 { |
2907 registerMockedHttpURLLoad("text_selection.html"); | 2908 registerMockedHttpURLLoad("text_selection.html"); |
2908 m_webView = createWebViewForTextSelection(m_baseURL + "text_selection.html")
; | 2909 FrameTestHelpers::WebViewHelper webViewHelper; |
2909 WebFrame* frame = m_webView->mainFrame(); | 2910 initializeTextSelectionWebView(m_baseURL + "text_selection.html", &webViewHe
lper); |
| 2911 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
2910 | 2912 |
2911 // Select first span. We can move the end to include the second span. | 2913 // Select first span. We can move the end to include the second span. |
2912 frame->executeScript(WebScriptSource("selectElement('header_1');")); | 2914 frame->executeScript(WebScriptSource("selectElement('header_1');")); |
2913 EXPECT_EQ("Header 1.", selectionAsString(frame)); | 2915 EXPECT_EQ("Header 1.", selectionAsString(frame)); |
2914 frame->selectRange(topLeft(elementBounds(frame, "header_1")), bottomRightMin
usOne(elementBounds(frame, "header_2"))); | 2916 frame->selectRange(topLeft(elementBounds(frame, "header_1")), bottomRightMin
usOne(elementBounds(frame, "header_2"))); |
2915 EXPECT_EQ("Header 1. Header 2.", selectionAsString(frame)); | 2917 EXPECT_EQ("Header 1. Header 2.", selectionAsString(frame)); |
2916 | 2918 |
2917 // We can move the start and end together. | 2919 // We can move the start and end together. |
2918 frame->executeScript(WebScriptSource("selectElement('header_2');")); | 2920 frame->executeScript(WebScriptSource("selectElement('header_2');")); |
2919 EXPECT_EQ("Header 2.", selectionAsString(frame)); | 2921 EXPECT_EQ("Header 2.", selectionAsString(frame)); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2952 static int computeOffset(WebCore::RenderObject* renderer, int x, int y) | 2954 static int computeOffset(WebCore::RenderObject* renderer, int x, int y) |
2953 { | 2955 { |
2954 return WebCore::VisiblePosition(renderer->positionForPoint(WebCore::LayoutPo
int(x, y))).deepEquivalent().computeOffsetInContainerNode(); | 2956 return WebCore::VisiblePosition(renderer->positionForPoint(WebCore::LayoutPo
int(x, y))).deepEquivalent().computeOffsetInContainerNode(); |
2955 } | 2957 } |
2956 | 2958 |
2957 // positionForPoint returns the wrong values for contenteditable spans. See | 2959 // positionForPoint returns the wrong values for contenteditable spans. See |
2958 // http://crbug.com/238334. | 2960 // http://crbug.com/238334. |
2959 TEST_F(WebFrameTest, DISABLED_PositionForPointTest) | 2961 TEST_F(WebFrameTest, DISABLED_PositionForPointTest) |
2960 { | 2962 { |
2961 registerMockedHttpURLLoad("select_range_span_editable.html"); | 2963 registerMockedHttpURLLoad("select_range_span_editable.html"); |
2962 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_span_edi
table.html"); | 2964 FrameTestHelpers::WebViewHelper webViewHelper; |
2963 WebFrameImpl* mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2965 initializeTextSelectionWebView(m_baseURL + "select_range_span_editable.html"
, &webViewHelper); |
| 2966 WebFrameImpl* mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame(
)); |
2964 WebCore::RenderObject* renderer = mainFrame->frame()->selection().rootEditab
leElement()->renderer(); | 2967 WebCore::RenderObject* renderer = mainFrame->frame()->selection().rootEditab
leElement()->renderer(); |
2965 EXPECT_EQ(0, computeOffset(renderer, -1, -1)); | 2968 EXPECT_EQ(0, computeOffset(renderer, -1, -1)); |
2966 EXPECT_EQ(64, computeOffset(renderer, 1000, 1000)); | 2969 EXPECT_EQ(64, computeOffset(renderer, 1000, 1000)); |
2967 | 2970 |
2968 registerMockedHttpURLLoad("select_range_div_editable.html"); | 2971 registerMockedHttpURLLoad("select_range_div_editable.html"); |
2969 m_webView = createWebViewForTextSelection(m_baseURL + "select_range_div_edit
able.html"); | 2972 initializeTextSelectionWebView(m_baseURL + "select_range_div_editable.html",
&webViewHelper); |
2970 mainFrame = toWebFrameImpl(m_webView->mainFrame()); | 2973 mainFrame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
2971 renderer = mainFrame->frame()->selection().rootEditableElement()->renderer()
; | 2974 renderer = mainFrame->frame()->selection().rootEditableElement()->renderer()
; |
2972 EXPECT_EQ(0, computeOffset(renderer, -1, -1)); | 2975 EXPECT_EQ(0, computeOffset(renderer, -1, -1)); |
2973 EXPECT_EQ(64, computeOffset(renderer, 1000, 1000)); | 2976 EXPECT_EQ(64, computeOffset(renderer, 1000, 1000)); |
2974 } | 2977 } |
2975 | 2978 |
2976 #if !OS(MACOSX) | 2979 #if !OS(MACOSX) |
2977 TEST_F(WebFrameTest, SelectRangeStaysHorizontallyAlignedWhenMoved) | 2980 TEST_F(WebFrameTest, SelectRangeStaysHorizontallyAlignedWhenMoved) |
2978 { | 2981 { |
2979 WebFrameImpl* frame; | |
2980 registerMockedHttpURLLoad("move_caret.html"); | 2982 registerMockedHttpURLLoad("move_caret.html"); |
2981 | 2983 |
2982 m_webView = createWebViewForTextSelection(m_baseURL + "move_caret.html"); | 2984 FrameTestHelpers::WebViewHelper webViewHelper; |
2983 frame = (WebFrameImpl*)m_webView->mainFrame(); | 2985 initializeTextSelectionWebView(m_baseURL + "move_caret.html", &webViewHelper
); |
| 2986 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
2984 | 2987 |
2985 WebRect initialStartRect; | 2988 WebRect initialStartRect; |
2986 WebRect initialEndRect; | 2989 WebRect initialEndRect; |
2987 WebRect startRect; | 2990 WebRect startRect; |
2988 WebRect endRect; | 2991 WebRect endRect; |
2989 | 2992 |
2990 frame->executeScript(WebScriptSource("selectRange();")); | 2993 frame->executeScript(WebScriptSource("selectRange();")); |
2991 m_webView->selectionBounds(initialStartRect, initialEndRect); | 2994 webViewHelper.webView()->selectionBounds(initialStartRect, initialEndRect); |
2992 WebPoint movedStart(topLeft(initialStartRect)); | 2995 WebPoint movedStart(topLeft(initialStartRect)); |
2993 | 2996 |
2994 movedStart.y += 40; | 2997 movedStart.y += 40; |
2995 frame->selectRange(movedStart, bottomRightMinusOne(initialEndRect)); | 2998 frame->selectRange(movedStart, bottomRightMinusOne(initialEndRect)); |
2996 m_webView->selectionBounds(startRect, endRect); | 2999 webViewHelper.webView()->selectionBounds(startRect, endRect); |
2997 EXPECT_EQ(startRect, initialStartRect); | 3000 EXPECT_EQ(startRect, initialStartRect); |
2998 EXPECT_EQ(endRect, initialEndRect); | 3001 EXPECT_EQ(endRect, initialEndRect); |
2999 | 3002 |
3000 movedStart.y -= 80; | 3003 movedStart.y -= 80; |
3001 frame->selectRange(movedStart, bottomRightMinusOne(initialEndRect)); | 3004 frame->selectRange(movedStart, bottomRightMinusOne(initialEndRect)); |
3002 m_webView->selectionBounds(startRect, endRect); | 3005 webViewHelper.webView()->selectionBounds(startRect, endRect); |
3003 EXPECT_EQ(startRect, initialStartRect); | 3006 EXPECT_EQ(startRect, initialStartRect); |
3004 EXPECT_EQ(endRect, initialEndRect); | 3007 EXPECT_EQ(endRect, initialEndRect); |
3005 | 3008 |
3006 WebPoint movedEnd(bottomRightMinusOne(initialEndRect)); | 3009 WebPoint movedEnd(bottomRightMinusOne(initialEndRect)); |
3007 | 3010 |
3008 movedEnd.y += 40; | 3011 movedEnd.y += 40; |
3009 frame->selectRange(topLeft(initialStartRect), movedEnd); | 3012 frame->selectRange(topLeft(initialStartRect), movedEnd); |
3010 m_webView->selectionBounds(startRect, endRect); | 3013 webViewHelper.webView()->selectionBounds(startRect, endRect); |
3011 EXPECT_EQ(startRect, initialStartRect); | 3014 EXPECT_EQ(startRect, initialStartRect); |
3012 EXPECT_EQ(endRect, initialEndRect); | 3015 EXPECT_EQ(endRect, initialEndRect); |
3013 | 3016 |
3014 movedEnd.y -= 80; | 3017 movedEnd.y -= 80; |
3015 frame->selectRange(topLeft(initialStartRect), movedEnd); | 3018 frame->selectRange(topLeft(initialStartRect), movedEnd); |
3016 m_webView->selectionBounds(startRect, endRect); | 3019 webViewHelper.webView()->selectionBounds(startRect, endRect); |
3017 EXPECT_EQ(startRect, initialStartRect); | 3020 EXPECT_EQ(startRect, initialStartRect); |
3018 EXPECT_EQ(endRect, initialEndRect); | 3021 EXPECT_EQ(endRect, initialEndRect); |
3019 } | 3022 } |
3020 | 3023 |
3021 TEST_F(WebFrameTest, MoveCaretStaysHorizontallyAlignedWhenMoved) | 3024 TEST_F(WebFrameTest, MoveCaretStaysHorizontallyAlignedWhenMoved) |
3022 { | 3025 { |
3023 WebFrameImpl* frame; | 3026 WebFrameImpl* frame; |
3024 registerMockedHttpURLLoad("move_caret.html"); | 3027 registerMockedHttpURLLoad("move_caret.html"); |
3025 | 3028 |
3026 m_webView = createWebViewForTextSelection(m_baseURL + "move_caret.html"); | 3029 FrameTestHelpers::WebViewHelper webViewHelper; |
3027 frame = (WebFrameImpl*)m_webView->mainFrame(); | 3030 initializeTextSelectionWebView(m_baseURL + "move_caret.html", &webViewHelper
); |
| 3031 frame = (WebFrameImpl*)webViewHelper.webView()->mainFrame(); |
3028 | 3032 |
3029 WebRect initialStartRect; | 3033 WebRect initialStartRect; |
3030 WebRect initialEndRect; | 3034 WebRect initialEndRect; |
3031 WebRect startRect; | 3035 WebRect startRect; |
3032 WebRect endRect; | 3036 WebRect endRect; |
3033 | 3037 |
3034 frame->executeScript(WebScriptSource("selectCaret();")); | 3038 frame->executeScript(WebScriptSource("selectCaret();")); |
3035 m_webView->selectionBounds(initialStartRect, initialEndRect); | 3039 webViewHelper.webView()->selectionBounds(initialStartRect, initialEndRect); |
3036 WebPoint moveTo(topLeft(initialStartRect)); | 3040 WebPoint moveTo(topLeft(initialStartRect)); |
3037 | 3041 |
3038 moveTo.y += 40; | 3042 moveTo.y += 40; |
3039 frame->moveCaretSelectionTowardsWindowPoint(moveTo); | 3043 frame->moveCaretSelectionTowardsWindowPoint(moveTo); |
3040 m_webView->selectionBounds(startRect, endRect); | 3044 webViewHelper.webView()->selectionBounds(startRect, endRect); |
3041 EXPECT_EQ(startRect, initialStartRect); | 3045 EXPECT_EQ(startRect, initialStartRect); |
3042 EXPECT_EQ(endRect, initialEndRect); | 3046 EXPECT_EQ(endRect, initialEndRect); |
3043 | 3047 |
3044 moveTo.y -= 80; | 3048 moveTo.y -= 80; |
3045 frame->moveCaretSelectionTowardsWindowPoint(moveTo); | 3049 frame->moveCaretSelectionTowardsWindowPoint(moveTo); |
3046 m_webView->selectionBounds(startRect, endRect); | 3050 webViewHelper.webView()->selectionBounds(startRect, endRect); |
3047 EXPECT_EQ(startRect, initialStartRect); | 3051 EXPECT_EQ(startRect, initialStartRect); |
3048 EXPECT_EQ(endRect, initialEndRect); | 3052 EXPECT_EQ(endRect, initialEndRect); |
3049 } | 3053 } |
3050 #endif | 3054 #endif |
3051 | 3055 |
3052 class DisambiguationPopupTestWebViewClient : public WebViewClient { | 3056 class DisambiguationPopupTestWebViewClient : public WebViewClient { |
3053 public: | 3057 public: |
3054 virtual bool didTapMultipleTargets(const WebGestureEvent&, const WebVector<W
ebRect>& targetRects) OVERRIDE | 3058 virtual bool didTapMultipleTargets(const WebGestureEvent&, const WebVector<W
ebRect>& targetRects) OVERRIDE |
3055 { | 3059 { |
3056 EXPECT_GE(targetRects.size(), 2u); | 3060 EXPECT_GE(targetRects.size(), 2u); |
(...skipping 19 matching lines...) Expand all Loading... |
3076 | 3080 |
3077 TEST_F(WebFrameTest, DisambiguationPopup) | 3081 TEST_F(WebFrameTest, DisambiguationPopup) |
3078 { | 3082 { |
3079 const std::string htmlFile = "disambiguation_popup.html"; | 3083 const std::string htmlFile = "disambiguation_popup.html"; |
3080 registerMockedHttpURLLoad(htmlFile); | 3084 registerMockedHttpURLLoad(htmlFile); |
3081 | 3085 |
3082 DisambiguationPopupTestWebViewClient client; | 3086 DisambiguationPopupTestWebViewClient client; |
3083 | 3087 |
3084 // Make sure we initialize to minimum scale, even if the window size | 3088 // Make sure we initialize to minimum scale, even if the window size |
3085 // only becomes available after the load begins. | 3089 // only becomes available after the load begins. |
3086 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + htmlFile, tru
e, 0, &client); | 3090 FrameTestHelpers::WebViewHelper webViewHelper; |
3087 m_webView->resize(WebSize(1000, 1000)); | 3091 webViewHelper.initializeAndLoad(m_baseURL + htmlFile, true, 0, &client); |
3088 m_webView->layout(); | 3092 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3093 webViewHelper.webView()->layout(); |
3089 | 3094 |
3090 client.resetTriggered(); | 3095 client.resetTriggered(); |
3091 m_webView->handleInputEvent(fatTap(0, 0)); | 3096 webViewHelper.webView()->handleInputEvent(fatTap(0, 0)); |
3092 EXPECT_FALSE(client.triggered()); | 3097 EXPECT_FALSE(client.triggered()); |
3093 | 3098 |
3094 client.resetTriggered(); | 3099 client.resetTriggered(); |
3095 m_webView->handleInputEvent(fatTap(200, 115)); | 3100 webViewHelper.webView()->handleInputEvent(fatTap(200, 115)); |
3096 EXPECT_FALSE(client.triggered()); | 3101 EXPECT_FALSE(client.triggered()); |
3097 | 3102 |
3098 for (int i = 0; i <= 46; i++) { | 3103 for (int i = 0; i <= 46; i++) { |
3099 client.resetTriggered(); | 3104 client.resetTriggered(); |
3100 m_webView->handleInputEvent(fatTap(120, 230 + i * 5)); | 3105 webViewHelper.webView()->handleInputEvent(fatTap(120, 230 + i * 5)); |
3101 | 3106 |
3102 int j = i % 10; | 3107 int j = i % 10; |
3103 if (j >= 7 && j <= 9) | 3108 if (j >= 7 && j <= 9) |
3104 EXPECT_TRUE(client.triggered()); | 3109 EXPECT_TRUE(client.triggered()); |
3105 else | 3110 else |
3106 EXPECT_FALSE(client.triggered()); | 3111 EXPECT_FALSE(client.triggered()); |
3107 } | 3112 } |
3108 | 3113 |
3109 for (int i = 0; i <= 46; i++) { | 3114 for (int i = 0; i <= 46; i++) { |
3110 client.resetTriggered(); | 3115 client.resetTriggered(); |
3111 m_webView->handleInputEvent(fatTap(10 + i * 5, 590)); | 3116 webViewHelper.webView()->handleInputEvent(fatTap(10 + i * 5, 590)); |
3112 | 3117 |
3113 int j = i % 10; | 3118 int j = i % 10; |
3114 if (j >= 7 && j <= 9) | 3119 if (j >= 7 && j <= 9) |
3115 EXPECT_TRUE(client.triggered()); | 3120 EXPECT_TRUE(client.triggered()); |
3116 else | 3121 else |
3117 EXPECT_FALSE(client.triggered()); | 3122 EXPECT_FALSE(client.triggered()); |
3118 } | 3123 } |
3119 | |
3120 m_webView->close(); | |
3121 m_webView = 0; | |
3122 | |
3123 } | 3124 } |
3124 | 3125 |
3125 TEST_F(WebFrameTest, DisambiguationPopupNoContainer) | 3126 TEST_F(WebFrameTest, DisambiguationPopupNoContainer) |
3126 { | 3127 { |
3127 registerMockedHttpURLLoad("disambiguation_popup_no_container.html"); | 3128 registerMockedHttpURLLoad("disambiguation_popup_no_container.html"); |
3128 | 3129 |
3129 DisambiguationPopupTestWebViewClient client; | 3130 DisambiguationPopupTestWebViewClient client; |
3130 | 3131 |
3131 // Make sure we initialize to minimum scale, even if the window size | 3132 // Make sure we initialize to minimum scale, even if the window size |
3132 // only becomes available after the load begins. | 3133 // only becomes available after the load begins. |
3133 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "disambiguati
on_popup_no_container.html", true, 0, &client); | 3134 FrameTestHelpers::WebViewHelper webViewHelper; |
3134 m_webView->resize(WebSize(1000, 1000)); | 3135 webViewHelper.initializeAndLoad(m_baseURL + "disambiguation_popup_no_contain
er.html", true, 0, &client); |
3135 m_webView->layout(); | 3136 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3137 webViewHelper.webView()->layout(); |
3136 | 3138 |
3137 client.resetTriggered(); | 3139 client.resetTriggered(); |
3138 m_webView->handleInputEvent(fatTap(50, 50)); | 3140 webViewHelper.webView()->handleInputEvent(fatTap(50, 50)); |
3139 EXPECT_FALSE(client.triggered()); | 3141 EXPECT_FALSE(client.triggered()); |
3140 | |
3141 m_webView->close(); | |
3142 m_webView = 0; | |
3143 } | 3142 } |
3144 | 3143 |
3145 TEST_F(WebFrameTest, DisambiguationPopupMobileSite) | 3144 TEST_F(WebFrameTest, DisambiguationPopupMobileSite) |
3146 { | 3145 { |
3147 const std::string htmlFile = "disambiguation_popup_mobile_site.html"; | 3146 const std::string htmlFile = "disambiguation_popup_mobile_site.html"; |
3148 registerMockedHttpURLLoad(htmlFile); | 3147 registerMockedHttpURLLoad(htmlFile); |
3149 | 3148 |
3150 DisambiguationPopupTestWebViewClient client; | 3149 DisambiguationPopupTestWebViewClient client; |
3151 | 3150 |
3152 // Make sure we initialize to minimum scale, even if the window size | 3151 // Make sure we initialize to minimum scale, even if the window size |
3153 // only becomes available after the load begins. | 3152 // only becomes available after the load begins. |
3154 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + htmlFile, tru
e, 0, &client); | 3153 FrameTestHelpers::WebViewHelper webViewHelper; |
3155 m_webView->enableFixedLayoutMode(true); | 3154 webViewHelper.initializeAndLoad(m_baseURL + htmlFile, true, 0, &client); |
3156 m_webView->settings()->setViewportEnabled(true); | 3155 webViewHelper.webView()->enableFixedLayoutMode(true); |
3157 m_webView->resize(WebSize(1000, 1000)); | 3156 webViewHelper.webView()->settings()->setViewportEnabled(true); |
3158 m_webView->layout(); | 3157 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3158 webViewHelper.webView()->layout(); |
3159 | 3159 |
3160 client.resetTriggered(); | 3160 client.resetTriggered(); |
3161 m_webView->handleInputEvent(fatTap(0, 0)); | 3161 webViewHelper.webView()->handleInputEvent(fatTap(0, 0)); |
3162 EXPECT_FALSE(client.triggered()); | 3162 EXPECT_FALSE(client.triggered()); |
3163 | 3163 |
3164 client.resetTriggered(); | 3164 client.resetTriggered(); |
3165 m_webView->handleInputEvent(fatTap(200, 115)); | 3165 webViewHelper.webView()->handleInputEvent(fatTap(200, 115)); |
3166 EXPECT_FALSE(client.triggered()); | 3166 EXPECT_FALSE(client.triggered()); |
3167 | 3167 |
3168 for (int i = 0; i <= 46; i++) { | 3168 for (int i = 0; i <= 46; i++) { |
3169 client.resetTriggered(); | 3169 client.resetTriggered(); |
3170 m_webView->handleInputEvent(fatTap(120, 230 + i * 5)); | 3170 webViewHelper.webView()->handleInputEvent(fatTap(120, 230 + i * 5)); |
3171 EXPECT_FALSE(client.triggered()); | 3171 EXPECT_FALSE(client.triggered()); |
3172 } | 3172 } |
3173 | 3173 |
3174 for (int i = 0; i <= 46; i++) { | 3174 for (int i = 0; i <= 46; i++) { |
3175 client.resetTriggered(); | 3175 client.resetTriggered(); |
3176 m_webView->handleInputEvent(fatTap(10 + i * 5, 590)); | 3176 webViewHelper.webView()->handleInputEvent(fatTap(10 + i * 5, 590)); |
3177 EXPECT_FALSE(client.triggered()); | 3177 EXPECT_FALSE(client.triggered()); |
3178 } | 3178 } |
3179 | |
3180 m_webView->close(); | |
3181 m_webView = 0; | |
3182 } | 3179 } |
3183 | 3180 |
3184 TEST_F(WebFrameTest, DisambiguationPopupViewportSite) | 3181 TEST_F(WebFrameTest, DisambiguationPopupViewportSite) |
3185 { | 3182 { |
3186 const std::string htmlFile = "disambiguation_popup_viewport_site.html"; | 3183 const std::string htmlFile = "disambiguation_popup_viewport_site.html"; |
3187 registerMockedHttpURLLoad(htmlFile); | 3184 registerMockedHttpURLLoad(htmlFile); |
3188 | 3185 |
3189 DisambiguationPopupTestWebViewClient client; | 3186 DisambiguationPopupTestWebViewClient client; |
3190 | 3187 |
3191 // Make sure we initialize to minimum scale, even if the window size | 3188 // Make sure we initialize to minimum scale, even if the window size |
3192 // only becomes available after the load begins. | 3189 // only becomes available after the load begins. |
3193 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + htmlFile, tru
e, 0, &client); | 3190 FrameTestHelpers::WebViewHelper webViewHelper; |
3194 m_webView->enableFixedLayoutMode(true); | 3191 webViewHelper.initializeAndLoad(m_baseURL + htmlFile, true, 0, &client); |
3195 m_webView->settings()->setViewportEnabled(true); | 3192 webViewHelper.webView()->enableFixedLayoutMode(true); |
3196 m_webView->resize(WebSize(1000, 1000)); | 3193 webViewHelper.webView()->settings()->setViewportEnabled(true); |
3197 m_webView->layout(); | 3194 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3195 webViewHelper.webView()->layout(); |
3198 | 3196 |
3199 client.resetTriggered(); | 3197 client.resetTriggered(); |
3200 m_webView->handleInputEvent(fatTap(0, 0)); | 3198 webViewHelper.webView()->handleInputEvent(fatTap(0, 0)); |
3201 EXPECT_FALSE(client.triggered()); | 3199 EXPECT_FALSE(client.triggered()); |
3202 | 3200 |
3203 client.resetTriggered(); | 3201 client.resetTriggered(); |
3204 m_webView->handleInputEvent(fatTap(200, 115)); | 3202 webViewHelper.webView()->handleInputEvent(fatTap(200, 115)); |
3205 EXPECT_FALSE(client.triggered()); | 3203 EXPECT_FALSE(client.triggered()); |
3206 | 3204 |
3207 for (int i = 0; i <= 46; i++) { | 3205 for (int i = 0; i <= 46; i++) { |
3208 client.resetTriggered(); | 3206 client.resetTriggered(); |
3209 m_webView->handleInputEvent(fatTap(120, 230 + i * 5)); | 3207 webViewHelper.webView()->handleInputEvent(fatTap(120, 230 + i * 5)); |
3210 EXPECT_FALSE(client.triggered()); | 3208 EXPECT_FALSE(client.triggered()); |
3211 } | 3209 } |
3212 | 3210 |
3213 for (int i = 0; i <= 46; i++) { | 3211 for (int i = 0; i <= 46; i++) { |
3214 client.resetTriggered(); | 3212 client.resetTriggered(); |
3215 m_webView->handleInputEvent(fatTap(10 + i * 5, 590)); | 3213 webViewHelper.webView()->handleInputEvent(fatTap(10 + i * 5, 590)); |
3216 EXPECT_FALSE(client.triggered()); | 3214 EXPECT_FALSE(client.triggered()); |
3217 } | 3215 } |
3218 | |
3219 m_webView->close(); | |
3220 m_webView = 0; | |
3221 } | 3216 } |
3222 | 3217 |
3223 TEST_F(WebFrameTest, DisambiguationPopupBlacklist) | 3218 TEST_F(WebFrameTest, DisambiguationPopupBlacklist) |
3224 { | 3219 { |
3225 const unsigned viewportWidth = 500; | 3220 const unsigned viewportWidth = 500; |
3226 const unsigned viewportHeight = 1000; | 3221 const unsigned viewportHeight = 1000; |
3227 const unsigned divHeight = 100; | 3222 const unsigned divHeight = 100; |
3228 const std::string htmlFile = "disambiguation_popup_blacklist.html"; | 3223 const std::string htmlFile = "disambiguation_popup_blacklist.html"; |
3229 registerMockedHttpURLLoad(htmlFile); | 3224 registerMockedHttpURLLoad(htmlFile); |
3230 | 3225 |
3231 DisambiguationPopupTestWebViewClient client; | 3226 DisambiguationPopupTestWebViewClient client; |
3232 | 3227 |
3233 // Make sure we initialize to minimum scale, even if the window size | 3228 // Make sure we initialize to minimum scale, even if the window size |
3234 // only becomes available after the load begins. | 3229 // only becomes available after the load begins. |
3235 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + htmlFile, tru
e, 0, &client); | 3230 FrameTestHelpers::WebViewHelper webViewHelper; |
3236 m_webView->resize(WebSize(viewportWidth, viewportHeight)); | 3231 webViewHelper.initializeAndLoad(m_baseURL + htmlFile, true, 0, &client); |
3237 m_webView->layout(); | 3232 webViewHelper.webView()->resize(WebSize(viewportWidth, viewportHeight)); |
| 3233 webViewHelper.webView()->layout(); |
3238 | 3234 |
3239 // Click somewhere where the popup shouldn't appear. | 3235 // Click somewhere where the popup shouldn't appear. |
3240 client.resetTriggered(); | 3236 client.resetTriggered(); |
3241 m_webView->handleInputEvent(fatTap(viewportWidth / 2, 0)); | 3237 webViewHelper.webView()->handleInputEvent(fatTap(viewportWidth / 2, 0)); |
3242 EXPECT_FALSE(client.triggered()); | 3238 EXPECT_FALSE(client.triggered()); |
3243 | 3239 |
3244 // Click directly in between two container divs with click handlers, with ch
ildren that don't handle clicks. | 3240 // Click directly in between two container divs with click handlers, with ch
ildren that don't handle clicks. |
3245 client.resetTriggered(); | 3241 client.resetTriggered(); |
3246 m_webView->handleInputEvent(fatTap(viewportWidth / 2, divHeight)); | 3242 webViewHelper.webView()->handleInputEvent(fatTap(viewportWidth / 2, divHeigh
t)); |
3247 EXPECT_TRUE(client.triggered()); | 3243 EXPECT_TRUE(client.triggered()); |
3248 | 3244 |
3249 // The third div container should be blacklisted if you click on the link it
contains. | 3245 // The third div container should be blacklisted if you click on the link it
contains. |
3250 client.resetTriggered(); | 3246 client.resetTriggered(); |
3251 m_webView->handleInputEvent(fatTap(viewportWidth / 2, divHeight * 3.25)); | 3247 webViewHelper.webView()->handleInputEvent(fatTap(viewportWidth / 2, divHeigh
t * 3.25)); |
3252 EXPECT_FALSE(client.triggered()); | 3248 EXPECT_FALSE(client.triggered()); |
3253 | |
3254 m_webView->close(); | |
3255 m_webView = 0; | |
3256 } | 3249 } |
3257 | 3250 |
3258 TEST_F(WebFrameTest, DisambiguationPopupPageScale) | 3251 TEST_F(WebFrameTest, DisambiguationPopupPageScale) |
3259 { | 3252 { |
3260 registerMockedHttpURLLoad("disambiguation_popup_page_scale.html"); | 3253 registerMockedHttpURLLoad("disambiguation_popup_page_scale.html"); |
3261 | 3254 |
3262 DisambiguationPopupTestWebViewClient client; | 3255 DisambiguationPopupTestWebViewClient client; |
3263 | 3256 |
3264 // Make sure we initialize to minimum scale, even if the window size | 3257 // Make sure we initialize to minimum scale, even if the window size |
3265 // only becomes available after the load begins. | 3258 // only becomes available after the load begins. |
3266 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "disambiguati
on_popup_page_scale.html", true, 0, &client); | 3259 FrameTestHelpers::WebViewHelper webViewHelper; |
3267 m_webView->resize(WebSize(1000, 1000)); | 3260 webViewHelper.initializeAndLoad(m_baseURL + "disambiguation_popup_page_scale
.html", true, 0, &client); |
3268 m_webView->layout(); | 3261 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3262 webViewHelper.webView()->layout(); |
3269 | 3263 |
3270 client.resetTriggered(); | 3264 client.resetTriggered(); |
3271 m_webView->handleInputEvent(fatTap(80, 80)); | 3265 webViewHelper.webView()->handleInputEvent(fatTap(80, 80)); |
3272 EXPECT_TRUE(client.triggered()); | 3266 EXPECT_TRUE(client.triggered()); |
3273 | 3267 |
3274 client.resetTriggered(); | 3268 client.resetTriggered(); |
3275 m_webView->handleInputEvent(fatTap(230, 190)); | 3269 webViewHelper.webView()->handleInputEvent(fatTap(230, 190)); |
3276 EXPECT_TRUE(client.triggered()); | 3270 EXPECT_TRUE(client.triggered()); |
3277 | 3271 |
3278 m_webView->setPageScaleFactor(3.0f, WebPoint(0, 0)); | 3272 webViewHelper.webView()->setPageScaleFactor(3.0f, WebPoint(0, 0)); |
3279 m_webView->layout(); | 3273 webViewHelper.webView()->layout(); |
3280 | 3274 |
3281 client.resetTriggered(); | 3275 client.resetTriggered(); |
3282 m_webView->handleInputEvent(fatTap(240, 240)); | 3276 webViewHelper.webView()->handleInputEvent(fatTap(240, 240)); |
3283 EXPECT_TRUE(client.triggered()); | 3277 EXPECT_TRUE(client.triggered()); |
3284 | 3278 |
3285 client.resetTriggered(); | 3279 client.resetTriggered(); |
3286 m_webView->handleInputEvent(fatTap(690, 570)); | 3280 webViewHelper.webView()->handleInputEvent(fatTap(690, 570)); |
3287 EXPECT_FALSE(client.triggered()); | 3281 EXPECT_FALSE(client.triggered()); |
3288 | |
3289 m_webView->close(); | |
3290 m_webView = 0; | |
3291 } | 3282 } |
3292 | 3283 |
3293 class TestSubstituteDataWebFrameClient : public WebFrameClient { | 3284 class TestSubstituteDataWebFrameClient : public WebFrameClient { |
3294 public: | 3285 public: |
3295 TestSubstituteDataWebFrameClient() | 3286 TestSubstituteDataWebFrameClient() |
3296 : m_commitCalled(false) | 3287 : m_commitCalled(false) |
3297 { | 3288 { |
3298 } | 3289 } |
3299 | 3290 |
3300 virtual void didFailProvisionalLoad(WebFrame* frame, const WebURLError& erro
r) | 3291 virtual void didFailProvisionalLoad(WebFrame* frame, const WebURLError& erro
r) |
(...skipping 11 matching lines...) Expand all Loading... |
3312 bool commitCalled() const { return m_commitCalled; } | 3303 bool commitCalled() const { return m_commitCalled; } |
3313 | 3304 |
3314 private: | 3305 private: |
3315 bool m_commitCalled; | 3306 bool m_commitCalled; |
3316 }; | 3307 }; |
3317 | 3308 |
3318 TEST_F(WebFrameTest, ReplaceNavigationAfterHistoryNavigation) | 3309 TEST_F(WebFrameTest, ReplaceNavigationAfterHistoryNavigation) |
3319 { | 3310 { |
3320 TestSubstituteDataWebFrameClient webFrameClient; | 3311 TestSubstituteDataWebFrameClient webFrameClient; |
3321 | 3312 |
3322 m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true, &web
FrameClient); | 3313 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3314 webViewHelper.initializeAndLoad("about:blank", true, &webFrameClient); |
3323 runPendingTasks(); | 3315 runPendingTasks(); |
3324 WebFrame* frame = m_webView->mainFrame(); | 3316 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
3325 | 3317 |
3326 // Load a url as a history navigation that will return an error. TestSubstit
uteDataWebFrameClient | 3318 // Load a url as a history navigation that will return an error. TestSubstit
uteDataWebFrameClient |
3327 // will start a SubstituteData load in response to the load failure, which s
hould get fully committed. | 3319 // will start a SubstituteData load in response to the load failure, which s
hould get fully committed. |
3328 // Due to https://bugs.webkit.org/show_bug.cgi?id=91685, FrameLoader::didRec
eiveData() wasn't getting | 3320 // Due to https://bugs.webkit.org/show_bug.cgi?id=91685, FrameLoader::didRec
eiveData() wasn't getting |
3329 // called in this case, which resulted in the SubstituteData document not ge
tting displayed. | 3321 // called in this case, which resulted in the SubstituteData document not ge
tting displayed. |
3330 WebURLError error; | 3322 WebURLError error; |
3331 error.reason = 1337; | 3323 error.reason = 1337; |
3332 error.domain = "WebFrameTest"; | 3324 error.domain = "WebFrameTest"; |
3333 std::string errorURL = "http://0.0.0.0"; | 3325 std::string errorURL = "http://0.0.0.0"; |
3334 WebURLResponse response; | 3326 WebURLResponse response; |
3335 response.initialize(); | 3327 response.initialize(); |
3336 response.setURL(URLTestHelpers::toKURL(errorURL)); | 3328 response.setURL(URLTestHelpers::toKURL(errorURL)); |
3337 response.setMIMEType("text/html"); | 3329 response.setMIMEType("text/html"); |
3338 response.setHTTPStatusCode(500); | 3330 response.setHTTPStatusCode(500); |
3339 WebHistoryItem errorHistoryItem; | 3331 WebHistoryItem errorHistoryItem; |
3340 errorHistoryItem.initialize(); | 3332 errorHistoryItem.initialize(); |
3341 errorHistoryItem.setURLString(WebString::fromUTF8(errorURL.c_str(), errorURL
.length())); | 3333 errorHistoryItem.setURLString(WebString::fromUTF8(errorURL.c_str(), errorURL
.length())); |
3342 errorHistoryItem.setOriginalURLString(WebString::fromUTF8(errorURL.c_str(),
errorURL.length())); | 3334 errorHistoryItem.setOriginalURLString(WebString::fromUTF8(errorURL.c_str(),
errorURL.length())); |
3343 Platform::current()->unitTestSupport()->registerMockedErrorURL(URLTestHelper
s::toKURL(errorURL), response, error); | 3335 Platform::current()->unitTestSupport()->registerMockedErrorURL(URLTestHelper
s::toKURL(errorURL), response, error); |
3344 frame->loadHistoryItem(errorHistoryItem); | 3336 frame->loadHistoryItem(errorHistoryItem); |
3345 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3337 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3346 | 3338 |
3347 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); | 3339 WebString text = frame->contentAsText(std::numeric_limits<size_t>::max()); |
3348 EXPECT_EQ("This should appear", std::string(text.utf8().data())); | 3340 EXPECT_EQ("This should appear", std::string(text.utf8().data())); |
3349 EXPECT_TRUE(webFrameClient.commitCalled()); | 3341 EXPECT_TRUE(webFrameClient.commitCalled()); |
3350 | |
3351 m_webView->close(); | |
3352 m_webView = 0; | |
3353 } | 3342 } |
3354 | 3343 |
3355 class TestWillInsertBodyWebFrameClient : public WebFrameClient { | 3344 class TestWillInsertBodyWebFrameClient : public WebFrameClient { |
3356 public: | 3345 public: |
3357 TestWillInsertBodyWebFrameClient() : m_numBodies(0), m_didLoad(false) | 3346 TestWillInsertBodyWebFrameClient() : m_numBodies(0), m_didLoad(false) |
3358 { | 3347 { |
3359 } | 3348 } |
3360 | 3349 |
3361 virtual void didCommitProvisionalLoad(WebFrame*, bool) OVERRIDE | 3350 virtual void didCommitProvisionalLoad(WebFrame*, bool) OVERRIDE |
3362 { | 3351 { |
(...skipping 13 matching lines...) Expand all Loading... |
3376 | 3365 |
3377 int m_numBodies; | 3366 int m_numBodies; |
3378 bool m_didLoad; | 3367 bool m_didLoad; |
3379 }; | 3368 }; |
3380 | 3369 |
3381 TEST_F(WebFrameTest, HTMLDocument) | 3370 TEST_F(WebFrameTest, HTMLDocument) |
3382 { | 3371 { |
3383 registerMockedHttpURLLoad("clipped-body.html"); | 3372 registerMockedHttpURLLoad("clipped-body.html"); |
3384 | 3373 |
3385 TestWillInsertBodyWebFrameClient webFrameClient; | 3374 TestWillInsertBodyWebFrameClient webFrameClient; |
3386 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "clipped-body
.html", false, &webFrameClient); | 3375 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3376 webViewHelper.initializeAndLoad(m_baseURL + "clipped-body.html", false, &web
FrameClient); |
3387 | 3377 |
3388 EXPECT_TRUE(webFrameClient.m_didLoad); | 3378 EXPECT_TRUE(webFrameClient.m_didLoad); |
3389 EXPECT_EQ(1, webFrameClient.m_numBodies); | 3379 EXPECT_EQ(1, webFrameClient.m_numBodies); |
3390 | |
3391 m_webView->close(); | |
3392 m_webView = 0; | |
3393 } | 3380 } |
3394 | 3381 |
3395 TEST_F(WebFrameTest, EmptyDocument) | 3382 TEST_F(WebFrameTest, EmptyDocument) |
3396 { | 3383 { |
3397 registerMockedHttpURLLoad("pageserializer/green_rectangle.svg"); | 3384 registerMockedHttpURLLoad("pageserializer/green_rectangle.svg"); |
3398 | 3385 |
3399 TestWillInsertBodyWebFrameClient webFrameClient; | 3386 TestWillInsertBodyWebFrameClient webFrameClient; |
3400 m_webView = FrameTestHelpers::createWebView(false, &webFrameClient); | 3387 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3388 webViewHelper.initialize(false, &webFrameClient); |
3401 | 3389 |
3402 EXPECT_FALSE(webFrameClient.m_didLoad); | 3390 EXPECT_FALSE(webFrameClient.m_didLoad); |
3403 EXPECT_EQ(1, webFrameClient.m_numBodies); // The empty document that a new f
rame starts with triggers this. | 3391 EXPECT_EQ(1, webFrameClient.m_numBodies); // The empty document that a new f
rame starts with triggers this. |
3404 m_webView->close(); | |
3405 m_webView = 0; | |
3406 } | 3392 } |
3407 | 3393 |
3408 TEST_F(WebFrameTest, MoveCaretSelectionTowardsWindowPointWithNoSelection) | 3394 TEST_F(WebFrameTest, MoveCaretSelectionTowardsWindowPointWithNoSelection) |
3409 { | 3395 { |
3410 m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true); | 3396 FrameTestHelpers::WebViewHelper webViewHelper; |
3411 WebFrame* frame = m_webView->mainFrame(); | 3397 webViewHelper.initializeAndLoad("about:blank", true); |
| 3398 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
3412 | 3399 |
3413 // This test passes if this doesn't crash. | 3400 // This test passes if this doesn't crash. |
3414 frame->moveCaretSelectionTowardsWindowPoint(WebPoint(0, 0)); | 3401 frame->moveCaretSelectionTowardsWindowPoint(WebPoint(0, 0)); |
3415 } | 3402 } |
3416 | 3403 |
3417 class SpellCheckClient : public WebSpellCheckClient { | 3404 class SpellCheckClient : public WebSpellCheckClient { |
3418 public: | 3405 public: |
3419 explicit SpellCheckClient(uint32_t hash = 0) : m_numberOfTimesChecked(0), m_
hash(hash) { } | 3406 explicit SpellCheckClient(uint32_t hash = 0) : m_numberOfTimesChecked(0), m_
hash(hash) { } |
3420 virtual ~SpellCheckClient() { } | 3407 virtual ~SpellCheckClient() { } |
3421 virtual void requestCheckingOfText(const WebKit::WebString&, const WebKit::W
ebVector<uint32_t>&, const WebKit::WebVector<unsigned>&, WebKit::WebTextChecking
Completion* completion) OVERRIDE | 3408 virtual void requestCheckingOfText(const WebKit::WebString&, const WebKit::W
ebVector<uint32_t>&, const WebKit::WebVector<unsigned>&, WebKit::WebTextChecking
Completion* completion) OVERRIDE |
3422 { | 3409 { |
3423 ++m_numberOfTimesChecked; | 3410 ++m_numberOfTimesChecked; |
3424 Vector<WebTextCheckingResult> results; | 3411 Vector<WebTextCheckingResult> results; |
3425 const int misspellingStartOffset = 1; | 3412 const int misspellingStartOffset = 1; |
3426 const int misspellingLength = 8; | 3413 const int misspellingLength = 8; |
3427 results.append(WebTextCheckingResult(WebTextCheckingTypeSpelling, misspe
llingStartOffset, misspellingLength, WebString(), m_hash)); | 3414 results.append(WebTextCheckingResult(WebTextCheckingTypeSpelling, misspe
llingStartOffset, misspellingLength, WebString(), m_hash)); |
3428 completion->didFinishCheckingText(results); | 3415 completion->didFinishCheckingText(results); |
3429 } | 3416 } |
3430 int numberOfTimesChecked() const { return m_numberOfTimesChecked; } | 3417 int numberOfTimesChecked() const { return m_numberOfTimesChecked; } |
3431 private: | 3418 private: |
3432 int m_numberOfTimesChecked; | 3419 int m_numberOfTimesChecked; |
3433 uint32_t m_hash; | 3420 uint32_t m_hash; |
3434 }; | 3421 }; |
3435 | 3422 |
3436 TEST_F(WebFrameTest, ReplaceMisspelledRange) | 3423 TEST_F(WebFrameTest, ReplaceMisspelledRange) |
3437 { | 3424 { |
3438 registerMockedHttpURLLoad("spell.html"); | 3425 registerMockedHttpURLLoad("spell.html"); |
3439 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "spell.html")
; | 3426 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3427 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
3440 SpellCheckClient spellcheck; | 3428 SpellCheckClient spellcheck; |
3441 m_webView->setSpellCheckClient(&spellcheck); | 3429 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
3442 | 3430 |
3443 WebFrameImpl* frame = toWebFrameImpl(m_webView->mainFrame()); | 3431 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
3444 Document* document = frame->frame()->document(); | 3432 Document* document = frame->frame()->document(); |
3445 Element* element = document->getElementById("data"); | 3433 Element* element = document->getElementById("data"); |
3446 | 3434 |
3447 m_webView->settings()->setAsynchronousSpellCheckingEnabled(true); | 3435 webViewHelper.webView()->settings()->setAsynchronousSpellCheckingEnabled(tru
e); |
3448 m_webView->settings()->setUnifiedTextCheckerEnabled(true); | 3436 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); |
3449 m_webView->settings()->setEditingBehavior(WebSettings::EditingBehaviorWin); | 3437 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
3450 | 3438 |
3451 element->focus(); | 3439 element->focus(); |
3452 document->execCommand("InsertText", false, "_wellcome_."); | 3440 document->execCommand("InsertText", false, "_wellcome_."); |
3453 | 3441 |
3454 const int allTextBeginOffset = 0; | 3442 const int allTextBeginOffset = 0; |
3455 const int allTextLength = 11; | 3443 const int allTextLength = 11; |
3456 frame->selectRange(WebRange::fromDocumentRange(frame, allTextBeginOffset, al
lTextLength)); | 3444 frame->selectRange(WebRange::fromDocumentRange(frame, allTextBeginOffset, al
lTextLength)); |
3457 RefPtr<Range> selectionRange = frame->frame()->selection().toNormalizedRange
(); | 3445 RefPtr<Range> selectionRange = frame->frame()->selection().toNormalizedRange
(); |
3458 | 3446 |
3459 EXPECT_EQ(1, spellcheck.numberOfTimesChecked()); | 3447 EXPECT_EQ(1, spellcheck.numberOfTimesChecked()); |
3460 EXPECT_EQ(1U, document->markers()->markersInRange(selectionRange.get(), Docu
mentMarker::Spelling).size()); | 3448 EXPECT_EQ(1U, document->markers()->markersInRange(selectionRange.get(), Docu
mentMarker::Spelling).size()); |
3461 | 3449 |
3462 frame->replaceMisspelledRange("welcome"); | 3450 frame->replaceMisspelledRange("welcome"); |
3463 EXPECT_EQ("_welcome_.", std::string(frame->contentAsText(std::numeric_limits
<size_t>::max()).utf8().data())); | 3451 EXPECT_EQ("_welcome_.", std::string(frame->contentAsText(std::numeric_limits
<size_t>::max()).utf8().data())); |
3464 | |
3465 m_webView->close(); | |
3466 m_webView = 0; | |
3467 } | 3452 } |
3468 | 3453 |
3469 TEST_F(WebFrameTest, RemoveSpellingMarkers) | 3454 TEST_F(WebFrameTest, RemoveSpellingMarkers) |
3470 { | 3455 { |
3471 registerMockedHttpURLLoad("spell.html"); | 3456 registerMockedHttpURLLoad("spell.html"); |
3472 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "spell.html")
; | 3457 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3458 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
3473 SpellCheckClient spellcheck; | 3459 SpellCheckClient spellcheck; |
3474 m_webView->setSpellCheckClient(&spellcheck); | 3460 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
3475 | 3461 |
3476 WebFrameImpl* frame = toWebFrameImpl(m_webView->mainFrame()); | 3462 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
3477 Document* document = frame->frame()->document(); | 3463 Document* document = frame->frame()->document(); |
3478 Element* element = document->getElementById("data"); | 3464 Element* element = document->getElementById("data"); |
3479 | 3465 |
3480 m_webView->settings()->setAsynchronousSpellCheckingEnabled(true); | 3466 webViewHelper.webView()->settings()->setAsynchronousSpellCheckingEnabled(tru
e); |
3481 m_webView->settings()->setUnifiedTextCheckerEnabled(true); | 3467 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); |
3482 m_webView->settings()->setEditingBehavior(WebSettings::EditingBehaviorWin); | 3468 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
3483 | 3469 |
3484 element->focus(); | 3470 element->focus(); |
3485 document->execCommand("InsertText", false, "_wellcome_."); | 3471 document->execCommand("InsertText", false, "_wellcome_."); |
3486 | 3472 |
3487 frame->removeSpellingMarkers(); | 3473 frame->removeSpellingMarkers(); |
3488 | 3474 |
3489 const int allTextBeginOffset = 0; | 3475 const int allTextBeginOffset = 0; |
3490 const int allTextLength = 11; | 3476 const int allTextLength = 11; |
3491 frame->selectRange(WebRange::fromDocumentRange(frame, allTextBeginOffset, al
lTextLength)); | 3477 frame->selectRange(WebRange::fromDocumentRange(frame, allTextBeginOffset, al
lTextLength)); |
3492 RefPtr<Range> selectionRange = frame->frame()->selection().toNormalizedRange
(); | 3478 RefPtr<Range> selectionRange = frame->frame()->selection().toNormalizedRange
(); |
3493 | 3479 |
3494 EXPECT_EQ(0U, document->markers()->markersInRange(selectionRange.get(), Docu
mentMarker::Spelling).size()); | 3480 EXPECT_EQ(0U, document->markers()->markersInRange(selectionRange.get(), Docu
mentMarker::Spelling).size()); |
3495 | |
3496 m_webView->close(); | |
3497 m_webView = 0; | |
3498 } | 3481 } |
3499 | 3482 |
3500 TEST_F(WebFrameTest, MarkerHashIdentifiers) { | 3483 TEST_F(WebFrameTest, MarkerHashIdentifiers) { |
3501 registerMockedHttpURLLoad("spell.html"); | 3484 registerMockedHttpURLLoad("spell.html"); |
3502 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "spell.html")
; | 3485 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3486 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
3503 | 3487 |
3504 static const uint32_t kHash = 42; | 3488 static const uint32_t kHash = 42; |
3505 SpellCheckClient spellcheck(kHash); | 3489 SpellCheckClient spellcheck(kHash); |
3506 m_webView->setSpellCheckClient(&spellcheck); | 3490 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
3507 | 3491 |
3508 WebFrameImpl* frame = toWebFrameImpl(m_webView->mainFrame()); | 3492 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
3509 Document* document = frame->frame()->document(); | 3493 Document* document = frame->frame()->document(); |
3510 Element* element = document->getElementById("data"); | 3494 Element* element = document->getElementById("data"); |
3511 | 3495 |
3512 m_webView->settings()->setAsynchronousSpellCheckingEnabled(true); | 3496 webViewHelper.webView()->settings()->setAsynchronousSpellCheckingEnabled(tru
e); |
3513 m_webView->settings()->setUnifiedTextCheckerEnabled(true); | 3497 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); |
3514 m_webView->settings()->setEditingBehavior(WebSettings::EditingBehaviorWin); | 3498 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
3515 | 3499 |
3516 element->focus(); | 3500 element->focus(); |
3517 document->execCommand("InsertText", false, "wellcome."); | 3501 document->execCommand("InsertText", false, "wellcome."); |
3518 | 3502 |
3519 WebVector<uint32_t> documentMarkers; | 3503 WebVector<uint32_t> documentMarkers; |
3520 m_webView->spellingMarkers(&documentMarkers); | 3504 webViewHelper.webView()->spellingMarkers(&documentMarkers); |
3521 EXPECT_EQ(1U, documentMarkers.size()); | 3505 EXPECT_EQ(1U, documentMarkers.size()); |
3522 EXPECT_EQ(kHash, documentMarkers[0]); | 3506 EXPECT_EQ(kHash, documentMarkers[0]); |
3523 | |
3524 m_webView->close(); | |
3525 m_webView = 0; | |
3526 } | 3507 } |
3527 | 3508 |
3528 class StubbornSpellCheckClient : public WebSpellCheckClient { | 3509 class StubbornSpellCheckClient : public WebSpellCheckClient { |
3529 public: | 3510 public: |
3530 StubbornSpellCheckClient() : m_completion(0) { } | 3511 StubbornSpellCheckClient() : m_completion(0) { } |
3531 virtual ~StubbornSpellCheckClient() { } | 3512 virtual ~StubbornSpellCheckClient() { } |
3532 | 3513 |
3533 virtual void requestCheckingOfText( | 3514 virtual void requestCheckingOfText( |
3534 const WebKit::WebString&, | 3515 const WebKit::WebString&, |
3535 const WebKit::WebVector<uint32_t>&, | 3516 const WebKit::WebVector<uint32_t>&, |
(...skipping 15 matching lines...) Expand all Loading... |
3551 m_completion = 0; | 3532 m_completion = 0; |
3552 } | 3533 } |
3553 | 3534 |
3554 private: | 3535 private: |
3555 WebKit::WebTextCheckingCompletion* m_completion; | 3536 WebKit::WebTextCheckingCompletion* m_completion; |
3556 }; | 3537 }; |
3557 | 3538 |
3558 TEST_F(WebFrameTest, SlowSpellcheckMarkerPosition) | 3539 TEST_F(WebFrameTest, SlowSpellcheckMarkerPosition) |
3559 { | 3540 { |
3560 registerMockedHttpURLLoad("spell.html"); | 3541 registerMockedHttpURLLoad("spell.html"); |
3561 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "spell.html")
; | 3542 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3543 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
3562 | 3544 |
3563 StubbornSpellCheckClient spellcheck; | 3545 StubbornSpellCheckClient spellcheck; |
3564 m_webView->setSpellCheckClient(&spellcheck); | 3546 webViewHelper.webView()->setSpellCheckClient(&spellcheck); |
3565 | 3547 |
3566 WebFrameImpl* frame = toWebFrameImpl(m_webView->mainFrame()); | 3548 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
3567 WebInputElement webInputElement = frame->document().getElementById("data").t
o<WebInputElement>(); | 3549 WebInputElement webInputElement = frame->document().getElementById("data").t
o<WebInputElement>(); |
3568 Document* document = frame->frame()->document(); | 3550 Document* document = frame->frame()->document(); |
3569 Element* element = document->getElementById("data"); | 3551 Element* element = document->getElementById("data"); |
3570 | 3552 |
3571 m_webView->settings()->setAsynchronousSpellCheckingEnabled(true); | 3553 webViewHelper.webView()->settings()->setAsynchronousSpellCheckingEnabled(tru
e); |
3572 m_webView->settings()->setUnifiedTextCheckerEnabled(true); | 3554 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); |
3573 m_webView->settings()->setEditingBehavior(WebSettings::EditingBehaviorWin); | 3555 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
3574 | 3556 |
3575 element->focus(); | 3557 element->focus(); |
3576 document->execCommand("InsertText", false, "wellcome "); | 3558 document->execCommand("InsertText", false, "wellcome "); |
3577 webInputElement.setSelectionRange(0, 0); | 3559 webInputElement.setSelectionRange(0, 0); |
3578 document->execCommand("InsertText", false, "he"); | 3560 document->execCommand("InsertText", false, "he"); |
3579 | 3561 |
3580 spellcheck.kick(); | 3562 spellcheck.kick(); |
3581 | 3563 |
3582 WebVector<uint32_t> documentMarkers; | 3564 WebVector<uint32_t> documentMarkers; |
3583 m_webView->spellingMarkers(&documentMarkers); | 3565 webViewHelper.webView()->spellingMarkers(&documentMarkers); |
3584 EXPECT_EQ(0U, documentMarkers.size()); | 3566 EXPECT_EQ(0U, documentMarkers.size()); |
3585 | |
3586 m_webView->close(); | |
3587 m_webView = 0; | |
3588 } | 3567 } |
3589 | 3568 |
3590 // This test verifies that cancelling spelling request does not cause a | 3569 // This test verifies that cancelling spelling request does not cause a |
3591 // write-after-free when there's no spellcheck client set. | 3570 // write-after-free when there's no spellcheck client set. |
3592 TEST_F(WebFrameTest, CancelSpellingRequestCrash) | 3571 TEST_F(WebFrameTest, CancelSpellingRequestCrash) |
3593 { | 3572 { |
3594 registerMockedHttpURLLoad("spell.html"); | 3573 registerMockedHttpURLLoad("spell.html"); |
3595 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "spell.html")
; | 3574 FrameTestHelpers::WebViewHelper webViewHelper; |
3596 m_webView->setSpellCheckClient(0); | 3575 webViewHelper.initializeAndLoad(m_baseURL + "spell.html"); |
| 3576 webViewHelper.webView()->setSpellCheckClient(0); |
3597 | 3577 |
3598 WebFrameImpl* frame = toWebFrameImpl(m_webView->mainFrame()); | 3578 WebFrameImpl* frame = toWebFrameImpl(webViewHelper.webView()->mainFrame()); |
3599 Document* document = frame->frame()->document(); | 3579 Document* document = frame->frame()->document(); |
3600 Element* element = document->getElementById("data"); | 3580 Element* element = document->getElementById("data"); |
3601 | 3581 |
3602 m_webView->settings()->setAsynchronousSpellCheckingEnabled(true); | 3582 webViewHelper.webView()->settings()->setAsynchronousSpellCheckingEnabled(tru
e); |
3603 m_webView->settings()->setUnifiedTextCheckerEnabled(true); | 3583 webViewHelper.webView()->settings()->setUnifiedTextCheckerEnabled(true); |
3604 m_webView->settings()->setEditingBehavior(WebSettings::EditingBehaviorWin); | 3584 webViewHelper.webView()->settings()->setEditingBehavior(WebSettings::Editing
BehaviorWin); |
3605 | 3585 |
3606 element->focus(); | 3586 element->focus(); |
3607 frame->frame()->editor().replaceSelectionWithText("A", false, false); | 3587 frame->frame()->editor().replaceSelectionWithText("A", false, false); |
3608 frame->frame()->editor().spellCheckRequester().cancelCheck(); | 3588 frame->frame()->editor().spellCheckRequester().cancelCheck(); |
3609 | |
3610 m_webView->close(); | |
3611 m_webView = 0; | |
3612 } | 3589 } |
3613 | 3590 |
3614 class TestAccessInitialDocumentWebFrameClient : public WebFrameClient { | 3591 class TestAccessInitialDocumentWebFrameClient : public WebFrameClient { |
3615 public: | 3592 public: |
3616 TestAccessInitialDocumentWebFrameClient() : m_didAccessInitialDocument(false
) | 3593 TestAccessInitialDocumentWebFrameClient() : m_didAccessInitialDocument(false
) |
3617 { | 3594 { |
3618 } | 3595 } |
3619 | 3596 |
3620 virtual void didAccessInitialDocument(WebFrame* frame) | 3597 virtual void didAccessInitialDocument(WebFrame* frame) |
3621 { | 3598 { |
3622 EXPECT_TRUE(!m_didAccessInitialDocument); | 3599 EXPECT_TRUE(!m_didAccessInitialDocument); |
3623 m_didAccessInitialDocument = true; | 3600 m_didAccessInitialDocument = true; |
3624 } | 3601 } |
3625 | 3602 |
3626 bool m_didAccessInitialDocument; | 3603 bool m_didAccessInitialDocument; |
3627 }; | 3604 }; |
3628 | 3605 |
3629 TEST_F(WebFrameTest, DidAccessInitialDocumentBody) | 3606 TEST_F(WebFrameTest, DidAccessInitialDocumentBody) |
3630 { | 3607 { |
3631 TestAccessInitialDocumentWebFrameClient webFrameClient; | 3608 TestAccessInitialDocumentWebFrameClient webFrameClient; |
3632 m_webView = FrameTestHelpers::createWebView(true, &webFrameClient); | 3609 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3610 webViewHelper.initialize(true, &webFrameClient); |
3633 runPendingTasks(); | 3611 runPendingTasks(); |
3634 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3612 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3635 | 3613 |
3636 // Create another window that will try to access it. | 3614 // Create another window that will try to access it. |
3637 WebView* newView = FrameTestHelpers::createWebView(true); | 3615 FrameTestHelpers::WebViewHelper newWebViewHelper; |
3638 newView->mainFrame()->setOpener(m_webView->mainFrame()); | 3616 WebView* newView = newWebViewHelper.initialize(true); |
| 3617 newView->mainFrame()->setOpener(webViewHelper.webView()->mainFrame()); |
3639 runPendingTasks(); | 3618 runPendingTasks(); |
3640 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3619 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3641 | 3620 |
3642 // Access the initial document by modifying the body. | 3621 // Access the initial document by modifying the body. |
3643 newView->mainFrame()->executeScript( | 3622 newView->mainFrame()->executeScript( |
3644 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; | 3623 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; |
3645 runPendingTasks(); | 3624 runPendingTasks(); |
3646 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3625 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3647 | 3626 |
3648 // Access the initial document again, to ensure we don't notify twice. | 3627 // Access the initial document again, to ensure we don't notify twice. |
3649 newView->mainFrame()->executeScript( | 3628 newView->mainFrame()->executeScript( |
3650 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; | 3629 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; |
3651 runPendingTasks(); | 3630 runPendingTasks(); |
3652 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3631 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3653 | |
3654 newView->close(); | |
3655 m_webView->close(); | |
3656 m_webView = 0; | |
3657 } | 3632 } |
3658 | 3633 |
3659 TEST_F(WebFrameTest, DidAccessInitialDocumentNavigator) | 3634 TEST_F(WebFrameTest, DidAccessInitialDocumentNavigator) |
3660 { | 3635 { |
3661 TestAccessInitialDocumentWebFrameClient webFrameClient; | 3636 TestAccessInitialDocumentWebFrameClient webFrameClient; |
3662 m_webView = FrameTestHelpers::createWebView(true, &webFrameClient); | 3637 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3638 webViewHelper.initialize(true, &webFrameClient); |
3663 runPendingTasks(); | 3639 runPendingTasks(); |
3664 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3640 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3665 | 3641 |
3666 // Create another window that will try to access it. | 3642 // Create another window that will try to access it. |
3667 WebView* newView = FrameTestHelpers::createWebView(true); | 3643 FrameTestHelpers::WebViewHelper newWebViewHelper; |
3668 newView->mainFrame()->setOpener(m_webView->mainFrame()); | 3644 WebView* newView = newWebViewHelper.initialize(true); |
| 3645 newView->mainFrame()->setOpener(webViewHelper.webView()->mainFrame()); |
3669 runPendingTasks(); | 3646 runPendingTasks(); |
3670 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3647 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3671 | 3648 |
3672 // Access the initial document to get to the navigator object. | 3649 // Access the initial document to get to the navigator object. |
3673 newView->mainFrame()->executeScript( | 3650 newView->mainFrame()->executeScript( |
3674 WebScriptSource("console.log(window.opener.navigator);")); | 3651 WebScriptSource("console.log(window.opener.navigator);")); |
3675 runPendingTasks(); | 3652 runPendingTasks(); |
3676 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3653 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3677 | |
3678 newView->close(); | |
3679 m_webView->close(); | |
3680 m_webView = 0; | |
3681 } | 3654 } |
3682 | 3655 |
3683 TEST_F(WebFrameTest, DidAccessInitialDocumentViaJavascriptUrl) | 3656 TEST_F(WebFrameTest, DidAccessInitialDocumentViaJavascriptUrl) |
3684 { | 3657 { |
3685 TestAccessInitialDocumentWebFrameClient webFrameClient; | 3658 TestAccessInitialDocumentWebFrameClient webFrameClient; |
3686 m_webView = FrameTestHelpers::createWebView(true, &webFrameClient); | 3659 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3660 webViewHelper.initialize(true, &webFrameClient); |
3687 runPendingTasks(); | 3661 runPendingTasks(); |
3688 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3662 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3689 | 3663 |
3690 // Access the initial document from a javascript: URL. | 3664 // Access the initial document from a javascript: URL. |
3691 FrameTestHelpers::loadFrame(m_webView->mainFrame(), "javascript:document.bod
y.appendChild(document.createTextNode('Modified'))"); | 3665 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascrip
t:document.body.appendChild(document.createTextNode('Modified'))"); |
3692 runPendingTasks(); | 3666 runPendingTasks(); |
3693 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3667 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3694 | |
3695 m_webView->close(); | |
3696 m_webView = 0; | |
3697 } | 3668 } |
3698 | 3669 |
3699 TEST_F(WebFrameTest, DidAccessInitialDocumentBodyBeforeModalDialog) | 3670 TEST_F(WebFrameTest, DidAccessInitialDocumentBodyBeforeModalDialog) |
3700 { | 3671 { |
3701 TestAccessInitialDocumentWebFrameClient webFrameClient; | 3672 TestAccessInitialDocumentWebFrameClient webFrameClient; |
3702 m_webView = FrameTestHelpers::createWebView(true, &webFrameClient); | 3673 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3674 webViewHelper.initialize(true, &webFrameClient); |
3703 runPendingTasks(); | 3675 runPendingTasks(); |
3704 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3676 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3705 | 3677 |
3706 // Create another window that will try to access it. | 3678 // Create another window that will try to access it. |
3707 WebView* newView = FrameTestHelpers::createWebView(true); | 3679 FrameTestHelpers::WebViewHelper newWebViewHelper; |
3708 newView->mainFrame()->setOpener(m_webView->mainFrame()); | 3680 WebView* newView = newWebViewHelper.initialize(true); |
| 3681 newView->mainFrame()->setOpener(webViewHelper.webView()->mainFrame()); |
3709 runPendingTasks(); | 3682 runPendingTasks(); |
3710 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3683 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3711 | 3684 |
3712 // Access the initial document by modifying the body. We normally set a | 3685 // Access the initial document by modifying the body. We normally set a |
3713 // timer to notify the client. | 3686 // timer to notify the client. |
3714 newView->mainFrame()->executeScript( | 3687 newView->mainFrame()->executeScript( |
3715 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; | 3688 WebScriptSource("window.opener.document.body.innerHTML += 'Modified';"))
; |
3716 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); | 3689 EXPECT_FALSE(webFrameClient.m_didAccessInitialDocument); |
3717 | 3690 |
3718 // Make sure that a modal dialog forces us to notify right away. | 3691 // Make sure that a modal dialog forces us to notify right away. |
3719 newView->mainFrame()->executeScript( | 3692 newView->mainFrame()->executeScript( |
3720 WebScriptSource("window.opener.confirm('Modal');")); | 3693 WebScriptSource("window.opener.confirm('Modal');")); |
3721 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3694 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3722 | 3695 |
3723 // Ensure that we don't notify again later. | 3696 // Ensure that we don't notify again later. |
3724 runPendingTasks(); | 3697 runPendingTasks(); |
3725 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); | 3698 EXPECT_TRUE(webFrameClient.m_didAccessInitialDocument); |
3726 | |
3727 newView->close(); | |
3728 m_webView->close(); | |
3729 m_webView = 0; | |
3730 } | 3699 } |
3731 | 3700 |
3732 class TestMainFrameUserOrProgrammaticScrollFrameClient : public WebFrameClient { | 3701 class TestMainFrameUserOrProgrammaticScrollFrameClient : public WebFrameClient { |
3733 public: | 3702 public: |
3734 TestMainFrameUserOrProgrammaticScrollFrameClient() { reset(); } | 3703 TestMainFrameUserOrProgrammaticScrollFrameClient() { reset(); } |
3735 void reset() | 3704 void reset() |
3736 { | 3705 { |
3737 m_didScrollMainFrame = false; | 3706 m_didScrollMainFrame = false; |
3738 m_wasProgrammaticScroll = false; | 3707 m_wasProgrammaticScroll = false; |
3739 } | 3708 } |
(...skipping 20 matching lines...) Expand all Loading... |
3760 bool m_wasProgrammaticScroll; | 3729 bool m_wasProgrammaticScroll; |
3761 }; | 3730 }; |
3762 | 3731 |
3763 TEST_F(WebFrameTest, CompositorScrollIsUserScrollLongPage) | 3732 TEST_F(WebFrameTest, CompositorScrollIsUserScrollLongPage) |
3764 { | 3733 { |
3765 registerMockedHttpURLLoad("long_scroll.html"); | 3734 registerMockedHttpURLLoad("long_scroll.html"); |
3766 TestMainFrameUserOrProgrammaticScrollFrameClient client; | 3735 TestMainFrameUserOrProgrammaticScrollFrameClient client; |
3767 | 3736 |
3768 // Make sure we initialize to minimum scale, even if the window size | 3737 // Make sure we initialize to minimum scale, even if the window size |
3769 // only becomes available after the load begins. | 3738 // only becomes available after the load begins. |
3770 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "long_scroll.
html", true, &client); | 3739 FrameTestHelpers::WebViewHelper webViewHelper; |
3771 m_webView->resize(WebSize(1000, 1000)); | 3740 webViewHelper.initializeAndLoad(m_baseURL + "long_scroll.html", true, &clien
t); |
3772 m_webView->layout(); | 3741 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
| 3742 webViewHelper.webView()->layout(); |
3773 | 3743 |
3774 EXPECT_FALSE(client.wasUserScroll()); | 3744 EXPECT_FALSE(client.wasUserScroll()); |
3775 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3745 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3776 | 3746 |
3777 // Do a compositor scroll, verify that this is counted as a user scroll. | 3747 // Do a compositor scroll, verify that this is counted as a user scroll. |
3778 webViewImpl()->applyScrollAndScale(WebSize(0, 1), 1.1f); | 3748 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(0, 1), 1.1f); |
3779 EXPECT_TRUE(client.wasUserScroll()); | 3749 EXPECT_TRUE(client.wasUserScroll()); |
3780 client.reset(); | 3750 client.reset(); |
3781 | 3751 |
3782 EXPECT_FALSE(client.wasUserScroll()); | 3752 EXPECT_FALSE(client.wasUserScroll()); |
3783 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3753 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3784 | 3754 |
3785 // The page scale 1.0f and scroll. | 3755 // The page scale 1.0f and scroll. |
3786 webViewImpl()->applyScrollAndScale(WebSize(0, 1), 1.0f); | 3756 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(0, 1), 1.0f); |
3787 EXPECT_TRUE(client.wasUserScroll()); | 3757 EXPECT_TRUE(client.wasUserScroll()); |
3788 client.reset(); | 3758 client.reset(); |
3789 | 3759 |
3790 // No scroll event if there is no scroll delta. | 3760 // No scroll event if there is no scroll delta. |
3791 webViewImpl()->applyScrollAndScale(WebSize(), 1.0f); | 3761 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(), 1.0f); |
3792 EXPECT_FALSE(client.wasUserScroll()); | 3762 EXPECT_FALSE(client.wasUserScroll()); |
3793 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3763 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3794 client.reset(); | 3764 client.reset(); |
3795 | 3765 |
3796 // Non zero page scale and scroll. | 3766 // Non zero page scale and scroll. |
3797 webViewImpl()->applyScrollAndScale(WebSize(9, 13), 0.6f); | 3767 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(9, 13), 0.6f); |
3798 EXPECT_TRUE(client.wasUserScroll()); | 3768 EXPECT_TRUE(client.wasUserScroll()); |
3799 client.reset(); | 3769 client.reset(); |
3800 | 3770 |
3801 // Programmatic scroll. | 3771 // Programmatic scroll. |
3802 WebFrameImpl* frameImpl = webViewImpl()->mainFrameImpl(); | 3772 WebFrameImpl* frameImpl = webViewHelper.webViewImpl()->mainFrameImpl(); |
3803 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); | 3773 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); |
3804 EXPECT_FALSE(client.wasUserScroll()); | 3774 EXPECT_FALSE(client.wasUserScroll()); |
3805 EXPECT_TRUE(client.wasProgrammaticScroll()); | 3775 EXPECT_TRUE(client.wasProgrammaticScroll()); |
3806 client.reset(); | 3776 client.reset(); |
3807 | 3777 |
3808 // Programmatic scroll to same offset. No scroll event should be generated. | 3778 // Programmatic scroll to same offset. No scroll event should be generated. |
3809 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); | 3779 frameImpl->executeScript(WebScriptSource("window.scrollTo(0, 20);")); |
3810 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3780 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3811 EXPECT_FALSE(client.wasUserScroll()); | 3781 EXPECT_FALSE(client.wasUserScroll()); |
3812 client.reset(); | 3782 client.reset(); |
3813 | |
3814 m_webView->close(); | |
3815 m_webView = 0; | |
3816 } | 3783 } |
3817 | 3784 |
3818 TEST_F(WebFrameTest, CompositorScrollIsUserScrollShortPage) | 3785 TEST_F(WebFrameTest, CompositorScrollIsUserScrollShortPage) |
3819 { | 3786 { |
3820 registerMockedHttpURLLoad("short_scroll.html"); | 3787 registerMockedHttpURLLoad("short_scroll.html"); |
3821 | 3788 |
3822 TestMainFrameUserOrProgrammaticScrollFrameClient client; | 3789 TestMainFrameUserOrProgrammaticScrollFrameClient client; |
3823 | 3790 |
3824 // Short page tests. | 3791 // Short page tests. |
3825 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "short_scroll
.html", true, &client); | 3792 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3793 webViewHelper.initializeAndLoad(m_baseURL + "short_scroll.html", true, &clie
nt); |
3826 | 3794 |
3827 m_webView->resize(WebSize(1000, 1000)); | 3795 webViewHelper.webView()->resize(WebSize(1000, 1000)); |
3828 m_webView->layout(); | 3796 webViewHelper.webView()->layout(); |
3829 | 3797 |
3830 EXPECT_FALSE(client.wasUserScroll()); | 3798 EXPECT_FALSE(client.wasUserScroll()); |
3831 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3799 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3832 | 3800 |
3833 // Non zero page scale and scroll. | 3801 // Non zero page scale and scroll. |
3834 webViewImpl()->applyScrollAndScale(WebSize(9, 13), 2.0f); | 3802 webViewHelper.webViewImpl()->applyScrollAndScale(WebSize(9, 13), 2.0f); |
3835 EXPECT_FALSE(client.wasProgrammaticScroll()); | 3803 EXPECT_FALSE(client.wasProgrammaticScroll()); |
3836 EXPECT_TRUE(client.wasUserScroll()); | 3804 EXPECT_TRUE(client.wasUserScroll()); |
3837 client.reset(); | 3805 client.reset(); |
3838 | |
3839 m_webView->close(); | |
3840 m_webView = 0; | |
3841 } | 3806 } |
3842 | 3807 |
3843 TEST_F(WebFrameTest, FirstPartyForCookiesForRedirect) | 3808 TEST_F(WebFrameTest, FirstPartyForCookiesForRedirect) |
3844 { | 3809 { |
3845 WTF::String filePath = Platform::current()->unitTestSupport()->webKitRootDir
(); | 3810 WTF::String filePath = Platform::current()->unitTestSupport()->webKitRootDir
(); |
3846 filePath.append("/Source/web/tests/data/first_party.html"); | 3811 filePath.append("/Source/web/tests/data/first_party.html"); |
3847 | 3812 |
3848 WebURL testURL(toKURL("http://www.test.com/first_party_redirect.html")); | 3813 WebURL testURL(toKURL("http://www.test.com/first_party_redirect.html")); |
3849 char redirect[] = "http://www.test.com/first_party.html"; | 3814 char redirect[] = "http://www.test.com/first_party.html"; |
3850 WebURL redirectURL(toKURL(redirect)); | 3815 WebURL redirectURL(toKURL(redirect)); |
3851 WebURLResponse redirectResponse; | 3816 WebURLResponse redirectResponse; |
3852 redirectResponse.initialize(); | 3817 redirectResponse.initialize(); |
3853 redirectResponse.setMIMEType("text/html"); | 3818 redirectResponse.setMIMEType("text/html"); |
3854 redirectResponse.setHTTPStatusCode(302); | 3819 redirectResponse.setHTTPStatusCode(302); |
3855 redirectResponse.setHTTPHeaderField("Location", redirect); | 3820 redirectResponse.setHTTPHeaderField("Location", redirect); |
3856 Platform::current()->unitTestSupport()->registerMockedURL(testURL, redirectR
esponse, filePath); | 3821 Platform::current()->unitTestSupport()->registerMockedURL(testURL, redirectR
esponse, filePath); |
3857 | 3822 |
3858 WebURLResponse finalResponse; | 3823 WebURLResponse finalResponse; |
3859 finalResponse.initialize(); | 3824 finalResponse.initialize(); |
3860 finalResponse.setMIMEType("text/html"); | 3825 finalResponse.setMIMEType("text/html"); |
3861 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, final
Response, filePath); | 3826 Platform::current()->unitTestSupport()->registerMockedURL(redirectURL, final
Response, filePath); |
3862 | 3827 |
3863 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "first_party_
redirect.html", true); | 3828 FrameTestHelpers::WebViewHelper webViewHelper; |
3864 EXPECT_TRUE(m_webView->mainFrame()->document().firstPartyForCookies() == red
irectURL); | 3829 webViewHelper.initializeAndLoad(m_baseURL + "first_party_redirect.html", tru
e); |
3865 | 3830 EXPECT_TRUE(webViewHelper.webView()->mainFrame()->document().firstPartyForCo
okies() == redirectURL); |
3866 m_webView->close(); | |
3867 m_webView = 0; | |
3868 } | 3831 } |
3869 | 3832 |
3870 class TestNavigationPolicyWebFrameClient : public WebFrameClient { | 3833 class TestNavigationPolicyWebFrameClient : public WebFrameClient { |
3871 public: | 3834 public: |
3872 | 3835 |
3873 virtual void didNavigateWithinPage(WebFrame*, bool) | 3836 virtual void didNavigateWithinPage(WebFrame*, bool) |
3874 { | 3837 { |
3875 EXPECT_TRUE(false); | 3838 EXPECT_TRUE(false); |
3876 } | 3839 } |
3877 }; | 3840 }; |
3878 | 3841 |
3879 TEST_F(WebFrameTest, SimulateFragmentAnchorMiddleClick) | 3842 TEST_F(WebFrameTest, SimulateFragmentAnchorMiddleClick) |
3880 { | 3843 { |
3881 registerMockedHttpURLLoad("fragment_middle_click.html"); | 3844 registerMockedHttpURLLoad("fragment_middle_click.html"); |
3882 TestNavigationPolicyWebFrameClient client; | 3845 TestNavigationPolicyWebFrameClient client; |
3883 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fragment_mid
dle_click.html", true, &client); | 3846 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3847 webViewHelper.initializeAndLoad(m_baseURL + "fragment_middle_click.html", tr
ue, &client); |
3884 | 3848 |
3885 WebCore::Document* document = webViewImpl()->page()->mainFrame()->document()
; | 3849 WebCore::Document* document = webViewHelper.webViewImpl()->page()->mainFrame
()->document(); |
3886 WebCore::KURL destination = document->url(); | 3850 WebCore::KURL destination = document->url(); |
3887 destination.setFragmentIdentifier("test"); | 3851 destination.setFragmentIdentifier("test"); |
3888 | 3852 |
3889 RefPtr<WebCore::Event> event = WebCore::MouseEvent::create(WebCore::eventNam
es().clickEvent, false, false, | 3853 RefPtr<WebCore::Event> event = WebCore::MouseEvent::create(WebCore::eventNam
es().clickEvent, false, false, |
3890 document->defaultView(), 0, 0, 0, 0, 0, 0, 0, false, false, false, false
, 1, 0, 0); | 3854 document->defaultView(), 0, 0, 0, 0, 0, 0, 0, false, false, false, false
, 1, 0, 0); |
3891 WebCore::FrameLoadRequest frameRequest(document->securityOrigin(), WebCore::
ResourceRequest(destination)); | 3855 WebCore::FrameLoadRequest frameRequest(document->securityOrigin(), WebCore::
ResourceRequest(destination)); |
3892 frameRequest.setTriggeringEvent(event); | 3856 frameRequest.setTriggeringEvent(event); |
3893 webViewImpl()->page()->mainFrame()->loader()->load(frameRequest); | 3857 webViewHelper.webViewImpl()->page()->mainFrame()->loader()->load(frameReques
t); |
3894 | |
3895 m_webView->close(); | |
3896 m_webView = 0; | |
3897 } | 3858 } |
3898 | 3859 |
3899 TEST_F(WebFrameTest, BackToReload) | 3860 TEST_F(WebFrameTest, BackToReload) |
3900 { | 3861 { |
3901 registerMockedHttpURLLoad("fragment_middle_click.html"); | 3862 registerMockedHttpURLLoad("fragment_middle_click.html"); |
3902 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "fragment_mid
dle_click.html", true); | 3863 FrameTestHelpers::WebViewHelper webViewHelper; |
3903 WebFrame* frame = m_webView->mainFrame(); | 3864 webViewHelper.initializeAndLoad(m_baseURL + "fragment_middle_click.html", tr
ue); |
| 3865 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
3904 WebHistoryItem firstItem = frame->currentHistoryItem(); | 3866 WebHistoryItem firstItem = frame->currentHistoryItem(); |
3905 EXPECT_FALSE(firstItem.isNull()); | 3867 EXPECT_FALSE(firstItem.isNull()); |
3906 | 3868 |
3907 registerMockedHttpURLLoad("white-1x1.png"); | 3869 registerMockedHttpURLLoad("white-1x1.png"); |
3908 FrameTestHelpers::loadFrame(frame, m_baseURL + "white-1x1.png"); | 3870 FrameTestHelpers::loadFrame(frame, m_baseURL + "white-1x1.png"); |
3909 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3871 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3910 EXPECT_FALSE(frame->previousHistoryItem().isNull()); | 3872 EXPECT_FALSE(frame->previousHistoryItem().isNull()); |
3911 EXPECT_EQ(firstItem.urlString(), frame->previousHistoryItem().urlString()); | 3873 EXPECT_EQ(firstItem.urlString(), frame->previousHistoryItem().urlString()); |
3912 | 3874 |
3913 frame->loadHistoryItem(frame->previousHistoryItem()); | 3875 frame->loadHistoryItem(frame->previousHistoryItem()); |
3914 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3876 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3915 EXPECT_EQ(firstItem.urlString(), frame->currentHistoryItem().urlString()); | 3877 EXPECT_EQ(firstItem.urlString(), frame->currentHistoryItem().urlString()); |
3916 | 3878 |
3917 frame->reload(); | 3879 frame->reload(); |
3918 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3880 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3919 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque
st().cachePolicy()); | 3881 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque
st().cachePolicy()); |
3920 | |
3921 m_webView->close(); | |
3922 m_webView = 0; | |
3923 } | 3882 } |
3924 | 3883 |
3925 TEST_F(WebFrameTest, ReloadPost) | 3884 TEST_F(WebFrameTest, ReloadPost) |
3926 { | 3885 { |
3927 registerMockedHttpURLLoad("reload_post.html"); | 3886 registerMockedHttpURLLoad("reload_post.html"); |
3928 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "reload_post.
html", true); | 3887 FrameTestHelpers::WebViewHelper webViewHelper; |
3929 WebFrame* frame = m_webView->mainFrame(); | 3888 webViewHelper.initializeAndLoad(m_baseURL + "reload_post.html", true); |
| 3889 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
3930 | 3890 |
3931 FrameTestHelpers::loadFrame(m_webView->mainFrame(), "javascript:document.for
ms[0].submit()"); | 3891 FrameTestHelpers::loadFrame(webViewHelper.webView()->mainFrame(), "javascrip
t:document.forms[0].submit()"); |
3932 runPendingTasks(); | 3892 runPendingTasks(); |
3933 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3893 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3934 EXPECT_FALSE(frame->previousHistoryItem().isNull()); | 3894 EXPECT_FALSE(frame->previousHistoryItem().isNull()); |
3935 EXPECT_EQ(WebString::fromUTF8("POST"), frame->dataSource()->request().httpMe
thod()); | 3895 EXPECT_EQ(WebString::fromUTF8("POST"), frame->dataSource()->request().httpMe
thod()); |
3936 | 3896 |
3937 frame->reload(); | 3897 frame->reload(); |
3938 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3898 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3939 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque
st().cachePolicy()); | 3899 EXPECT_EQ(WebURLRequest::ReloadIgnoringCacheData, frame->dataSource()->reque
st().cachePolicy()); |
3940 EXPECT_EQ(WebNavigationTypeFormResubmitted, frame->dataSource()->navigationT
ype()); | 3900 EXPECT_EQ(WebNavigationTypeFormResubmitted, frame->dataSource()->navigationT
ype()); |
3941 | |
3942 m_webView->close(); | |
3943 m_webView = 0; | |
3944 } | 3901 } |
3945 | 3902 |
3946 class TestSameDocumentWebFrameClient : public WebFrameClient { | 3903 class TestSameDocumentWebFrameClient : public WebFrameClient { |
3947 public: | 3904 public: |
3948 TestSameDocumentWebFrameClient() | 3905 TestSameDocumentWebFrameClient() |
3949 : m_frameLoadTypeSameSeen(false) | 3906 : m_frameLoadTypeSameSeen(false) |
3950 { | 3907 { |
3951 } | 3908 } |
3952 | 3909 |
3953 virtual void willSendRequest(WebFrame* frame, unsigned, WebURLRequest&, cons
t WebURLResponse&) | 3910 virtual void willSendRequest(WebFrame* frame, unsigned, WebURLRequest&, cons
t WebURLResponse&) |
3954 { | 3911 { |
3955 if (toWebFrameImpl(frame)->frame()->loader()->loadType() == WebCore::Fra
meLoadTypeSame) | 3912 if (toWebFrameImpl(frame)->frame()->loader()->loadType() == WebCore::Fra
meLoadTypeSame) |
3956 m_frameLoadTypeSameSeen = true; | 3913 m_frameLoadTypeSameSeen = true; |
3957 } | 3914 } |
3958 | 3915 |
3959 bool frameLoadTypeSameSeen() const { return m_frameLoadTypeSameSeen; } | 3916 bool frameLoadTypeSameSeen() const { return m_frameLoadTypeSameSeen; } |
3960 | 3917 |
3961 private: | 3918 private: |
3962 bool m_frameLoadTypeSameSeen; | 3919 bool m_frameLoadTypeSameSeen; |
3963 }; | 3920 }; |
3964 | 3921 |
3965 TEST_F(WebFrameTest, NavigateToSame) | 3922 TEST_F(WebFrameTest, NavigateToSame) |
3966 { | 3923 { |
3967 registerMockedHttpURLLoad("navigate_to_same.html"); | 3924 registerMockedHttpURLLoad("navigate_to_same.html"); |
3968 TestSameDocumentWebFrameClient client; | 3925 TestSameDocumentWebFrameClient client; |
3969 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "navigate_to_
same.html", true, &client); | 3926 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3927 webViewHelper.initializeAndLoad(m_baseURL + "navigate_to_same.html", true, &
client); |
3970 EXPECT_FALSE(client.frameLoadTypeSameSeen()); | 3928 EXPECT_FALSE(client.frameLoadTypeSameSeen()); |
3971 | 3929 |
3972 WebCore::FrameLoadRequest frameRequest(0, WebCore::ResourceRequest(webViewIm
pl()->page()->mainFrame()->document()->url())); | 3930 WebCore::FrameLoadRequest frameRequest(0, WebCore::ResourceRequest(webViewHe
lper.webViewImpl()->page()->mainFrame()->document()->url())); |
3973 webViewImpl()->page()->mainFrame()->loader()->load(frameRequest); | 3931 webViewHelper.webViewImpl()->page()->mainFrame()->loader()->load(frameReques
t); |
3974 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); | 3932 Platform::current()->unitTestSupport()->serveAsynchronousMockedRequests(); |
3975 | 3933 |
3976 EXPECT_TRUE(client.frameLoadTypeSameSeen()); | 3934 EXPECT_TRUE(client.frameLoadTypeSameSeen()); |
3977 m_webView->close(); | |
3978 m_webView = 0; | |
3979 } | 3935 } |
3980 | 3936 |
3981 TEST_F(WebFrameTest, WebNodeImageContents) | 3937 TEST_F(WebFrameTest, WebNodeImageContents) |
3982 { | 3938 { |
3983 m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true); | 3939 FrameTestHelpers::WebViewHelper webViewHelper; |
3984 WebFrame* frame = m_webView->mainFrame(); | 3940 webViewHelper.initializeAndLoad("about:blank", true); |
| 3941 WebFrame* frame = webViewHelper.webView()->mainFrame(); |
3985 | 3942 |
3986 static const char bluePNG[] = "<img src=\"data:image/png;base64,iVBORw0KGgoA
AAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYV2NkYPj/n4EIwDiqEF8oUT94AFIQE/cCn90I
AAAAAElFTkSuQmCC\">"; | 3943 static const char bluePNG[] = "<img src=\"data:image/png;base64,iVBORw0KGgoA
AAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYV2NkYPj/n4EIwDiqEF8oUT94AFIQE/cCn90I
AAAAAElFTkSuQmCC\">"; |
3987 | 3944 |
3988 // Load up the image and test that we can extract the contents. | 3945 // Load up the image and test that we can extract the contents. |
3989 WebCore::KURL testURL = toKURL("about:blank"); | 3946 WebCore::KURL testURL = toKURL("about:blank"); |
3990 frame->loadHTMLString(bluePNG, testURL); | 3947 frame->loadHTMLString(bluePNG, testURL); |
3991 runPendingTasks(); | 3948 runPendingTasks(); |
3992 | 3949 |
3993 WebNode node = frame->document().body().firstChild(); | 3950 WebNode node = frame->document().body().firstChild(); |
3994 EXPECT_TRUE(node.isElementNode()); | 3951 EXPECT_TRUE(node.isElementNode()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4027 | 3984 |
4028 private: | 3985 private: |
4029 int m_startLoadingCount; | 3986 int m_startLoadingCount; |
4030 int m_stopLoadingCount; | 3987 int m_stopLoadingCount; |
4031 }; | 3988 }; |
4032 | 3989 |
4033 TEST_F(WebFrameTest, PushStateStartsAndStops) | 3990 TEST_F(WebFrameTest, PushStateStartsAndStops) |
4034 { | 3991 { |
4035 registerMockedHttpURLLoad("push_state.html"); | 3992 registerMockedHttpURLLoad("push_state.html"); |
4036 TestStartStopCallbackWebViewClient client; | 3993 TestStartStopCallbackWebViewClient client; |
4037 m_webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "push_state.h
tml", true, 0, &client); | 3994 FrameTestHelpers::WebViewHelper webViewHelper; |
| 3995 webViewHelper.initializeAndLoad(m_baseURL + "push_state.html", true, 0, &cli
ent); |
4038 runPendingTasks(); | 3996 runPendingTasks(); |
4039 | 3997 |
4040 EXPECT_EQ(client.startLoadingCount(), 2); | 3998 EXPECT_EQ(client.startLoadingCount(), 2); |
4041 EXPECT_EQ(client.stopLoadingCount(), 2); | 3999 EXPECT_EQ(client.stopLoadingCount(), 2); |
4042 m_webView->close(); | |
4043 m_webView = 0; | |
4044 } | 4000 } |
4045 | 4001 |
4046 } // namespace | 4002 } // namespace |
OLD | NEW |