Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc

Issue 14197014: Add TestBrowserThreadBundle into RenderViewHostTestHarness. Kill some unnecessary real threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged ToT Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/prefs/pref_service.h" 5 #include "base/prefs/pref_service.h"
6 #include "base/run_loop.h"
6 #include "chrome/browser/profiles/profile.h" 7 #include "chrome/browser/profiles/profile.h"
7 #include "chrome/browser/safe_browsing/malware_details.h" 8 #include "chrome/browser/safe_browsing/malware_details.h"
8 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 9 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 10 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
10 #include "chrome/browser/safe_browsing/ui_manager.h" 11 #include "chrome/browser/safe_browsing/ui_manager.h"
11 #include "chrome/common/pref_names.h" 12 #include "chrome/common/pref_names.h"
12 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 13 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
13 #include "content/public/browser/interstitial_page.h" 14 #include "content/public/browser/interstitial_page.h"
14 #include "content/public/browser/navigation_entry.h" 15 #include "content/public/browser/navigation_entry.h"
15 #include "content/public/browser/render_process_host.h" 16 #include "content/public/browser/render_process_host.h"
16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
17 #include "content/public/browser/web_contents_view.h" 18 #include "content/public/browser/web_contents_view.h"
18 #include "content/public/test/test_browser_thread.h"
19 #include "content/public/test/web_contents_tester.h" 19 #include "content/public/test/web_contents_tester.h"
20 20
21 using content::BrowserThread;
22 using content::InterstitialPage; 21 using content::InterstitialPage;
23 using content::NavigationEntry; 22 using content::NavigationEntry;
24 using content::WebContents; 23 using content::WebContents;
25 using content::WebContentsTester; 24 using content::WebContentsTester;
26 using content::WebContentsView; 25 using content::WebContentsView;
27 26
28 static const char* kGoogleURL = "http://www.google.com/"; 27 static const char* kGoogleURL = "http://www.google.com/";
29 static const char* kGoodURL = "http://www.goodguys.com/"; 28 static const char* kGoodURL = "http://www.goodguys.com/";
30 static const char* kBadURL = "http://www.badguys.com/"; 29 static const char* kBadURL = "http://www.badguys.com/";
31 static const char* kBadURL2 = "http://www.badguys2.com/"; 30 static const char* kBadURL2 = "http://www.badguys2.com/";
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 111
113 class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { 112 class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness {
114 public: 113 public:
115 // The decision the user made. 114 // The decision the user made.
116 enum UserResponse { 115 enum UserResponse {
117 PENDING, 116 PENDING,
118 OK, 117 OK,
119 CANCEL 118 CANCEL
120 }; 119 };
121 120
122 SafeBrowsingBlockingPageTest() 121 SafeBrowsingBlockingPageTest() {
123 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()),
124 file_user_blocking_thread_(
125 BrowserThread::FILE_USER_BLOCKING, base::MessageLoop::current()),
126 io_thread_(BrowserThread::IO, base::MessageLoop::current()) {
127 ResetUserResponse(); 122 ResetUserResponse();
128 // The safe browsing UI manager does not need a service for this test. 123 // The safe browsing UI manager does not need a service for this test.
129 ui_manager_ = new TestSafeBrowsingUIManager(NULL); 124 ui_manager_ = new TestSafeBrowsingUIManager(NULL);
130 } 125 }
131 126
132 virtual void SetUp() { 127 virtual void SetUp() {
133 ChromeRenderViewHostTestHarness::SetUp(); 128 ChromeRenderViewHostTestHarness::SetUp();
134 SafeBrowsingBlockingPage::RegisterFactory(&factory_); 129 SafeBrowsingBlockingPage::RegisterFactory(&factory_);
135 MalwareDetails::RegisterFactory(NULL); // Create it fresh each time. 130 MalwareDetails::RegisterFactory(NULL); // Create it fresh each time.
136 ResetUserResponse(); 131 ResetUserResponse();
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 interstitial->GetDelegateForTesting()); 184 interstitial->GetDelegateForTesting());
190 } 185 }
191 186
192 UserResponse user_response() const { return user_response_; } 187 UserResponse user_response() const { return user_response_; }
193 void ResetUserResponse() { user_response_ = PENDING; } 188 void ResetUserResponse() { user_response_ = PENDING; }
194 189
195 static void ProceedThroughInterstitial( 190 static void ProceedThroughInterstitial(
196 SafeBrowsingBlockingPage* sb_interstitial) { 191 SafeBrowsingBlockingPage* sb_interstitial) {
197 sb_interstitial->interstitial_page_->Proceed(); 192 sb_interstitial->interstitial_page_->Proceed();
198 // Proceed() posts a task to update the SafeBrowsingService::Client. 193 // Proceed() posts a task to update the SafeBrowsingService::Client.
199 base::MessageLoop::current()->RunUntilIdle(); 194 base::RunLoop().RunUntilIdle();
200 } 195 }
201 196
202 static void DontProceedThroughInterstitial( 197 static void DontProceedThroughInterstitial(
203 SafeBrowsingBlockingPage* sb_interstitial) { 198 SafeBrowsingBlockingPage* sb_interstitial) {
204 sb_interstitial->interstitial_page_->DontProceed(); 199 sb_interstitial->interstitial_page_->DontProceed();
205 // DontProceed() posts a task to update the SafeBrowsingService::Client. 200 // DontProceed() posts a task to update the SafeBrowsingService::Client.
206 base::MessageLoop::current()->RunUntilIdle(); 201 base::RunLoop().RunUntilIdle();
207 } 202 }
208 203
209 void DontProceedThroughSubresourceInterstitial( 204 void DontProceedThroughSubresourceInterstitial(
210 SafeBrowsingBlockingPage* sb_interstitial) { 205 SafeBrowsingBlockingPage* sb_interstitial) {
211 // CommandReceived(kTakeMeBackCommand) does a back navigation for 206 // CommandReceived(kTakeMeBackCommand) does a back navigation for
212 // subresource interstitials. 207 // subresource interstitials.
213 GoBack(false); 208 GoBack(false);
214 // DontProceed() posts a task to update the SafeBrowsingService::Client. 209 // DontProceed() posts a task to update the SafeBrowsingService::Client.
215 base::MessageLoop::current()->RunUntilIdle(); 210 base::RunLoop().RunUntilIdle();
216 } 211 }
217 212
218 scoped_refptr<TestSafeBrowsingUIManager> ui_manager_; 213 scoped_refptr<TestSafeBrowsingUIManager> ui_manager_;
219 214
220 private: 215 private:
221 void InitResource(SafeBrowsingUIManager::UnsafeResource* resource, 216 void InitResource(SafeBrowsingUIManager::UnsafeResource* resource,
222 bool is_subresource, 217 bool is_subresource,
223 const GURL& url) { 218 const GURL& url) {
224 resource->callback = 219 resource->callback =
225 base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, 220 base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete,
226 base::Unretained(this)); 221 base::Unretained(this));
227 resource->url = url; 222 resource->url = url;
228 resource->is_subresource = is_subresource; 223 resource->is_subresource = is_subresource;
229 resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; 224 resource->threat_type = SB_THREAT_TYPE_URL_MALWARE;
230 resource->render_process_host_id = 225 resource->render_process_host_id =
231 web_contents()->GetRenderProcessHost()->GetID(); 226 web_contents()->GetRenderProcessHost()->GetID();
232 resource->render_view_id = 227 resource->render_view_id =
233 web_contents()->GetRenderViewHost()->GetRoutingID(); 228 web_contents()->GetRenderViewHost()->GetRoutingID();
234 } 229 }
235 230
236 UserResponse user_response_; 231 UserResponse user_response_;
237 TestSafeBrowsingBlockingPageFactory factory_; 232 TestSafeBrowsingBlockingPageFactory factory_;
238 content::TestBrowserThread ui_thread_;
239 content::TestBrowserThread file_user_blocking_thread_;
240 content::TestBrowserThread io_thread_;
241 }; 233 };
242 234
243 // Tests showing a blocking page for a malware page and not proceeding. 235 // Tests showing a blocking page for a malware page and not proceeding.
244 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) { 236 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) {
245 // Enable malware details. 237 // Enable malware details.
246 Profile* profile = Profile::FromBrowserContext( 238 Profile* profile = Profile::FromBrowserContext(
247 web_contents()->GetBrowserContext()); 239 web_contents()->GetBrowserContext());
248 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, true); 240 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, true);
249 241
250 // Start a load. 242 // Start a load.
251 controller().LoadURL(GURL(kBadURL), content::Referrer(), 243 controller().LoadURL(GURL(kBadURL), content::Referrer(),
252 content::PAGE_TRANSITION_TYPED, std::string()); 244 content::PAGE_TRANSITION_TYPED, std::string());
253 245
254 246
255 // Simulate the load causing a safe browsing interstitial to be shown. 247 // Simulate the load causing a safe browsing interstitial to be shown.
256 ShowInterstitial(false, kBadURL); 248 ShowInterstitial(false, kBadURL);
257 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 249 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
258 ASSERT_TRUE(sb_interstitial); 250 ASSERT_TRUE(sb_interstitial);
259 251
260 base::MessageLoop::current()->RunUntilIdle(); 252 base::RunLoop().RunUntilIdle();
261 253
262 // Simulate the user clicking "don't proceed". 254 // Simulate the user clicking "don't proceed".
263 DontProceedThroughInterstitial(sb_interstitial); 255 DontProceedThroughInterstitial(sb_interstitial);
264 256
265 // The interstitial should be gone. 257 // The interstitial should be gone.
266 EXPECT_EQ(CANCEL, user_response()); 258 EXPECT_EQ(CANCEL, user_response());
267 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 259 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
268 260
269 // We did not proceed, the pending entry should be gone. 261 // We did not proceed, the pending entry should be gone.
270 EXPECT_FALSE(controller().GetPendingEntry()); 262 EXPECT_FALSE(controller().GetPendingEntry());
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 571
580 // Start a load. 572 // Start a load.
581 controller().LoadURL(GURL(kBadURL), content::Referrer(), 573 controller().LoadURL(GURL(kBadURL), content::Referrer(),
582 content::PAGE_TRANSITION_TYPED, std::string()); 574 content::PAGE_TRANSITION_TYPED, std::string());
583 575
584 // Simulate the load causing a safe browsing interstitial to be shown. 576 // Simulate the load causing a safe browsing interstitial to be shown.
585 ShowInterstitial(false, kBadURL); 577 ShowInterstitial(false, kBadURL);
586 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 578 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
587 ASSERT_TRUE(sb_interstitial); 579 ASSERT_TRUE(sb_interstitial);
588 580
589 base::MessageLoop::current()->RunUntilIdle(); 581 base::RunLoop().RunUntilIdle();
590 582
591 // Simulate the user clicking "proceed" then "don't proceed" (before the 583 // Simulate the user clicking "proceed" then "don't proceed" (before the
592 // interstitial is shown). 584 // interstitial is shown).
593 sb_interstitial->interstitial_page_->Proceed(); 585 sb_interstitial->interstitial_page_->Proceed();
594 sb_interstitial->interstitial_page_->DontProceed(); 586 sb_interstitial->interstitial_page_->DontProceed();
595 // Proceed() and DontProceed() post a task to update the 587 // Proceed() and DontProceed() post a task to update the
596 // SafeBrowsingService::Client. 588 // SafeBrowsingService::Client.
597 base::MessageLoop::current()->RunUntilIdle(); 589 base::RunLoop().RunUntilIdle();
598 590
599 // The interstitial should be gone. 591 // The interstitial should be gone.
600 EXPECT_EQ(OK, user_response()); 592 EXPECT_EQ(OK, user_response());
601 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 593 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
602 594
603 // Only one report should have been sent. 595 // Only one report should have been sent.
604 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 596 EXPECT_EQ(1u, ui_manager_->GetDetails()->size());
605 ui_manager_->GetDetails()->clear(); 597 ui_manager_->GetDetails()->clear();
606 } 598 }
607 599
608 // Tests showing a blocking page for a malware page with reports disabled. 600 // Tests showing a blocking page for a malware page with reports disabled.
609 TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) { 601 TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) {
610 // Disable malware reports. 602 // Disable malware reports.
611 Profile* profile = Profile::FromBrowserContext( 603 Profile* profile = Profile::FromBrowserContext(
612 web_contents()->GetBrowserContext()); 604 web_contents()->GetBrowserContext());
613 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, false); 605 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, false);
614 606
615 // Start a load. 607 // Start a load.
616 controller().LoadURL(GURL(kBadURL), content::Referrer(), 608 controller().LoadURL(GURL(kBadURL), content::Referrer(),
617 content::PAGE_TRANSITION_TYPED, std::string()); 609 content::PAGE_TRANSITION_TYPED, std::string());
618 610
619 // Simulate the load causing a safe browsing interstitial to be shown. 611 // Simulate the load causing a safe browsing interstitial to be shown.
620 ShowInterstitial(false, kBadURL); 612 ShowInterstitial(false, kBadURL);
621 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 613 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
622 ASSERT_TRUE(sb_interstitial); 614 ASSERT_TRUE(sb_interstitial);
623 615
624 base::MessageLoop::current()->RunUntilIdle(); 616 base::RunLoop().RunUntilIdle();
625 617
626 // Simulate the user clicking "don't proceed". 618 // Simulate the user clicking "don't proceed".
627 DontProceedThroughInterstitial(sb_interstitial); 619 DontProceedThroughInterstitial(sb_interstitial);
628 620
629 // The interstitial should be gone. 621 // The interstitial should be gone.
630 EXPECT_EQ(CANCEL, user_response()); 622 EXPECT_EQ(CANCEL, user_response());
631 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 623 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
632 624
633 // We did not proceed, the pending entry should be gone. 625 // We did not proceed, the pending entry should be gone.
634 EXPECT_FALSE(controller().GetPendingEntry()); 626 EXPECT_FALSE(controller().GetPendingEntry());
(...skipping 12 matching lines...) Expand all
647 639
648 // Start a load. 640 // Start a load.
649 controller().LoadURL(GURL(kBadURL), content::Referrer(), 641 controller().LoadURL(GURL(kBadURL), content::Referrer(),
650 content::PAGE_TRANSITION_TYPED, std::string()); 642 content::PAGE_TRANSITION_TYPED, std::string());
651 643
652 // Simulate the load causing a safe browsing interstitial to be shown. 644 // Simulate the load causing a safe browsing interstitial to be shown.
653 ShowInterstitial(false, kBadURL); 645 ShowInterstitial(false, kBadURL);
654 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 646 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
655 ASSERT_TRUE(sb_interstitial); 647 ASSERT_TRUE(sb_interstitial);
656 648
657 base::MessageLoop::current()->RunUntilIdle(); 649 base::RunLoop().RunUntilIdle();
658 650
659 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 651 EXPECT_FALSE(profile->GetPrefs()->GetBoolean(
660 prefs::kSafeBrowsingReportingEnabled)); 652 prefs::kSafeBrowsingReportingEnabled));
661 653
662 // Simulate the user check the report agreement checkbox. 654 // Simulate the user check the report agreement checkbox.
663 sb_interstitial->SetReportingPreference(true); 655 sb_interstitial->SetReportingPreference(true);
664 656
665 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( 657 EXPECT_TRUE(profile->GetPrefs()->GetBoolean(
666 prefs::kSafeBrowsingReportingEnabled)); 658 prefs::kSafeBrowsingReportingEnabled));
667 659
668 // Simulate the user uncheck the report agreement checkbox. 660 // Simulate the user uncheck the report agreement checkbox.
669 sb_interstitial->SetReportingPreference(false); 661 sb_interstitial->SetReportingPreference(false);
670 662
671 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 663 EXPECT_FALSE(profile->GetPrefs()->GetBoolean(
672 prefs::kSafeBrowsingReportingEnabled)); 664 prefs::kSafeBrowsingReportingEnabled));
673 } 665 }
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/malware_details_unittest.cc ('k') | chrome/browser/safe_browsing/two_phase_uploader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698