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 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 void AddURLResult(const GURL& url, | 258 void AddURLResult(const GURL& url, |
258 SafeBrowsingService::UrlCheckResult checkresult) { | 259 SafeBrowsingService::UrlCheckResult checkresult) { |
259 FakeSafeBrowsingService* service = | 260 FakeSafeBrowsingService* service = |
260 static_cast<FakeSafeBrowsingService*>( | 261 static_cast<FakeSafeBrowsingService*>( |
261 g_browser_process->safe_browsing_service()); | 262 g_browser_process->safe_browsing_service()); |
262 | 263 |
263 ASSERT_TRUE(service); | 264 ASSERT_TRUE(service); |
264 service->AddURLResult(url, checkresult); | 265 service->AddURLResult(url, checkresult); |
265 } | 266 } |
266 | 267 |
267 void SendCommand(const std::string& command) { | 268 TestSafeBrowsingBlockingPage* GetSafeBrowsingBlockingPage() { |
268 WebContents* contents = | |
269 browser()->GetSelectedTabContentsWrapper()->web_contents(); | |
270 // We use InterstitialPage::GetInterstitialPage(tab) instead of | 269 // We use InterstitialPage::GetInterstitialPage(tab) instead of |
271 // tab->GetInterstitialPage() because the tab doesn't have a pointer | 270 // tab->GetInterstitialPage() because the tab doesn't have a pointer |
272 // to its interstital page until it gets a command from the renderer | 271 // to its interstital page until it gets a command from the renderer |
273 // that it has indeed displayed it -- and this sometimes happens after | 272 // that it has indeed displayed it -- and this sometimes happens after |
274 // NavigateToURL returns. | 273 // NavigateToURL returns. |
275 SafeBrowsingBlockingPage* interstitial_page = | 274 WebContents* contents = |
276 static_cast<SafeBrowsingBlockingPage*>( | 275 browser()->GetSelectedTabContentsWrapper()->web_contents(); |
277 InterstitialPage::GetInterstitialPage(contents)); | 276 return static_cast<TestSafeBrowsingBlockingPage*>( |
278 ASSERT_TRUE(interstitial_page); | 277 contents->GetInterstitialPage()->GetDelegateForTesting()); |
279 interstitial_page->CommandReceived(command); | 278 } |
| 279 |
| 280 void SendCommand(const std::string& command) { |
| 281 GetSafeBrowsingBlockingPage()->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 GetSafeBrowsingBlockingPage()->set_wait_for_delete(); |
307 contents->GetInterstitialPage())->set_wait_for_delete(); | |
308 ui_test_utils::RunMessageLoop(); | 309 ui_test_utils::RunMessageLoop(); |
309 } | 310 } |
310 | 311 |
311 // Can't use InterstitialPage::GetInterstitialPage() because that | 312 // Can't use InterstitialPage::GetInterstitialPage() because that |
312 // gets updated after the TestSafeBrowsingBlockingPage destructor | 313 // gets updated after the TestSafeBrowsingBlockingPage destructor |
313 ASSERT_FALSE(contents->ShowingInterstitialPage()); | 314 ASSERT_FALSE(contents->ShowingInterstitialPage()); |
314 } | 315 } |
315 | 316 |
316 bool YesInterstitial() { | 317 bool YesInterstitial() { |
317 WebContents* contents = | 318 WebContents* contents = |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 SendCommand("\"proceed\""); // Simulate the user clicking "back" | 584 SendCommand("\"proceed\""); // Simulate the user clicking "back" |
584 AssertNoInterstitial(true); // Assert the interstitial is gone | 585 AssertNoInterstitial(true); // Assert the interstitial is gone |
585 | 586 |
586 EXPECT_EQ( | 587 EXPECT_EQ( |
587 url, | 588 url, |
588 browser()->GetSelectedTabContentsWrapper()->web_contents()->GetURL()); | 589 browser()->GetSelectedTabContentsWrapper()->web_contents()->GetURL()); |
589 AssertReportSent(); | 590 AssertReportSent(); |
590 } | 591 } |
591 | 592 |
592 } // namespace | 593 } // namespace |
OLD | NEW |