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

Unified Diff: chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc

Issue 6398001: Run pre-classification checks in the browser before starting client-side phishing detection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to trunk and address review comments Created 9 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
diff --git a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
index 76a706ee09d8a58b89f33a418210da1c2f86d73c..8131bf8ad222f5faa2e3d0d57759e677e35d0b2d 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
@@ -89,6 +89,11 @@ class PhishingClassifierDelegateTest : public RenderViewFakeResourcesTest {
message_loop_.Run();
}
+ void OnStartPhishingDetection(PhishingClassifierDelegate* delegate,
+ const GURL& url) {
+ delegate->OnStartPhishingDetection(url);
+ }
+
bool detected_phishing_site_;
GURL detected_url_;
double detected_score_;
@@ -109,6 +114,7 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
"<html><body><iframe src=\"http://sub1.com/\"></iframe></body></html>";
LoadURL("http://host.com/");
Mock::VerifyAndClearExpectations(classifier);
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
string16 page_text = ASCIIToUTF16("dummy");
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
@@ -122,6 +128,7 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
GetMainFrame()->reload();
message_loop_.Run();
Mock::VerifyAndClearExpectations(classifier);
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
delegate->PageCaptured(page_text);
// Navigating in a subframe will increment the page id, but not change
@@ -132,12 +139,14 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
WebKit::WebURLRequest(GURL("http://sub2.com/")));
message_loop_.Run();
Mock::VerifyAndClearExpectations(classifier);
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
delegate->PageCaptured(page_text);
// Scrolling to an anchor will increment the page id, but should not
// not trigger a reclassification. A pending classification should not
// be cancelled, since the content is not changing.
LoadURL("http://host.com/#foo");
+ OnStartPhishingDetection(delegate, GURL("http://host.com/#foo"));
delegate->PageCaptured(page_text);
// Now load a new toplevel page, which should trigger another classification.
@@ -147,14 +156,26 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
page_text = ASCIIToUTF16("dummy2");
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
+ OnStartPhishingDetection(delegate, GURL("http://host2.com/"));
delegate->PageCaptured(page_text);
Mock::VerifyAndClearExpectations(classifier);
+ // No classification should happen on back/forward navigation.
+ // Note: in practice, the browser will not send a StartPhishingDetection IPC
+ // in this case. However, we want to make sure that the delegate behaves
+ // correctly regardless.
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ GoBack();
+ Mock::VerifyAndClearExpectations(classifier);
+ page_text = ASCIIToUTF16("dummy");
+ OnStartPhishingDetection(delegate, GURL("http://host.com/#foo"));
+ delegate->PageCaptured(page_text);
+
// The delegate will cancel pending classification on destruction.
EXPECT_CALL(*classifier, CancelPendingClassification());
}
-TEST_F(PhishingClassifierDelegateTest, PendingClassification) {
+TEST_F(PhishingClassifierDelegateTest, NoScorer) {
// For this test, we'll create the delegate with no scorer available yet.
MockPhishingClassifier* classifier =
new StrictMock<MockPhishingClassifier>(view_);
@@ -165,10 +186,12 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification) {
// Queue up a pending classification, cancel it, then queue up another one.
LoadURL("http://host.com/");
string16 page_text = ASCIIToUTF16("dummy");
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
delegate->PageCaptured(page_text);
LoadURL("http://host2.com/");
page_text = ASCIIToUTF16("dummy2");
+ OnStartPhishingDetection(delegate, GURL("http://host2.com/"));
delegate->PageCaptured(page_text);
// Now set a scorer, which should cause a classifier to be created and
@@ -185,7 +208,7 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification) {
EXPECT_CALL(*classifier, CancelPendingClassification());
}
-TEST_F(PhishingClassifierDelegateTest, PendingClassification_Ref) {
+TEST_F(PhishingClassifierDelegateTest, NoScorer_Ref) {
// Similar to the last test, but navigates within the page before
// setting the scorer.
MockPhishingClassifier* classifier =
@@ -196,17 +219,17 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification_Ref) {
// Queue up a pending classification, cancel it, then queue up another one.
LoadURL("http://host.com/");
- string16 orig_page_text = ASCIIToUTF16("dummy");
- string16 page_text = orig_page_text;
+ string16 page_text = ASCIIToUTF16("dummy");
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
delegate->PageCaptured(page_text);
LoadURL("http://host.com/#foo");
- page_text = orig_page_text;
+ OnStartPhishingDetection(delegate, GURL("http://host.com/#foo"));
delegate->PageCaptured(page_text);
// Now set a scorer, which should cause a classifier to be created and
// the classification to proceed.
- EXPECT_CALL(*classifier, BeginClassification(Pointee(orig_page_text), _)).
+ EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
MockScorer scorer;
delegate->SetPhishingScorer(&scorer);
@@ -216,6 +239,47 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification_Ref) {
EXPECT_CALL(*classifier, CancelPendingClassification());
}
+TEST_F(PhishingClassifierDelegateTest, NoStartPhishingDetection) {
+ // Tests the behavior when OnStartPhishingDetection has not yet been called
+ // when the page load finishes.
+ MockPhishingClassifier* classifier =
+ new StrictMock<MockPhishingClassifier>(view_);
+ PhishingClassifierDelegate* delegate =
+ new PhishingClassifierDelegate(view_, classifier);
+ MockScorer scorer;
+ delegate->SetPhishingScorer(&scorer);
+ ASSERT_TRUE(classifier->is_ready());
+
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ responses_["http://host.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host.com/");
+ Mock::VerifyAndClearExpectations(classifier);
+ string16 page_text = ASCIIToUTF16("phish");
+ delegate->PageCaptured(page_text);
+ // Now simulate the StartPhishingDetection IPC. We expect classification
+ // to begin.
+ EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
+ WillOnce(DeleteArg<1>());
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
+ Mock::VerifyAndClearExpectations(classifier);
+
+ // Now try again, but this time we will navigate the page away before
+ // the IPC is sent.
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ responses_["http://host2.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host2.com/");
+ delegate->PageCaptured(page_text);
+
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ responses_["http://host3.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host3.com/");
+ Mock::VerifyAndClearExpectations(classifier);
+ OnStartPhishingDetection(delegate, GURL("http://host2.com/"));
+
+ // The delegate will cancel pending classification on destruction.
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+}
+
TEST_F(PhishingClassifierDelegateTest, DetectedPhishingSite) {
// Tests that a DetectedPhishingSite IPC is sent to the browser
// if a site comes back as phishy.
@@ -235,6 +299,7 @@ TEST_F(PhishingClassifierDelegateTest, DetectedPhishingSite) {
string16 page_text = ASCIIToUTF16("phish");
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
+ OnStartPhishingDetection(delegate, GURL("http://host.com/"));
delegate->PageCaptured(page_text);
Mock::VerifyAndClearExpectations(classifier);

Powered by Google App Engine
This is Rietveld 408576698