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

Unified Diff: chrome/browser/extensions/extension_webrequest_time_tracker_unittest.cc

Issue 8176001: Warn user in case extension delays network traffic too much. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Cleanup Created 9 years, 2 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/extensions/extension_webrequest_time_tracker_unittest.cc
diff --git a/chrome/browser/extensions/extension_webrequest_time_tracker_unittest.cc b/chrome/browser/extensions/extension_webrequest_time_tracker_unittest.cc
index 9439354ae47ffc46287e439692495f8ed075c1be..522572e9ffd679d114b1ff4d55e1817130b240f5 100644
--- a/chrome/browser/extensions/extension_webrequest_time_tracker_unittest.cc
+++ b/chrome/browser/extensions/extension_webrequest_time_tracker_unittest.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/extensions/extension_webrequest_time_tracker.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -11,6 +12,16 @@ const base::TimeDelta kRequestDelta = base::TimeDelta::FromMilliseconds(100);
const base::TimeDelta kTinyDelay = base::TimeDelta::FromMilliseconds(1);
const base::TimeDelta kModerateDelay = base::TimeDelta::FromMilliseconds(25);
const base::TimeDelta kExcessiveDelay = base::TimeDelta::FromMilliseconds(75);
+
+class ExtensionWebRequestTimeTrackerDelegateMock
+ : public ExtensionWebRequestTimeTrackerDelegate {
+ public:
+ MOCK_METHOD4(NotifyExcessiveDelays,
+ void (void*, size_t, size_t, const std::set<std::string>&));
+ MOCK_METHOD4(NotifyModerateDelays,
+ void (void*, size_t, size_t, const std::set<std::string>&));
+};
+
} // namespace
//class ExtensionWebRequestTimeTrackerTest : public testing::Test {};
@@ -18,8 +29,9 @@ const base::TimeDelta kExcessiveDelay = base::TimeDelta::FromMilliseconds(75);
TEST(ExtensionWebRequestTimeTrackerTest, Basic) {
ExtensionWebRequestTimeTracker tracker;
base::Time start;
+ void* profile = NULL;
- tracker.LogRequestStartTime(42, start, GURL());
+ tracker.LogRequestStartTime(42, start, GURL(), profile);
EXPECT_EQ(1u, tracker.request_time_logs_.size());
ASSERT_EQ(1u, tracker.request_ids_.size());
EXPECT_EQ(42, tracker.request_ids_.front());
@@ -32,14 +44,15 @@ TEST(ExtensionWebRequestTimeTrackerTest, Basic) {
TEST(ExtensionWebRequestTimeTrackerTest, CancelOrRedirect) {
ExtensionWebRequestTimeTracker tracker;
base::Time start;
+ void* profile = NULL;
- tracker.LogRequestStartTime(1, start, GURL());
+ tracker.LogRequestStartTime(1, start, GURL(), profile);
EXPECT_EQ(1u, tracker.request_time_logs_.size());
tracker.SetRequestCanceled(1);
tracker.LogRequestEndTime(1, start + kRequestDelta);
EXPECT_EQ(0u, tracker.request_time_logs_.size());
- tracker.LogRequestStartTime(2, start, GURL());
+ tracker.LogRequestStartTime(2, start, GURL(), profile);
EXPECT_EQ(1u, tracker.request_time_logs_.size());
tracker.SetRequestRedirected(2);
tracker.LogRequestEndTime(2, start + kRequestDelta);
@@ -51,11 +64,12 @@ TEST(ExtensionWebRequestTimeTrackerTest, Delays) {
base::Time start;
std::string extension1_id("1");
std::string extension2_id("2");
+ void* profile = NULL;
// Start 3 requests with different amounts of delay from 2 extensions.
- tracker.LogRequestStartTime(1, start, GURL());
- tracker.LogRequestStartTime(2, start, GURL());
- tracker.LogRequestStartTime(3, start, GURL());
+ tracker.LogRequestStartTime(1, start, GURL(), profile);
+ tracker.LogRequestStartTime(2, start, GURL(), profile);
+ tracker.LogRequestStartTime(3, start, GURL(), profile);
tracker.IncrementExtensionBlockTime(extension1_id, 1, kTinyDelay);
tracker.IncrementExtensionBlockTime(extension1_id, 2, kTinyDelay);
tracker.IncrementExtensionBlockTime(extension1_id, 3, kTinyDelay);
@@ -76,9 +90,59 @@ TEST(ExtensionWebRequestTimeTrackerTest, Delays) {
// Now issue a bunch more requests and ensure that the old delays are
// forgotten.
for (int64 i = 4; i < 500; ++i) {
- tracker.LogRequestStartTime(i, start, GURL());
+ tracker.LogRequestStartTime(i, start, GURL(), profile);
tracker.LogRequestEndTime(i, start + kRequestDelta);
}
EXPECT_EQ(0u, tracker.moderate_delays_.size());
EXPECT_EQ(0u, tracker.excessive_delays_.size());
}
+
+TEST(ExtensionWebRequestTimeTrackerTest, Delegate) {
+ using testing::_;
+ using testing::Mock;
+
+ ExtensionWebRequestTimeTrackerDelegateMock* delegate(
+ new ExtensionWebRequestTimeTrackerDelegateMock);
+ ExtensionWebRequestTimeTracker tracker;
+ tracker.SetDelegate(delegate);
+ base::Time start;
+ std::string extension1_id("1");
+ void* profile = NULL;
+ // Set of all extensions that blocked network requests.
+ std::set<std::string> extensions;
+ extensions.insert(extension1_id);
+
+ const int num_moderate_delays = 51;
+ const int num_excessive_delays = 11;
+ int request_nr = 0;
+
+ // Check that (only) the last moderate delay triggers the delegate callback.
+ for (int64 i = 0; i < num_moderate_delays; ++i) {
+ request_nr++;
+ if (i == num_moderate_delays-1) {
+ EXPECT_CALL(*delegate,
+ NotifyModerateDelays(profile , i+1, request_nr, extensions));
+ }
+ tracker.LogRequestStartTime(request_nr, start, GURL(), profile);
+ tracker.IncrementExtensionBlockTime(extension1_id, request_nr,
+ kModerateDelay);
+ tracker.IncrementTotalBlockTime(request_nr, kModerateDelay);
+ tracker.LogRequestEndTime(request_nr, start + kRequestDelta);
+ Mock::VerifyAndClearExpectations(delegate);
+ }
+
+ // Check that (only) the last excessive delay triggers the delegate callback.
+ for (int64 i = 0; i < num_excessive_delays; ++i) {
+ request_nr++;
+ if (i == num_excessive_delays-1) {
+ EXPECT_CALL(*delegate,
+ NotifyExcessiveDelays(profile, i+1, request_nr, extensions));
+ }
+ tracker.LogRequestStartTime(request_nr, start, GURL(), profile);
+ tracker.IncrementExtensionBlockTime(extension1_id, request_nr,
+ kExcessiveDelay);
+ tracker.IncrementTotalBlockTime(request_nr, kExcessiveDelay);
+ tracker.LogRequestEndTime(request_nr, start + kRequestDelta);
+ Mock::VerifyAndClearExpectations(delegate);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698