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

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

Issue 7119003: Create a browser feature extractor that runs after the renderer has (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Add new files 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/task.h" 8 #include "base/task.h"
9 #include "chrome/browser/safe_browsing/browser_feature_extractor.h"
9 #include "chrome/browser/safe_browsing/client_side_detection_host.h" 10 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
10 #include "chrome/browser/safe_browsing/client_side_detection_service.h" 11 #include "chrome/browser/safe_browsing/client_side_detection_service.h"
11 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 12 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 13 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
13 #include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" 14 #include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h"
14 #include "chrome/common/chrome_switches.h" 15 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/safe_browsing/csd.pb.h" 16 #include "chrome/common/safe_browsing/csd.pb.h"
16 #include "chrome/common/safe_browsing/safebrowsing_messages.h" 17 #include "chrome/common/safe_browsing/safebrowsing_messages.h"
17 #include "chrome/test/testing_profile.h" 18 #include "chrome/test/testing_profile.h"
18 #include "chrome/test/ui_test_utils.h" 19 #include "chrome/test/ui_test_utils.h"
(...skipping 22 matching lines...) Expand all
41 const bool kFalse = false; 42 const bool kFalse = false;
42 const bool kTrue = true; 43 const bool kTrue = true;
43 } 44 }
44 45
45 namespace safe_browsing { 46 namespace safe_browsing {
46 namespace { 47 namespace {
47 MATCHER_P(EqualsProto, other, "") { 48 MATCHER_P(EqualsProto, other, "") {
48 return other.SerializeAsString() == arg.SerializeAsString(); 49 return other.SerializeAsString() == arg.SerializeAsString();
49 } 50 }
50 51
52 ACTION(QuitUIMessageLoop) {
53 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
54 MessageLoopForUI::current()->Quit();
55 }
56
51 class MockClientSideDetectionService : public ClientSideDetectionService { 57 class MockClientSideDetectionService : public ClientSideDetectionService {
52 public: 58 public:
53 MockClientSideDetectionService() : ClientSideDetectionService(NULL) {} 59 MockClientSideDetectionService() : ClientSideDetectionService(NULL) {}
54 virtual ~MockClientSideDetectionService() {}; 60 virtual ~MockClientSideDetectionService() {};
55 61
56 MOCK_METHOD2(SendClientReportPhishingRequest, 62 MOCK_METHOD2(SendClientReportPhishingRequest,
57 void(ClientPhishingRequest*, 63 void(ClientPhishingRequest*,
58 ClientReportPhishingRequestCallback*)); 64 ClientReportPhishingRequestCallback*));
59 MOCK_CONST_METHOD1(IsPrivateIPAddress, bool(const std::string&)); 65 MOCK_CONST_METHOD1(IsPrivateIPAddress, bool(const std::string&));
60 MOCK_METHOD2(GetValidCachedResult, bool(const GURL&, bool*)); 66 MOCK_METHOD2(GetValidCachedResult, bool(const GURL&, bool*));
(...skipping 27 matching lines...) Expand all
88 }; 94 };
89 95
90 class MockTestingProfile : public TestingProfile { 96 class MockTestingProfile : public TestingProfile {
91 public: 97 public:
92 MockTestingProfile() {} 98 MockTestingProfile() {}
93 virtual ~MockTestingProfile() {} 99 virtual ~MockTestingProfile() {}
94 100
95 MOCK_METHOD0(IsOffTheRecord, bool()); 101 MOCK_METHOD0(IsOffTheRecord, bool());
96 }; 102 };
97 103
104 class MockBrowserFeatureExtractor : public BrowserFeatureExtractor {
105 public:
106 explicit MockBrowserFeatureExtractor(TabContents* tab)
107 : BrowserFeatureExtractor(tab) {}
108 virtual ~MockBrowserFeatureExtractor() {}
109
110 MOCK_METHOD2(ExtractFeatures, void(ClientPhishingRequest*,
111 BrowserFeatureExtractor::DoneCallback*));
112 };
113
98 // Helper function which quits the UI message loop from the IO message loop. 114 // Helper function which quits the UI message loop from the IO message loop.
99 void QuitUIMessageLoop() { 115 void QuitUIMessageLoopFromIO() {
100 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 116 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
101 BrowserThread::PostTask(BrowserThread::UI, 117 BrowserThread::PostTask(BrowserThread::UI,
102 FROM_HERE, 118 FROM_HERE,
103 new MessageLoop::QuitTask()); 119 new MessageLoop::QuitTask());
104 } 120 }
105 } // namespace 121 } // namespace
106 122
107 class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { 123 class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness {
108 public: 124 public:
109 virtual void SetUp() { 125 virtual void SetUp() {
(...skipping 27 matching lines...) Expand all
137 void OnDetectedPhishingSite(const std::string& verdict_str) { 153 void OnDetectedPhishingSite(const std::string& verdict_str) {
138 csd_host_->OnDetectedPhishingSite(verdict_str); 154 csd_host_->OnDetectedPhishingSite(verdict_str);
139 } 155 }
140 156
141 void FlushIOMessageLoop() { 157 void FlushIOMessageLoop() {
142 // If there was a message posted on the IO thread to display the 158 // If there was a message posted on the IO thread to display the
143 // interstitial page we know that it would have been posted before 159 // interstitial page we know that it would have been posted before
144 // we put the quit message there. 160 // we put the quit message there.
145 BrowserThread::PostTask(BrowserThread::IO, 161 BrowserThread::PostTask(BrowserThread::IO,
146 FROM_HERE, 162 FROM_HERE,
147 NewRunnableFunction(&QuitUIMessageLoop)); 163 NewRunnableFunction(&QuitUIMessageLoopFromIO));
148 MessageLoop::current()->Run(); 164 MessageLoop::current()->Run();
149 } 165 }
150 166
151 void ExpectPreClassificationChecks(const GURL& url, 167 void ExpectPreClassificationChecks(const GURL& url,
152 const bool* is_private, 168 const bool* is_private,
153 const bool* is_incognito, 169 const bool* is_incognito,
154 const bool* match_csd_whitelist, 170 const bool* match_csd_whitelist,
155 const bool* get_valid_cached_result, 171 const bool* get_valid_cached_result,
156 const bool* is_in_cache, 172 const bool* is_in_cache,
157 const bool* over_report_limit) { 173 const bool* over_report_limit) {
(...skipping 26 matching lines...) Expand all
184 void WaitAndCheckPreClassificationChecks() { 200 void WaitAndCheckPreClassificationChecks() {
185 // Wait for CheckCsdWhitelist to be called if at all. 201 // Wait for CheckCsdWhitelist to be called if at all.
186 FlushIOMessageLoop(); 202 FlushIOMessageLoop();
187 // Checks for CheckCache() to be called if at all. 203 // Checks for CheckCache() to be called if at all.
188 MessageLoop::current()->RunAllPending(); 204 MessageLoop::current()->RunAllPending();
189 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 205 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
190 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 206 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
191 EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_)); 207 EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_));
192 } 208 }
193 209
210 void SetFeatureExtractor(BrowserFeatureExtractor* extractor) {
211 csd_host_->feature_extractor_.reset(extractor);
212 }
213
194 protected: 214 protected:
195 ClientSideDetectionHost* csd_host_; 215 ClientSideDetectionHost* csd_host_;
196 scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_; 216 scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_;
197 scoped_refptr<StrictMock<MockSafeBrowsingService> > sb_service_; 217 scoped_refptr<StrictMock<MockSafeBrowsingService> > sb_service_;
198 MockTestingProfile* mock_profile_; // We don't own this object 218 MockTestingProfile* mock_profile_; // We don't own this object
199 219
200 private: 220 private:
201 scoped_ptr<BrowserThread> ui_thread_; 221 scoped_ptr<BrowserThread> ui_thread_;
202 scoped_ptr<BrowserThread> io_thread_; 222 scoped_ptr<BrowserThread> io_thread_;
203 }; 223 };
204 224
205 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteInvalidVerdict) { 225 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteInvalidVerdict) {
206 // Case 0: renderer sends an invalid verdict string that we're unable to 226 // Case 0: renderer sends an invalid verdict string that we're unable to
207 // parse. 227 // parse.
208 EXPECT_CALL(*csd_service_, SendClientReportPhishingRequest(_, _)).Times(0); 228 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
229 contents());
230 SetFeatureExtractor(mock_extractor); // The host class takes ownership.
231 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _)).Times(0);
209 OnDetectedPhishingSite("Invalid Protocol Buffer"); 232 OnDetectedPhishingSite("Invalid Protocol Buffer");
210 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 233 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor));
211 } 234 }
212 235
213 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { 236 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) {
214 // Case 1: client thinks the page is phishing. The server does not agree. 237 // Case 1: client thinks the page is phishing. The server does not agree.
215 // No interstitial is shown. 238 // No interstitial is shown.
216 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 239 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
217 ClientPhishingRequest verdict; 240 ClientPhishingRequest verdict;
218 verdict.set_url("http://phishingurl.com/"); 241 verdict.set_url("http://phishingurl.com/");
219 verdict.set_client_score(1.0f); 242 verdict.set_client_score(1.0f);
220 verdict.set_is_phishing(true); 243 verdict.set_is_phishing(true);
221 244
222 EXPECT_CALL(*csd_service_, 245 EXPECT_CALL(*csd_service_,
223 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 246 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
224 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); 247 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop()));
225 OnDetectedPhishingSite(verdict.SerializeAsString()); 248 OnDetectedPhishingSite(verdict.SerializeAsString());
249 MessageLoop::current()->Run();
226 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 250 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
227 ASSERT_TRUE(cb); 251 ASSERT_TRUE(cb);
228 252
229 // Make sure DoDisplayBlockingPage is not going to be called. 253 // Make sure DoDisplayBlockingPage is not going to be called.
230 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0); 254 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
231 cb->Run(GURL(verdict.url()), false); 255 cb->Run(GURL(verdict.url()), false);
232 delete cb; 256 delete cb;
233 MessageLoop::current()->RunAllPending(); 257 MessageLoop::current()->RunAllPending();
234 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 258 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
235 } 259 }
236 260
237 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { 261 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) {
238 // Case 2: client thinks the page is phishing and so does the server but 262 // Case 2: client thinks the page is phishing and so does the server but
239 // showing the interstitial is disabled => no interstitial is shown. 263 // showing the interstitial is disabled => no interstitial is shown.
240 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 264 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
241 ClientPhishingRequest verdict; 265 ClientPhishingRequest verdict;
242 verdict.set_url("http://phishingurl.com/"); 266 verdict.set_url("http://phishingurl.com/");
243 verdict.set_client_score(1.0f); 267 verdict.set_client_score(1.0f);
244 verdict.set_is_phishing(true); 268 verdict.set_is_phishing(true);
245 269
246 EXPECT_CALL(*csd_service_, 270 EXPECT_CALL(*csd_service_,
247 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 271 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
248 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); 272 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop()));
249 OnDetectedPhishingSite(verdict.SerializeAsString()); 273 OnDetectedPhishingSite(verdict.SerializeAsString());
274 MessageLoop::current()->Run();
250 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 275 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
251 ASSERT_TRUE(cb); 276 ASSERT_TRUE(cb);
252 277
253 // Make sure DoDisplayBlockingPage is not going to be called. 278 // Make sure DoDisplayBlockingPage is not going to be called.
254 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0); 279 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
255 cb->Run(GURL(verdict.url()), false); 280 cb->Run(GURL(verdict.url()), false);
256 delete cb; 281 delete cb;
257 MessageLoop::current()->RunAllPending(); 282 MessageLoop::current()->RunAllPending();
258 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 283 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
259 } 284 }
260 285
261 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { 286 TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) {
262 // Case 3: client thinks the page is phishing and so does the server. 287 // Case 3: client thinks the page is phishing and so does the server.
263 // We show an interstitial. 288 // We show an interstitial.
264 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 289 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
265 GURL phishing_url("http://phishingurl.com/"); 290 GURL phishing_url("http://phishingurl.com/");
266 ClientPhishingRequest verdict; 291 ClientPhishingRequest verdict;
267 verdict.set_url(phishing_url.spec()); 292 verdict.set_url(phishing_url.spec());
268 verdict.set_client_score(1.0f); 293 verdict.set_client_score(1.0f);
269 verdict.set_is_phishing(true); 294 verdict.set_is_phishing(true);
270 295
271 EXPECT_CALL(*csd_service_, 296 EXPECT_CALL(*csd_service_,
272 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 297 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
273 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); 298 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop()));
274 OnDetectedPhishingSite(verdict.SerializeAsString()); 299 OnDetectedPhishingSite(verdict.SerializeAsString());
300 MessageLoop::current()->Run();
275 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 301 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
276 ASSERT_TRUE(cb); 302 ASSERT_TRUE(cb);
277 303
278 SafeBrowsingService::UnsafeResource resource; 304 SafeBrowsingService::UnsafeResource resource;
279 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)) 305 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
280 .WillOnce(SaveArg<0>(&resource)); 306 .WillOnce(SaveArg<0>(&resource));
281 cb->Run(phishing_url, true); 307 cb->Run(phishing_url, true);
282 delete cb; 308 delete cb;
283 309
284 MessageLoop::current()->RunAllPending(); 310 MessageLoop::current()->RunAllPending();
(...skipping 30 matching lines...) Expand all
315 // a single interstitial is shown for the second URL. 341 // a single interstitial is shown for the second URL.
316 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; 342 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
317 GURL phishing_url("http://phishingurl.com/"); 343 GURL phishing_url("http://phishingurl.com/");
318 ClientPhishingRequest verdict; 344 ClientPhishingRequest verdict;
319 verdict.set_url(phishing_url.spec()); 345 verdict.set_url(phishing_url.spec());
320 verdict.set_client_score(1.0f); 346 verdict.set_client_score(1.0f);
321 verdict.set_is_phishing(true); 347 verdict.set_is_phishing(true);
322 348
323 EXPECT_CALL(*csd_service_, 349 EXPECT_CALL(*csd_service_,
324 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 350 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
325 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); 351 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop()));
326 OnDetectedPhishingSite(verdict.SerializeAsString()); 352 OnDetectedPhishingSite(verdict.SerializeAsString());
353 MessageLoop::current()->Run();
327 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 354 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
328 ASSERT_TRUE(cb); 355 ASSERT_TRUE(cb);
329 GURL other_phishing_url("http://other_phishing_url.com/bla"); 356 GURL other_phishing_url("http://other_phishing_url.com/bla");
330 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse, 357 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse,
331 &kFalse, &kFalse, &kFalse); 358 &kFalse, &kFalse, &kFalse);
332 // We navigate away. The callback cb should be revoked. 359 // We navigate away. The callback cb should be revoked.
333 NavigateAndCommit(other_phishing_url); 360 NavigateAndCommit(other_phishing_url);
334 // Wait for the pre-classification checks to finish for other_phishing_url. 361 // Wait for the pre-classification checks to finish for other_phishing_url.
335 WaitAndCheckPreClassificationChecks(); 362 WaitAndCheckPreClassificationChecks();
336 363
337 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb_other; 364 ClientSideDetectionService::ClientReportPhishingRequestCallback* cb_other;
338 verdict.set_url(other_phishing_url.spec()); 365 verdict.set_url(other_phishing_url.spec());
339 verdict.set_client_score(0.8f); 366 verdict.set_client_score(0.8f);
340 EXPECT_CALL(*csd_service_, 367 EXPECT_CALL(*csd_service_,
341 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) 368 SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _))
342 .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb_other))); 369 .WillOnce(DoAll(DeleteArg<0>(),
370 SaveArg<1>(&cb_other),
371 QuitUIMessageLoop()));
343 OnDetectedPhishingSite(verdict.SerializeAsString()); 372 OnDetectedPhishingSite(verdict.SerializeAsString());
373 MessageLoop::current()->Run();
344 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 374 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
345 ASSERT_TRUE(cb_other); 375 ASSERT_TRUE(cb_other);
346 376
347 // We expect that the interstitial is shown for the second phishing URL and 377 // We expect that the interstitial is shown for the second phishing URL and
348 // not for the first phishing URL. 378 // not for the first phishing URL.
349 SafeBrowsingService::UnsafeResource resource; 379 SafeBrowsingService::UnsafeResource resource;
350 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)) 380 EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
351 .WillOnce(SaveArg<0>(&resource)); 381 .WillOnce(SaveArg<0>(&resource));
352 382
353 cb->Run(phishing_url, true); // Should have no effect. 383 cb->Run(phishing_url, true); // Should have no effect.
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); 592 EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
563 EXPECT_EQ(url, resource.url); 593 EXPECT_EQ(url, resource.url);
564 EXPECT_EQ(url, resource.original_url); 594 EXPECT_EQ(url, resource.original_url);
565 delete resource.client; 595 delete resource.client;
566 msg = process()->sink().GetFirstMessageMatching( 596 msg = process()->sink().GetFirstMessageMatching(
567 SafeBrowsingMsg_StartPhishingDetection::ID); 597 SafeBrowsingMsg_StartPhishingDetection::ID);
568 ASSERT_FALSE(msg); 598 ASSERT_FALSE(msg);
569 } 599 }
570 600
571 } // namespace safe_browsing 601 } // 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