| 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 // This test creates a fake safebrowsing service, where we can inject | 5 // This test creates a fake safebrowsing service, where we can inject |
| 6 // malware and phishing urls. It then uses a real browser to go to | 6 // malware and phishing urls. It then uses a real browser to go to |
| 7 // these urls, and sends "goback" or "proceed" commands and verifies | 7 // these urls, and sends "goback" or "proceed" commands and verifies |
| 8 // they work. | 8 // they work. |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
| 12 #include "chrome/browser/prefs/pref_service.h" | 12 #include "chrome/browser/prefs/pref_service.h" |
| 13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 14 #include "chrome/browser/safe_browsing/malware_details.h" | 14 #include "chrome/browser/safe_browsing/malware_details.h" |
| 15 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" | 15 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" |
| 16 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 16 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
| 17 #include "chrome/browser/ui/browser.h" | 17 #include "chrome/browser/ui/browser.h" |
| 18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 19 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
| 20 #include "chrome/common/url_constants.h" | 20 #include "chrome/common/url_constants.h" |
| 21 #include "chrome/test/base/in_process_browser_test.h" | 21 #include "chrome/test/base/in_process_browser_test.h" |
| 22 #include "chrome/test/base/ui_test_utils.h" | 22 #include "chrome/test/base/ui_test_utils.h" |
| 23 #include "content/browser/renderer_host/resource_dispatcher_host.h" | 23 #include "content/browser/renderer_host/resource_dispatcher_host.h" |
| 24 #include "content/browser/tab_contents/interstitial_page.h" |
| 24 #include "content/public/browser/navigation_controller.h" | 25 #include "content/public/browser/navigation_controller.h" |
| 25 #include "content/public/browser/web_contents.h" | 26 #include "content/public/browser/web_contents.h" |
| 26 #include "content/public/browser/web_contents_view.h" | 27 #include "content/public/browser/web_contents_view.h" |
| 27 #include "content/test/test_browser_thread.h" | 28 #include "content/test/test_browser_thread.h" |
| 28 | 29 |
| 29 using content::BrowserThread; | 30 using content::BrowserThread; |
| 30 using content::NavigationController; | 31 using content::NavigationController; |
| 31 using content::WebContents; | 32 using content::WebContents; |
| 32 | 33 |
| 33 // A SafeBrowingService class that allows us to inject the malicious URLs. | 34 // A SafeBrowingService class that allows us to inject the malicious URLs. |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 void SendCommand(const std::string& command) { | 268 void SendCommand(const std::string& command) { |
| 268 WebContents* contents = | 269 WebContents* contents = |
| 269 browser()->GetSelectedTabContentsWrapper()->web_contents(); | 270 browser()->GetSelectedTabContentsWrapper()->web_contents(); |
| 270 // We use InterstitialPage::GetInterstitialPage(tab) instead of | 271 // We use InterstitialPage::GetInterstitialPage(tab) instead of |
| 271 // tab->GetInterstitialPage() because the tab doesn't have a pointer | 272 // tab->GetInterstitialPage() because the tab doesn't have a pointer |
| 272 // to its interstital page until it gets a command from the renderer | 273 // to its interstital page until it gets a command from the renderer |
| 273 // that it has indeed displayed it -- and this sometimes happens after | 274 // that it has indeed displayed it -- and this sometimes happens after |
| 274 // NavigateToURL returns. | 275 // NavigateToURL returns. |
| 275 SafeBrowsingBlockingPage* interstitial_page = | 276 SafeBrowsingBlockingPage* interstitial_page = |
| 276 static_cast<SafeBrowsingBlockingPage*>( | 277 static_cast<SafeBrowsingBlockingPage*>( |
| 277 InterstitialPage::GetInterstitialPage(contents)); | 278 InterstitialPage::GetInterstitialPage(contents)-> |
| 279 GetDelegateForTesting()); |
| 278 ASSERT_TRUE(interstitial_page); | 280 ASSERT_TRUE(interstitial_page); |
| 279 interstitial_page->CommandReceived(command); | 281 interstitial_page->CommandReceived(command); |
| 280 } | 282 } |
| 281 | 283 |
| 282 void DontProceedThroughInterstitial() { | 284 void DontProceedThroughInterstitial() { |
| 283 WebContents* contents = | 285 WebContents* contents = |
| 284 browser()->GetSelectedTabContentsWrapper()->web_contents(); | 286 browser()->GetSelectedTabContentsWrapper()->web_contents(); |
| 285 InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage( | 287 InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage( |
| 286 contents); | 288 contents); |
| 287 ASSERT_TRUE(interstitial_page); | 289 ASSERT_TRUE(interstitial_page); |
| 288 interstitial_page->DontProceed(); | 290 interstitial_page->DontProceed(); |
| 289 } | 291 } |
| 290 | 292 |
| 291 void ProceedThroughInterstitial() { | 293 void ProceedThroughInterstitial() { |
| 292 WebContents* contents = | 294 WebContents* contents = |
| 293 browser()->GetSelectedTabContentsWrapper()->web_contents(); | 295 browser()->GetSelectedTabContentsWrapper()->web_contents(); |
| 294 InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage( | 296 InterstitialPage* interstitial_page = InterstitialPage::GetInterstitialPage( |
| 295 contents); | 297 contents); |
| 296 ASSERT_TRUE(interstitial_page); | 298 ASSERT_TRUE(interstitial_page); |
| 297 interstitial_page->Proceed(); | 299 interstitial_page->Proceed(); |
| 298 } | 300 } |
| 299 | 301 |
| 300 void AssertNoInterstitial(bool wait_for_delete) { | 302 void AssertNoInterstitial(bool wait_for_delete) { |
| 301 WebContents* contents = | 303 WebContents* contents = |
| 302 browser()->GetSelectedTabContentsWrapper()->web_contents(); | 304 browser()->GetSelectedTabContentsWrapper()->web_contents(); |
| 303 | 305 |
| 304 if (contents->ShowingInterstitialPage() && wait_for_delete) { | 306 if (contents->ShowingInterstitialPage() && wait_for_delete) { |
| 305 // We'll get notified when the interstitial is deleted. | 307 // We'll get notified when the interstitial is deleted. |
| 306 static_cast<TestSafeBrowsingBlockingPage*>( | 308 static_cast<TestSafeBrowsingBlockingPage*>( |
| 307 contents->GetInterstitialPage())->set_wait_for_delete(); | 309 contents->GetInterstitialPage()->GetDelegateForTesting())-> |
| 310 set_wait_for_delete(); |
| 308 ui_test_utils::RunMessageLoop(); | 311 ui_test_utils::RunMessageLoop(); |
| 309 } | 312 } |
| 310 | 313 |
| 311 // Can't use InterstitialPage::GetInterstitialPage() because that | 314 // Can't use InterstitialPage::GetInterstitialPage() because that |
| 312 // gets updated after the TestSafeBrowsingBlockingPage destructor | 315 // gets updated after the TestSafeBrowsingBlockingPage destructor |
| 313 ASSERT_FALSE(contents->ShowingInterstitialPage()); | 316 ASSERT_FALSE(contents->ShowingInterstitialPage()); |
| 314 } | 317 } |
| 315 | 318 |
| 316 bool YesInterstitial() { | 319 bool YesInterstitial() { |
| 317 WebContents* contents = | 320 WebContents* contents = |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 SendCommand("\"proceed\""); // Simulate the user clicking "back" | 594 SendCommand("\"proceed\""); // Simulate the user clicking "back" |
| 592 AssertNoInterstitial(true); // Assert the interstitial is gone | 595 AssertNoInterstitial(true); // Assert the interstitial is gone |
| 593 | 596 |
| 594 EXPECT_EQ( | 597 EXPECT_EQ( |
| 595 url, | 598 url, |
| 596 browser()->GetSelectedTabContentsWrapper()->web_contents()->GetURL()); | 599 browser()->GetSelectedTabContentsWrapper()->web_contents()->GetURL()); |
| 597 AssertReportSent(); | 600 AssertReportSent(); |
| 598 } | 601 } |
| 599 | 602 |
| 600 } // namespace | 603 } // namespace |
| OLD | NEW |