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

Unified Diff: chrome/browser/safe_browsing/client_side_detection_service_unittest.cc

Issue 7583007: Add "enabled" state to the ClientSideDetectionService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 9 years, 4 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/browser/safe_browsing/client_side_detection_service_unittest.cc
diff --git a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
index 38f4bdcd3a8d343170c5cda71871bb9652549d93..760b2a84cf15e19c4c2c1ea86050cf3c4f8a5259 100644
--- a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc
@@ -25,7 +25,10 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using ::testing::_;
+using ::testing::Invoke;
using ::testing::Mock;
+using ::testing::StrictMock;
namespace safe_browsing {
namespace {
@@ -35,6 +38,17 @@ class MockClientSideDetectionService : public ClientSideDetectionService {
virtual ~MockClientSideDetectionService() {}
MOCK_METHOD1(EndFetchModel, void(ClientModelStatus));
+ MOCK_METHOD1(ScheduleFetchModel, void(int64));
+
+ void Schedule(int64) {
+ // Ignore the delay when testing.
+ StartFetchModel();
+ }
+
+ void Disable(int) {
+ // Ignore the status.
+ SetEnabled(false);
+ }
private:
DISALLOW_COPY_AND_ASSIGN(MockClientSideDetectionService);
@@ -43,6 +57,7 @@ class MockClientSideDetectionService : public ClientSideDetectionService {
ACTION(QuitCurrentMessageLoop) {
MessageLoop::current()->Quit();
}
+
} // namespace
class ClientSideDetectionServiceTest : public TestingBrowserProcessTest {
@@ -172,6 +187,8 @@ TEST_F(ClientSideDetectionServiceTest, FetchModelTest) {
// the real EndFetchModel. It would reschedule a reload which might
// make the test flaky.
MockClientSideDetectionService service;
+ EXPECT_CALL(service, ScheduleFetchModel(_)).Times(1);
+ service.SetEnabled(true);
// The model fetch failed.
SetModelFetchResponse("blamodel", false /* failure */);
@@ -281,6 +298,7 @@ TEST_F(ClientSideDetectionServiceTest, FetchModelTest) {
TEST_F(ClientSideDetectionServiceTest, ServiceObjectDeletedBeforeCallbackDone) {
SetModelFetchResponse("bogus model", true /* success */);
csd_service_.reset(ClientSideDetectionService::Create(NULL));
+ csd_service_->SetEnabled(true);
EXPECT_TRUE(csd_service_.get() != NULL);
// We delete the client-side detection service class even though the callbacks
// haven't run yet.
@@ -293,6 +311,7 @@ TEST_F(ClientSideDetectionServiceTest, ServiceObjectDeletedBeforeCallbackDone) {
TEST_F(ClientSideDetectionServiceTest, SendClientReportPhishingRequest) {
SetModelFetchResponse("bogus model", true /* success */);
csd_service_.reset(ClientSideDetectionService::Create(NULL));
+ csd_service_->SetEnabled(true);
GURL url("http://a.com/");
float score = 0.4f; // Some random client score.
@@ -559,4 +578,72 @@ TEST_F(ClientSideDetectionServiceTest, ModelHasValidHashIds) {
rule->set_feature(2, 1);
EXPECT_TRUE(ClientSideDetectionService::ModelHasValidHashIds(model));
}
+
+TEST_F(ClientSideDetectionServiceTest, SetEnabled) {
+ // Check that the model isn't downloaded until the service is enabled.
+ csd_service_.reset(ClientSideDetectionService::Create(NULL));
+ EXPECT_FALSE(csd_service_->enabled());
+ EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL);
+
+ // Use a MockClientSideDetectionService for the rest of the test, to avoid
+ // the scheduling delay.
+ MockClientSideDetectionService* service =
+ new StrictMock<MockClientSideDetectionService>();
+ csd_service_.reset(service);
+ EXPECT_FALSE(csd_service_->enabled());
+ EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL);
+ // No calls expected yet.
+ Mock::VerifyAndClearExpectations(service);
+
+ ClientSideModel model;
+ model.set_version(10);
+ model.set_max_words_per_term(4);
+ SetModelFetchResponse(model.SerializeAsString(), true /* success */);
+ EXPECT_CALL(*service, ScheduleFetchModel(_))
+ .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule));
+ EXPECT_CALL(*service, EndFetchModel(
+ ClientSideDetectionService::MODEL_SUCCESS))
+ .WillOnce(QuitCurrentMessageLoop());
+ csd_service_->SetEnabled(true);
+ EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL);
+ msg_loop_.Run(); // EndFetchModel will quit the message loop.
+ Mock::VerifyAndClearExpectations(service);
+
+ // Check that enabling again doesn't request the model.
+ csd_service_->SetEnabled(true);
+ // No calls expected.
+ Mock::VerifyAndClearExpectations(service);
+
+ // Check that disabling the service cancels pending requests.
+ EXPECT_CALL(*service, ScheduleFetchModel(_))
+ .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule));
+ csd_service_->SetEnabled(false);
+ csd_service_->SetEnabled(true);
+ Mock::VerifyAndClearExpectations(service);
+ EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL);
+ csd_service_->SetEnabled(false);
+ EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL);
+ msg_loop_.RunAllPending();
+ // No calls expected.
+ Mock::VerifyAndClearExpectations(service);
+
+ // Requests always return false when the service is disabled.
+ ClientPhishingResponse response;
+ response.set_phishy(true);
+ SetClientReportPhishingResponse(response.SerializeAsString(),
+ true /* success */);
+ EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f));
+
+ // Pending requests also return false if the service is disabled before they
+ // report back.
+ EXPECT_CALL(*service, ScheduleFetchModel(_))
+ .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule));
+ EXPECT_CALL(*service, EndFetchModel(
+ ClientSideDetectionService::MODEL_NOT_CHANGED))
+ .WillOnce(Invoke(service, &MockClientSideDetectionService::Disable));
+ csd_service_->SetEnabled(true);
+ EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f));
+ Mock::VerifyAndClearExpectations(service);
+}
+
} // namespace safe_browsing
« no previous file with comments | « chrome/browser/safe_browsing/client_side_detection_service.cc ('k') | chrome/browser/safe_browsing/safe_browsing_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698