OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <list> | 5 #include <list> |
6 | 6 |
7 #include "base/prefs/pref_service.h" | 7 #include "base/prefs/pref_service.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
10 #include "chrome/browser/safe_browsing/malware_details.h" | 10 #include "chrome/browser/safe_browsing/malware_details.h" |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 ChromeRenderViewHostTestHarness::TearDown(); | 113 ChromeRenderViewHostTestHarness::TearDown(); |
114 } | 114 } |
115 | 115 |
116 void OnBlockingPageComplete(bool proceed) { | 116 void OnBlockingPageComplete(bool proceed) { |
117 if (proceed) | 117 if (proceed) |
118 user_response_ = OK; | 118 user_response_ = OK; |
119 else | 119 else |
120 user_response_ = CANCEL; | 120 user_response_ = CANCEL; |
121 } | 121 } |
122 | 122 |
123 void Navigate(const char* url, int page_id) { | 123 void Navigate(const char* url, |
124 WebContentsTester::For(web_contents())->TestDidNavigate( | 124 int page_id, |
125 web_contents()->GetMainFrame(), page_id, GURL(url), | 125 int nav_entry_id, |
126 ui::PAGE_TRANSITION_TYPED); | 126 bool did_create_new_entry) { |
| 127 NavigateInternal(url, page_id, nav_entry_id, did_create_new_entry, false); |
| 128 } |
| 129 |
| 130 void NavigateCrossSite(const char* url, |
| 131 int page_id, |
| 132 int nav_entry_id, |
| 133 bool did_create_new_entry) { |
| 134 NavigateInternal(url, page_id, nav_entry_id, did_create_new_entry, true); |
| 135 } |
| 136 |
| 137 void NavigateInternal(const char* url, |
| 138 int page_id, |
| 139 int nav_entry_id, |
| 140 bool did_create_new_entry, |
| 141 bool is_cross_site) { |
| 142 // The pending RVH should commit for cross-site navigations. |
| 143 content::RenderFrameHost* render_frame_host = |
| 144 is_cross_site |
| 145 ? content::WebContentsTester::For(web_contents()) |
| 146 ->GetPendingMainFrame() |
| 147 : web_contents()->GetMainFrame(); |
| 148 |
| 149 content::WebContentsTester::For(web_contents()) |
| 150 ->TestDidNavigate(render_frame_host, page_id, nav_entry_id, |
| 151 did_create_new_entry, GURL(url), |
| 152 ui::PAGE_TRANSITION_TYPED); |
127 } | 153 } |
128 | 154 |
129 void GoBack(bool is_cross_site) { | 155 void GoBack(bool is_cross_site) { |
130 NavigationEntry* entry = | 156 NavigationEntry* entry = |
131 web_contents()->GetController().GetEntryAtOffset(-1); | 157 web_contents()->GetController().GetEntryAtOffset(-1); |
132 ASSERT_TRUE(entry); | 158 ASSERT_TRUE(entry); |
133 web_contents()->GetController().GoBack(); | 159 web_contents()->GetController().GoBack(); |
134 | 160 |
135 // The pending RVH should commit for cross-site navigations. | 161 // The pending RVH should commit for cross-site navigations. |
136 content::RenderFrameHost* rfh = is_cross_site ? | 162 content::RenderFrameHost* rfh = is_cross_site ? |
137 WebContentsTester::For(web_contents())->GetPendingMainFrame() : | 163 WebContentsTester::For(web_contents())->GetPendingMainFrame() : |
138 web_contents()->GetMainFrame(); | 164 web_contents()->GetMainFrame(); |
139 WebContentsTester::For(web_contents())->TestDidNavigate( | 165 WebContentsTester::For(web_contents())->TestDidNavigate( |
140 rfh, | 166 rfh, |
141 entry->GetPageID(), | 167 entry->GetPageID(), |
142 GURL(entry->GetURL()), | 168 entry->GetUniqueID(), |
| 169 false, |
| 170 entry->GetURL(), |
143 ui::PAGE_TRANSITION_TYPED); | 171 ui::PAGE_TRANSITION_TYPED); |
144 } | 172 } |
145 | 173 |
146 void ShowInterstitial(bool is_subresource, const char* url) { | 174 void ShowInterstitial(bool is_subresource, const char* url) { |
147 SafeBrowsingUIManager::UnsafeResource resource; | 175 SafeBrowsingUIManager::UnsafeResource resource; |
148 InitResource(&resource, is_subresource, GURL(url)); | 176 InitResource(&resource, is_subresource, GURL(url)); |
149 SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource); | 177 SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource); |
150 } | 178 } |
151 | 179 |
152 // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is | 180 // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 profile->GetPrefs()->SetBoolean( | 245 profile->GetPrefs()->SetBoolean( |
218 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 246 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
219 | 247 |
220 // Start a load. | 248 // Start a load. |
221 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 249 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
222 ui::PAGE_TRANSITION_TYPED, std::string()); | 250 ui::PAGE_TRANSITION_TYPED, std::string()); |
223 | 251 |
224 | 252 |
225 // Simulate the load causing a safe browsing interstitial to be shown. | 253 // Simulate the load causing a safe browsing interstitial to be shown. |
226 ShowInterstitial(false, kBadURL); | 254 ShowInterstitial(false, kBadURL); |
227 SafeBrowsingBlockingPage* sb_interstitial = | 255 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
228 GetSafeBrowsingBlockingPage(); | |
229 ASSERT_TRUE(sb_interstitial); | 256 ASSERT_TRUE(sb_interstitial); |
230 | 257 |
231 base::RunLoop().RunUntilIdle(); | 258 base::RunLoop().RunUntilIdle(); |
232 | 259 |
233 // Simulate the user clicking "don't proceed". | 260 // Simulate the user clicking "don't proceed". |
234 DontProceedThroughInterstitial(sb_interstitial); | 261 DontProceedThroughInterstitial(sb_interstitial); |
235 | 262 |
236 // The interstitial should be gone. | 263 // The interstitial should be gone. |
237 EXPECT_EQ(CANCEL, user_response()); | 264 EXPECT_EQ(CANCEL, user_response()); |
238 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 265 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
(...skipping 10 matching lines...) Expand all Loading... |
249 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageProceed) { | 276 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageProceed) { |
250 // Enable malware reports. | 277 // Enable malware reports. |
251 Profile* profile = Profile::FromBrowserContext( | 278 Profile* profile = Profile::FromBrowserContext( |
252 web_contents()->GetBrowserContext()); | 279 web_contents()->GetBrowserContext()); |
253 profile->GetPrefs()->SetBoolean( | 280 profile->GetPrefs()->SetBoolean( |
254 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 281 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
255 | 282 |
256 // Start a load. | 283 // Start a load. |
257 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 284 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
258 ui::PAGE_TRANSITION_TYPED, std::string()); | 285 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 286 int pending_id = controller().GetPendingEntry()->GetUniqueID(); |
259 | 287 |
260 // Simulate the load causing a safe browsing interstitial to be shown. | 288 // Simulate the load causing a safe browsing interstitial to be shown. |
261 ShowInterstitial(false, kBadURL); | 289 ShowInterstitial(false, kBadURL); |
262 SafeBrowsingBlockingPage* sb_interstitial = | 290 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
263 GetSafeBrowsingBlockingPage(); | |
264 ASSERT_TRUE(sb_interstitial); | 291 ASSERT_TRUE(sb_interstitial); |
265 | 292 |
266 // Simulate the user clicking "proceed". | 293 // Simulate the user clicking "proceed". |
267 ProceedThroughInterstitial(sb_interstitial); | 294 ProceedThroughInterstitial(sb_interstitial); |
268 | 295 |
269 // The interstitial is shown until the navigation commits. | 296 // The interstitial is shown until the navigation commits. |
270 ASSERT_TRUE(InterstitialPage::GetInterstitialPage(web_contents())); | 297 ASSERT_TRUE(InterstitialPage::GetInterstitialPage(web_contents())); |
271 // Commit the navigation. | 298 // Commit the navigation. |
272 Navigate(kBadURL, 1); | 299 Navigate(kBadURL, 1, pending_id, true); |
273 // The interstitial should be gone now. | 300 // The interstitial should be gone now. |
274 ASSERT_FALSE(InterstitialPage::GetInterstitialPage(web_contents())); | 301 ASSERT_FALSE(InterstitialPage::GetInterstitialPage(web_contents())); |
275 | 302 |
276 // A report should have been sent. | 303 // A report should have been sent. |
277 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 304 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
278 ui_manager_->GetDetails()->clear(); | 305 ui_manager_->GetDetails()->clear(); |
279 } | 306 } |
280 | 307 |
281 // Tests showing a blocking page for a page that contains malware subresources | 308 // Tests showing a blocking page for a page that contains malware subresources |
282 // and not proceeding. | 309 // and not proceeding. |
283 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) { | 310 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) { |
284 // Enable malware reports. | 311 // Enable malware reports. |
285 Profile* profile = Profile::FromBrowserContext( | 312 Profile* profile = Profile::FromBrowserContext( |
286 web_contents()->GetBrowserContext()); | 313 web_contents()->GetBrowserContext()); |
287 profile->GetPrefs()->SetBoolean( | 314 profile->GetPrefs()->SetBoolean( |
288 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 315 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
289 | 316 |
290 // Navigate somewhere. | 317 // Navigate somewhere. |
291 Navigate(kGoogleURL, 1); | 318 Navigate(kGoogleURL, 1, 0, true); |
292 | 319 |
293 // Navigate somewhere else. | 320 // Navigate somewhere else. |
294 Navigate(kGoodURL, 2); | 321 Navigate(kGoodURL, 2, 0, true); |
295 | 322 |
296 // Simulate that page loading a bad-resource triggering an interstitial. | 323 // Simulate that page loading a bad-resource triggering an interstitial. |
297 ShowInterstitial(true, kBadURL); | 324 ShowInterstitial(true, kBadURL); |
298 | 325 |
299 SafeBrowsingBlockingPage* sb_interstitial = | 326 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
300 GetSafeBrowsingBlockingPage(); | |
301 ASSERT_TRUE(sb_interstitial); | 327 ASSERT_TRUE(sb_interstitial); |
302 | 328 |
303 // Simulate the user clicking "don't proceed". | 329 // Simulate the user clicking "don't proceed". |
304 DontProceedThroughSubresourceInterstitial(sb_interstitial); | 330 DontProceedThroughSubresourceInterstitial(sb_interstitial); |
305 EXPECT_EQ(CANCEL, user_response()); | 331 EXPECT_EQ(CANCEL, user_response()); |
306 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 332 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
307 | 333 |
308 // We did not proceed, we should be back to the first page, the 2nd one should | 334 // We did not proceed, we should be back to the first page, the 2nd one should |
309 // have been removed from the navigation controller. | 335 // have been removed from the navigation controller. |
310 ASSERT_EQ(1, controller().GetEntryCount()); | 336 ASSERT_EQ(1, controller().GetEntryCount()); |
311 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); | 337 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); |
312 | 338 |
313 // A report should have been sent. | 339 // A report should have been sent. |
314 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 340 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
315 ui_manager_->GetDetails()->clear(); | 341 ui_manager_->GetDetails()->clear(); |
316 } | 342 } |
317 | 343 |
318 // Tests showing a blocking page for a page that contains malware subresources | 344 // Tests showing a blocking page for a page that contains malware subresources |
319 // and proceeding. | 345 // and proceeding. |
320 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) { | 346 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) { |
321 // Enable malware reports. | 347 // Enable malware reports. |
322 Profile* profile = Profile::FromBrowserContext( | 348 Profile* profile = Profile::FromBrowserContext( |
323 web_contents()->GetBrowserContext()); | 349 web_contents()->GetBrowserContext()); |
324 profile->GetPrefs()->SetBoolean( | 350 profile->GetPrefs()->SetBoolean( |
325 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 351 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
326 | 352 |
327 // Navigate somewhere. | 353 // Navigate somewhere. |
328 Navigate(kGoodURL, 1); | 354 Navigate(kGoodURL, 1, 0, true); |
329 | 355 |
330 // Simulate that page loading a bad-resource triggering an interstitial. | 356 // Simulate that page loading a bad-resource triggering an interstitial. |
331 ShowInterstitial(true, kBadURL); | 357 ShowInterstitial(true, kBadURL); |
332 | 358 |
333 SafeBrowsingBlockingPage* sb_interstitial = | 359 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
334 GetSafeBrowsingBlockingPage(); | |
335 ASSERT_TRUE(sb_interstitial); | 360 ASSERT_TRUE(sb_interstitial); |
336 | 361 |
337 // Simulate the user clicking "proceed". | 362 // Simulate the user clicking "proceed". |
338 ProceedThroughInterstitial(sb_interstitial); | 363 ProceedThroughInterstitial(sb_interstitial); |
339 EXPECT_EQ(OK, user_response()); | 364 EXPECT_EQ(OK, user_response()); |
340 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 365 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
341 | 366 |
342 // We did proceed, we should be back to showing the page. | 367 // We did proceed, we should be back to showing the page. |
343 ASSERT_EQ(1, controller().GetEntryCount()); | 368 ASSERT_EQ(1, controller().GetEntryCount()); |
344 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); | 369 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); |
345 | 370 |
346 // A report should have been sent. | 371 // A report should have been sent. |
347 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 372 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
348 ui_manager_->GetDetails()->clear(); | 373 ui_manager_->GetDetails()->clear(); |
349 } | 374 } |
350 | 375 |
351 // Tests showing a blocking page for a page that contains multiple malware | 376 // Tests showing a blocking page for a page that contains multiple malware |
352 // subresources and not proceeding. This just tests that the extra malware | 377 // subresources and not proceeding. This just tests that the extra malware |
353 // subresources (which trigger queued interstitial pages) do not break anything. | 378 // subresources (which trigger queued interstitial pages) do not break anything. |
354 TEST_F(SafeBrowsingBlockingPageTest, | 379 TEST_F(SafeBrowsingBlockingPageTest, |
355 PageWithMultipleMalwareResourceDontProceed) { | 380 PageWithMultipleMalwareResourceDontProceed) { |
356 // Enable malware reports. | 381 // Enable malware reports. |
357 Profile* profile = Profile::FromBrowserContext( | 382 Profile* profile = Profile::FromBrowserContext( |
358 web_contents()->GetBrowserContext()); | 383 web_contents()->GetBrowserContext()); |
359 profile->GetPrefs()->SetBoolean( | 384 profile->GetPrefs()->SetBoolean( |
360 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 385 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
361 | 386 |
362 // Navigate somewhere. | 387 // Navigate somewhere. |
363 Navigate(kGoogleURL, 1); | 388 Navigate(kGoogleURL, 1, 0, true); |
364 | 389 |
365 // Navigate somewhere else. | 390 // Navigate somewhere else. |
366 Navigate(kGoodURL, 2); | 391 Navigate(kGoodURL, 2, 0, true); |
367 | 392 |
368 // Simulate that page loading a bad-resource triggering an interstitial. | 393 // Simulate that page loading a bad-resource triggering an interstitial. |
369 ShowInterstitial(true, kBadURL); | 394 ShowInterstitial(true, kBadURL); |
370 | 395 |
371 // More bad resources loading causing more interstitials. The new | 396 // More bad resources loading causing more interstitials. The new |
372 // interstitials should be queued. | 397 // interstitials should be queued. |
373 ShowInterstitial(true, kBadURL2); | 398 ShowInterstitial(true, kBadURL2); |
374 ShowInterstitial(true, kBadURL3); | 399 ShowInterstitial(true, kBadURL3); |
375 | 400 |
376 SafeBrowsingBlockingPage* sb_interstitial = | 401 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
377 GetSafeBrowsingBlockingPage(); | |
378 ASSERT_TRUE(sb_interstitial); | 402 ASSERT_TRUE(sb_interstitial); |
379 | 403 |
380 // Simulate the user clicking "don't proceed". | 404 // Simulate the user clicking "don't proceed". |
381 DontProceedThroughSubresourceInterstitial(sb_interstitial); | 405 DontProceedThroughSubresourceInterstitial(sb_interstitial); |
382 EXPECT_EQ(CANCEL, user_response()); | 406 EXPECT_EQ(CANCEL, user_response()); |
383 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 407 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
384 | 408 |
385 // We did not proceed, we should be back to the first page, the 2nd one should | 409 // We did not proceed, we should be back to the first page, the 2nd one should |
386 // have been removed from the navigation controller. | 410 // have been removed from the navigation controller. |
387 ASSERT_EQ(1, controller().GetEntryCount()); | 411 ASSERT_EQ(1, controller().GetEntryCount()); |
388 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); | 412 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); |
389 | 413 |
390 // A report should have been sent. | 414 // A report should have been sent. |
391 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 415 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
392 ui_manager_->GetDetails()->clear(); | 416 ui_manager_->GetDetails()->clear(); |
393 } | 417 } |
394 | 418 |
395 // Tests showing a blocking page for a page that contains multiple malware | 419 // Tests showing a blocking page for a page that contains multiple malware |
396 // subresources and proceeding through the first interstitial, but not the next. | 420 // subresources and proceeding through the first interstitial, but not the next. |
397 TEST_F(SafeBrowsingBlockingPageTest, | 421 TEST_F(SafeBrowsingBlockingPageTest, |
398 PageWithMultipleMalwareResourceProceedThenDontProceed) { | 422 PageWithMultipleMalwareResourceProceedThenDontProceed) { |
399 // Enable malware reports. | 423 // Enable malware reports. |
400 Profile* profile = Profile::FromBrowserContext( | 424 Profile* profile = Profile::FromBrowserContext( |
401 web_contents()->GetBrowserContext()); | 425 web_contents()->GetBrowserContext()); |
402 profile->GetPrefs()->SetBoolean( | 426 profile->GetPrefs()->SetBoolean( |
403 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 427 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
404 | 428 |
405 // Navigate somewhere. | 429 // Navigate somewhere. |
406 Navigate(kGoogleURL, 1); | 430 Navigate(kGoogleURL, 1, 0, true); |
407 | 431 |
408 // Navigate somewhere else. | 432 // Navigate somewhere else. |
409 Navigate(kGoodURL, 2); | 433 Navigate(kGoodURL, 2, 0, true); |
410 | 434 |
411 // Simulate that page loading a bad-resource triggering an interstitial. | 435 // Simulate that page loading a bad-resource triggering an interstitial. |
412 ShowInterstitial(true, kBadURL); | 436 ShowInterstitial(true, kBadURL); |
413 | 437 |
414 // More bad resources loading causing more interstitials. The new | 438 // More bad resources loading causing more interstitials. The new |
415 // interstitials should be queued. | 439 // interstitials should be queued. |
416 ShowInterstitial(true, kBadURL2); | 440 ShowInterstitial(true, kBadURL2); |
417 ShowInterstitial(true, kBadURL3); | 441 ShowInterstitial(true, kBadURL3); |
418 | 442 |
419 SafeBrowsingBlockingPage* sb_interstitial = | 443 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
420 GetSafeBrowsingBlockingPage(); | |
421 ASSERT_TRUE(sb_interstitial); | 444 ASSERT_TRUE(sb_interstitial); |
422 | 445 |
423 // Proceed through the 1st interstitial. | 446 // Proceed through the 1st interstitial. |
424 ProceedThroughInterstitial(sb_interstitial); | 447 ProceedThroughInterstitial(sb_interstitial); |
425 EXPECT_EQ(OK, user_response()); | 448 EXPECT_EQ(OK, user_response()); |
426 | 449 |
427 // A report should have been sent. | 450 // A report should have been sent. |
428 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 451 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
429 ui_manager_->GetDetails()->clear(); | 452 ui_manager_->GetDetails()->clear(); |
430 | 453 |
(...skipping 15 matching lines...) Expand all Loading... |
446 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); | 469 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); |
447 | 470 |
448 // No report should have been sent -- we don't create a report the | 471 // No report should have been sent -- we don't create a report the |
449 // second time. | 472 // second time. |
450 EXPECT_EQ(0u, ui_manager_->GetDetails()->size()); | 473 EXPECT_EQ(0u, ui_manager_->GetDetails()->size()); |
451 ui_manager_->GetDetails()->clear(); | 474 ui_manager_->GetDetails()->clear(); |
452 } | 475 } |
453 | 476 |
454 // Tests showing a blocking page for a page that contains multiple malware | 477 // Tests showing a blocking page for a page that contains multiple malware |
455 // subresources and proceeding through the multiple interstitials. | 478 // subresources and proceeding through the multiple interstitials. |
456 TEST_F(SafeBrowsingBlockingPageTest, | 479 TEST_F(SafeBrowsingBlockingPageTest, PageWithMultipleMalwareResourceProceed) { |
457 PageWithMultipleMalwareResourceProceed) { | |
458 // Enable malware reports. | 480 // Enable malware reports. |
459 Profile* profile = Profile::FromBrowserContext( | 481 Profile* profile = Profile::FromBrowserContext( |
460 web_contents()->GetBrowserContext()); | 482 web_contents()->GetBrowserContext()); |
461 profile->GetPrefs()->SetBoolean( | 483 profile->GetPrefs()->SetBoolean( |
462 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 484 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
463 | 485 |
464 // Navigate somewhere else. | 486 // Navigate somewhere else. |
465 Navigate(kGoodURL, 1); | 487 Navigate(kGoodURL, 1, 0, true); |
466 | 488 |
467 // Simulate that page loading a bad-resource triggering an interstitial. | 489 // Simulate that page loading a bad-resource triggering an interstitial. |
468 ShowInterstitial(true, kBadURL); | 490 ShowInterstitial(true, kBadURL); |
469 | 491 |
470 // More bad resources loading causing more interstitials. The new | 492 // More bad resources loading causing more interstitials. The new |
471 // interstitials should be queued. | 493 // interstitials should be queued. |
472 ShowInterstitial(true, kBadURL2); | 494 ShowInterstitial(true, kBadURL2); |
473 ShowInterstitial(true, kBadURL3); | 495 ShowInterstitial(true, kBadURL3); |
474 | 496 |
475 SafeBrowsingBlockingPage* sb_interstitial = | 497 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
476 GetSafeBrowsingBlockingPage(); | |
477 ASSERT_TRUE(sb_interstitial); | 498 ASSERT_TRUE(sb_interstitial); |
478 | 499 |
479 // Proceed through the 1st interstitial. | 500 // Proceed through the 1st interstitial. |
480 ProceedThroughInterstitial(sb_interstitial); | 501 ProceedThroughInterstitial(sb_interstitial); |
481 EXPECT_EQ(OK, user_response()); | 502 EXPECT_EQ(OK, user_response()); |
482 | 503 |
483 // A report should have been sent. | 504 // A report should have been sent. |
484 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 505 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
485 ui_manager_->GetDetails()->clear(); | 506 ui_manager_->GetDetails()->clear(); |
486 | 507 |
(...skipping 21 matching lines...) Expand all Loading... |
508 // Tests showing a blocking page then navigating back and forth to make sure the | 529 // Tests showing a blocking page then navigating back and forth to make sure the |
509 // controller entries are OK. http://crbug.com/17627 | 530 // controller entries are OK. http://crbug.com/17627 |
510 TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { | 531 TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { |
511 // Enable malware reports. | 532 // Enable malware reports. |
512 Profile* profile = Profile::FromBrowserContext( | 533 Profile* profile = Profile::FromBrowserContext( |
513 web_contents()->GetBrowserContext()); | 534 web_contents()->GetBrowserContext()); |
514 profile->GetPrefs()->SetBoolean( | 535 profile->GetPrefs()->SetBoolean( |
515 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 536 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
516 | 537 |
517 // Navigate somewhere. | 538 // Navigate somewhere. |
518 Navigate(kGoodURL, 1); | 539 Navigate(kGoodURL, 1, 0, true); |
519 | 540 |
520 // Now navigate to a bad page triggerring an interstitial. | 541 // Now navigate to a bad page triggerring an interstitial. |
521 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 542 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
522 ui::PAGE_TRANSITION_TYPED, std::string()); | 543 ui::PAGE_TRANSITION_TYPED, std::string()); |
| 544 int pending_id = controller().GetPendingEntry()->GetUniqueID(); |
523 ShowInterstitial(false, kBadURL); | 545 ShowInterstitial(false, kBadURL); |
524 SafeBrowsingBlockingPage* sb_interstitial = | 546 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
525 GetSafeBrowsingBlockingPage(); | |
526 ASSERT_TRUE(sb_interstitial); | 547 ASSERT_TRUE(sb_interstitial); |
527 | 548 |
528 // Proceed, then navigate back. | 549 // Proceed, then navigate back. |
529 ProceedThroughInterstitial(sb_interstitial); | 550 ProceedThroughInterstitial(sb_interstitial); |
530 Navigate(kBadURL, 2); // Commit the navigation. | 551 Navigate(kBadURL, 2, pending_id, true); // Commit the navigation. |
531 GoBack(true); | 552 GoBack(true); |
532 | 553 |
533 // We are back on the good page. | 554 // We are back on the good page. |
534 sb_interstitial = GetSafeBrowsingBlockingPage(); | 555 sb_interstitial = GetSafeBrowsingBlockingPage(); |
535 ASSERT_FALSE(sb_interstitial); | 556 ASSERT_FALSE(sb_interstitial); |
536 ASSERT_EQ(2, controller().GetEntryCount()); | 557 ASSERT_EQ(2, controller().GetEntryCount()); |
537 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); | 558 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); |
538 | 559 |
539 // Navigate forward to the malware URL. | 560 // Navigate forward to the malware URL. |
540 web_contents()->GetController().GoForward(); | 561 web_contents()->GetController().GoForward(); |
| 562 pending_id = controller().GetPendingEntry()->GetUniqueID(); |
541 ShowInterstitial(false, kBadURL); | 563 ShowInterstitial(false, kBadURL); |
542 sb_interstitial = GetSafeBrowsingBlockingPage(); | 564 sb_interstitial = GetSafeBrowsingBlockingPage(); |
543 ASSERT_TRUE(sb_interstitial); | 565 ASSERT_TRUE(sb_interstitial); |
544 | 566 |
545 // Let's proceed and make sure everything is OK (bug 17627). | 567 // Let's proceed and make sure everything is OK (bug 17627). |
546 ProceedThroughInterstitial(sb_interstitial); | 568 ProceedThroughInterstitial(sb_interstitial); |
547 Navigate(kBadURL, 2); // Commit the navigation. | 569 // Commit the navigation. |
| 570 NavigateCrossSite(kBadURL, 2, pending_id, false); |
548 sb_interstitial = GetSafeBrowsingBlockingPage(); | 571 sb_interstitial = GetSafeBrowsingBlockingPage(); |
549 ASSERT_FALSE(sb_interstitial); | 572 ASSERT_FALSE(sb_interstitial); |
550 ASSERT_EQ(2, controller().GetEntryCount()); | 573 ASSERT_EQ(2, controller().GetEntryCount()); |
551 EXPECT_EQ(kBadURL, controller().GetActiveEntry()->GetURL().spec()); | 574 EXPECT_EQ(kBadURL, controller().GetActiveEntry()->GetURL().spec()); |
552 | 575 |
553 // Two reports should have been sent. | 576 // Two reports should have been sent. |
554 EXPECT_EQ(2u, ui_manager_->GetDetails()->size()); | 577 EXPECT_EQ(2u, ui_manager_->GetDetails()->size()); |
555 ui_manager_->GetDetails()->clear(); | 578 ui_manager_->GetDetails()->clear(); |
556 } | 579 } |
557 | 580 |
558 // Tests that calling "don't proceed" after "proceed" has been called doesn't | 581 // Tests that calling "don't proceed" after "proceed" has been called doesn't |
559 // cause problems. http://crbug.com/30079 | 582 // cause problems. http://crbug.com/30079 |
560 TEST_F(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) { | 583 TEST_F(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) { |
561 // Enable malware reports. | 584 // Enable malware reports. |
562 Profile* profile = Profile::FromBrowserContext( | 585 Profile* profile = Profile::FromBrowserContext( |
563 web_contents()->GetBrowserContext()); | 586 web_contents()->GetBrowserContext()); |
564 profile->GetPrefs()->SetBoolean( | 587 profile->GetPrefs()->SetBoolean( |
565 prefs::kSafeBrowsingExtendedReportingEnabled, true); | 588 prefs::kSafeBrowsingExtendedReportingEnabled, true); |
566 | 589 |
567 // Start a load. | 590 // Start a load. |
568 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 591 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
569 ui::PAGE_TRANSITION_TYPED, std::string()); | 592 ui::PAGE_TRANSITION_TYPED, std::string()); |
570 | 593 |
571 // Simulate the load causing a safe browsing interstitial to be shown. | 594 // Simulate the load causing a safe browsing interstitial to be shown. |
572 ShowInterstitial(false, kBadURL); | 595 ShowInterstitial(false, kBadURL); |
573 SafeBrowsingBlockingPage* sb_interstitial = | 596 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
574 GetSafeBrowsingBlockingPage(); | |
575 ASSERT_TRUE(sb_interstitial); | 597 ASSERT_TRUE(sb_interstitial); |
576 | 598 |
577 base::RunLoop().RunUntilIdle(); | 599 base::RunLoop().RunUntilIdle(); |
578 | 600 |
579 // Simulate the user clicking "proceed" then "don't proceed" (before the | 601 // Simulate the user clicking "proceed" then "don't proceed" (before the |
580 // interstitial is shown). | 602 // interstitial is shown). |
581 sb_interstitial->interstitial_page()->Proceed(); | 603 sb_interstitial->interstitial_page()->Proceed(); |
582 sb_interstitial->interstitial_page()->DontProceed(); | 604 sb_interstitial->interstitial_page()->DontProceed(); |
583 // Proceed() and DontProceed() post a task to update the | 605 // Proceed() and DontProceed() post a task to update the |
584 // SafeBrowsingService::Client. | 606 // SafeBrowsingService::Client. |
(...skipping 15 matching lines...) Expand all Loading... |
600 web_contents()->GetBrowserContext()); | 622 web_contents()->GetBrowserContext()); |
601 profile->GetPrefs()->SetBoolean( | 623 profile->GetPrefs()->SetBoolean( |
602 prefs::kSafeBrowsingExtendedReportingEnabled, false); | 624 prefs::kSafeBrowsingExtendedReportingEnabled, false); |
603 | 625 |
604 // Start a load. | 626 // Start a load. |
605 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 627 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
606 ui::PAGE_TRANSITION_TYPED, std::string()); | 628 ui::PAGE_TRANSITION_TYPED, std::string()); |
607 | 629 |
608 // Simulate the load causing a safe browsing interstitial to be shown. | 630 // Simulate the load causing a safe browsing interstitial to be shown. |
609 ShowInterstitial(false, kBadURL); | 631 ShowInterstitial(false, kBadURL); |
610 SafeBrowsingBlockingPage* sb_interstitial = | 632 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
611 GetSafeBrowsingBlockingPage(); | |
612 ASSERT_TRUE(sb_interstitial); | 633 ASSERT_TRUE(sb_interstitial); |
613 | 634 |
614 base::RunLoop().RunUntilIdle(); | 635 base::RunLoop().RunUntilIdle(); |
615 | 636 |
616 // Simulate the user clicking "don't proceed". | 637 // Simulate the user clicking "don't proceed". |
617 DontProceedThroughInterstitial(sb_interstitial); | 638 DontProceedThroughInterstitial(sb_interstitial); |
618 | 639 |
619 // The interstitial should be gone. | 640 // The interstitial should be gone. |
620 EXPECT_EQ(CANCEL, user_response()); | 641 EXPECT_EQ(CANCEL, user_response()); |
621 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 642 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
(...skipping 13 matching lines...) Expand all Loading... |
635 web_contents()->GetBrowserContext()); | 656 web_contents()->GetBrowserContext()); |
636 profile->GetPrefs()->SetBoolean( | 657 profile->GetPrefs()->SetBoolean( |
637 prefs::kSafeBrowsingExtendedReportingEnabled, false); | 658 prefs::kSafeBrowsingExtendedReportingEnabled, false); |
638 | 659 |
639 // Start a load. | 660 // Start a load. |
640 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 661 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
641 ui::PAGE_TRANSITION_TYPED, std::string()); | 662 ui::PAGE_TRANSITION_TYPED, std::string()); |
642 | 663 |
643 // Simulate the load causing a safe browsing interstitial to be shown. | 664 // Simulate the load causing a safe browsing interstitial to be shown. |
644 ShowInterstitial(false, kBadURL); | 665 ShowInterstitial(false, kBadURL); |
645 SafeBrowsingBlockingPage* sb_interstitial = | 666 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
646 GetSafeBrowsingBlockingPage(); | |
647 ASSERT_TRUE(sb_interstitial); | 667 ASSERT_TRUE(sb_interstitial); |
648 | 668 |
649 base::RunLoop().RunUntilIdle(); | 669 base::RunLoop().RunUntilIdle(); |
650 | 670 |
651 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( | 671 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( |
652 prefs::kSafeBrowsingExtendedReportingEnabled)); | 672 prefs::kSafeBrowsingExtendedReportingEnabled)); |
653 | 673 |
654 // Simulate the user check the report agreement checkbox. | 674 // Simulate the user check the report agreement checkbox. |
655 sb_interstitial->SetReportingPreference(true); | 675 sb_interstitial->SetReportingPreference(true); |
656 | 676 |
657 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( | 677 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( |
658 prefs::kSafeBrowsingExtendedReportingEnabled)); | 678 prefs::kSafeBrowsingExtendedReportingEnabled)); |
659 | 679 |
660 // Simulate the user uncheck the report agreement checkbox. | 680 // Simulate the user uncheck the report agreement checkbox. |
661 sb_interstitial->SetReportingPreference(false); | 681 sb_interstitial->SetReportingPreference(false); |
662 | 682 |
663 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( | 683 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( |
664 prefs::kSafeBrowsingExtendedReportingEnabled)); | 684 prefs::kSafeBrowsingExtendedReportingEnabled)); |
665 } | 685 } |
OLD | NEW |