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

Side by Side 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: Merged with ToT 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_webrequest_time_tracker.h" 5 #include "chrome/browser/extensions/extension_webrequest_time_tracker.h"
6 6
7 #include "testing/gmock/include/gmock/gmock.h"
7 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
8 9
9 namespace { 10 namespace {
10 const base::TimeDelta kRequestDelta = base::TimeDelta::FromMilliseconds(100); 11 const base::TimeDelta kRequestDelta = base::TimeDelta::FromMilliseconds(100);
11 const base::TimeDelta kTinyDelay = base::TimeDelta::FromMilliseconds(1); 12 const base::TimeDelta kTinyDelay = base::TimeDelta::FromMilliseconds(1);
12 const base::TimeDelta kModerateDelay = base::TimeDelta::FromMilliseconds(25); 13 const base::TimeDelta kModerateDelay = base::TimeDelta::FromMilliseconds(25);
13 const base::TimeDelta kExcessiveDelay = base::TimeDelta::FromMilliseconds(75); 14 const base::TimeDelta kExcessiveDelay = base::TimeDelta::FromMilliseconds(75);
15
16 class ExtensionWebRequestTimeTrackerDelegateMock
17 : public ExtensionWebRequestTimeTrackerDelegate {
18 public:
19 MOCK_METHOD4(NotifyExcessiveDelays,
20 void (void*, size_t, size_t, const std::set<std::string>&));
21 MOCK_METHOD4(NotifyModerateDelays,
22 void (void*, size_t, size_t, const std::set<std::string>&));
23 };
24
14 } // namespace 25 } // namespace
15 26
16 //class ExtensionWebRequestTimeTrackerTest : public testing::Test {}; 27 //class ExtensionWebRequestTimeTrackerTest : public testing::Test {};
17 28
18 TEST(ExtensionWebRequestTimeTrackerTest, Basic) { 29 TEST(ExtensionWebRequestTimeTrackerTest, Basic) {
19 ExtensionWebRequestTimeTracker tracker; 30 ExtensionWebRequestTimeTracker tracker;
20 base::Time start; 31 base::Time start;
32 void* profile = NULL;
21 33
22 tracker.LogRequestStartTime(42, start, GURL()); 34 tracker.LogRequestStartTime(42, start, GURL(), profile);
23 EXPECT_EQ(1u, tracker.request_time_logs_.size()); 35 EXPECT_EQ(1u, tracker.request_time_logs_.size());
24 ASSERT_EQ(1u, tracker.request_ids_.size()); 36 ASSERT_EQ(1u, tracker.request_ids_.size());
25 EXPECT_EQ(42, tracker.request_ids_.front()); 37 EXPECT_EQ(42, tracker.request_ids_.front());
26 tracker.LogRequestEndTime(42, start + kRequestDelta); 38 tracker.LogRequestEndTime(42, start + kRequestDelta);
27 EXPECT_EQ(1u, tracker.request_time_logs_.size()); 39 EXPECT_EQ(1u, tracker.request_time_logs_.size());
28 EXPECT_EQ(0u, tracker.moderate_delays_.size()); 40 EXPECT_EQ(0u, tracker.moderate_delays_.size());
29 EXPECT_EQ(0u, tracker.excessive_delays_.size()); 41 EXPECT_EQ(0u, tracker.excessive_delays_.size());
30 } 42 }
31 43
32 TEST(ExtensionWebRequestTimeTrackerTest, CancelOrRedirect) { 44 TEST(ExtensionWebRequestTimeTrackerTest, CancelOrRedirect) {
33 ExtensionWebRequestTimeTracker tracker; 45 ExtensionWebRequestTimeTracker tracker;
34 base::Time start; 46 base::Time start;
47 void* profile = NULL;
35 48
36 tracker.LogRequestStartTime(1, start, GURL()); 49 tracker.LogRequestStartTime(1, start, GURL(), profile);
37 EXPECT_EQ(1u, tracker.request_time_logs_.size()); 50 EXPECT_EQ(1u, tracker.request_time_logs_.size());
38 tracker.SetRequestCanceled(1); 51 tracker.SetRequestCanceled(1);
39 tracker.LogRequestEndTime(1, start + kRequestDelta); 52 tracker.LogRequestEndTime(1, start + kRequestDelta);
40 EXPECT_EQ(0u, tracker.request_time_logs_.size()); 53 EXPECT_EQ(0u, tracker.request_time_logs_.size());
41 54
42 tracker.LogRequestStartTime(2, start, GURL()); 55 tracker.LogRequestStartTime(2, start, GURL(), profile);
43 EXPECT_EQ(1u, tracker.request_time_logs_.size()); 56 EXPECT_EQ(1u, tracker.request_time_logs_.size());
44 tracker.SetRequestRedirected(2); 57 tracker.SetRequestRedirected(2);
45 tracker.LogRequestEndTime(2, start + kRequestDelta); 58 tracker.LogRequestEndTime(2, start + kRequestDelta);
46 EXPECT_EQ(0u, tracker.request_time_logs_.size()); 59 EXPECT_EQ(0u, tracker.request_time_logs_.size());
47 } 60 }
48 61
49 TEST(ExtensionWebRequestTimeTrackerTest, Delays) { 62 TEST(ExtensionWebRequestTimeTrackerTest, Delays) {
50 ExtensionWebRequestTimeTracker tracker; 63 ExtensionWebRequestTimeTracker tracker;
51 base::Time start; 64 base::Time start;
52 std::string extension1_id("1"); 65 std::string extension1_id("1");
53 std::string extension2_id("2"); 66 std::string extension2_id("2");
67 void* profile = NULL;
54 68
55 // Start 3 requests with different amounts of delay from 2 extensions. 69 // Start 3 requests with different amounts of delay from 2 extensions.
56 tracker.LogRequestStartTime(1, start, GURL()); 70 tracker.LogRequestStartTime(1, start, GURL(), profile);
57 tracker.LogRequestStartTime(2, start, GURL()); 71 tracker.LogRequestStartTime(2, start, GURL(), profile);
58 tracker.LogRequestStartTime(3, start, GURL()); 72 tracker.LogRequestStartTime(3, start, GURL(), profile);
59 tracker.IncrementExtensionBlockTime(extension1_id, 1, kTinyDelay); 73 tracker.IncrementExtensionBlockTime(extension1_id, 1, kTinyDelay);
60 tracker.IncrementExtensionBlockTime(extension1_id, 2, kTinyDelay); 74 tracker.IncrementExtensionBlockTime(extension1_id, 2, kTinyDelay);
61 tracker.IncrementExtensionBlockTime(extension1_id, 3, kTinyDelay); 75 tracker.IncrementExtensionBlockTime(extension1_id, 3, kTinyDelay);
62 tracker.IncrementExtensionBlockTime(extension2_id, 2, kModerateDelay); 76 tracker.IncrementExtensionBlockTime(extension2_id, 2, kModerateDelay);
63 tracker.IncrementExtensionBlockTime(extension2_id, 3, kExcessiveDelay); 77 tracker.IncrementExtensionBlockTime(extension2_id, 3, kExcessiveDelay);
64 tracker.IncrementTotalBlockTime(1, kTinyDelay); 78 tracker.IncrementTotalBlockTime(1, kTinyDelay);
65 tracker.IncrementTotalBlockTime(2, kModerateDelay); 79 tracker.IncrementTotalBlockTime(2, kModerateDelay);
66 tracker.IncrementTotalBlockTime(3, kExcessiveDelay); 80 tracker.IncrementTotalBlockTime(3, kExcessiveDelay);
67 tracker.LogRequestEndTime(1, start + kRequestDelta); 81 tracker.LogRequestEndTime(1, start + kRequestDelta);
68 tracker.LogRequestEndTime(2, start + kRequestDelta); 82 tracker.LogRequestEndTime(2, start + kRequestDelta);
69 tracker.LogRequestEndTime(3, start + kRequestDelta); 83 tracker.LogRequestEndTime(3, start + kRequestDelta);
70 EXPECT_EQ(3u, tracker.request_time_logs_.size()); 84 EXPECT_EQ(3u, tracker.request_time_logs_.size());
71 EXPECT_EQ(1u, tracker.moderate_delays_.size()); 85 EXPECT_EQ(1u, tracker.moderate_delays_.size());
72 EXPECT_EQ(1u, tracker.moderate_delays_.count(2)); 86 EXPECT_EQ(1u, tracker.moderate_delays_.count(2));
73 EXPECT_EQ(1u, tracker.excessive_delays_.size()); 87 EXPECT_EQ(1u, tracker.excessive_delays_.size());
74 EXPECT_EQ(1u, tracker.excessive_delays_.count(3)); 88 EXPECT_EQ(1u, tracker.excessive_delays_.count(3));
75 89
76 // Now issue a bunch more requests and ensure that the old delays are 90 // Now issue a bunch more requests and ensure that the old delays are
77 // forgotten. 91 // forgotten.
78 for (int64 i = 4; i < 500; ++i) { 92 for (int64 i = 4; i < 500; ++i) {
79 tracker.LogRequestStartTime(i, start, GURL()); 93 tracker.LogRequestStartTime(i, start, GURL(), profile);
80 tracker.LogRequestEndTime(i, start + kRequestDelta); 94 tracker.LogRequestEndTime(i, start + kRequestDelta);
81 } 95 }
82 EXPECT_EQ(0u, tracker.moderate_delays_.size()); 96 EXPECT_EQ(0u, tracker.moderate_delays_.size());
83 EXPECT_EQ(0u, tracker.excessive_delays_.size()); 97 EXPECT_EQ(0u, tracker.excessive_delays_.size());
84 } 98 }
99
100 TEST(ExtensionWebRequestTimeTrackerTest, Delegate) {
101 using testing::_;
102 using testing::Mock;
103
104 ExtensionWebRequestTimeTrackerDelegateMock* delegate(
105 new ExtensionWebRequestTimeTrackerDelegateMock);
106 ExtensionWebRequestTimeTracker tracker;
107 tracker.SetDelegate(delegate);
108 base::Time start;
109 std::string extension1_id("1");
110 void* profile = NULL;
111 // Set of all extensions that blocked network requests.
112 std::set<std::string> extensions;
113 extensions.insert(extension1_id);
114
115 const int num_moderate_delays = 51;
116 const int num_excessive_delays = 11;
117 int request_nr = 0;
118
119 // Check that (only) the last moderate delay triggers the delegate callback.
120 for (int64 i = 0; i < num_moderate_delays; ++i) {
121 request_nr++;
122 if (i == num_moderate_delays-1) {
123 EXPECT_CALL(*delegate,
124 NotifyModerateDelays(profile , i+1, request_nr, extensions));
125 }
126 tracker.LogRequestStartTime(request_nr, start, GURL(), profile);
127 tracker.IncrementExtensionBlockTime(extension1_id, request_nr,
128 kModerateDelay);
129 tracker.IncrementTotalBlockTime(request_nr, kModerateDelay);
130 tracker.LogRequestEndTime(request_nr, start + kRequestDelta);
131 Mock::VerifyAndClearExpectations(delegate);
132 }
133
134 // Check that (only) the last excessive delay triggers the delegate callback.
135 for (int64 i = 0; i < num_excessive_delays; ++i) {
136 request_nr++;
137 if (i == num_excessive_delays-1) {
138 EXPECT_CALL(*delegate,
139 NotifyExcessiveDelays(profile, i+1, request_nr, extensions));
140 }
141 tracker.LogRequestStartTime(request_nr, start, GURL(), profile);
142 tracker.IncrementExtensionBlockTime(extension1_id, request_nr,
143 kExcessiveDelay);
144 tracker.IncrementTotalBlockTime(request_nr, kExcessiveDelay);
145 tracker.LogRequestEndTime(request_nr, start + kRequestDelta);
146 Mock::VerifyAndClearExpectations(delegate);
147 }
148 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_webrequest_time_tracker.cc ('k') | chrome/browser/resources/options/extension_list.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698