| OLD | NEW |
| 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 // Note: this test uses RenderViewFakeResourcesTest in order to set up a | 5 // Note: this test uses RenderViewFakeResourcesTest in order to set up a |
| 6 // real RenderThread to hold the phishing Scorer object. | 6 // real RenderThread to hold the phishing Scorer object. |
| 7 | 7 |
| 8 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" | 8 #include "chrome/renderer/safe_browsing/phishing_classifier_delegate.h" |
| 9 | 9 |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
| 12 #include "chrome/common/safe_browsing/csd.pb.h" | 12 #include "chrome/common/safe_browsing/csd.pb.h" |
| 13 #include "chrome/common/safe_browsing/safebrowsing_messages.h" | 13 #include "chrome/common/safe_browsing/safebrowsing_messages.h" |
| 14 #include "chrome/renderer/safe_browsing/features.h" | 14 #include "chrome/renderer/safe_browsing/features.h" |
| 15 #include "chrome/renderer/safe_browsing/phishing_classifier.h" | 15 #include "chrome/renderer/safe_browsing/phishing_classifier.h" |
| 16 #include "chrome/renderer/safe_browsing/scorer.h" | 16 #include "chrome/renderer/safe_browsing/scorer.h" |
| 17 #include "content/public/renderer/render_view.h" | 17 #include "content/public/renderer/render_view.h" |
| 18 #include "content/test/render_view_fake_resources_test.h" | 18 #include "content/test/render_view_fake_resources_test.h" |
| 19 #include "googleurl/src/gurl.h" | 19 #include "googleurl/src/gurl.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 21 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
| 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" |
| 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" | 23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" |
| 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | 24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" |
| 25 | 25 |
| 26 using ::testing::_; | 26 using ::testing::_; |
| 27 using ::testing::DeleteArg; | |
| 28 using ::testing::InSequence; | 27 using ::testing::InSequence; |
| 29 using ::testing::Mock; | 28 using ::testing::Mock; |
| 30 using ::testing::Pointee; | 29 using ::testing::Pointee; |
| 31 using ::testing::StrictMock; | 30 using ::testing::StrictMock; |
| 32 | 31 |
| 33 namespace safe_browsing { | 32 namespace safe_browsing { |
| 34 | 33 |
| 35 namespace { | 34 namespace { |
| 36 class MockPhishingClassifier : public PhishingClassifier { | 35 class MockPhishingClassifier : public PhishingClassifier { |
| 37 public: | 36 public: |
| 38 explicit MockPhishingClassifier(content::RenderView* render_view) | 37 explicit MockPhishingClassifier(content::RenderView* render_view) |
| 39 : PhishingClassifier(render_view, NULL /* clock */) {} | 38 : PhishingClassifier(render_view, NULL /* clock */) {} |
| 40 | 39 |
| 41 virtual ~MockPhishingClassifier() {} | 40 virtual ~MockPhishingClassifier() {} |
| 42 | 41 |
| 43 MOCK_METHOD2(BeginClassification, void(const string16*, DoneCallback*)); | 42 MOCK_METHOD2(BeginClassification, void(const string16*, const DoneCallback&)); |
| 44 MOCK_METHOD0(CancelPendingClassification, void()); | 43 MOCK_METHOD0(CancelPendingClassification, void()); |
| 45 | 44 |
| 46 private: | 45 private: |
| 47 DISALLOW_COPY_AND_ASSIGN(MockPhishingClassifier); | 46 DISALLOW_COPY_AND_ASSIGN(MockPhishingClassifier); |
| 48 }; | 47 }; |
| 49 | 48 |
| 50 class MockScorer : public Scorer { | 49 class MockScorer : public Scorer { |
| 51 public: | 50 public: |
| 52 MockScorer() : Scorer() {} | 51 MockScorer() : Scorer() {} |
| 53 virtual ~MockScorer() {} | 52 virtual ~MockScorer() {} |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 EXPECT_CALL(*classifier, CancelPendingClassification()).Times(2); | 111 EXPECT_CALL(*classifier, CancelPendingClassification()).Times(2); |
| 113 responses_["http://host.com/"] = | 112 responses_["http://host.com/"] = |
| 114 "<html><body><iframe src=\"http://sub1.com/\"></iframe></body></html>"; | 113 "<html><body><iframe src=\"http://sub1.com/\"></iframe></body></html>"; |
| 115 LoadURL("http://host.com/"); | 114 LoadURL("http://host.com/"); |
| 116 Mock::VerifyAndClearExpectations(classifier); | 115 Mock::VerifyAndClearExpectations(classifier); |
| 117 OnStartPhishingDetection(delegate, GURL("http://host.com/")); | 116 OnStartPhishingDetection(delegate, GURL("http://host.com/")); |
| 118 string16 page_text = ASCIIToUTF16("dummy"); | 117 string16 page_text = ASCIIToUTF16("dummy"); |
| 119 { | 118 { |
| 120 InSequence s; | 119 InSequence s; |
| 121 EXPECT_CALL(*classifier, CancelPendingClassification()); | 120 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 122 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 121 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 123 WillOnce(DeleteArg<1>()); | |
| 124 delegate->PageCaptured(&page_text, false); | 122 delegate->PageCaptured(&page_text, false); |
| 125 Mock::VerifyAndClearExpectations(classifier); | 123 Mock::VerifyAndClearExpectations(classifier); |
| 126 } | 124 } |
| 127 | 125 |
| 128 // Reloading the same page should not trigger a reclassification. | 126 // Reloading the same page should not trigger a reclassification. |
| 129 // However, it will cancel any pending classification since the | 127 // However, it will cancel any pending classification since the |
| 130 // content is being replaced. | 128 // content is being replaced. |
| 131 EXPECT_CALL(*classifier, CancelPendingClassification()).Times(2); | 129 EXPECT_CALL(*classifier, CancelPendingClassification()).Times(2); |
| 132 GetMainFrame()->reload(); | 130 GetMainFrame()->reload(); |
| 133 message_loop_.Run(); | 131 message_loop_.Run(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 | 163 |
| 166 // Now load a new toplevel page, which should trigger another classification. | 164 // Now load a new toplevel page, which should trigger another classification. |
| 167 EXPECT_CALL(*classifier, CancelPendingClassification()); | 165 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 168 LoadURL("http://host2.com/"); | 166 LoadURL("http://host2.com/"); |
| 169 Mock::VerifyAndClearExpectations(classifier); | 167 Mock::VerifyAndClearExpectations(classifier); |
| 170 page_text = ASCIIToUTF16("dummy2"); | 168 page_text = ASCIIToUTF16("dummy2"); |
| 171 OnStartPhishingDetection(delegate, GURL("http://host2.com/")); | 169 OnStartPhishingDetection(delegate, GURL("http://host2.com/")); |
| 172 { | 170 { |
| 173 InSequence s; | 171 InSequence s; |
| 174 EXPECT_CALL(*classifier, CancelPendingClassification()); | 172 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 175 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 173 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 176 WillOnce(DeleteArg<1>()); | |
| 177 delegate->PageCaptured(&page_text, false); | 174 delegate->PageCaptured(&page_text, false); |
| 178 Mock::VerifyAndClearExpectations(classifier); | 175 Mock::VerifyAndClearExpectations(classifier); |
| 179 } | 176 } |
| 180 | 177 |
| 181 // No classification should happen on back/forward navigation. | 178 // No classification should happen on back/forward navigation. |
| 182 // Note: in practice, the browser will not send a StartPhishingDetection IPC | 179 // Note: in practice, the browser will not send a StartPhishingDetection IPC |
| 183 // in this case. However, we want to make sure that the delegate behaves | 180 // in this case. However, we want to make sure that the delegate behaves |
| 184 // correctly regardless. | 181 // correctly regardless. |
| 185 WebKit::WebHistoryItem forward_item = GetMainFrame()->currentHistoryItem(); | 182 WebKit::WebHistoryItem forward_item = GetMainFrame()->currentHistoryItem(); |
| 186 EXPECT_CALL(*classifier, CancelPendingClassification()); | 183 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 delegate->PageCaptured(&page_text, false); | 237 delegate->PageCaptured(&page_text, false); |
| 241 | 238 |
| 242 LoadURL("http://host2.com/"); | 239 LoadURL("http://host2.com/"); |
| 243 page_text = ASCIIToUTF16("dummy2"); | 240 page_text = ASCIIToUTF16("dummy2"); |
| 244 OnStartPhishingDetection(delegate, GURL("http://host2.com/")); | 241 OnStartPhishingDetection(delegate, GURL("http://host2.com/")); |
| 245 delegate->PageCaptured(&page_text, false); | 242 delegate->PageCaptured(&page_text, false); |
| 246 | 243 |
| 247 // Now set a scorer, which should cause a classifier to be created and | 244 // Now set a scorer, which should cause a classifier to be created and |
| 248 // the classification to proceed. | 245 // the classification to proceed. |
| 249 page_text = ASCIIToUTF16("dummy2"); | 246 page_text = ASCIIToUTF16("dummy2"); |
| 250 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 247 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 251 WillOnce(DeleteArg<1>()); | |
| 252 MockScorer scorer; | 248 MockScorer scorer; |
| 253 delegate->SetPhishingScorer(&scorer); | 249 delegate->SetPhishingScorer(&scorer); |
| 254 Mock::VerifyAndClearExpectations(classifier); | 250 Mock::VerifyAndClearExpectations(classifier); |
| 255 | 251 |
| 256 // If we set a new scorer while a classification is going on the | 252 // If we set a new scorer while a classification is going on the |
| 257 // classification should be cancelled. | 253 // classification should be cancelled. |
| 258 EXPECT_CALL(*classifier, CancelPendingClassification()); | 254 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 259 delegate->SetPhishingScorer(&scorer); | 255 delegate->SetPhishingScorer(&scorer); |
| 260 Mock::VerifyAndClearExpectations(classifier); | 256 Mock::VerifyAndClearExpectations(classifier); |
| 261 | 257 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 279 delegate->PageCaptured(&page_text, false); | 275 delegate->PageCaptured(&page_text, false); |
| 280 | 276 |
| 281 LoadURL("http://host.com/#foo"); | 277 LoadURL("http://host.com/#foo"); |
| 282 OnStartPhishingDetection(delegate, GURL("http://host.com/#foo")); | 278 OnStartPhishingDetection(delegate, GURL("http://host.com/#foo")); |
| 283 page_text = ASCIIToUTF16("dummy"); | 279 page_text = ASCIIToUTF16("dummy"); |
| 284 delegate->PageCaptured(&page_text, false); | 280 delegate->PageCaptured(&page_text, false); |
| 285 | 281 |
| 286 // Now set a scorer, which should cause a classifier to be created and | 282 // Now set a scorer, which should cause a classifier to be created and |
| 287 // the classification to proceed. | 283 // the classification to proceed. |
| 288 page_text = ASCIIToUTF16("dummy"); | 284 page_text = ASCIIToUTF16("dummy"); |
| 289 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 285 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 290 WillOnce(DeleteArg<1>()); | |
| 291 MockScorer scorer; | 286 MockScorer scorer; |
| 292 delegate->SetPhishingScorer(&scorer); | 287 delegate->SetPhishingScorer(&scorer); |
| 293 Mock::VerifyAndClearExpectations(classifier); | 288 Mock::VerifyAndClearExpectations(classifier); |
| 294 | 289 |
| 295 // The delegate will cancel pending classification on destruction. | 290 // The delegate will cancel pending classification on destruction. |
| 296 EXPECT_CALL(*classifier, CancelPendingClassification()); | 291 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 297 } | 292 } |
| 298 | 293 |
| 299 TEST_F(PhishingClassifierDelegateTest, NoStartPhishingDetection) { | 294 TEST_F(PhishingClassifierDelegateTest, NoStartPhishingDetection) { |
| 300 // Tests the behavior when OnStartPhishingDetection has not yet been called | 295 // Tests the behavior when OnStartPhishingDetection has not yet been called |
| (...skipping 10 matching lines...) Expand all Loading... |
| 311 responses_["http://host.com/"] = "<html><body>phish</body></html>"; | 306 responses_["http://host.com/"] = "<html><body>phish</body></html>"; |
| 312 LoadURL("http://host.com/"); | 307 LoadURL("http://host.com/"); |
| 313 Mock::VerifyAndClearExpectations(classifier); | 308 Mock::VerifyAndClearExpectations(classifier); |
| 314 string16 page_text = ASCIIToUTF16("phish"); | 309 string16 page_text = ASCIIToUTF16("phish"); |
| 315 EXPECT_CALL(*classifier, CancelPendingClassification()); | 310 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 316 delegate->PageCaptured(&page_text, false); | 311 delegate->PageCaptured(&page_text, false); |
| 317 Mock::VerifyAndClearExpectations(classifier); | 312 Mock::VerifyAndClearExpectations(classifier); |
| 318 // Now simulate the StartPhishingDetection IPC. We expect classification | 313 // Now simulate the StartPhishingDetection IPC. We expect classification |
| 319 // to begin. | 314 // to begin. |
| 320 page_text = ASCIIToUTF16("phish"); | 315 page_text = ASCIIToUTF16("phish"); |
| 321 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 316 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 322 WillOnce(DeleteArg<1>()); | |
| 323 OnStartPhishingDetection(delegate, GURL("http://host.com/")); | 317 OnStartPhishingDetection(delegate, GURL("http://host.com/")); |
| 324 Mock::VerifyAndClearExpectations(classifier); | 318 Mock::VerifyAndClearExpectations(classifier); |
| 325 | 319 |
| 326 // Now try again, but this time we will navigate the page away before | 320 // Now try again, but this time we will navigate the page away before |
| 327 // the IPC is sent. | 321 // the IPC is sent. |
| 328 EXPECT_CALL(*classifier, CancelPendingClassification()); | 322 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 329 responses_["http://host2.com/"] = "<html><body>phish</body></html>"; | 323 responses_["http://host2.com/"] = "<html><body>phish</body></html>"; |
| 330 LoadURL("http://host2.com/"); | 324 LoadURL("http://host2.com/"); |
| 331 Mock::VerifyAndClearExpectations(classifier); | 325 Mock::VerifyAndClearExpectations(classifier); |
| 332 page_text = ASCIIToUTF16("phish"); | 326 page_text = ASCIIToUTF16("phish"); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 354 Mock::VerifyAndClearExpectations(classifier); | 348 Mock::VerifyAndClearExpectations(classifier); |
| 355 responses_["http://host4.com/redir"] = "<html><body>123</body></html>"; | 349 responses_["http://host4.com/redir"] = "<html><body>123</body></html>"; |
| 356 EXPECT_CALL(*classifier, CancelPendingClassification()); | 350 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 357 LoadURL("javascript:location.replace(\'redir\');"); | 351 LoadURL("javascript:location.replace(\'redir\');"); |
| 358 Mock::VerifyAndClearExpectations(classifier); | 352 Mock::VerifyAndClearExpectations(classifier); |
| 359 OnStartPhishingDetection(delegate, GURL("http://host4.com/redir")); | 353 OnStartPhishingDetection(delegate, GURL("http://host4.com/redir")); |
| 360 page_text = ASCIIToUTF16("123"); | 354 page_text = ASCIIToUTF16("123"); |
| 361 { | 355 { |
| 362 InSequence s; | 356 InSequence s; |
| 363 EXPECT_CALL(*classifier, CancelPendingClassification()); | 357 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 364 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)) | 358 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 365 .WillOnce(DeleteArg<1>()); | |
| 366 delegate->PageCaptured(&page_text, false); | 359 delegate->PageCaptured(&page_text, false); |
| 367 Mock::VerifyAndClearExpectations(classifier); | 360 Mock::VerifyAndClearExpectations(classifier); |
| 368 } | 361 } |
| 369 | 362 |
| 370 // The delegate will cancel pending classification on destruction. | 363 // The delegate will cancel pending classification on destruction. |
| 371 EXPECT_CALL(*classifier, CancelPendingClassification()); | 364 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 372 } | 365 } |
| 373 | 366 |
| 374 TEST_F(PhishingClassifierDelegateTest, IgnorePreliminaryCapture) { | 367 TEST_F(PhishingClassifierDelegateTest, IgnorePreliminaryCapture) { |
| 375 // Tests that preliminary PageCaptured notifications are ignored. | 368 // Tests that preliminary PageCaptured notifications are ignored. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 387 Mock::VerifyAndClearExpectations(classifier); | 380 Mock::VerifyAndClearExpectations(classifier); |
| 388 OnStartPhishingDetection(delegate, GURL("http://host.com/")); | 381 OnStartPhishingDetection(delegate, GURL("http://host.com/")); |
| 389 string16 page_text = ASCIIToUTF16("phish"); | 382 string16 page_text = ASCIIToUTF16("phish"); |
| 390 delegate->PageCaptured(&page_text, true); | 383 delegate->PageCaptured(&page_text, true); |
| 391 | 384 |
| 392 // Once the non-preliminary capture happens, classification should begin. | 385 // Once the non-preliminary capture happens, classification should begin. |
| 393 page_text = ASCIIToUTF16("phish"); | 386 page_text = ASCIIToUTF16("phish"); |
| 394 { | 387 { |
| 395 InSequence s; | 388 InSequence s; |
| 396 EXPECT_CALL(*classifier, CancelPendingClassification()); | 389 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 397 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 390 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 398 WillOnce(DeleteArg<1>()); | |
| 399 delegate->PageCaptured(&page_text, false); | 391 delegate->PageCaptured(&page_text, false); |
| 400 Mock::VerifyAndClearExpectations(classifier); | 392 Mock::VerifyAndClearExpectations(classifier); |
| 401 } | 393 } |
| 402 | 394 |
| 403 // The delegate will cancel pending classification on destruction. | 395 // The delegate will cancel pending classification on destruction. |
| 404 EXPECT_CALL(*classifier, CancelPendingClassification()); | 396 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 405 } | 397 } |
| 406 | 398 |
| 407 TEST_F(PhishingClassifierDelegateTest, DuplicatePageCapture) { | 399 TEST_F(PhishingClassifierDelegateTest, DuplicatePageCapture) { |
| 408 // Tests that a second PageCaptured notification causes classification to | 400 // Tests that a second PageCaptured notification causes classification to |
| 409 // be cancelled. | 401 // be cancelled. |
| 410 MockPhishingClassifier* classifier = | 402 MockPhishingClassifier* classifier = |
| 411 new StrictMock<MockPhishingClassifier>(view()); | 403 new StrictMock<MockPhishingClassifier>(view()); |
| 412 PhishingClassifierDelegate* delegate = | 404 PhishingClassifierDelegate* delegate = |
| 413 PhishingClassifierDelegate::Create(view(), classifier); | 405 PhishingClassifierDelegate::Create(view(), classifier); |
| 414 MockScorer scorer; | 406 MockScorer scorer; |
| 415 delegate->SetPhishingScorer(&scorer); | 407 delegate->SetPhishingScorer(&scorer); |
| 416 ASSERT_TRUE(classifier->is_ready()); | 408 ASSERT_TRUE(classifier->is_ready()); |
| 417 | 409 |
| 418 EXPECT_CALL(*classifier, CancelPendingClassification()); | 410 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 419 responses_["http://host.com/"] = "<html><body>phish</body></html>"; | 411 responses_["http://host.com/"] = "<html><body>phish</body></html>"; |
| 420 LoadURL("http://host.com/"); | 412 LoadURL("http://host.com/"); |
| 421 Mock::VerifyAndClearExpectations(classifier); | 413 Mock::VerifyAndClearExpectations(classifier); |
| 422 OnStartPhishingDetection(delegate, GURL("http://host.com/")); | 414 OnStartPhishingDetection(delegate, GURL("http://host.com/")); |
| 423 string16 page_text = ASCIIToUTF16("phish"); | 415 string16 page_text = ASCIIToUTF16("phish"); |
| 424 { | 416 { |
| 425 InSequence s; | 417 InSequence s; |
| 426 EXPECT_CALL(*classifier, CancelPendingClassification()); | 418 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 427 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 419 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 428 WillOnce(DeleteArg<1>()); | |
| 429 delegate->PageCaptured(&page_text, false); | 420 delegate->PageCaptured(&page_text, false); |
| 430 Mock::VerifyAndClearExpectations(classifier); | 421 Mock::VerifyAndClearExpectations(classifier); |
| 431 } | 422 } |
| 432 | 423 |
| 433 page_text = ASCIIToUTF16("phish"); | 424 page_text = ASCIIToUTF16("phish"); |
| 434 EXPECT_CALL(*classifier, CancelPendingClassification()); | 425 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 435 delegate->PageCaptured(&page_text, false); | 426 delegate->PageCaptured(&page_text, false); |
| 436 Mock::VerifyAndClearExpectations(classifier); | 427 Mock::VerifyAndClearExpectations(classifier); |
| 437 | 428 |
| 438 // The delegate will cancel pending classification on destruction. | 429 // The delegate will cancel pending classification on destruction. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 453 // Start by loading a page to populate the delegate's state. | 444 // Start by loading a page to populate the delegate's state. |
| 454 responses_["http://host.com/"] = "<html><body>phish</body></html>"; | 445 responses_["http://host.com/"] = "<html><body>phish</body></html>"; |
| 455 EXPECT_CALL(*classifier, CancelPendingClassification()); | 446 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 456 LoadURL("http://host.com/#a"); | 447 LoadURL("http://host.com/#a"); |
| 457 Mock::VerifyAndClearExpectations(classifier); | 448 Mock::VerifyAndClearExpectations(classifier); |
| 458 string16 page_text = ASCIIToUTF16("phish"); | 449 string16 page_text = ASCIIToUTF16("phish"); |
| 459 OnStartPhishingDetection(delegate, GURL("http://host.com/#a")); | 450 OnStartPhishingDetection(delegate, GURL("http://host.com/#a")); |
| 460 { | 451 { |
| 461 InSequence s; | 452 InSequence s; |
| 462 EXPECT_CALL(*classifier, CancelPendingClassification()); | 453 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 463 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)). | 454 EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)); |
| 464 WillOnce(DeleteArg<1>()); | |
| 465 delegate->PageCaptured(&page_text, false); | 455 delegate->PageCaptured(&page_text, false); |
| 466 Mock::VerifyAndClearExpectations(classifier); | 456 Mock::VerifyAndClearExpectations(classifier); |
| 467 } | 457 } |
| 468 | 458 |
| 469 // Now run the callback to simulate the classifier finishing. | 459 // Now run the callback to simulate the classifier finishing. |
| 470 ClientPhishingRequest verdict; | 460 ClientPhishingRequest verdict; |
| 471 verdict.set_url("http://host.com/#a"); | 461 verdict.set_url("http://host.com/#a"); |
| 472 verdict.set_client_score(0.8f); | 462 verdict.set_client_score(0.8f); |
| 473 verdict.set_is_phishing(false); // Send IPC even if site is not phishing. | 463 verdict.set_is_phishing(false); // Send IPC even if site is not phishing. |
| 474 RunClassificationDone(delegate, verdict); | 464 RunClassificationDone(delegate, verdict); |
| 475 ASSERT_TRUE(verdict_.get()); | 465 ASSERT_TRUE(verdict_.get()); |
| 476 EXPECT_EQ(verdict.SerializeAsString(), verdict_->SerializeAsString()); | 466 EXPECT_EQ(verdict.SerializeAsString(), verdict_->SerializeAsString()); |
| 477 | 467 |
| 478 // The delegate will cancel pending classification on destruction. | 468 // The delegate will cancel pending classification on destruction. |
| 479 EXPECT_CALL(*classifier, CancelPendingClassification()); | 469 EXPECT_CALL(*classifier, CancelPendingClassification()); |
| 480 } | 470 } |
| 481 | 471 |
| 482 } // namespace safe_browsing | 472 } // namespace safe_browsing |
| OLD | NEW |