| 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 "base/prefs/pref_service.h" | 5 #include "base/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/browser/safe_browsing/safe_browsing_service.h" | 9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
| 10 #include "chrome/browser/safe_browsing/ui_manager.h" | 10 #include "chrome/browser/safe_browsing/ui_manager.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { | 113 class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { |
| 114 public: | 114 public: |
| 115 // The decision the user made. | 115 // The decision the user made. |
| 116 enum UserResponse { | 116 enum UserResponse { |
| 117 PENDING, | 117 PENDING, |
| 118 OK, | 118 OK, |
| 119 CANCEL | 119 CANCEL |
| 120 }; | 120 }; |
| 121 | 121 |
| 122 SafeBrowsingBlockingPageTest() | 122 SafeBrowsingBlockingPageTest() |
| 123 : ui_thread_(BrowserThread::UI, MessageLoop::current()), | 123 : ui_thread_(BrowserThread::UI, base::MessageLoop::current()), |
| 124 file_user_blocking_thread_( | 124 file_user_blocking_thread_( |
| 125 BrowserThread::FILE_USER_BLOCKING, MessageLoop::current()), | 125 BrowserThread::FILE_USER_BLOCKING, base::MessageLoop::current()), |
| 126 io_thread_(BrowserThread::IO, MessageLoop::current()) { | 126 io_thread_(BrowserThread::IO, base::MessageLoop::current()) { |
| 127 ResetUserResponse(); | 127 ResetUserResponse(); |
| 128 // The safe browsing UI manager does not need a service for this test. | 128 // The safe browsing UI manager does not need a service for this test. |
| 129 ui_manager_ = new TestSafeBrowsingUIManager(NULL); | 129 ui_manager_ = new TestSafeBrowsingUIManager(NULL); |
| 130 } | 130 } |
| 131 | 131 |
| 132 virtual void SetUp() { | 132 virtual void SetUp() { |
| 133 ChromeRenderViewHostTestHarness::SetUp(); | 133 ChromeRenderViewHostTestHarness::SetUp(); |
| 134 SafeBrowsingBlockingPage::RegisterFactory(&factory_); | 134 SafeBrowsingBlockingPage::RegisterFactory(&factory_); |
| 135 MalwareDetails::RegisterFactory(NULL); // Create it fresh each time. | 135 MalwareDetails::RegisterFactory(NULL); // Create it fresh each time. |
| 136 ResetUserResponse(); | 136 ResetUserResponse(); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 interstitial->GetDelegateForTesting()); | 189 interstitial->GetDelegateForTesting()); |
| 190 } | 190 } |
| 191 | 191 |
| 192 UserResponse user_response() const { return user_response_; } | 192 UserResponse user_response() const { return user_response_; } |
| 193 void ResetUserResponse() { user_response_ = PENDING; } | 193 void ResetUserResponse() { user_response_ = PENDING; } |
| 194 | 194 |
| 195 static void ProceedThroughInterstitial( | 195 static void ProceedThroughInterstitial( |
| 196 SafeBrowsingBlockingPage* sb_interstitial) { | 196 SafeBrowsingBlockingPage* sb_interstitial) { |
| 197 sb_interstitial->interstitial_page_->Proceed(); | 197 sb_interstitial->interstitial_page_->Proceed(); |
| 198 // Proceed() posts a task to update the SafeBrowsingService::Client. | 198 // Proceed() posts a task to update the SafeBrowsingService::Client. |
| 199 MessageLoop::current()->RunUntilIdle(); | 199 base::MessageLoop::current()->RunUntilIdle(); |
| 200 } | 200 } |
| 201 | 201 |
| 202 static void DontProceedThroughInterstitial( | 202 static void DontProceedThroughInterstitial( |
| 203 SafeBrowsingBlockingPage* sb_interstitial) { | 203 SafeBrowsingBlockingPage* sb_interstitial) { |
| 204 sb_interstitial->interstitial_page_->DontProceed(); | 204 sb_interstitial->interstitial_page_->DontProceed(); |
| 205 // DontProceed() posts a task to update the SafeBrowsingService::Client. | 205 // DontProceed() posts a task to update the SafeBrowsingService::Client. |
| 206 MessageLoop::current()->RunUntilIdle(); | 206 base::MessageLoop::current()->RunUntilIdle(); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void DontProceedThroughSubresourceInterstitial( | 209 void DontProceedThroughSubresourceInterstitial( |
| 210 SafeBrowsingBlockingPage* sb_interstitial) { | 210 SafeBrowsingBlockingPage* sb_interstitial) { |
| 211 // CommandReceived(kTakeMeBackCommand) does a back navigation for | 211 // CommandReceived(kTakeMeBackCommand) does a back navigation for |
| 212 // subresource interstitials. | 212 // subresource interstitials. |
| 213 GoBack(false); | 213 GoBack(false); |
| 214 // DontProceed() posts a task to update the SafeBrowsingService::Client. | 214 // DontProceed() posts a task to update the SafeBrowsingService::Client. |
| 215 MessageLoop::current()->RunUntilIdle(); | 215 base::MessageLoop::current()->RunUntilIdle(); |
| 216 } | 216 } |
| 217 | 217 |
| 218 scoped_refptr<TestSafeBrowsingUIManager> ui_manager_; | 218 scoped_refptr<TestSafeBrowsingUIManager> ui_manager_; |
| 219 | 219 |
| 220 private: | 220 private: |
| 221 void InitResource(SafeBrowsingUIManager::UnsafeResource* resource, | 221 void InitResource(SafeBrowsingUIManager::UnsafeResource* resource, |
| 222 bool is_subresource, | 222 bool is_subresource, |
| 223 const GURL& url) { | 223 const GURL& url) { |
| 224 resource->callback = | 224 resource->callback = |
| 225 base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, | 225 base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 250 // Start a load. | 250 // Start a load. |
| 251 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 251 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
| 252 content::PAGE_TRANSITION_TYPED, std::string()); | 252 content::PAGE_TRANSITION_TYPED, std::string()); |
| 253 | 253 |
| 254 | 254 |
| 255 // Simulate the load causing a safe browsing interstitial to be shown. | 255 // Simulate the load causing a safe browsing interstitial to be shown. |
| 256 ShowInterstitial(false, kBadURL); | 256 ShowInterstitial(false, kBadURL); |
| 257 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); | 257 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
| 258 ASSERT_TRUE(sb_interstitial); | 258 ASSERT_TRUE(sb_interstitial); |
| 259 | 259 |
| 260 MessageLoop::current()->RunUntilIdle(); | 260 base::MessageLoop::current()->RunUntilIdle(); |
| 261 | 261 |
| 262 // Simulate the user clicking "don't proceed". | 262 // Simulate the user clicking "don't proceed". |
| 263 DontProceedThroughInterstitial(sb_interstitial); | 263 DontProceedThroughInterstitial(sb_interstitial); |
| 264 | 264 |
| 265 // The interstitial should be gone. | 265 // The interstitial should be gone. |
| 266 EXPECT_EQ(CANCEL, user_response()); | 266 EXPECT_EQ(CANCEL, user_response()); |
| 267 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 267 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
| 268 | 268 |
| 269 // We did not proceed, the pending entry should be gone. | 269 // We did not proceed, the pending entry should be gone. |
| 270 EXPECT_FALSE(controller().GetPendingEntry()); | 270 EXPECT_FALSE(controller().GetPendingEntry()); |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 | 579 |
| 580 // Start a load. | 580 // Start a load. |
| 581 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 581 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
| 582 content::PAGE_TRANSITION_TYPED, std::string()); | 582 content::PAGE_TRANSITION_TYPED, std::string()); |
| 583 | 583 |
| 584 // Simulate the load causing a safe browsing interstitial to be shown. | 584 // Simulate the load causing a safe browsing interstitial to be shown. |
| 585 ShowInterstitial(false, kBadURL); | 585 ShowInterstitial(false, kBadURL); |
| 586 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); | 586 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
| 587 ASSERT_TRUE(sb_interstitial); | 587 ASSERT_TRUE(sb_interstitial); |
| 588 | 588 |
| 589 MessageLoop::current()->RunUntilIdle(); | 589 base::MessageLoop::current()->RunUntilIdle(); |
| 590 | 590 |
| 591 // Simulate the user clicking "proceed" then "don't proceed" (before the | 591 // Simulate the user clicking "proceed" then "don't proceed" (before the |
| 592 // interstitial is shown). | 592 // interstitial is shown). |
| 593 sb_interstitial->interstitial_page_->Proceed(); | 593 sb_interstitial->interstitial_page_->Proceed(); |
| 594 sb_interstitial->interstitial_page_->DontProceed(); | 594 sb_interstitial->interstitial_page_->DontProceed(); |
| 595 // Proceed() and DontProceed() post a task to update the | 595 // Proceed() and DontProceed() post a task to update the |
| 596 // SafeBrowsingService::Client. | 596 // SafeBrowsingService::Client. |
| 597 MessageLoop::current()->RunUntilIdle(); | 597 base::MessageLoop::current()->RunUntilIdle(); |
| 598 | 598 |
| 599 // The interstitial should be gone. | 599 // The interstitial should be gone. |
| 600 EXPECT_EQ(OK, user_response()); | 600 EXPECT_EQ(OK, user_response()); |
| 601 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 601 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
| 602 | 602 |
| 603 // Only one report should have been sent. | 603 // Only one report should have been sent. |
| 604 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); | 604 EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); |
| 605 ui_manager_->GetDetails()->clear(); | 605 ui_manager_->GetDetails()->clear(); |
| 606 } | 606 } |
| 607 | 607 |
| 608 // Tests showing a blocking page for a malware page with reports disabled. | 608 // Tests showing a blocking page for a malware page with reports disabled. |
| 609 TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) { | 609 TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) { |
| 610 // Disable malware reports. | 610 // Disable malware reports. |
| 611 Profile* profile = Profile::FromBrowserContext( | 611 Profile* profile = Profile::FromBrowserContext( |
| 612 web_contents()->GetBrowserContext()); | 612 web_contents()->GetBrowserContext()); |
| 613 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, false); | 613 profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, false); |
| 614 | 614 |
| 615 // Start a load. | 615 // Start a load. |
| 616 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 616 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
| 617 content::PAGE_TRANSITION_TYPED, std::string()); | 617 content::PAGE_TRANSITION_TYPED, std::string()); |
| 618 | 618 |
| 619 // Simulate the load causing a safe browsing interstitial to be shown. | 619 // Simulate the load causing a safe browsing interstitial to be shown. |
| 620 ShowInterstitial(false, kBadURL); | 620 ShowInterstitial(false, kBadURL); |
| 621 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); | 621 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
| 622 ASSERT_TRUE(sb_interstitial); | 622 ASSERT_TRUE(sb_interstitial); |
| 623 | 623 |
| 624 MessageLoop::current()->RunUntilIdle(); | 624 base::MessageLoop::current()->RunUntilIdle(); |
| 625 | 625 |
| 626 // Simulate the user clicking "don't proceed". | 626 // Simulate the user clicking "don't proceed". |
| 627 DontProceedThroughInterstitial(sb_interstitial); | 627 DontProceedThroughInterstitial(sb_interstitial); |
| 628 | 628 |
| 629 // The interstitial should be gone. | 629 // The interstitial should be gone. |
| 630 EXPECT_EQ(CANCEL, user_response()); | 630 EXPECT_EQ(CANCEL, user_response()); |
| 631 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); | 631 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); |
| 632 | 632 |
| 633 // We did not proceed, the pending entry should be gone. | 633 // We did not proceed, the pending entry should be gone. |
| 634 EXPECT_FALSE(controller().GetPendingEntry()); | 634 EXPECT_FALSE(controller().GetPendingEntry()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 647 | 647 |
| 648 // Start a load. | 648 // Start a load. |
| 649 controller().LoadURL(GURL(kBadURL), content::Referrer(), | 649 controller().LoadURL(GURL(kBadURL), content::Referrer(), |
| 650 content::PAGE_TRANSITION_TYPED, std::string()); | 650 content::PAGE_TRANSITION_TYPED, std::string()); |
| 651 | 651 |
| 652 // Simulate the load causing a safe browsing interstitial to be shown. | 652 // Simulate the load causing a safe browsing interstitial to be shown. |
| 653 ShowInterstitial(false, kBadURL); | 653 ShowInterstitial(false, kBadURL); |
| 654 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); | 654 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
| 655 ASSERT_TRUE(sb_interstitial); | 655 ASSERT_TRUE(sb_interstitial); |
| 656 | 656 |
| 657 MessageLoop::current()->RunUntilIdle(); | 657 base::MessageLoop::current()->RunUntilIdle(); |
| 658 | 658 |
| 659 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( | 659 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( |
| 660 prefs::kSafeBrowsingReportingEnabled)); | 660 prefs::kSafeBrowsingReportingEnabled)); |
| 661 | 661 |
| 662 // Simulate the user check the report agreement checkbox. | 662 // Simulate the user check the report agreement checkbox. |
| 663 sb_interstitial->SetReportingPreference(true); | 663 sb_interstitial->SetReportingPreference(true); |
| 664 | 664 |
| 665 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( | 665 EXPECT_TRUE(profile->GetPrefs()->GetBoolean( |
| 666 prefs::kSafeBrowsingReportingEnabled)); | 666 prefs::kSafeBrowsingReportingEnabled)); |
| 667 | 667 |
| 668 // Simulate the user uncheck the report agreement checkbox. | 668 // Simulate the user uncheck the report agreement checkbox. |
| 669 sb_interstitial->SetReportingPreference(false); | 669 sb_interstitial->SetReportingPreference(false); |
| 670 | 670 |
| 671 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( | 671 EXPECT_FALSE(profile->GetPrefs()->GetBoolean( |
| 672 prefs::kSafeBrowsingReportingEnabled)); | 672 prefs::kSafeBrowsingReportingEnabled)); |
| 673 } | 673 } |
| OLD | NEW |