| 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" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 class FakeSafeBrowsingDatabaseManager : public SafeBrowsingDatabaseManager { | 54 class FakeSafeBrowsingDatabaseManager : public SafeBrowsingDatabaseManager { |
| 55 public: | 55 public: |
| 56 explicit FakeSafeBrowsingDatabaseManager(SafeBrowsingService* service) | 56 explicit FakeSafeBrowsingDatabaseManager(SafeBrowsingService* service) |
| 57 : SafeBrowsingDatabaseManager(service) { } | 57 : SafeBrowsingDatabaseManager(service) { } |
| 58 | 58 |
| 59 // Called on the IO thread to check if the given url is safe or not. If we | 59 // Called on the IO thread to check if the given url is safe or not. If we |
| 60 // can synchronously determine that the url is safe, CheckUrl returns true. | 60 // can synchronously determine that the url is safe, CheckUrl returns true. |
| 61 // Otherwise it returns false, and "client" is called asynchronously with the | 61 // Otherwise it returns false, and "client" is called asynchronously with the |
| 62 // result when it is ready. | 62 // result when it is ready. |
| 63 // Overrides SafeBrowsingDatabaseManager::CheckBrowseUrl. | 63 // Overrides SafeBrowsingDatabaseManager::CheckBrowseUrl. |
| 64 virtual bool CheckBrowseUrl(const GURL& gurl, Client* client) OVERRIDE { | 64 virtual bool CheckBrowseUrl(const GURL& gurl, Client* client) override { |
| 65 if (badurls[gurl.spec()] == SB_THREAT_TYPE_SAFE) | 65 if (badurls[gurl.spec()] == SB_THREAT_TYPE_SAFE) |
| 66 return true; | 66 return true; |
| 67 | 67 |
| 68 BrowserThread::PostTask( | 68 BrowserThread::PostTask( |
| 69 BrowserThread::IO, FROM_HERE, | 69 BrowserThread::IO, FROM_HERE, |
| 70 base::Bind(&FakeSafeBrowsingDatabaseManager::OnCheckBrowseURLDone, | 70 base::Bind(&FakeSafeBrowsingDatabaseManager::OnCheckBrowseURLDone, |
| 71 this, gurl, client)); | 71 this, gurl, client)); |
| 72 return false; | 72 return false; |
| 73 } | 73 } |
| 74 | 74 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 98 }; | 98 }; |
| 99 | 99 |
| 100 // A SafeBrowingUIManager class that allows intercepting malware details. | 100 // A SafeBrowingUIManager class that allows intercepting malware details. |
| 101 class FakeSafeBrowsingUIManager : public SafeBrowsingUIManager { | 101 class FakeSafeBrowsingUIManager : public SafeBrowsingUIManager { |
| 102 public: | 102 public: |
| 103 explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) : | 103 explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) : |
| 104 SafeBrowsingUIManager(service) { } | 104 SafeBrowsingUIManager(service) { } |
| 105 | 105 |
| 106 // Overrides SafeBrowsingUIManager | 106 // Overrides SafeBrowsingUIManager |
| 107 virtual void SendSerializedMalwareDetails( | 107 virtual void SendSerializedMalwareDetails( |
| 108 const std::string& serialized) OVERRIDE { | 108 const std::string& serialized) override { |
| 109 // Notify the UI thread that we got a report. | 109 // Notify the UI thread that we got a report. |
| 110 BrowserThread::PostTask( | 110 BrowserThread::PostTask( |
| 111 BrowserThread::UI, | 111 BrowserThread::UI, |
| 112 FROM_HERE, | 112 FROM_HERE, |
| 113 base::Bind(&FakeSafeBrowsingUIManager::OnMalwareDetailsDone, | 113 base::Bind(&FakeSafeBrowsingUIManager::OnMalwareDetailsDone, |
| 114 this, | 114 this, |
| 115 serialized)); | 115 serialized)); |
| 116 } | 116 } |
| 117 | 117 |
| 118 void OnMalwareDetailsDone(const std::string& serialized) { | 118 void OnMalwareDetailsDone(const std::string& serialized) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 } | 160 } |
| 161 // Returned pointer has the same lifespan as the ui_manager_ refcounted | 161 // Returned pointer has the same lifespan as the ui_manager_ refcounted |
| 162 // object. | 162 // object. |
| 163 FakeSafeBrowsingUIManager* fake_ui_manager() { | 163 FakeSafeBrowsingUIManager* fake_ui_manager() { |
| 164 return fake_ui_manager_; | 164 return fake_ui_manager_; |
| 165 } | 165 } |
| 166 | 166 |
| 167 protected: | 167 protected: |
| 168 virtual ~FakeSafeBrowsingService() { } | 168 virtual ~FakeSafeBrowsingService() { } |
| 169 | 169 |
| 170 virtual SafeBrowsingDatabaseManager* CreateDatabaseManager() OVERRIDE { | 170 virtual SafeBrowsingDatabaseManager* CreateDatabaseManager() override { |
| 171 fake_database_manager_ = new FakeSafeBrowsingDatabaseManager(this); | 171 fake_database_manager_ = new FakeSafeBrowsingDatabaseManager(this); |
| 172 return fake_database_manager_; | 172 return fake_database_manager_; |
| 173 } | 173 } |
| 174 | 174 |
| 175 virtual SafeBrowsingUIManager* CreateUIManager() OVERRIDE { | 175 virtual SafeBrowsingUIManager* CreateUIManager() override { |
| 176 fake_ui_manager_ = new FakeSafeBrowsingUIManager(this); | 176 fake_ui_manager_ = new FakeSafeBrowsingUIManager(this); |
| 177 return fake_ui_manager_; | 177 return fake_ui_manager_; |
| 178 } | 178 } |
| 179 | 179 |
| 180 private: | 180 private: |
| 181 FakeSafeBrowsingDatabaseManager* fake_database_manager_; | 181 FakeSafeBrowsingDatabaseManager* fake_database_manager_; |
| 182 FakeSafeBrowsingUIManager* fake_ui_manager_; | 182 FakeSafeBrowsingUIManager* fake_ui_manager_; |
| 183 | 183 |
| 184 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingService); | 184 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingService); |
| 185 }; | 185 }; |
| 186 | 186 |
| 187 // Factory that creates FakeSafeBrowsingService instances. | 187 // Factory that creates FakeSafeBrowsingService instances. |
| 188 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory { | 188 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory { |
| 189 public: | 189 public: |
| 190 TestSafeBrowsingServiceFactory() : | 190 TestSafeBrowsingServiceFactory() : |
| 191 most_recent_service_(NULL) { } | 191 most_recent_service_(NULL) { } |
| 192 virtual ~TestSafeBrowsingServiceFactory() { } | 192 virtual ~TestSafeBrowsingServiceFactory() { } |
| 193 | 193 |
| 194 virtual SafeBrowsingService* CreateSafeBrowsingService() OVERRIDE { | 194 virtual SafeBrowsingService* CreateSafeBrowsingService() override { |
| 195 most_recent_service_ = new FakeSafeBrowsingService(); | 195 most_recent_service_ = new FakeSafeBrowsingService(); |
| 196 return most_recent_service_; | 196 return most_recent_service_; |
| 197 } | 197 } |
| 198 | 198 |
| 199 FakeSafeBrowsingService* most_recent_service() const { | 199 FakeSafeBrowsingService* most_recent_service() const { |
| 200 return most_recent_service_; | 200 return most_recent_service_; |
| 201 } | 201 } |
| 202 | 202 |
| 203 private: | 203 private: |
| 204 FakeSafeBrowsingService* most_recent_service_; | 204 FakeSafeBrowsingService* most_recent_service_; |
| 205 }; | 205 }; |
| 206 | 206 |
| 207 // A MalwareDetails class lets us intercept calls from the renderer. | 207 // A MalwareDetails class lets us intercept calls from the renderer. |
| 208 class FakeMalwareDetails : public MalwareDetails { | 208 class FakeMalwareDetails : public MalwareDetails { |
| 209 public: | 209 public: |
| 210 FakeMalwareDetails( | 210 FakeMalwareDetails( |
| 211 SafeBrowsingUIManager* delegate, | 211 SafeBrowsingUIManager* delegate, |
| 212 WebContents* web_contents, | 212 WebContents* web_contents, |
| 213 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) | 213 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) |
| 214 : MalwareDetails(delegate, web_contents, unsafe_resource), | 214 : MalwareDetails(delegate, web_contents, unsafe_resource), |
| 215 got_dom_(false), | 215 got_dom_(false), |
| 216 waiting_(false) { } | 216 waiting_(false) { } |
| 217 | 217 |
| 218 virtual void AddDOMDetails( | 218 virtual void AddDOMDetails( |
| 219 const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params) | 219 const std::vector<SafeBrowsingHostMsg_MalwareDOMDetails_Node>& params) |
| 220 OVERRIDE { | 220 override { |
| 221 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 221 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 222 MalwareDetails::AddDOMDetails(params); | 222 MalwareDetails::AddDOMDetails(params); |
| 223 | 223 |
| 224 // Notify the UI thread that we got the dom details. | 224 // Notify the UI thread that we got the dom details. |
| 225 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 225 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 226 base::Bind(&FakeMalwareDetails::OnDOMDetailsDone, | 226 base::Bind(&FakeMalwareDetails::OnDOMDetailsDone, |
| 227 this)); | 227 this)); |
| 228 } | 228 } |
| 229 | 229 |
| 230 void WaitForDOM() { | 230 void WaitForDOM() { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 255 }; | 255 }; |
| 256 | 256 |
| 257 class TestMalwareDetailsFactory : public MalwareDetailsFactory { | 257 class TestMalwareDetailsFactory : public MalwareDetailsFactory { |
| 258 public: | 258 public: |
| 259 TestMalwareDetailsFactory() : details_() { } | 259 TestMalwareDetailsFactory() : details_() { } |
| 260 virtual ~TestMalwareDetailsFactory() { } | 260 virtual ~TestMalwareDetailsFactory() { } |
| 261 | 261 |
| 262 virtual MalwareDetails* CreateMalwareDetails( | 262 virtual MalwareDetails* CreateMalwareDetails( |
| 263 SafeBrowsingUIManager* delegate, | 263 SafeBrowsingUIManager* delegate, |
| 264 WebContents* web_contents, | 264 WebContents* web_contents, |
| 265 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) OVERRIDE { | 265 const SafeBrowsingUIManager::UnsafeResource& unsafe_resource) override { |
| 266 details_ = new FakeMalwareDetails(delegate, web_contents, | 266 details_ = new FakeMalwareDetails(delegate, web_contents, |
| 267 unsafe_resource); | 267 unsafe_resource); |
| 268 return details_; | 268 return details_; |
| 269 } | 269 } |
| 270 | 270 |
| 271 FakeMalwareDetails* get_details() { | 271 FakeMalwareDetails* get_details() { |
| 272 return details_; | 272 return details_; |
| 273 } | 273 } |
| 274 | 274 |
| 275 private: | 275 private: |
| (...skipping 20 matching lines...) Expand all Loading... |
| 296 base::MessageLoopForUI::current()->Quit(); | 296 base::MessageLoopForUI::current()->Quit(); |
| 297 wait_for_delete_ = false; | 297 wait_for_delete_ = false; |
| 298 } | 298 } |
| 299 | 299 |
| 300 void WaitForDelete() { | 300 void WaitForDelete() { |
| 301 wait_for_delete_ = true; | 301 wait_for_delete_ = true; |
| 302 content::RunMessageLoop(); | 302 content::RunMessageLoop(); |
| 303 } | 303 } |
| 304 | 304 |
| 305 // InterstitialPageDelegate methods: | 305 // InterstitialPageDelegate methods: |
| 306 virtual void CommandReceived(const std::string& command) OVERRIDE { | 306 virtual void CommandReceived(const std::string& command) override { |
| 307 SafeBrowsingBlockingPage::CommandReceived(command); | 307 SafeBrowsingBlockingPage::CommandReceived(command); |
| 308 } | 308 } |
| 309 virtual void OnProceed() OVERRIDE { | 309 virtual void OnProceed() override { |
| 310 SafeBrowsingBlockingPage::OnProceed(); | 310 SafeBrowsingBlockingPage::OnProceed(); |
| 311 } | 311 } |
| 312 virtual void OnDontProceed() OVERRIDE { | 312 virtual void OnDontProceed() override { |
| 313 SafeBrowsingBlockingPage::OnDontProceed(); | 313 SafeBrowsingBlockingPage::OnDontProceed(); |
| 314 } | 314 } |
| 315 | 315 |
| 316 private: | 316 private: |
| 317 bool wait_for_delete_; | 317 bool wait_for_delete_; |
| 318 }; | 318 }; |
| 319 | 319 |
| 320 class TestSafeBrowsingBlockingPageFactory | 320 class TestSafeBrowsingBlockingPageFactory |
| 321 : public SafeBrowsingBlockingPageFactory { | 321 : public SafeBrowsingBlockingPageFactory { |
| 322 public: | 322 public: |
| 323 TestSafeBrowsingBlockingPageFactory() { } | 323 TestSafeBrowsingBlockingPageFactory() { } |
| 324 virtual ~TestSafeBrowsingBlockingPageFactory() { } | 324 virtual ~TestSafeBrowsingBlockingPageFactory() { } |
| 325 | 325 |
| 326 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( | 326 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( |
| 327 SafeBrowsingUIManager* delegate, | 327 SafeBrowsingUIManager* delegate, |
| 328 WebContents* web_contents, | 328 WebContents* web_contents, |
| 329 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) | 329 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) |
| 330 OVERRIDE { | 330 override { |
| 331 return new TestSafeBrowsingBlockingPage(delegate, web_contents, | 331 return new TestSafeBrowsingBlockingPage(delegate, web_contents, |
| 332 unsafe_resources); | 332 unsafe_resources); |
| 333 } | 333 } |
| 334 }; | 334 }; |
| 335 | 335 |
| 336 } // namespace | 336 } // namespace |
| 337 | 337 |
| 338 // Tests the safe browsing blocking page in a browser. | 338 // Tests the safe browsing blocking page in a browser. |
| 339 class SafeBrowsingBlockingPageBrowserTest | 339 class SafeBrowsingBlockingPageBrowserTest |
| 340 : public InProcessBrowserTest, | 340 : public InProcessBrowserTest, |
| 341 public testing::WithParamInterface<int> { | 341 public testing::WithParamInterface<int> { |
| 342 public: | 342 public: |
| 343 enum Visibility { | 343 enum Visibility { |
| 344 VISIBILITY_ERROR = -1, | 344 VISIBILITY_ERROR = -1, |
| 345 HIDDEN = 0, | 345 HIDDEN = 0, |
| 346 VISIBLE = 1 | 346 VISIBLE = 1 |
| 347 }; | 347 }; |
| 348 | 348 |
| 349 SafeBrowsingBlockingPageBrowserTest() { | 349 SafeBrowsingBlockingPageBrowserTest() { |
| 350 } | 350 } |
| 351 | 351 |
| 352 virtual void SetUp() OVERRIDE { | 352 virtual void SetUp() override { |
| 353 SafeBrowsingService::RegisterFactory(&factory_); | 353 SafeBrowsingService::RegisterFactory(&factory_); |
| 354 SafeBrowsingBlockingPage::RegisterFactory(&blocking_page_factory_); | 354 SafeBrowsingBlockingPage::RegisterFactory(&blocking_page_factory_); |
| 355 MalwareDetails::RegisterFactory(&details_factory_); | 355 MalwareDetails::RegisterFactory(&details_factory_); |
| 356 InProcessBrowserTest::SetUp(); | 356 InProcessBrowserTest::SetUp(); |
| 357 } | 357 } |
| 358 | 358 |
| 359 virtual void TearDown() OVERRIDE { | 359 virtual void TearDown() override { |
| 360 InProcessBrowserTest::TearDown(); | 360 InProcessBrowserTest::TearDown(); |
| 361 SafeBrowsingBlockingPage::RegisterFactory(NULL); | 361 SafeBrowsingBlockingPage::RegisterFactory(NULL); |
| 362 SafeBrowsingService::RegisterFactory(NULL); | 362 SafeBrowsingService::RegisterFactory(NULL); |
| 363 MalwareDetails::RegisterFactory(NULL); | 363 MalwareDetails::RegisterFactory(NULL); |
| 364 } | 364 } |
| 365 | 365 |
| 366 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 366 virtual void SetUpInProcessBrowserTestFixture() override { |
| 367 ASSERT_TRUE(test_server()->Start()); | 367 ASSERT_TRUE(test_server()->Start()); |
| 368 } | 368 } |
| 369 | 369 |
| 370 void SetURLThreatType(const GURL& url, SBThreatType threat_type) { | 370 void SetURLThreatType(const GURL& url, SBThreatType threat_type) { |
| 371 FakeSafeBrowsingService* service = | 371 FakeSafeBrowsingService* service = |
| 372 static_cast<FakeSafeBrowsingService*>( | 372 static_cast<FakeSafeBrowsingService*>( |
| 373 g_browser_process->safe_browsing_service()); | 373 g_browser_process->safe_browsing_service()); |
| 374 | 374 |
| 375 ASSERT_TRUE(service); | 375 ASSERT_TRUE(service); |
| 376 service->fake_database_manager()->SetURLThreatType(url, threat_type); | 376 service->fake_database_manager()->SetURLThreatType(url, threat_type); |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 842 IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageBrowserTest, PhishingLearnMore) { | 842 IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageBrowserTest, PhishingLearnMore) { |
| 843 SetupWarningAndNavigate(SB_THREAT_TYPE_URL_PHISHING); | 843 SetupWarningAndNavigate(SB_THREAT_TYPE_URL_PHISHING); |
| 844 EXPECT_TRUE(ClickAndWaitForDetach("help-link")); | 844 EXPECT_TRUE(ClickAndWaitForDetach("help-link")); |
| 845 AssertNoInterstitial(false); // Assert the interstitial is gone | 845 AssertNoInterstitial(false); // Assert the interstitial is gone |
| 846 | 846 |
| 847 // We are in the help page. | 847 // We are in the help page. |
| 848 EXPECT_EQ( | 848 EXPECT_EQ( |
| 849 "/transparencyreport/safebrowsing/", | 849 "/transparencyreport/safebrowsing/", |
| 850 browser()->tab_strip_model()->GetActiveWebContents()->GetURL().path()); | 850 browser()->tab_strip_model()->GetActiveWebContents()->GetURL().path()); |
| 851 } | 851 } |
| OLD | NEW |