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

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

Issue 2089383005: Add throttling to permission reporter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@add-hooks-to-permission-layer
Patch Set: Add comment Created 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/safe_browsing/permission_reporter_unittest.cc
diff --git a/chrome/browser/safe_browsing/permission_reporter_unittest.cc b/chrome/browser/safe_browsing/permission_reporter_unittest.cc
index 5c96a5fc37e37c9c5b44c8c97fb6f7727f8997f9..c0738dd7bdb375f4049ba183a0057bb29a72ed40 100644
--- a/chrome/browser/safe_browsing/permission_reporter_unittest.cc
+++ b/chrome/browser/safe_browsing/permission_reporter_unittest.cc
@@ -5,6 +5,8 @@
#include "chrome/browser/safe_browsing/permission_reporter.h"
#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_clock.h"
+#include "base/time/time.h"
#include "chrome/common/safe_browsing/permission_report.pb.h"
#include "content/public/browser/permission_type.h"
#include "net/url_request/report_sender.h"
@@ -20,10 +22,14 @@ const char kPermissionActionReportingUploadUrl[] =
"http://safebrowsing.googleusercontent.com/safebrowsing/clientreport/"
"permission-action";
-const char kDummyOrigin[] = "http://example.test/";
-const PermissionType kDummyPermission = PermissionType::GEOLOCATION;
+const int kMaximumReportsPerOriginPerPermissionPerMinute = 5;
+
+const char kDummyOriginOne[] = "http://example.test/";
+const char kDummyOriginTwo[] = "http://example2.test/";
+const PermissionType kDummyPermissionOne = PermissionType::GEOLOCATION;
+const PermissionType kDummyPermissionTwo = PermissionType::NOTIFICATIONS;
const PermissionAction kDummyAction = GRANTED;
-const PermissionReport::PermissionType kDummyPermissionReportPermission =
+const PermissionReport::PermissionType kDummyPermissionReportPermissionOne =
raymes 2016/06/29 07:09:17 nit: maybe we just inline this? Sometimes it's a b
stefanocs 2016/06/30 00:24:51 Done.
PermissionReport::GEOLOCATION;
const PermissionReport::Action kDummyPermissionReportAction =
raymes 2016/06/29 07:09:17 nit: same here.
stefanocs 2016/06/30 00:24:51 Done.
PermissionReport::GRANTED;
@@ -55,31 +61,63 @@ class MockReportSender : public net::ReportSender {
class PermissionReporterTest : public ::testing::Test {
protected:
PermissionReporterTest()
- : mock_report_sender_(new MockReportSender()),
+ : mock_report_sender_(new MockReportSender),
+ clock_(new base::SimpleTestClock),
permission_reporter_(
- new PermissionReporter(base::WrapUnique(mock_report_sender_))) {}
+ new PermissionReporter(base::WrapUnique(mock_report_sender_),
+ base::WrapUnique(clock_))) {}
+
+ bool IsAllowedToSend(content::PermissionType permission, const GURL& origin) {
+ return permission_reporter_->IsAllowedToSend(permission, origin);
+ }
// Owned by |permission_reporter_|.
MockReportSender* mock_report_sender_;
+ // Owned by |permission_reporter_|.
+ base::SimpleTestClock* clock_;
+
std::unique_ptr<PermissionReporter> permission_reporter_;
};
// Test that PermissionReporter::SendReport sends a serialized report string to
// SafeBrowsing CSD servers.
TEST_F(PermissionReporterTest, SendReport) {
- permission_reporter_->SendReport(GURL(kDummyOrigin), kDummyPermission,
+ permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne,
kDummyAction);
PermissionReport permission_report;
ASSERT_TRUE(
permission_report.ParseFromString(mock_report_sender_->latest_report()));
- EXPECT_EQ(kDummyPermissionReportPermission, permission_report.permission());
+ EXPECT_EQ(kDummyPermissionReportPermissionOne,
+ permission_report.permission());
EXPECT_EQ(kDummyPermissionReportAction, permission_report.action());
- EXPECT_EQ(kDummyOrigin, permission_report.origin());
+ EXPECT_EQ(kDummyOriginOne, permission_report.origin());
EXPECT_EQ(GURL(kPermissionActionReportingUploadUrl),
mock_report_sender_->latest_report_uri());
}
+// Test that PermissionReporter::IsAllowedToSend returns true only when the
+// number of reports sent in the last one minute per origin per permission is
+// under a threshold.
+TEST_F(PermissionReporterTest, IsAllowedToSend) {
+ EXPECT_TRUE(IsAllowedToSend(kDummyPermissionOne, GURL(kDummyOriginOne)));
+
+ int reports_to_send = kMaximumReportsPerOriginPerPermissionPerMinute;
+ while (reports_to_send--)
+ permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne,
+ kDummyAction);
+
+ EXPECT_FALSE(IsAllowedToSend(kDummyPermissionOne, GURL(kDummyOriginOne)));
+ EXPECT_TRUE(IsAllowedToSend(kDummyPermissionTwo, GURL(kDummyOriginOne)));
+ EXPECT_TRUE(IsAllowedToSend(kDummyPermissionOne, GURL(kDummyOriginTwo)));
+
+ clock_->Advance(base::TimeDelta::FromMinutes(1));
+ EXPECT_FALSE(IsAllowedToSend(kDummyPermissionOne, GURL(kDummyOriginOne)));
+
+ clock_->Advance(base::TimeDelta::FromMicroseconds(1));
+ EXPECT_TRUE(IsAllowedToSend(kDummyPermissionOne, GURL(kDummyOriginOne)));
raymes 2016/06/29 07:09:17 Instead of calling IsAllowedToSend directly, I thi
stefanocs 2016/06/30 00:24:51 Done.
+}
+
} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698