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

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: Fix switch/case formatting Created 9 years, 11 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 f24d8f478a604deb8b4398feed409582eaf58bb1..b46e4063fecb36e21dcd5c26d62b40a28445b74c 100644
--- a/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
+++ b/chrome/renderer/safe_browsing/phishing_classifier_delegate_browsertest.cc
@@ -112,6 +112,7 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
delegate.CommittedLoadInFrame(GetMainFrame());
delegate.CommittedLoadInFrame(child_frame);
Mock::VerifyAndClearExpectations(classifier);
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
delegate.FinishedLoad(&page_text);
@@ -123,6 +124,8 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
EXPECT_CALL(*classifier, CancelPendingClassification());
delegate.CommittedLoadInFrame(GetMainFrame());
Mock::VerifyAndClearExpectations(classifier);
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
+ page_text = ASCIIToUTF16("dummy");
delegate.FinishedLoad(&page_text);
// Navigating in a subframe will increment the page id, but not change
@@ -133,6 +136,8 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
EXPECT_CALL(*classifier, CancelPendingClassification());
delegate.CommittedLoadInFrame(child_frame);
Mock::VerifyAndClearExpectations(classifier);
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
+ page_text = ASCIIToUTF16("dummy");
delegate.FinishedLoad(&page_text);
// Scrolling to an anchor will increment the page id, but should not
@@ -140,24 +145,39 @@ TEST_F(PhishingClassifierDelegateTest, Navigation) {
// be cancelled, since the content is not changing.
LoadURL("http://host.com/#foo");
delegate.CommittedLoadInFrame(GetMainFrame());
+ delegate.OnStartPhishingDetection(GURL("http://host.com/#foo"));
+ page_text = ASCIIToUTF16("dummy");
delegate.FinishedLoad(&page_text);
// Now load a new toplevel page, which should trigger another classification.
LoadURL("http://host2.com/");
- page_text = ASCIIToUTF16("dummy2");
EXPECT_CALL(*classifier, CancelPendingClassification());
delegate.CommittedLoadInFrame(GetMainFrame());
Mock::VerifyAndClearExpectations(classifier);
+ page_text = ASCIIToUTF16("dummy2");
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
+ delegate.OnStartPhishingDetection(GURL("http://host2.com/"));
delegate.FinishedLoad(&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.
+ GoBack();
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ delegate.CommittedLoadInFrame(GetMainFrame());
+ Mock::VerifyAndClearExpectations(classifier);
+ page_text = ASCIIToUTF16("dummy");
+ delegate.OnStartPhishingDetection(GURL("http://host.com/#foo"));
+ delegate.FinishedLoad(&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_);
@@ -168,11 +188,13 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification) {
LoadURL("http://host.com/");
string16 page_text = ASCIIToUTF16("dummy");
delegate.CommittedLoadInFrame(GetMainFrame());
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
delegate.FinishedLoad(&page_text);
LoadURL("http://host2.com/");
delegate.CommittedLoadInFrame(GetMainFrame());
page_text = ASCIIToUTF16("dummy2");
+ delegate.OnStartPhishingDetection(GURL("http://host2.com/"));
delegate.FinishedLoad(&page_text);
// Now set a scorer, which should cause a classifier to be created and
@@ -189,7 +211,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 =
@@ -202,11 +224,13 @@ TEST_F(PhishingClassifierDelegateTest, PendingClassification_Ref) {
delegate.CommittedLoadInFrame(GetMainFrame());
string16 orig_page_text = ASCIIToUTF16("dummy");
string16 page_text = orig_page_text;
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
delegate.FinishedLoad(&page_text);
LoadURL("http://host.com/#foo");
page_text = orig_page_text;
delegate.CommittedLoadInFrame(GetMainFrame());
+ delegate.OnStartPhishingDetection(GURL("http://host.com/#foo"));
delegate.FinishedLoad(&page_text);
// Now set a scorer, which should cause a classifier to be created and
@@ -221,6 +245,49 @@ 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(view_, classifier);
+ MockScorer scorer;
+ delegate.SetPhishingScorer(&scorer);
+ ASSERT_TRUE(classifier->is_ready());
+
+ responses_["http://host.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host.com/");
+ string16 orig_page_text = ASCIIToUTF16("phish");
+ string16 page_text = orig_page_text;
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ delegate.CommittedLoadInFrame(GetMainFrame());
+ Mock::VerifyAndClearExpectations(classifier);
+ delegate.FinishedLoad(&page_text);
+
+ // Now simulate the StartPhishingDetection IPC. We expect classification
+ // to begin.
+ EXPECT_CALL(*classifier, BeginClassification(Pointee(orig_page_text), _)).
+ WillOnce(DeleteArg<1>());
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
+ Mock::VerifyAndClearExpectations(classifier);
+
+ // Now try again, but this time we will navigate the page away before
+ // the IPC is sent.
+ responses_["http://host2.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host2.com/");
+ EXPECT_CALL(*classifier, CancelPendingClassification());
+ delegate.CommittedLoadInFrame(GetMainFrame());
+ Mock::VerifyAndClearExpectations(classifier);
+ delegate.FinishedLoad(&page_text);
+
+ responses_["http://host3.com/"] = "<html><body>phish</body></html>";
+ LoadURL("http://host3.com/");
+ delegate.OnStartPhishingDetection(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.
@@ -240,6 +307,7 @@ TEST_F(PhishingClassifierDelegateTest, DetectedPhishingSite) {
Mock::VerifyAndClearExpectations(classifier);
EXPECT_CALL(*classifier, BeginClassification(Pointee(page_text), _)).
WillOnce(DeleteArg<1>());
+ delegate.OnStartPhishingDetection(GURL("http://host.com/"));
delegate.FinishedLoad(&page_text);
Mock::VerifyAndClearExpectations(classifier);

Powered by Google App Engine
This is Rietveld 408576698