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

Side by Side Diff: chrome/browser/extensions/extensions_quota_service_unittest.cc

Issue 10871034: Make all quota-exceeding messages in the storage API explain what the failure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update... the other error message Created 8 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/message_loop.h" 5 #include "base/message_loop.h"
6 #include "base/process.h" 6 #include "base/process.h"
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "chrome/browser/extensions/extension_function.h" 9 #include "chrome/browser/extensions/extension_function.h"
10 #include "chrome/browser/extensions/extensions_quota_service.h" 10 #include "chrome/browser/extensions/extensions_quota_service.h"
11 #include "content/public/test/test_browser_thread.h" 11 #include "content/public/test/test_browser_thread.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 using base::TimeDelta; 14 using base::TimeDelta;
15 using base::TimeTicks; 15 using base::TimeTicks;
16 using content::BrowserThread; 16 using content::BrowserThread;
17 17
18 typedef QuotaLimitHeuristic::Bucket Bucket; 18 typedef QuotaLimitHeuristic::Bucket Bucket;
19 typedef QuotaLimitHeuristic::Config Config; 19 typedef QuotaLimitHeuristic::Config Config;
20 typedef QuotaLimitHeuristic::BucketList BucketList; 20 typedef QuotaLimitHeuristic::BucketList BucketList;
21 typedef ExtensionsQuotaService::TimedLimit TimedLimit; 21 typedef ExtensionsQuotaService::TimedLimit TimedLimit;
22 typedef ExtensionsQuotaService::SustainedLimit SustainedLimit; 22 typedef ExtensionsQuotaService::SustainedLimit SustainedLimit;
23 23
24 static const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) }; 24 namespace {
25 static const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) };
26 static const Config k20PerHour = { 20, TimeDelta::FromHours(1) };
27 static const TimeTicks kStartTime = TimeTicks();
28 static const TimeTicks k1MinuteAfterStart =
29 kStartTime + TimeDelta::FromMinutes(1);
30 25
31 namespace { 26 const char kGenericName[] = "name";
27 const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) };
28 const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) };
29 const Config k20PerHour = { 20, TimeDelta::FromHours(1) };
30 const TimeTicks kStartTime = TimeTicks();
31 const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1);
32
32 class Mapper : public QuotaLimitHeuristic::BucketMapper { 33 class Mapper : public QuotaLimitHeuristic::BucketMapper {
33 public: 34 public:
34 Mapper() {} 35 Mapper() {}
35 virtual ~Mapper() { STLDeleteValues(&buckets_); } 36 virtual ~Mapper() { STLDeleteValues(&buckets_); }
36 virtual void GetBucketsForArgs(const ListValue* args, BucketList* buckets) { 37 virtual void GetBucketsForArgs(const ListValue* args, BucketList* buckets) {
37 for (size_t i = 0; i < args->GetSize(); i++) { 38 for (size_t i = 0; i < args->GetSize(); i++) {
38 int id; 39 int id;
39 ASSERT_TRUE(args->GetInteger(i, &id)); 40 ASSERT_TRUE(args->GetInteger(i, &id));
40 if (buckets_.find(id) == buckets_.end()) 41 if (buckets_.find(id) == buckets_.end())
41 buckets_[id] = new Bucket(); 42 buckets_[id] = new Bucket();
(...skipping 26 matching lines...) Expand all
68 protected: 69 protected:
69 virtual ~MockFunction() {} 70 virtual ~MockFunction() {}
70 }; 71 };
71 72
72 class TimedLimitMockFunction : public MockFunction { 73 class TimedLimitMockFunction : public MockFunction {
73 public: 74 public:
74 explicit TimedLimitMockFunction(const std::string& name) 75 explicit TimedLimitMockFunction(const std::string& name)
75 : MockFunction(name) {} 76 : MockFunction(name) {}
76 virtual void GetQuotaLimitHeuristics( 77 virtual void GetQuotaLimitHeuristics(
77 QuotaLimitHeuristics* heuristics) const { 78 QuotaLimitHeuristics* heuristics) const {
78 heuristics->push_back(new TimedLimit(k2PerMinute, new Mapper())); 79 heuristics->push_back(
80 new TimedLimit(k2PerMinute, new Mapper(), kGenericName));
79 } 81 }
80 82
81 private: 83 private:
82 virtual ~TimedLimitMockFunction() {} 84 virtual ~TimedLimitMockFunction() {}
83 }; 85 };
84 86
85 class ChainedLimitsMockFunction : public MockFunction { 87 class ChainedLimitsMockFunction : public MockFunction {
86 public: 88 public:
87 explicit ChainedLimitsMockFunction(const std::string& name) 89 explicit ChainedLimitsMockFunction(const std::string& name)
88 : MockFunction(name) {} 90 : MockFunction(name) {}
89 virtual void GetQuotaLimitHeuristics( 91 virtual void GetQuotaLimitHeuristics(
90 QuotaLimitHeuristics* heuristics) const { 92 QuotaLimitHeuristics* heuristics) const {
91 // No more than 2 per minute sustained over 5 minutes. 93 // No more than 2 per minute sustained over 5 minutes.
92 heuristics->push_back(new SustainedLimit(TimeDelta::FromMinutes(5), 94 heuristics->push_back(new SustainedLimit(
93 k2PerMinute, new Mapper())); 95 TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName));
94 // No more than 20 per hour. 96 // No more than 20 per hour.
95 heuristics->push_back(new TimedLimit(k20PerHour, new Mapper())); 97 heuristics->push_back(
98 new TimedLimit(k20PerHour, new Mapper(), kGenericName));
96 } 99 }
97 100
98 private: 101 private:
99 virtual ~ChainedLimitsMockFunction() {} 102 virtual ~ChainedLimitsMockFunction() {}
100 }; 103 };
101 104
102 class FrozenMockFunction : public MockFunction { 105 class FrozenMockFunction : public MockFunction {
103 public: 106 public:
104 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {} 107 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {}
105 virtual void GetQuotaLimitHeuristics( 108 virtual void GetQuotaLimitHeuristics(
106 QuotaLimitHeuristics* heuristics) const { 109 QuotaLimitHeuristics* heuristics) const {
107 heuristics->push_back(new TimedLimit(kFrozenConfig, new Mapper())); 110 heuristics->push_back(
111 new TimedLimit(kFrozenConfig, new Mapper(), kGenericName));
108 } 112 }
109 113
110 private: 114 private:
111 virtual ~FrozenMockFunction() {} 115 virtual ~FrozenMockFunction() {}
112 }; 116 };
113 } // namespace 117 } // namespace
114 118
115 class ExtensionsQuotaServiceTest : public testing::Test { 119 class ExtensionsQuotaServiceTest : public testing::Test {
116 public: 120 public:
117 ExtensionsQuotaServiceTest() 121 ExtensionsQuotaServiceTest()
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 // These are OK because we haven't exhausted all buckets. 162 // These are OK because we haven't exhausted all buckets.
159 EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(20 + m))); 163 EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(20 + m)));
160 EXPECT_FALSE(b->has_tokens()); 164 EXPECT_FALSE(b->has_tokens());
161 EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(50 + m))); 165 EXPECT_TRUE(lim->Apply(b, start_time + TimeDelta::FromSeconds(50 + m)));
162 EXPECT_FALSE(b->has_tokens()); 166 EXPECT_FALSE(b->has_tokens());
163 } 167 }
164 } 168 }
165 }; 169 };
166 170
167 TEST_F(QuotaLimitHeuristicTest, Timed) { 171 TEST_F(QuotaLimitHeuristicTest, Timed) {
168 TimedLimit lim(k2PerMinute, new MockMapper()); 172 TimedLimit lim(k2PerMinute, new MockMapper(), kGenericName);
169 Bucket b; 173 Bucket b;
170 174
171 b.Reset(k2PerMinute, kStartTime); 175 b.Reset(k2PerMinute, kStartTime);
172 EXPECT_TRUE(lim.Apply(&b, kStartTime)); 176 EXPECT_TRUE(lim.Apply(&b, kStartTime));
173 EXPECT_TRUE(b.has_tokens()); 177 EXPECT_TRUE(b.has_tokens());
174 EXPECT_TRUE(lim.Apply(&b, kStartTime + TimeDelta::FromSeconds(30))); 178 EXPECT_TRUE(lim.Apply(&b, kStartTime + TimeDelta::FromSeconds(30)));
175 EXPECT_FALSE(b.has_tokens()); 179 EXPECT_FALSE(b.has_tokens());
176 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart)); 180 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart));
177 181
178 b.Reset(k2PerMinute, kStartTime); 182 b.Reset(k2PerMinute, kStartTime);
179 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart - TimeDelta::FromSeconds(1))); 183 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart - TimeDelta::FromSeconds(1)));
180 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart)); 184 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart));
181 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(1))); 185 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(1)));
182 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(2))); 186 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(2)));
183 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(3))); 187 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(3)));
184 } 188 }
185 189
186 TEST_F(QuotaLimitHeuristicTest, Sustained) { 190 TEST_F(QuotaLimitHeuristicTest, Sustained) {
187 SustainedLimit lim(TimeDelta::FromMinutes(5), k2PerMinute, new MockMapper()); 191 SustainedLimit lim(
192 TimeDelta::FromMinutes(5), k2PerMinute, new MockMapper(), kGenericName);
188 Bucket bucket; 193 Bucket bucket;
189 194
190 bucket.Reset(k2PerMinute, kStartTime); 195 bucket.Reset(k2PerMinute, kStartTime);
191 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1); 196 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1);
192 // This straw breaks the camel's back. 197 // This straw breaks the camel's back.
193 EXPECT_FALSE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6))); 198 EXPECT_FALSE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6)));
194 199
195 // The heuristic resets itself on a safe request. 200 // The heuristic resets itself on a safe request.
196 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromDays(1))); 201 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromDays(1)));
197 202
198 // Do the same as above except don't exhaust final bucket. 203 // Do the same as above except don't exhaust final bucket.
199 bucket.Reset(k2PerMinute, kStartTime); 204 bucket.Reset(k2PerMinute, kStartTime);
200 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1); 205 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1);
201 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(7))); 206 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(7)));
202 207
203 // Do the same as above except don't exhaust the 3rd (w.l.o.g) bucket. 208 // Do the same as above except don't exhaust the 3rd (w.l.o.g) bucket.
204 bucket.Reset(k2PerMinute, kStartTime); 209 bucket.Reset(k2PerMinute, kStartTime);
205 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, 3); 210 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, 3);
206 // If the 3rd bucket were exhausted, this would fail (see first test). 211 // If the 3rd bucket were exhausted, this would fail (see first test).
207 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6))); 212 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6)));
208 } 213 }
209 214
210 TEST_F(ExtensionsQuotaServiceTest, NoHeuristic) { 215 TEST_F(ExtensionsQuotaServiceTest, NoHeuristic) {
211 scoped_refptr<MockFunction> f(new MockFunction("foo")); 216 scoped_refptr<MockFunction> f(new MockFunction("foo"));
212 ListValue args; 217 ListValue args;
213 EXPECT_TRUE(service_->Assess(extension_a_, f, &args, kStartTime)); 218 EXPECT_EQ("", service_->Assess(extension_a_, f, &args, kStartTime));
214 } 219 }
215 220
216 TEST_F(ExtensionsQuotaServiceTest, FrozenHeuristic) { 221 TEST_F(ExtensionsQuotaServiceTest, FrozenHeuristic) {
217 scoped_refptr<MockFunction> f(new FrozenMockFunction("foo")); 222 scoped_refptr<MockFunction> f(new FrozenMockFunction("foo"));
218 ListValue args; 223 ListValue args;
219 args.Append(new base::FundamentalValue(1)); 224 args.Append(new base::FundamentalValue(1));
220 EXPECT_FALSE(service_->Assess(extension_a_, f, &args, kStartTime)); 225 EXPECT_NE("", service_->Assess(extension_a_, f, &args, kStartTime));
221 } 226 }
222 227
223 TEST_F(ExtensionsQuotaServiceTest, SingleHeuristic) { 228 TEST_F(ExtensionsQuotaServiceTest, SingleHeuristic) {
224 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 229 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
225 ListValue args; 230 ListValue args;
226 args.Append(new base::FundamentalValue(1)); 231 args.Append(new base::FundamentalValue(1));
227 EXPECT_TRUE(service_->Assess(extension_a_, f, &args, kStartTime)); 232 EXPECT_EQ("", service_->Assess(extension_a_, f, &args, kStartTime));
228 EXPECT_TRUE(service_->Assess(extension_a_, f, &args, 233 EXPECT_EQ("", service_->Assess(extension_a_, f, &args,
229 kStartTime + TimeDelta::FromSeconds(10))); 234 kStartTime + TimeDelta::FromSeconds(10)));
230 EXPECT_FALSE(service_->Assess(extension_a_, f, &args, 235 EXPECT_NE("", service_->Assess(extension_a_, f, &args,
231 kStartTime + TimeDelta::FromSeconds(15))); 236 kStartTime + TimeDelta::FromSeconds(15)));
232 237
233 ListValue args2; 238 ListValue args2;
234 args2.Append(new base::FundamentalValue(1)); 239 args2.Append(new base::FundamentalValue(1));
235 args2.Append(new base::FundamentalValue(2)); 240 args2.Append(new base::FundamentalValue(2));
236 EXPECT_TRUE(service_->Assess(extension_b_, f, &args2, kStartTime)); 241 EXPECT_EQ("", service_->Assess(extension_b_, f, &args2, kStartTime));
237 EXPECT_TRUE(service_->Assess(extension_b_, f, &args2, 242 EXPECT_EQ("", service_->Assess(extension_b_, f, &args2,
238 kStartTime + TimeDelta::FromSeconds(10))); 243 kStartTime + TimeDelta::FromSeconds(10)));
239 244
240 TimeDelta peace = TimeDelta::FromMinutes(30); 245 TimeDelta peace = TimeDelta::FromMinutes(30);
241 EXPECT_TRUE(service_->Assess(extension_b_, f, &args, kStartTime + peace)); 246 EXPECT_EQ("", service_->Assess(extension_b_, f, &args, kStartTime + peace));
242 EXPECT_TRUE(service_->Assess(extension_b_, f, &args, 247 EXPECT_EQ("", service_->Assess(
243 kStartTime + peace + TimeDelta::FromSeconds(10))); 248 extension_b_, f, &args,
244 EXPECT_FALSE(service_->Assess(extension_b_, f, &args2, 249 kStartTime + peace + TimeDelta::FromSeconds(10)));
250 EXPECT_NE("", service_->Assess(extension_b_, f, &args2,
245 kStartTime + peace + TimeDelta::FromSeconds(15))); 251 kStartTime + peace + TimeDelta::FromSeconds(15)));
246 252
247 // Test that items are independent. 253 // Test that items are independent.
248 ListValue args3; 254 ListValue args3;
249 args3.Append(new base::FundamentalValue(3)); 255 args3.Append(new base::FundamentalValue(3));
250 EXPECT_TRUE(service_->Assess(extension_c_, f, &args, kStartTime)); 256 EXPECT_EQ("", service_->Assess(extension_c_, f, &args, kStartTime));
251 EXPECT_TRUE(service_->Assess(extension_c_, f, &args3, 257 EXPECT_EQ("", service_->Assess(extension_c_, f, &args3,
252 kStartTime + TimeDelta::FromSeconds(10))); 258 kStartTime + TimeDelta::FromSeconds(10)));
253 EXPECT_TRUE(service_->Assess(extension_c_, f, &args, 259 EXPECT_EQ("", service_->Assess(extension_c_, f, &args,
254 kStartTime + TimeDelta::FromSeconds(15))); 260 kStartTime + TimeDelta::FromSeconds(15)));
255 EXPECT_TRUE(service_->Assess(extension_c_, f, &args3, 261 EXPECT_EQ("", service_->Assess(extension_c_, f, &args3,
256 kStartTime + TimeDelta::FromSeconds(20))); 262 kStartTime + TimeDelta::FromSeconds(20)));
257 EXPECT_FALSE(service_->Assess(extension_c_, f, &args, 263 EXPECT_NE("", service_->Assess(extension_c_, f, &args,
258 kStartTime + TimeDelta::FromSeconds(25))); 264 kStartTime + TimeDelta::FromSeconds(25)));
259 EXPECT_FALSE(service_->Assess(extension_c_, f, &args3, 265 EXPECT_NE("", service_->Assess(extension_c_, f, &args3,
260 kStartTime + TimeDelta::FromSeconds(30))); 266 kStartTime + TimeDelta::FromSeconds(30)));
261 } 267 }
262 268
263 TEST_F(ExtensionsQuotaServiceTest, ChainedHeuristics) { 269 TEST_F(ExtensionsQuotaServiceTest, ChainedHeuristics) {
264 scoped_refptr<MockFunction> f(new ChainedLimitsMockFunction("foo")); 270 scoped_refptr<MockFunction> f(new ChainedLimitsMockFunction("foo"));
265 ListValue args; 271 ListValue args;
266 args.Append(new base::FundamentalValue(1)); 272 args.Append(new base::FundamentalValue(1));
267 273
268 // First, test that the low limit can be avoided but the higher one is hit. 274 // First, test that the low limit can be avoided but the higher one is hit.
269 // One event per minute for 20 minutes comes in under the sustained limit, 275 // One event per minute for 20 minutes comes in under the sustained limit,
270 // but is equal to the timed limit. 276 // but is equal to the timed limit.
271 for (int i = 0; i < 20; i++) { 277 for (int i = 0; i < 20; i++) {
272 EXPECT_TRUE(service_->Assess(extension_a_, f, &args, 278 EXPECT_EQ("", service_->Assess(
273 kStartTime + TimeDelta::FromSeconds(10 + i * 60))); 279 extension_a_, f, &args,
280 kStartTime + TimeDelta::FromSeconds(10 + i * 60)));
274 } 281 }
275 282
276 // This will bring us to 21 events in an hour, which is a violation. 283 // This will bring us to 21 events in an hour, which is a violation.
277 EXPECT_FALSE(service_->Assess(extension_a_, f, &args, 284 EXPECT_NE("", service_->Assess(extension_a_, f, &args,
278 kStartTime + TimeDelta::FromMinutes(30))); 285 kStartTime + TimeDelta::FromMinutes(30)));
279 286
280 // Now, check that we can still hit the lower limit. 287 // Now, check that we can still hit the lower limit.
281 for (int i = 0; i < 5; i++) { 288 for (int i = 0; i < 5; i++) {
282 EXPECT_TRUE(service_->Assess(extension_b_, f, &args, 289 EXPECT_EQ("", service_->Assess(
283 kStartTime + TimeDelta::FromSeconds(10 + i * 60))); 290 extension_b_, f, &args,
284 EXPECT_TRUE(service_->Assess(extension_b_, f, &args, 291 kStartTime + TimeDelta::FromSeconds(10 + i * 60)));
285 kStartTime + TimeDelta::FromSeconds(15 + i * 60))); 292 EXPECT_EQ("", service_->Assess(
286 EXPECT_TRUE(service_->Assess(extension_b_, f, &args, 293 extension_b_, f, &args,
287 kStartTime + TimeDelta::FromSeconds(20 + i * 60))); 294 kStartTime + TimeDelta::FromSeconds(15 + i * 60)));
295 EXPECT_EQ("", service_->Assess(
296 extension_b_, f, &args,
297 kStartTime + TimeDelta::FromSeconds(20 + i * 60)));
288 } 298 }
289 299
290 EXPECT_FALSE(service_->Assess(extension_b_, f, &args, 300 EXPECT_NE("", service_->Assess(extension_b_, f, &args,
291 kStartTime + TimeDelta::FromMinutes(6))); 301 kStartTime + TimeDelta::FromMinutes(6)));
292 } 302 }
293 303
294 TEST_F(ExtensionsQuotaServiceTest, MultipleFunctionsDontInterfere) { 304 TEST_F(ExtensionsQuotaServiceTest, MultipleFunctionsDontInterfere) {
295 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 305 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
296 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar")); 306 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
297 307
298 ListValue args_f; 308 ListValue args_f;
299 ListValue args_g; 309 ListValue args_g;
300 args_f.Append(new base::FundamentalValue(1)); 310 args_f.Append(new base::FundamentalValue(1));
301 args_g.Append(new base::FundamentalValue(2)); 311 args_g.Append(new base::FundamentalValue(2));
302 312
303 EXPECT_TRUE(service_->Assess(extension_a_, f, &args_f, kStartTime)); 313 EXPECT_EQ("", service_->Assess(extension_a_, f, &args_f, kStartTime));
304 EXPECT_TRUE(service_->Assess(extension_a_, g, &args_g, kStartTime)); 314 EXPECT_EQ("", service_->Assess(extension_a_, g, &args_g, kStartTime));
305 EXPECT_TRUE(service_->Assess(extension_a_, f, &args_f, 315 EXPECT_EQ("", service_->Assess(extension_a_, f, &args_f,
306 kStartTime + TimeDelta::FromSeconds(10))); 316 kStartTime + TimeDelta::FromSeconds(10)));
307 EXPECT_TRUE(service_->Assess(extension_a_, g, &args_g, 317 EXPECT_EQ("", service_->Assess(extension_a_, g, &args_g,
308 kStartTime + TimeDelta::FromSeconds(10))); 318 kStartTime + TimeDelta::FromSeconds(10)));
309 EXPECT_FALSE(service_->Assess(extension_a_, f, &args_f, 319 EXPECT_NE("", service_->Assess(extension_a_, f, &args_f,
310 kStartTime + TimeDelta::FromSeconds(15))); 320 kStartTime + TimeDelta::FromSeconds(15)));
311 EXPECT_FALSE(service_->Assess(extension_a_, g, &args_g, 321 EXPECT_NE("", service_->Assess(extension_a_, g, &args_g,
312 kStartTime + TimeDelta::FromSeconds(15))); 322 kStartTime + TimeDelta::FromSeconds(15)));
313 } 323 }
314 324
315 TEST_F(ExtensionsQuotaServiceTest, ViolatorsWillBeViolators) { 325 TEST_F(ExtensionsQuotaServiceTest, ViolatorsWillBeViolators) {
316 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 326 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
317 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar")); 327 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
318 ListValue arg; 328 ListValue arg;
319 arg.Append(new base::FundamentalValue(1)); 329 arg.Append(new base::FundamentalValue(1));
320 EXPECT_TRUE(service_->Assess(extension_a_, f, &arg, kStartTime)); 330 EXPECT_EQ("", service_->Assess(extension_a_, f, &arg, kStartTime));
321 EXPECT_TRUE(service_->Assess(extension_a_, f, &arg, 331 EXPECT_EQ("", service_->Assess(extension_a_, f, &arg,
322 kStartTime + TimeDelta::FromSeconds(10))); 332 kStartTime + TimeDelta::FromSeconds(10)));
323 EXPECT_FALSE(service_->Assess(extension_a_, f, &arg, 333 EXPECT_NE("", service_->Assess(extension_a_, f, &arg,
324 kStartTime + TimeDelta::FromSeconds(15))); 334 kStartTime + TimeDelta::FromSeconds(15)));
325 335
326 // We don't allow this extension to use quota limited functions even if they 336 // We don't allow this extension to use quota limited functions even if they
327 // wait a while. 337 // wait a while.
328 EXPECT_FALSE(service_->Assess(extension_a_, f, &arg, 338 EXPECT_NE("", service_->Assess(extension_a_, f, &arg,
329 kStartTime + TimeDelta::FromDays(1))); 339 kStartTime + TimeDelta::FromDays(1)));
330 EXPECT_FALSE(service_->Assess(extension_a_, g, &arg, 340 EXPECT_NE("", service_->Assess(extension_a_, g, &arg,
331 kStartTime + TimeDelta::FromDays(1))); 341 kStartTime + TimeDelta::FromDays(1)));
332 } 342 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extensions_quota_service.cc ('k') | chrome/browser/extensions/settings/settings_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698