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. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestSafeBrowsingBlockingPageV1 : public SafeBrowsingBlockingPageV1 { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestSafeBrowsingBlockingPageV1(SafeBrowsingUIManager* manager, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UnsafeResourceList& unsafe_resources) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SafeBrowsingBlockingPageV1(manager, web_contents, unsafe_resources) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't delay details at all for the unittest. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malware_details_proceed_delay_ms_ = 0; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't create a view. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page()->DontCreateViewForTesting(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A SafeBrowingBlockingPage class that does not create windows. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestSafeBrowsingBlockingPageV2 : public SafeBrowsingBlockingPageV2 { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestSafeBrowsingBlockingPageV2(SafeBrowsingUIManager* manager, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const UnsafeResourceList& unsafe_resources) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SafeBrowsingBlockingPageV2(manager, web_contents, unsafe_resources) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't delay details at all for the unittest. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) malware_details_proceed_delay_ms_ = 0; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't create a view. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial_page()->DontCreateViewForTesting(); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// A SafeBrowingBlockingPage class that does not create windows. 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class TestSafeBrowsingBlockingPageV3 : public SafeBrowsingBlockingPageV3 { 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestSafeBrowsingBlockingPageV3(SafeBrowsingUIManager* manager, 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) WebContents* web_contents, 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const UnsafeResourceList& unsafe_resources) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : SafeBrowsingBlockingPageV3(manager, web_contents, unsafe_resources) { 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Don't delay details at all for the unittest. 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) malware_details_proceed_delay_ms_ = 0; 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Don't create a view. 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) interstitial_page()->DontCreateViewForTesting(); 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestSafeBrowsingUIManager: public SafeBrowsingUIManager { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TestSafeBrowsingUIManager(SafeBrowsingService* service) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : SafeBrowsingUIManager(service) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SendSerializedMalwareDetails( 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& serialized) OVERRIDE { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) details_.push_back(serialized); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::list<std::string>* GetDetails() { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return &details_; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestSafeBrowsingUIManager() {} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::list<std::string> details_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)template <class SBInterstitialPage> 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestSafeBrowsingBlockingPageFactory 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public SafeBrowsingBlockingPageFactory { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestSafeBrowsingBlockingPageFactory() { } 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestSafeBrowsingBlockingPageFactory() { } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SafeBrowsingUIManager* manager, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OVERRIDE { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(mattm): remove this when SafeBrowsingBlockingPageV2 supports 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // multi-threat warnings. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (unsafe_resources.size() == 1 && 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (unsafe_resources[0].threat_type == SB_THREAT_TYPE_URL_MALWARE || 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsafe_resources[0].threat_type == SB_THREAT_TYPE_URL_PHISHING)) { 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return new SBInterstitialPage(manager, web_contents, unsafe_resources); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new TestSafeBrowsingBlockingPageV1(manager, web_contents, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsafe_resources); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)template <class SBInterstitialPage> 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SafeBrowsingBlockingPageTest : public ChromeRenderViewHostTestHarness { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The decision the user made. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum UserResponse { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PENDING, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OK, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CANCEL 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SafeBrowsingBlockingPageTest() { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetUserResponse(); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The safe browsing UI manager does not need a service for this test. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_manager_ = new TestSafeBrowsingUIManager(NULL); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUp() OVERRIDE { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::SetUp(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage::RegisterFactory(&factory_); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetUserResponse(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void TearDown() OVERRIDE { 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Release the UI manager before the BrowserThreads are destroyed. 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_manager_ = NULL; 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SafeBrowsingBlockingPage::RegisterFactory(NULL); 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Clean up singleton reference (crbug.com/110594). 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MalwareDetails::RegisterFactory(NULL); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::TearDown(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnBlockingPageComplete(bool proceed) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (proceed) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_response_ = OK; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_response_ = CANCEL; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Navigate(const char* url, int page_id) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())->TestDidNavigate( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderViewHost(), page_id, GURL(url), 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GoBack(bool is_cross_site) { 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntry* entry = 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetController().GetEntryAtOffset(-1); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(entry); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetController().GoBack(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pending RVH should commit for cross-site navigations. 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* rvh = is_cross_site ? 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())->GetPendingRenderViewHost() : 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderViewHost(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())->TestDidNavigate( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvh, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->GetPageID(), 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(entry->GetURL()), 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShowInterstitial(bool is_subresource, const char* url) { 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SafeBrowsingUIManager::UnsafeResource resource; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitResource(&resource, is_subresource, GURL(url)); 191868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SafeBrowsingBlockingPage::ShowBlockingPage(ui_manager_.get(), resource); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the SafeBrowsingBlockingPage currently showing or NULL if none is 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // showing. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* GetSafeBrowsingBlockingPage() { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPage* interstitial = 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPage::GetInterstitialPage(web_contents()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!interstitial) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<SafeBrowsingBlockingPage*>( 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interstitial->GetDelegateForTesting()); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserResponse user_response() const { return user_response_; } 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResetUserResponse() { user_response_ = PENDING; } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ProceedThroughInterstitial( 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->Proceed(); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed() posts a task to update the SafeBrowsingService::Client. 212868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void DontProceedThroughInterstitial( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->DontProceed(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DontProceed() posts a task to update the SafeBrowsingService::Client. 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DontProceedThroughSubresourceInterstitial( 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial) { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CommandReceived(kTakeMeBackCommand) does a back navigation for 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // subresource interstitials. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GoBack(false); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // DontProceed() posts a task to update the SafeBrowsingService::Client. 228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<TestSafeBrowsingUIManager> ui_manager_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InitResource(SafeBrowsingUIManager::UnsafeResource* resource, 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_subresource, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->callback = 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&SafeBrowsingBlockingPageTest::OnBlockingPageComplete, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->url = url; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->is_subresource = is_subresource; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->threat_type = SB_THREAT_TYPE_URL_MALWARE; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->render_process_host_id = 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderProcessHost()->GetID(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource->render_view_id = 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents()->GetRenderViewHost()->GetRoutingID(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UserResponse user_response_; 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestSafeBrowsingBlockingPageFactory<SBInterstitialPage> factory_; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)typedef ::testing::Types<TestSafeBrowsingBlockingPageV2, 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) TestSafeBrowsingBlockingPageV3> InterstitialTestTypes; 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST_CASE(SafeBrowsingBlockingPageTest, InterstitialTestTypes); 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page and not proceeding. 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware details. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 261f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 271f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 272f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 273f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 276868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 279f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->DontProceedThroughInterstitial(sb_interstitial); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 282f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->CANCEL, this->user_response()); 283f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, the pending entry should be gone. 286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->controller().GetPendingEntry()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page and then proceeding. 294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwarePageProceed) { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed". 312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial is shown until the navigation commits. 315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(InterstitialPage::GetInterstitialPage(this->web_contents())); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Commit the navigation. 317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kBadURL, 1); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone now. 319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_FALSE(InterstitialPage::GetInterstitialPage(this->web_contents())); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains malware subresources 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and not proceeding. 328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoogleURL, 1); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 2); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->DontProceedThroughSubresourceInterstitial(sb_interstitial); 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->CANCEL, this->user_response()); 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, this->controller().GetEntryCount()); 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoogleURL, this->controller().GetActiveEntry()->GetURL().spec()); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains malware subresources 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and proceeding. 365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 1); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed". 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->OK, this->user_response()); 385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did proceed, we should be back to showing the page. 388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, this->controller().GetEntryCount()); 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoodURL, this->controller().GetActiveEntry()->GetURL().spec()); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->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 not proceeding. This just tests that the extra malware 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources (which trigger queued interstitial pages) do not break anything. 399f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageWithMultipleMalwareResourceDontProceed) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 405f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 408f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoogleURL, 1); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 411f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 2); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 414f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 418f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL2); 419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL3); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 422f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->DontProceedThroughSubresourceInterstitial(sb_interstitial); 427f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->CANCEL, this->user_response()); 428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, this->controller().GetEntryCount()); 433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoogleURL, this->controller().GetActiveEntry()->GetURL().spec()); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 436f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 437f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains multiple malware 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources and proceeding through the first interstitial, but not the next. 442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageWithMultipleMalwareResourceProceedThenDontProceed) { 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoogleURL, 1); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 2); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 461f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL2); 462f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL3); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 1st interstitial. 469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->OK, this->user_response()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 473f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 474f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ResetUserResponse(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should land to a 2nd interstitial (aggregating all the malware resources 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded while the 1st interstitial was showing). 480f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial = this->GetSafeBrowsingBlockingPage(); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't proceed through the 2nd interstitial. 484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->DontProceedThroughSubresourceInterstitial(sb_interstitial); 485f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->CANCEL, this->user_response()); 486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, we should be back to the first page, the 2nd one should 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have been removed from the navigation controller. 490f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, this->controller().GetEntryCount()); 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoogleURL, this->controller().GetActiveEntry()->GetURL().spec()); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent -- we don't create a report the 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // second time. 495f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0u, this->ui_manager_->GetDetails()->size()); 496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a page that contains multiple malware 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subresources and proceeding through the multiple interstitials. 501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, 502f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PageWithMultipleMalwareResourceProceed) { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 505f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 506f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 507f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere else. 510f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 1); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate that page loading a bad-resource triggering an interstitial. 513f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // More bad resources loading causing more interstitials. The new 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitials should be queued. 517f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL2); 518f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(true, kBadURL3); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 520f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 521f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 1st interstitial. 525f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 526f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->OK, this->user_response()); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A report should have been sent. 529f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 530f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ResetUserResponse(); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should land to a 2nd interstitial (aggregating all the malware resources 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loaded while the 1st interstitial was showing). 536f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial = this->GetSafeBrowsingBlockingPage(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed through the 2nd interstitial. 540f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 541f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->OK, this->user_response()); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did proceed, we should be back to the initial page. 544f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(1, this->controller().GetEntryCount()); 545f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoodURL, this->controller().GetActiveEntry()->GetURL().spec()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent -- we don't create a report the 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // second time. 549f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0u, this->ui_manager_->GetDetails()->size()); 550f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page then navigating back and forth to make sure the 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// controller entries are OK. http://crbug.com/17627 555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 558f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 559f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 560f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate somewhere. 563f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kGoodURL, 1); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now navigate to a bad page triggerring an interstitial. 566f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 568f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 570f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed, then navigate back. 574f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kBadURL, 2); // Commit the navigation. 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GoBack(true); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We are back on the good page. 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial = this->GetSafeBrowsingBlockingPage(); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(sb_interstitial); 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2, this->controller().GetEntryCount()); 582f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kGoodURL, this->controller().GetActiveEntry()->GetURL().spec()); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate forward to the malware URL. 585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetController().GoForward(); 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial = this->GetSafeBrowsingBlockingPage(); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let's proceed and make sure everything is OK (bug 17627). 591f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 592f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->Navigate(kBadURL, 2); // Commit the navigation. 593f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial = this->GetSafeBrowsingBlockingPage(); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(sb_interstitial); 595f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_EQ(2, this->controller().GetEntryCount()); 596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(kBadURL, this->controller().GetActiveEntry()->GetURL().spec()); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Two reports should have been sent. 599f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(2u, this->ui_manager_->GetDetails()->size()); 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that calling "don't proceed" after "proceed" has been called doesn't 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// cause problems. http://crbug.com/30079 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) { 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable malware reports. 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 608f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 609f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 610f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, true); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 613f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 617f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 618f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 619f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 622868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "proceed" then "don't proceed" (before the 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interstitial is shown). 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->Proceed(); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->interstitial_page_->DontProceed(); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Proceed() and DontProceed() post a task to update the 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SafeBrowsingService::Client. 630868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 633f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->OK, this->user_response()); 634f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only one report should have been sent. 637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(1u, this->ui_manager_->GetDetails()->size()); 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests showing a blocking page for a malware page with reports disabled. 642f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable malware reports. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 645f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 646f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 647f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, false); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 650f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 654f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 655f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user clicking "don't proceed". 662f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->DontProceedThroughInterstitial(sb_interstitial); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The interstitial should be gone. 665f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(this->CANCEL, this->user_response()); 666f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->GetSafeBrowsingBlockingPage()); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We did not proceed, the pending entry should be gone. 669f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(this->controller().GetPendingEntry()); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No report should have been sent. 672f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(0u, this->ui_manager_->GetDetails()->size()); 673f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ui_manager_->GetDetails()->clear(); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 676f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Test that toggling the checkbox has the anticipated effects. 677f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwareReportsToggling) { 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable malware reports. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 680f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 681f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean( 682f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled, false); 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start a load. 685f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 689f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 690f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 691f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 694868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 697f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user check the report agreement checkbox. 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->SetReportingPreference(true); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile->GetPrefs()->GetBoolean( 703f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate the user uncheck the report agreement checkbox. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sb_interstitial->SetReportingPreference(false); 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 709f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 710f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 711f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 712f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Test that the transition from old to new preference works. 713f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwareReportsTransitionEnabled) { 714f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The old pref is enabled. 715f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 716f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 717f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, true); 718f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 719f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Start a load. 720f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 721f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 722f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 723f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 724f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 725f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 726f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 727f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 728f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 729f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 730f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 731f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // At this point, nothing should have changed yet. 732f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 733f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 734f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 735f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 736f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 737f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Since the user has proceeded without changing the checkbox, the new pref 738f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // has been updated. 739f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(profile->GetPrefs()->GetBoolean( 740f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 741f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 742f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 743f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Test that the transition from old to new preference still respects the 744f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// user's checkbox preferences. 745f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TYPED_TEST(SafeBrowsingBlockingPageTest, MalwareReportsTransitionDisabled) { 746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The old pref is enabled. 747f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 748f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->web_contents()->GetBrowserContext()); 749f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingReportingEnabled, true); 750f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 751f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Start a load. 752f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->controller().LoadURL(GURL(kBadURL), content::Referrer(), 753f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) content::PAGE_TRANSITION_TYPED, std::string()); 754f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 755f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the load causing a safe browsing interstitial to be shown. 756f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ShowInterstitial(false, kBadURL); 757f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SafeBrowsingBlockingPage* sb_interstitial = 758f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->GetSafeBrowsingBlockingPage(); 759f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(sb_interstitial); 760f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 761f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 762f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 763f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // At this point, nothing should have changed yet. 764f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 765f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 766f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 767f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Simulate the user uncheck the report agreement checkbox. 768f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) sb_interstitial->SetReportingPreference(false); 769f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 770f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this->ProceedThroughInterstitial(sb_interstitial); 771f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 772f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // The new pref is turned off. 773f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 774f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingExtendedReportingEnabled)); 775f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs::kSafeBrowsingReportingEnabled)); 777f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(profile->GetPrefs()->GetBoolean( 778f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) prefs::kSafeBrowsingDownloadFeedbackEnabled)); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 780