| 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);
|
| + }
|
| +}
|
|
|