15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include <list> 6bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/run_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/malware_details.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/safe_browsing/safe_browsing_service.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/safe_browsing/ui_manager.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/web_contents_tester.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::InterstitialPage; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::NavigationEntry; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContentsTester; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kGoogleURL = "http://www.google.com/"; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kGoodURL = "http://www.goodguys.com/"; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kBadURL = "http://www.badguys.com/"; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kBadURL2 = "http://www.badguys2.com/"; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static const char* kBadURL3 = "http://www.badguys3.com/"; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A SafeBrowingBlockingPage class that does not create windows. 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class TestSafeBrowsingBlockingPage : public SafeBrowsingBlockingPage { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TestSafeBrowsingBlockingPage(SafeBrowsingUIManager* manager, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UnsafeResourceList& unsafe_resources) 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : SafeBrowsingBlockingPage(manager, web_contents, unsafe_resources) { 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Don't delay details at all for the unittest. 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) malware_details_proceed_delay_ms_ = 0; 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DontCreateViewForTesting(); 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestSafeBrowsingUIManager: public SafeBrowsingUIManager { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TestSafeBrowsingUIManager(SafeBrowsingService* service) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SafeBrowsingUIManager(service) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SendSerializedMalwareDetails( 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& serialized) OVERRIDE { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) details_.push_back(serialized); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::list<std::string>* GetDetails() { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &details_; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestSafeBrowsingUIManager() {} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::list<std::string> details_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestSafeBrowsingBlockingPageFactory 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public SafeBrowsingBlockingPageFactory { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestSafeBrowsingBlockingPageFactory() { } 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestSafeBrowsingBlockingPageFactory() { } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SafeBrowsingUIManager* manager, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OVERRIDE { 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return new TestSafeBrowsingBlockingPage(manager, web_contents, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsafe_resources); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The decision the user made. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum UserResponse { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PENDING, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OK, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CANCEL 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SafeBrowsingBlockingPageTest() { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetUserResponse(); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The safe browsing UI manager does not need a service for this test. 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_manager_ = new TestSafeBrowsingUIManager(NULL); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUp() OVERRIDE { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::SetUp(); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage::RegisterFactory(&factory_); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetUserResponse(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void TearDown() OVERRIDE { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Release the UI manager before the BrowserThreads are destroyed. 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_manager_ = NULL; 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SafeBrowsingBlockingPage::RegisterFactory(NULL); 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Clean up singleton reference (crbug.com/110594). 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MalwareDetails::RegisterFactory(NULL); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::TearDown(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnBlockingPageComplete(bool proceed) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (proceed) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_response_ = OK; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_response_ = CANCEL; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Navigate(const char* url, int page_id) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())->TestDidNavigate( 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetMainFrame(), page_id, GURL(url), 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoBack(bool is_cross_site) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntry* entry = 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetController().GetEntryAtOffset(-1); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(entry); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetController().GoBack(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pending RVH should commit for cross-site navigations. 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) content::RenderFrameHost* rfh = is_cross_site ? 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) WebContentsTester::For(web_contents())->GetPendingMainFrame() : 1396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetMainFrame(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())->TestDidNavigate( 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) rfh, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->GetPageID(), 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(entry->GetURL()), 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowInterstitial(bool is_subresource, const char* url) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SafeBrowsingUIManager::UnsafeResource resource; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitResource(&resource, is_subresource, GURL(url)); 150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // showing. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* GetSafeBrowsingBlockingPage() { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPage* interstitial = 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPage::GetInterstitialPage(web_contents()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!interstitial) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<SafeBrowsingBlockingPage*>( 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial->GetDelegateForTesting()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserResponse user_response() const { return user_response_; } 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetUserResponse() { user_response_ = PENDING; } 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ProceedThroughInterstitial( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->Proceed(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed() posts a task to update the SafeBrowsingService::Client. 171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void DontProceedThroughInterstitial( 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->DontProceed(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DontProceed() posts a task to update the SafeBrowsingService::Client. 178868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DontProceedThroughSubresourceInterstitial( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CommandReceived(kTakeMeBackCommand) does a back navigation for 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // subresource interstitials. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(false); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DontProceed() posts a task to update the SafeBrowsingService::Client. 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestSafeBrowsingUIManager> ui_manager_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InitResource(SafeBrowsingUIManager::UnsafeResource* resource, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_subresource, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->callback = 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this)); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->url = url; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->is_subresource = is_subresource; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->render_process_host_id = 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderProcessHost()->GetID(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->render_view_id = 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderViewHost()->GetRoutingID(); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserResponse user_response_; 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) TestSafeBrowsingBlockingPageFactory factory_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page and not proceeding. 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware details. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 2276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 2296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 232868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 2356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DontProceedThroughInterstitial(sb_interstitial); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 2386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CANCEL, user_response()); 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, the pending entry should be gone. 2426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(controller().GetPendingEntry()); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 2456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 2466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page and then proceeding. 2506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, MalwarePageProceed) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 2536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 2626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 2646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed". 2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial is shown until the navigation commits. 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(InterstitialPage::GetInterstitialPage(web_contents())); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Commit the navigation. 2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kBadURL, 1); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone now. 2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_FALSE(InterstitialPage::GetInterstitialPage(web_contents())); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 2786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 2796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains malware subresources 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and not proceeding. 2846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoogleURL, 1); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 2); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DontProceedThroughSubresourceInterstitial(sb_interstitial); 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CANCEL, user_response()); 3076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 3116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, controller().GetEntryCount()); 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 3156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 3166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains malware subresources 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and proceeding. 3216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 3246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 3296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 1); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 3326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 3356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed". 3396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 3406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(OK, user_response()); 3416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did proceed, we should be back to showing the page. 3446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, controller().GetEntryCount()); 3456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 3486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 3496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains multiple malware 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources and not proceeding. This just tests that the extra malware 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources (which trigger queued interstitial pages) do not break anything. 3556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageWithMultipleMalwareResourceDontProceed) { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 3596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 3646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoogleURL, 1); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 3676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 2); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 3706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 3746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL2); 3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL3); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 3826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DontProceedThroughSubresourceInterstitial(sb_interstitial); 3836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CANCEL, user_response()); 3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 3886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, controller().GetEntryCount()); 3896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 3926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains multiple malware 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources and proceeding through the first interstitial, but not the next. 3986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageWithMultipleMalwareResourceProceedThenDontProceed) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 4026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 4076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoogleURL, 1); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 4106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 2); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 4136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 4176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL2); 4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL3); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 420f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 4216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 1st interstitial. 4256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(OK, user_response()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ResetUserResponse(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should land to a 2nd interstitial (aggregating all the malware resources 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded while the 1st interstitial was showing). 4366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) sb_interstitial = GetSafeBrowsingBlockingPage(); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't proceed through the 2nd interstitial. 4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DontProceedThroughSubresourceInterstitial(sb_interstitial); 4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CANCEL, user_response()); 4426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 4466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, controller().GetEntryCount()); 4476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->GetURL().spec()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent -- we don't create a report the 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // second time. 4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0u, ui_manager_->GetDetails()->size()); 4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains multiple malware 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources and proceeding through the multiple interstitials. 4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, 458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageWithMultipleMalwareResourceProceed) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 1); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL2); 4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(true, kBadURL3); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 1st interstitial. 4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(OK, user_response()); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ResetUserResponse(); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should land to a 2nd interstitial (aggregating all the malware resources 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded while the 1st interstitial was showing). 4926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) sb_interstitial = GetSafeBrowsingBlockingPage(); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 2nd interstitial. 4966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 4976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(OK, user_response()); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did proceed, we should be back to the initial page. 5006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(1, controller().GetEntryCount()); 5016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent -- we don't create a report the 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // second time. 5056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0u, ui_manager_->GetDetails()->size()); 5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page then navigating back and forth to make sure the 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// controller entries are OK. http://crbug.com/17627 5116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 5146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 515f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 516f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 5196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kGoodURL, 1); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now navigate to a bad page triggerring an interstitial. 5226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 5246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 525f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 5266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed, then navigate back. 5306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 5316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kBadURL, 2); // Commit the navigation. 5326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GoBack(true); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We are back on the good page. 5356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) sb_interstitial = GetSafeBrowsingBlockingPage(); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(sb_interstitial); 5376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(2, controller().GetEntryCount()); 5386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->GetURL().spec()); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate forward to the malware URL. 5416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetController().GoForward(); 5426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 5436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) sb_interstitial = GetSafeBrowsingBlockingPage(); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let's proceed and make sure everything is OK (bug 17627). 5476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ProceedThroughInterstitial(sb_interstitial); 5486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Navigate(kBadURL, 2); // Commit the navigation. 5496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) sb_interstitial = GetSafeBrowsingBlockingPage(); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(sb_interstitial); 5516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_EQ(2, controller().GetEntryCount()); 5526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kBadURL, controller().GetActiveEntry()->GetURL().spec()); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two reports should have been sent. 5556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(2u, ui_manager_->GetDetails()->size()); 5566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that calling "don't proceed" after "proceed" has been called doesn't 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cause problems. http://crbug.com/30079 5616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) { 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 5646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 565f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 566f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 5696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 5736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 5756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 578868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed" then "don't proceed" (before the 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitial is shown). 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->Proceed(); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->DontProceed(); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed() and DontProceed() post a task to update the 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SafeBrowsingService::Client. 586868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 5896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(OK, user_response()); 5906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only one report should have been sent. 5936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(1u, ui_manager_->GetDetails()->size()); 5946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page with reports disabled. 5986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) { 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable malware reports. 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 6016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 603f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, false); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 6066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 6106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 611f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 6126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 6186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DontProceedThroughInterstitial(sb_interstitial); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 6216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(CANCEL, user_response()); 6226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, the pending entry should be gone. 6256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(controller().GetPendingEntry()); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent. 6286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(0u, ui_manager_->GetDetails()->size()); 6296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ui_manager_->GetDetails()->clear(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 632f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Test that toggling the checkbox has the anticipated effects. 6336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsToggling) { 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable malware reports. 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 6366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_contents()->GetBrowserContext()); 637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, false); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 6416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) controller().LoadURL(GURL(kBadURL), content::Referrer(), 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_TYPED, std::string()); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 6456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ShowInterstitial(false, kBadURL); 646f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 6476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetSafeBrowsingBlockingPage(); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 650868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 653f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user check the report agreement checkbox. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->SetReportingPreference(true); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile->GetPrefs()->GetBoolean( 659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user uncheck the report agreement checkbox. 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->SetReportingPreference(false); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 665f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 666f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 667