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

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

Issue 4822002: Send malware reports when a user opts-in from the safe browsing interstitial ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // This test creates a fake safebrowsing service, where we can inject 5 // This test creates a fake safebrowsing service, where we can inject
6 // malware and phishing urls. It then uses a real browser to go to 6 // malware and phishing urls. It then uses a real browser to go to
7 // these urls, and sends "goback" or "proceed" commands and verifies 7 // these urls, and sends "goback" or "proceed" commands and verifies
8 // they work. 8 // they work.
9 9
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/browser_thread.h" 11 #include "chrome/browser/browser_thread.h"
12 #include "chrome/browser/prefs/pref_service.h"
13 #include "chrome/browser/profile.h"
12 #include "chrome/browser/renderer_host/render_process_host.h" 14 #include "chrome/browser/renderer_host/render_process_host.h"
13 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" 15 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
16 #include "chrome/browser/safe_browsing/malware_details.h"
14 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 17 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
15 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 18 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
16 #include "chrome/browser/tab_contents/tab_contents.h" 19 #include "chrome/browser/tab_contents/tab_contents.h"
17 #include "chrome/browser/tab_contents/tab_contents_view.h" 20 #include "chrome/browser/tab_contents/tab_contents_view.h"
18 #include "chrome/browser/ui/browser.h" 21 #include "chrome/browser/ui/browser.h"
22 #include "chrome/common/pref_names.h"
19 #include "chrome/common/url_constants.h" 23 #include "chrome/common/url_constants.h"
20 #include "chrome/test/in_process_browser_test.h" 24 #include "chrome/test/in_process_browser_test.h"
21 #include "chrome/test/ui_test_utils.h" 25 #include "chrome/test/ui_test_utils.h"
22 26
23 // A SafeBrowingService class that allows us to inject the malicious URLs. 27 // A SafeBrowingService class that allows us to inject the malicious URLs.
24 class FakeSafeBrowsingService : public SafeBrowsingService { 28 class FakeSafeBrowsingService : public SafeBrowsingService {
25 public: 29 public:
26 FakeSafeBrowsingService() {} 30 FakeSafeBrowsingService() {}
27 31
28 virtual ~FakeSafeBrowsingService() {} 32 virtual ~FakeSafeBrowsingService() {}
(...skipping 16 matching lines...) Expand all
45 } 49 }
46 50
47 void OnCheckDone(std::string url, Client* client) { 51 void OnCheckDone(std::string url, Client* client) {
48 client->OnUrlCheckResult(GURL(url), badurls[url]); 52 client->OnUrlCheckResult(GURL(url), badurls[url]);
49 } 53 }
50 54
51 void AddURLResult(const GURL& url, UrlCheckResult checkresult) { 55 void AddURLResult(const GURL& url, UrlCheckResult checkresult) {
52 badurls[url.spec()] = checkresult; 56 badurls[url.spec()] = checkresult;
53 } 57 }
54 58
59 virtual void ReportMalwareDetails(scoped_refptr<MalwareDetails> details) {
60 details_.push_back(details);
61 LOG(INFO) << "ReportMalwareDetails";
lzheng 2010/12/03 01:16:57 Nit: You might want to get rid of these LOG(INFO)s
62 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
63 NewRunnableMethod(this,
64 &FakeSafeBrowsingService::OnMalwareDetailsDone));
65 }
66
67 // Notify the UI thread so it can access details_.
68 void OnMalwareDetailsDone() {
69 LOG(INFO) << "OnMalwareDetailsDone";
70 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
71 MessageLoopForUI::current()->Quit();
72 }
73
74 std::list<scoped_refptr<MalwareDetails> >* GetDetails() {
75 return &details_;
76 }
77
78 std::list<scoped_refptr<MalwareDetails> > details_;
79
80
55 private: 81 private:
56 base::hash_map<std::string, UrlCheckResult> badurls; 82 base::hash_map<std::string, UrlCheckResult> badurls;
57 }; 83 };
58 84
59 // Factory that creates FakeSafeBrowsingService instances. 85 // Factory that creates FakeSafeBrowsingService instances.
60 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory { 86 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory {
61 public: 87 public:
62 TestSafeBrowsingServiceFactory() { } 88 TestSafeBrowsingServiceFactory() { }
63 virtual ~TestSafeBrowsingServiceFactory() { } 89 virtual ~TestSafeBrowsingServiceFactory() { }
64 90
(...skipping 30 matching lines...) Expand all
95 virtual void OnBlockingPageComplete(bool proceed) { 121 virtual void OnBlockingPageComplete(bool proceed) {
96 } 122 }
97 123
98 void AddURLResult(const GURL& url, 124 void AddURLResult(const GURL& url,
99 SafeBrowsingService::UrlCheckResult checkresult) { 125 SafeBrowsingService::UrlCheckResult checkresult) {
100 FakeSafeBrowsingService* service = 126 FakeSafeBrowsingService* service =
101 static_cast<FakeSafeBrowsingService*>( 127 static_cast<FakeSafeBrowsingService*>(
102 g_browser_process->resource_dispatcher_host()-> 128 g_browser_process->resource_dispatcher_host()->
103 safe_browsing_service()); 129 safe_browsing_service());
104 130
105 ASSERT_TRUE(service != NULL); 131 ASSERT_TRUE(service);
106 service->AddURLResult(url, checkresult); 132 service->AddURLResult(url, checkresult);
107 } 133 }
108 134
109 void SendCommand(const std::string& command) { 135 void SendCommand(const std::string& command) {
110 TabContents* contents = browser()->GetSelectedTabContents(); 136 TabContents* contents = browser()->GetSelectedTabContents();
111 SafeBrowsingBlockingPage* interstitial_page = 137 SafeBrowsingBlockingPage* interstitial_page =
112 static_cast<SafeBrowsingBlockingPage*>( 138 static_cast<SafeBrowsingBlockingPage*>(
113 contents->interstitial_page()); 139 contents->interstitial_page());
114 ASSERT_TRUE(interstitial_page); 140 ASSERT_TRUE(interstitial_page);
115 interstitial_page->CommandReceived(command); 141 interstitial_page->CommandReceived(command);
(...skipping 18 matching lines...) Expand all
134 InterstitialPage* interstitial_page = contents->interstitial_page(); 160 InterstitialPage* interstitial_page = contents->interstitial_page();
135 ASSERT_FALSE(interstitial_page); 161 ASSERT_FALSE(interstitial_page);
136 } 162 }
137 163
138 void WaitForNavigation() { 164 void WaitForNavigation() {
139 NavigationController* controller = 165 NavigationController* controller =
140 &browser()->GetSelectedTabContents()->controller(); 166 &browser()->GetSelectedTabContents()->controller();
141 ui_test_utils::WaitForNavigation(controller); 167 ui_test_utils::WaitForNavigation(controller);
142 } 168 }
143 169
170 void AssertReportSent() {
171 // When a report is scheduled in the IO thread we should get notified.
172 LOG(INFO) << "Waiting for malware reports";
173 ui_test_utils::RunMessageLoop();
174
175 FakeSafeBrowsingService* service =
176 static_cast<FakeSafeBrowsingService*>(
177 g_browser_process->resource_dispatcher_host()->
178 safe_browsing_service());
179 ASSERT_EQ(1u, service->GetDetails()->size());
180 }
181
144 private: 182 private:
145 TestSafeBrowsingServiceFactory factory; 183 TestSafeBrowsingServiceFactory factory;
146 184
147 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageTest); 185 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPageTest);
148 }; 186 };
149 187
150 namespace { 188 namespace {
151 189
152 const char kEmptyPage[] = "files/empty.html"; 190 const char kEmptyPage[] = "files/empty.html";
153 const char kMalwarePage[] = "files/safe_browsing/malware.html"; 191 const char kMalwarePage[] = "files/safe_browsing/malware.html";
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 AddURLResult(iframe_url, SafeBrowsingService::URL_MALWARE); 289 AddURLResult(iframe_url, SafeBrowsingService::URL_MALWARE);
252 290
253 ui_test_utils::NavigateToURL(browser(), url); 291 ui_test_utils::NavigateToURL(browser(), url);
254 292
255 SendCommand("\"proceed\""); // Simulate the user clicking "proceed" 293 SendCommand("\"proceed\""); // Simulate the user clicking "proceed"
256 AssertNoInterstitial(); // Assert the interstitial is gone 294 AssertNoInterstitial(); // Assert the interstitial is gone
257 295
258 EXPECT_EQ(url, browser()->GetSelectedTabContents()->GetURL()); 296 EXPECT_EQ(url, browser()->GetSelectedTabContents()->GetURL());
259 } 297 }
260 298
299 IN_PROC_BROWSER_TEST_F(SafeBrowsingBlockingPageTest,
300 MalwareIframeReportDetails) {
301 // Enable reporting of malware details.
302 browser()->GetProfile()->GetPrefs()->SetBoolean(
303 prefs::kSafeBrowsingReportingEnabled, true);
304 EXPECT_TRUE(browser()->GetProfile()->GetPrefs()->GetBoolean(
305 prefs::kSafeBrowsingReportingEnabled));
306
307 GURL url = test_server()->GetURL(kMalwarePage);
308 GURL iframe_url = test_server()->GetURL(kMalwareIframe);
309 AddURLResult(iframe_url, SafeBrowsingService::URL_MALWARE);
310
311 ui_test_utils::NavigateToURL(browser(), url);
312
313 SendCommand("\"proceed\""); // Simulate the user clicking "back"
314 AssertNoInterstitial(); // Assert the interstitial is gone
315
316 EXPECT_EQ(url, browser()->GetSelectedTabContents()->GetURL());
317 AssertReportSent();
318 }
319
261 } // namespace 320 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698