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

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

Issue 7172018: Revert 89178 - Create a browser feature extractor that runs after the renderer has (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 months 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
« no previous file with comments | « chrome/browser/safe_browsing/client_side_detection_host.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "base/task.h" 9 #include "base/task.h"
10 #include "chrome/browser/safe_browsing/client_side_detection_host.h" 10 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 const bool kFalse = false; 42 const bool kFalse = false;
43 const bool kTrue = true; 43 const bool kTrue = true;
44 } 44 }
45 45
46 namespace safe_browsing { 46 namespace safe_browsing {
47 47
48 MATCHER_P(EqualsProto, other, "") { 48 MATCHER_P(EqualsProto, other, "") {
49 return other.SerializeAsString() == arg.SerializeAsString(); 49 return other.SerializeAsString() == arg.SerializeAsString();
50 } 50 }
51 51
52 ACTION(QuitUIMessageLoop) {
53 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
54 MessageLoopForUI::current()->Quit();
55 }
56
57 class MockClientSideDetectionService : public ClientSideDetectionService { 52 class MockClientSideDetectionService : public ClientSideDetectionService {
58 public: 53 public:
59 explicit MockClientSideDetectionService(const FilePath& model_path) 54 explicit MockClientSideDetectionService(const FilePath& model_path)
60 : ClientSideDetectionService(model_path, NULL) {} 55 : ClientSideDetectionService(model_path, NULL) {}
61 virtual ~MockClientSideDetectionService() {}; 56 virtual ~MockClientSideDetectionService() {};
62 57
63 MOCK_METHOD2(SendClientReportPhishingRequest, 58 MOCK_METHOD2(SendClientReportPhishingRequest,
64 void(ClientPhishingRequest*, 59 void(ClientPhishingRequest*,
65 ClientReportPhishingRequestCallback*)); 60 ClientReportPhishingRequestCallback*));
66 MOCK_CONST_METHOD1(IsPrivateIPAddress, bool(const std::string&)); 61 MOCK_CONST_METHOD1(IsPrivateIPAddress, bool(const std::string&));
(...skipping 29 matching lines...) Expand all
96 91
97 class MockTestingProfile : public TestingProfile { 92 class MockTestingProfile : public TestingProfile {
98 public: 93 public:
99 MockTestingProfile() {} 94 MockTestingProfile() {}
100 virtual ~MockTestingProfile() {} 95 virtual ~MockTestingProfile() {}
101 96
102 MOCK_METHOD0(IsOffTheRecord, bool()); 97 MOCK_METHOD0(IsOffTheRecord, bool());
103 }; 98 };
104 99
105 // Helper function which quits the UI message loop from the IO message loop. 100 // Helper function which quits the UI message loop from the IO message loop.
106 void QuitUIMessageLoopFromIO() { 101 void QuitUIMessageLoop() {
107 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
108 BrowserThread::PostTask(BrowserThread::UI, 103 BrowserThread::PostTask(BrowserThread::UI,
109 FROM_HERE, 104 FROM_HERE,
110 new MessageLoop::QuitTask()); 105 new MessageLoop::QuitTask());
111 } 106 }
112 107
113 class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { 108 class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness {
114 public: 109 public:
115 virtual void SetUp() { 110 virtual void SetUp() {
116 // Set custom profile object so that we can mock calls to IsOffTheRecord. 111 // Set custom profile object so that we can mock calls to IsOffTheRecord.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 void OnDetectedPhishingSite(const std::string& verdict_str) { 143 void OnDetectedPhishingSite(const std::string& verdict_str) {
149 csd_host_->OnDetectedPhishingSite(verdict_str); 144 csd_host_->OnDetectedPhishingSite(verdict_str);
150 } 145 }
151 146
152 void FlushIOMessageLoop() { 147 void FlushIOMessageLoop() {
153 // If there was a message posted on the IO thread to display the 148 // If there was a message posted on the IO thread to display the
154 // interstitial page we know that it would have been posted before 149 // interstitial page we know that it would have been posted before
155 // we put the quit message there. 150 // we put the quit message there.
156 BrowserThread::PostTask(BrowserThread::IO, 151 BrowserThread::PostTask(BrowserThread::IO,
157 FROM_HERE, 152 FROM_HERE,
158 NewRunnableFunction(&QuitUIMessageLoopFromIO)); 153 NewRunnableFunction(&QuitUIMessageLoop));
159 MessageLoop::current()->Run(); 154 MessageLoop::current()->Run();
160 } 155 }
161 156
162 void ExpectPreClassificationChecks(const GURL& url, 157 void ExpectPreClassificationChecks(const GURL& url,
163 const bool* is_private, 158 const bool* is_private,
164 const bool* is_incognito, 159 const bool* is_incognito,
165 const bool* match_csd_whitelist, 160 const bool* match_csd_whitelist,
166 const bool* get_valid_cached_result, 161 const bool* get_valid_cached_result,
167 const bool* is_in_cache, 162 const bool* is_in_cache,
168 const bool* over_report_limit) { 163 const bool* over_report_limit) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 // Case 1: client thinks the page is phishing. The server does not agree. 220 // Case 1: client thinks the page is phishing. The server does not agree.
226 // No interstitial is shown. 221 // No interstitial is shown.
227 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 222 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
228 ClientPhishingRequest verdict; 223 ClientPhishingRequest verdict;
229 verdict.set_url("http://phishingurl.com/"); 224 verdict.set_url("http://phishingurl.com/");
230 verdict.set_client_score(1.0f); 225 verdict.set_client_score(1.0f);
231 verdict.set_is_phishing(true); 226 verdict.set_is_phishing(true);
232 227
233 EXPECT_CALL(*csd_service_, 228 EXPECT_CALL(*csd_service_,
234 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 229 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
235 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); 230 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb)));
236 OnDetectedPhishingSite(verdict.SerializeAsString()); 231 OnDetectedPhishingSite(verdict.SerializeAsString());
237 MessageLoop::current()->Run();
238 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 232 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
239 ASSERT_TRUE(cb); 233 ASSERT_TRUE(cb);
240 234
241 // Make sure DoDisplayBlockingPage is not going to be called. 235 // Make sure DoDisplayBlockingPage is not going to be called.
242 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0); 236 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
243 cb->Run(GURL(verdict.url()), false); 237 cb->Run(GURL(verdict.url()), false);
244 delete cb; 238 delete cb;
245 MessageLoop::current()->RunAllPending(); 239 MessageLoop::current()->RunAllPending();
246 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 240 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
247 } 241 }
248 242
249 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { 243 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) {
250 // Case 2: client thinks the page is phishing and so does the server but 244 // Case 2: client thinks the page is phishing and so does the server but
251 // showing the interstitial is disabled => no interstitial is shown. 245 // showing the interstitial is disabled => no interstitial is shown.
252 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 246 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
253 ClientPhishingRequest verdict; 247 ClientPhishingRequest verdict;
254 verdict.set_url("http://phishingurl.com/"); 248 verdict.set_url("http://phishingurl.com/");
255 verdict.set_client_score(1.0f); 249 verdict.set_client_score(1.0f);
256 verdict.set_is_phishing(true); 250 verdict.set_is_phishing(true);
257 251
258 EXPECT_CALL(*csd_service_, 252 EXPECT_CALL(*csd_service_,
259 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 253 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
260 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); 254 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb)));
261 OnDetectedPhishingSite(verdict.SerializeAsString()); 255 OnDetectedPhishingSite(verdict.SerializeAsString());
262 MessageLoop::current()->Run();
263 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 256 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
264 ASSERT_TRUE(cb); 257 ASSERT_TRUE(cb);
265 258
266 // Make sure DoDisplayBlockingPage is not going to be called. 259 // Make sure DoDisplayBlockingPage is not going to be called.
267 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0); 260 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
268 cb->Run(GURL(verdict.url()), false); 261 cb->Run(GURL(verdict.url()), false);
269 delete cb; 262 delete cb;
270 MessageLoop::current()->RunAllPending(); 263 MessageLoop::current()->RunAllPending();
271 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 264 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
272 } 265 }
273 266
274 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { 267 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) {
275 // Case 3: client thinks the page is phishing and so does the server. 268 // Case 3: client thinks the page is phishing and so does the server.
276 // We show an interstitial. 269 // We show an interstitial.
277 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 270 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
278 GURL phishing_url("http://phishingurl.com/"); 271 GURL phishing_url("http://phishingurl.com/");
279 ClientPhishingRequest verdict; 272 ClientPhishingRequest verdict;
280 verdict.set_url(phishing_url.spec()); 273 verdict.set_url(phishing_url.spec());
281 verdict.set_client_score(1.0f); 274 verdict.set_client_score(1.0f);
282 verdict.set_is_phishing(true); 275 verdict.set_is_phishing(true);
283 276
284 EXPECT_CALL(*csd_service_, 277 EXPECT_CALL(*csd_service_,
285 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 278 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
286 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); 279 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb)));
287 OnDetectedPhishingSite(verdict.SerializeAsString()); 280 OnDetectedPhishingSite(verdict.SerializeAsString());
288 MessageLoop::current()->Run();
289 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 281 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
290 ASSERT_TRUE(cb); 282 ASSERT_TRUE(cb);
291 283
292 SafeBrowsingService::UnsafeResource resource; 284 SafeBrowsingService::UnsafeResource resource;
293 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)) 285 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
294 .WillOnce(SaveArg<0>(&resource)); 286 .WillOnce(SaveArg<0>(&resource));
295 cb->Run(phishing_url, true); 287 cb->Run(phishing_url, true);
296 delete cb; 288 delete cb;
297 289
298 MessageLoop::current()->RunAllPending(); 290 MessageLoop::current()->RunAllPending();
(...skipping 30 matching lines...) Expand all
329 // a single interstitial is shown for the second URL. 321 // a single interstitial is shown for the second URL.
330 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 322 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
331 GURL phishing_url("http://phishingurl.com/"); 323 GURL phishing_url("http://phishingurl.com/");
332 ClientPhishingRequest verdict; 324 ClientPhishingRequest verdict;
333 verdict.set_url(phishing_url.spec()); 325 verdict.set_url(phishing_url.spec());
334 verdict.set_client_score(1.0f); 326 verdict.set_client_score(1.0f);
335 verdict.set_is_phishing(true); 327 verdict.set_is_phishing(true);
336 328
337 EXPECT_CALL(*csd_service_, 329 EXPECT_CALL(*csd_service_,
338 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 330 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
339 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); 331 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb)));
340 OnDetectedPhishingSite(verdict.SerializeAsString()); 332 OnDetectedPhishingSite(verdict.SerializeAsString());
341 MessageLoop::current()->Run();
342 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 333 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
343 ASSERT_TRUE(cb); 334 ASSERT_TRUE(cb);
344 GURL other_phishing_url("http://other_phishing_url.com/bla"); 335 GURL other_phishing_url("http://other_phishing_url.com/bla");
345 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse, 336 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse,
346 &kFalse, &kFalse, &kFalse); 337 &kFalse, &kFalse, &kFalse);
347 // We navigate away. The callback cb should be revoked. 338 // We navigate away. The callback cb should be revoked.
348 NavigateAndCommit(other_phishing_url); 339 NavigateAndCommit(other_phishing_url);
349 // Wait for the pre-classification checks to finish for other_phishing_url. 340 // Wait for the pre-classification checks to finish for other_phishing_url.
350 WaitAndCheckPreClassificationChecks(); 341 WaitAndCheckPreClassificationChecks();
351 342
352 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb_other; 343 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb_other;
353 verdict.set_url(other_phishing_url.spec()); 344 verdict.set_url(other_phishing_url.spec());
354 verdict.set_client_score(0.8f); 345 verdict.set_client_score(0.8f);
355 EXPECT_CALL(*csd_service_, 346 EXPECT_CALL(*csd_service_,
356 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 347 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
357 .WillOnce(DoAll(DeleteArg<0>(), 348 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb_other)));
358 SaveArg<1>(&cb_other),
359 QuitUIMessageLoop()));
360 OnDetectedPhishingSite(verdict.SerializeAsString()); 349 OnDetectedPhishingSite(verdict.SerializeAsString());
361 MessageLoop::current()->Run();
362 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 350 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
363 ASSERT_TRUE(cb_other); 351 ASSERT_TRUE(cb_other);
364 352
365 // We expect that the interstitial is shown for the second phishing URL and 353 // We expect that the interstitial is shown for the second phishing URL and
366 // not for the first phishing URL. 354 // not for the first phishing URL.
367 SafeBrowsingService::UnsafeResource resource; 355 SafeBrowsingService::UnsafeResource resource;
368 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)) 356 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
369 .WillOnce(SaveArg<0>(&resource)); 357 .WillOnce(SaveArg<0>(&resource));
370 358
371 cb->Run(phishing_url, true); // Should have no effect. 359 cb->Run(phishing_url, true); // Should have no effect.
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 568 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
581 EXPECT_EQ(url, resource.url); 569 EXPECT_EQ(url, resource.url);
582 EXPECT_EQ(url, resource.original_url); 570 EXPECT_EQ(url, resource.original_url);
583 delete resource.client; 571 delete resource.client;
584 msg = process()->sink().GetFirstMessageMatching( 572 msg = process()->sink().GetFirstMessageMatching(
585 SafeBrowsingMsg_StartPhishingDetection::ID); 573 SafeBrowsingMsg_StartPhishingDetection::ID);
586 ASSERT_FALSE(msg); 574 ASSERT_FALSE(msg);
587 } 575 }
588 576
589 } // namespace safe_browsing 577 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/client_side_detection_host.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698