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 "chrome/browser/prefs/pref_service.h" | 5 #include "chrome/browser/prefs/pref_service.h" |
6 #include "chrome/browser/profiles/profile.h" | 6 #include "chrome/browser/profiles/profile.h" |
7 #include "chrome/browser/safe_browsing/malware_details.h" | 7 #include "chrome/browser/safe_browsing/malware_details.h" |
8 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" | 8 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" |
9 #include "chrome/common/pref_names.h" | 9 #include "chrome/common/pref_names.h" |
10 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 10 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 11 #include "content/browser/tab_contents/interstitial_page.h" |
11 #include "content/browser/tab_contents/test_tab_contents.h" | 12 #include "content/browser/tab_contents/test_tab_contents.h" |
12 #include "content/public/browser/navigation_entry.h" | 13 #include "content/public/browser/navigation_entry.h" |
13 #include "content/test/test_browser_thread.h" | 14 #include "content/test/test_browser_thread.h" |
14 | 15 |
15 using content::BrowserThread; | 16 using content::BrowserThread; |
16 using content::NavigationEntry; | 17 using content::NavigationEntry; |
17 using content::WebContents; | 18 using content::WebContents; |
18 using content::WebContentsView; | 19 using content::WebContentsView; |
19 | 20 |
20 static const char* kGoogleURL = "http://www.google.com/"; | 21 static const char* kGoogleURL = "http://www.google.com/"; |
21 static const char* kGoodURL = "http://www.goodguys.com/"; | 22 static const char* kGoodURL = "http://www.goodguys.com/"; |
22 static const char* kBadURL = "http://www.badguys.com/"; | 23 static const char* kBadURL = "http://www.badguys.com/"; |
23 static const char* kBadURL2 = "http://www.badguys2.com/"; | 24 static const char* kBadURL2 = "http://www.badguys2.com/"; |
24 static const char* kBadURL3 = "http://www.badguys3.com/"; | 25 static const char* kBadURL3 = "http://www.badguys3.com/"; |
25 | 26 |
26 // A SafeBrowingBlockingPage class that does not create windows. | 27 // A SafeBrowingBlockingPage class that does not create windows. |
27 class TestSafeBrowsingBlockingPage : public SafeBrowsingBlockingPage { | 28 class TestSafeBrowsingBlockingPage : public SafeBrowsingBlockingPage { |
28 public: | 29 public: |
29 TestSafeBrowsingBlockingPage(SafeBrowsingService* service, | 30 TestSafeBrowsingBlockingPage(SafeBrowsingService* service, |
30 WebContents* web_contents, | 31 WebContents* web_contents, |
31 const UnsafeResourceList& unsafe_resources) | 32 const UnsafeResourceList& unsafe_resources) |
32 : SafeBrowsingBlockingPage(service, web_contents, unsafe_resources) { | 33 : SafeBrowsingBlockingPage(service, web_contents, unsafe_resources) { |
33 // Don't delay details at all for the unittest. | 34 // Don't delay details at all for the unittest. |
34 malware_details_proceed_delay_ms_ = 0; | 35 malware_details_proceed_delay_ms_ = 0; |
| 36 |
| 37 // Don't create a view. |
| 38 interstitial_page_->DontCreateViewForTesting(); |
35 } | 39 } |
36 | 40 |
37 // Overriden from InterstitialPage. Don't create a view. | |
38 virtual WebContentsView* CreateWebContentsView() { | |
39 return NULL; | |
40 } | |
41 }; | 41 }; |
42 | 42 |
43 class TestSafeBrowsingService: public SafeBrowsingService { | 43 class TestSafeBrowsingService: public SafeBrowsingService { |
44 public: | 44 public: |
45 virtual ~TestSafeBrowsingService() {} | 45 virtual ~TestSafeBrowsingService() {} |
46 | 46 |
47 virtual void SendSerializedMalwareDetails(const std::string& serialized) { | 47 virtual void SendSerializedMalwareDetails(const std::string& serialized) { |
48 details_.push_back(serialized); | 48 details_.push_back(serialized); |
49 } | 49 } |
50 | 50 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 SafeBrowsingBlockingPage::ShowBlockingPage(service_, resource); | 131 SafeBrowsingBlockingPage::ShowBlockingPage(service_, resource); |
132 } | 132 } |
133 | 133 |
134 // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is | 134 // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is |
135 // showing. | 135 // showing. |
136 SafeBrowsingBlockingPage* GetSafeBrowsingBlockingPage() { | 136 SafeBrowsingBlockingPage* GetSafeBrowsingBlockingPage() { |
137 InterstitialPage* interstitial = | 137 InterstitialPage* interstitial = |
138 InterstitialPage::GetInterstitialPage(contents()); | 138 InterstitialPage::GetInterstitialPage(contents()); |
139 if (!interstitial) | 139 if (!interstitial) |
140 return NULL; | 140 return NULL; |
141 return static_cast<SafeBrowsingBlockingPage*>(interstitial); | 141 return static_cast<SafeBrowsingBlockingPage*>( |
| 142 interstitial->GetDelegateForTesting()); |
142 } | 143 } |
143 | 144 |
144 UserResponse user_response() const { return user_response_; } | 145 UserResponse user_response() const { return user_response_; } |
145 void ResetUserResponse() { user_response_ = PENDING; } | 146 void ResetUserResponse() { user_response_ = PENDING; } |
146 | 147 |
147 static void ProceedThroughInterstitial( | 148 static void ProceedThroughInterstitial( |
148 SafeBrowsingBlockingPage* sb_interstitial) { | 149 SafeBrowsingBlockingPage* sb_interstitial) { |
149 sb_interstitial->Proceed(); | 150 sb_interstitial->interstitial_page_->Proceed(); |
150 // Proceed() posts a task to update the SafeBrowsingService::Client. | 151 // Proceed() posts a task to update the SafeBrowsingService::Client. |
151 MessageLoop::current()->RunAllPending(); | 152 MessageLoop::current()->RunAllPending(); |
152 } | 153 } |
153 | 154 |
154 static void DontProceedThroughInterstitial( | 155 static void DontProceedThroughInterstitial( |
155 SafeBrowsingBlockingPage* sb_interstitial) { | 156 SafeBrowsingBlockingPage* sb_interstitial) { |
156 sb_interstitial->DontProceed(); | 157 sb_interstitial->interstitial_page_->DontProceed(); |
157 // DontProceed() posts a task to update the SafeBrowsingService::Client. | 158 // DontProceed() posts a task to update the SafeBrowsingService::Client. |
158 MessageLoop::current()->RunAllPending(); | 159 MessageLoop::current()->RunAllPending(); |
159 } | 160 } |
160 | 161 |
161 void DontProceedThroughSubresourceInterstitial( | 162 void DontProceedThroughSubresourceInterstitial( |
162 SafeBrowsingBlockingPage* sb_interstitial) { | 163 SafeBrowsingBlockingPage* sb_interstitial) { |
163 // CommandReceived(kTakeMeBackCommand) does a back navigation for | 164 // CommandReceived(kTakeMeBackCommand) does a back navigation for |
164 // subresource interstitials. | 165 // subresource interstitials. |
165 GoBack(false); | 166 GoBack(false); |
166 // DontProceed() posts a task to update the SafeBrowsingService::Client. | 167 // DontProceed() posts a task to update the SafeBrowsingService::Client. |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 | 534 |
534 // Simulate the load causing a safe browsing interstitial to be shown. | 535 // Simulate the load causing a safe browsing interstitial to be shown. |
535 ShowInterstitial(false, kBadURL); | 536 ShowInterstitial(false, kBadURL); |
536 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); | 537 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
537 ASSERT_TRUE(sb_interstitial); | 538 ASSERT_TRUE(sb_interstitial); |
538 | 539 |
539 MessageLoop::current()->RunAllPending(); | 540 MessageLoop::current()->RunAllPending(); |
540 | 541 |
541 // Simulate the user clicking "proceed" then "don't proceed" (before the | 542 // Simulate the user clicking "proceed" then "don't proceed" (before the |
542 // interstitial is shown). | 543 // interstitial is shown). |
543 sb_interstitial->Proceed(); | 544 sb_interstitial->interstitial_page_->Proceed(); |
544 sb_interstitial->DontProceed(); | 545 sb_interstitial->interstitial_page_->DontProceed(); |
545 // Proceed() and DontProceed() post a task to update the | 546 // Proceed() and DontProceed() post a task to update the |
546 // SafeBrowsingService::Client. | 547 // SafeBrowsingService::Client. |
547 MessageLoop::current()->RunAllPending(); | 548 MessageLoop::current()->RunAllPending(); |
548 | 549 |
549 // The interstitial should be gone. | 550 // The interstitial should be gone. |
550 EXPECT_EQ(OK, user_response()); | 551 EXPECT_EQ(OK, user_response()); |
551 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 552 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
552 | 553 |
553 // Only one report should have been sent. | 554 // Only one report should have been sent. |
554 EXPECT_EQ(1u, service_->GetDetails()->size()); | 555 EXPECT_EQ(1u, service_->GetDetails()->size()); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
614 | 615 |
615 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( | 616 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( |
616 prefs::kSafeBrowsingReportingEnabled)); | 617 prefs::kSafeBrowsingReportingEnabled)); |
617 | 618 |
618 // Simulate the user uncheck the report agreement checkbox. | 619 // Simulate the user uncheck the report agreement checkbox. |
619 sb_interstitial->SetReportingPreference(false); | 620 sb_interstitial->SetReportingPreference(false); |
620 | 621 |
621 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( | 622 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( |
622 prefs::kSafeBrowsingReportingEnabled)); | 623 prefs::kSafeBrowsingReportingEnabled)); |
623 } | 624 } |
OLD | NEW |