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

Side by Side Diff: extensions/browser/quota_service_unittest.cc

Issue 63933003: Moved ExtensionInfoMap and ExtensionsQuotaService to extensions/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup Created 7 years, 1 month 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/message_loop.h" 5 #include "base/message_loop/message_loop.h"
6 #include "base/process/process.h" 6 #include "base/process/process.h"
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/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"
11 #include "content/public/test/test_browser_thread.h" 10 #include "content/public/test/test_browser_thread.h"
11 #include "extensions/browser/quota_service.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 namespace extensions {
19
18 typedef QuotaLimitHeuristic::Bucket Bucket; 20 typedef QuotaLimitHeuristic::Bucket Bucket;
19 typedef QuotaLimitHeuristic::Config Config; 21 typedef QuotaLimitHeuristic::Config Config;
20 typedef QuotaLimitHeuristic::BucketList BucketList; 22 typedef QuotaLimitHeuristic::BucketList BucketList;
21 typedef ExtensionsQuotaService::TimedLimit TimedLimit; 23 typedef QuotaService::TimedLimit TimedLimit;
22 typedef ExtensionsQuotaService::SustainedLimit SustainedLimit; 24 typedef QuotaService::SustainedLimit SustainedLimit;
23 25
24 namespace { 26 namespace {
25 27
26 const char kGenericName[] = "name"; 28 const char kGenericName[] = "name";
27 const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) }; 29 const Config kFrozenConfig = {0, TimeDelta::FromDays(0)};
28 const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) }; 30 const Config k2PerMinute = {2, TimeDelta::FromMinutes(1)};
29 const Config k20PerHour = { 20, TimeDelta::FromHours(1) }; 31 const Config k20PerHour = {20, TimeDelta::FromHours(1)};
30 const TimeTicks kStartTime = TimeTicks(); 32 const TimeTicks kStartTime = TimeTicks();
31 const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1); 33 const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1);
32 34
33 class Mapper : public QuotaLimitHeuristic::BucketMapper { 35 class Mapper : public QuotaLimitHeuristic::BucketMapper {
34 public: 36 public:
35 Mapper() {} 37 Mapper() {}
36 virtual ~Mapper() { STLDeleteValues(&buckets_); } 38 virtual ~Mapper() { STLDeleteValues(&buckets_); }
37 virtual void GetBucketsForArgs(const base::ListValue* args, 39 virtual void GetBucketsForArgs(const base::ListValue* args,
38 BucketList* buckets) OVERRIDE { 40 BucketList* buckets) OVERRIDE {
39 for (size_t i = 0; i < args->GetSize(); i++) { 41 for (size_t i = 0; i < args->GetSize(); i++) {
40 int id; 42 int id;
41 ASSERT_TRUE(args->GetInteger(i, &id)); 43 ASSERT_TRUE(args->GetInteger(i, &id));
42 if (buckets_.find(id) == buckets_.end()) 44 if (buckets_.find(id) == buckets_.end())
43 buckets_[id] = new Bucket(); 45 buckets_[id] = new Bucket();
44 buckets->push_back(buckets_[id]); 46 buckets->push_back(buckets_[id]);
45 } 47 }
46 } 48 }
49
47 private: 50 private:
48 typedef std::map<int, Bucket*> BucketMap; 51 typedef std::map<int, Bucket*> BucketMap;
49 BucketMap buckets_; 52 BucketMap buckets_;
50 DISALLOW_COPY_AND_ASSIGN(Mapper); 53 DISALLOW_COPY_AND_ASSIGN(Mapper);
51 }; 54 };
52 55
53 class MockMapper : public QuotaLimitHeuristic::BucketMapper { 56 class MockMapper : public QuotaLimitHeuristic::BucketMapper {
54 public: 57 public:
55 virtual void GetBucketsForArgs(const base::ListValue* args, 58 virtual void GetBucketsForArgs(const base::ListValue* args,
56 BucketList* buckets) OVERRIDE { 59 BucketList* buckets) OVERRIDE {}
57 }
58 }; 60 };
59 61
60 class MockFunction : public ExtensionFunction { 62 class MockFunction : public ExtensionFunction {
61 public: 63 public:
62 explicit MockFunction(const std::string& name) { set_name(name); } 64 explicit MockFunction(const std::string& name) { set_name(name); }
63 65
64 virtual void SetArgs(const base::ListValue* args) OVERRIDE {} 66 virtual void SetArgs(const base::ListValue* args) OVERRIDE {}
65 virtual const std::string GetError() OVERRIDE { return std::string(); } 67 virtual const std::string GetError() OVERRIDE { return std::string(); }
66 virtual void SetError(const std::string& error) OVERRIDE {} 68 virtual void SetError(const std::string& error) OVERRIDE {}
67 virtual void Run() OVERRIDE {} 69 virtual void Run() OVERRIDE {}
68 virtual void Destruct() const OVERRIDE { delete this; } 70 virtual void Destruct() const OVERRIDE { delete this; }
69 virtual bool RunImpl() OVERRIDE { return true; } 71 virtual bool RunImpl() OVERRIDE { return true; }
70 virtual void SendResponse(bool) OVERRIDE { } 72 virtual void SendResponse(bool) OVERRIDE {}
71 73
72 protected: 74 protected:
73 virtual ~MockFunction() {} 75 virtual ~MockFunction() {}
74 }; 76 };
75 77
76 class TimedLimitMockFunction : public MockFunction { 78 class TimedLimitMockFunction : public MockFunction {
77 public: 79 public:
78 explicit TimedLimitMockFunction(const std::string& name) 80 explicit TimedLimitMockFunction(const std::string& name)
79 : MockFunction(name) {} 81 : MockFunction(name) {}
80 virtual void GetQuotaLimitHeuristics( 82 virtual void GetQuotaLimitHeuristics(QuotaLimitHeuristics* heuristics) const
81 QuotaLimitHeuristics* heuristics) const OVERRIDE { 83 OVERRIDE {
82 heuristics->push_back( 84 heuristics->push_back(
83 new TimedLimit(k2PerMinute, new Mapper(), kGenericName)); 85 new TimedLimit(k2PerMinute, new Mapper(), kGenericName));
84 } 86 }
85 87
86 private: 88 private:
87 virtual ~TimedLimitMockFunction() {} 89 virtual ~TimedLimitMockFunction() {}
88 }; 90 };
89 91
90 class ChainedLimitsMockFunction : public MockFunction { 92 class ChainedLimitsMockFunction : public MockFunction {
91 public: 93 public:
92 explicit ChainedLimitsMockFunction(const std::string& name) 94 explicit ChainedLimitsMockFunction(const std::string& name)
93 : MockFunction(name) {} 95 : MockFunction(name) {}
94 virtual void GetQuotaLimitHeuristics( 96 virtual void GetQuotaLimitHeuristics(QuotaLimitHeuristics* heuristics) const
95 QuotaLimitHeuristics* heuristics) const OVERRIDE { 97 OVERRIDE {
96 // No more than 2 per minute sustained over 5 minutes. 98 // No more than 2 per minute sustained over 5 minutes.
97 heuristics->push_back(new SustainedLimit( 99 heuristics->push_back(new SustainedLimit(
98 TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName)); 100 TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName));
99 // No more than 20 per hour. 101 // No more than 20 per hour.
100 heuristics->push_back( 102 heuristics->push_back(
101 new TimedLimit(k20PerHour, new Mapper(), kGenericName)); 103 new TimedLimit(k20PerHour, new Mapper(), kGenericName));
102 } 104 }
103 105
104 private: 106 private:
105 virtual ~ChainedLimitsMockFunction() {} 107 virtual ~ChainedLimitsMockFunction() {}
106 }; 108 };
107 109
108 class FrozenMockFunction : public MockFunction { 110 class FrozenMockFunction : public MockFunction {
109 public: 111 public:
110 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {} 112 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {}
111 virtual void GetQuotaLimitHeuristics( 113 virtual void GetQuotaLimitHeuristics(QuotaLimitHeuristics* heuristics) const
112 QuotaLimitHeuristics* heuristics) const OVERRIDE { 114 OVERRIDE {
113 heuristics->push_back( 115 heuristics->push_back(
114 new TimedLimit(kFrozenConfig, new Mapper(), kGenericName)); 116 new TimedLimit(kFrozenConfig, new Mapper(), kGenericName));
115 } 117 }
116 118
117 private: 119 private:
118 virtual ~FrozenMockFunction() {} 120 virtual ~FrozenMockFunction() {}
119 }; 121 };
120 } // namespace 122 } // namespace
121 123
122 class ExtensionsQuotaServiceTest : public testing::Test { 124 class QuotaServiceTest : public testing::Test {
123 public: 125 public:
124 ExtensionsQuotaServiceTest() 126 QuotaServiceTest()
125 : extension_a_("a"), 127 : extension_a_("a"),
126 extension_b_("b"), 128 extension_b_("b"),
127 extension_c_("c"), 129 extension_c_("c"),
128 loop_(), 130 loop_(),
129 ui_thread_(BrowserThread::UI, &loop_) { 131 ui_thread_(BrowserThread::UI, &loop_) {}
130 } 132 virtual void SetUp() { service_.reset(new QuotaService()); }
131 virtual void SetUp() {
132 service_.reset(new ExtensionsQuotaService());
133 }
134 virtual void TearDown() { 133 virtual void TearDown() {
135 loop_.RunUntilIdle(); 134 loop_.RunUntilIdle();
136 service_.reset(); 135 service_.reset();
137 } 136 }
137
138 protected: 138 protected:
139 std::string extension_a_; 139 std::string extension_a_;
140 std::string extension_b_; 140 std::string extension_b_;
141 std::string extension_c_; 141 std::string extension_c_;
142 scoped_ptr<ExtensionsQuotaService> service_; 142 scoped_ptr<QuotaService> service_;
143 base::MessageLoop loop_; 143 base::MessageLoop loop_;
144 content::TestBrowserThread ui_thread_; 144 content::TestBrowserThread ui_thread_;
145 }; 145 };
146 146
147 class QuotaLimitHeuristicTest : public testing::Test { 147 class QuotaLimitHeuristicTest : public testing::Test {
148 public: 148 public:
149 static void DoMoreThan2PerMinuteFor5Minutes(const TimeTicks& start_time, 149 static void DoMoreThan2PerMinuteFor5Minutes(const TimeTicks& start_time,
150 QuotaLimitHeuristic* lim, 150 QuotaLimitHeuristic* lim,
151 Bucket* b, 151 Bucket* b,
152 int an_unexhausted_minute) { 152 int an_unexhausted_minute) {
(...skipping 20 matching lines...) Expand all
173 173
174 TEST_F(QuotaLimitHeuristicTest, Timed) { 174 TEST_F(QuotaLimitHeuristicTest, Timed) {
175 TimedLimit lim(k2PerMinute, new MockMapper(), kGenericName); 175 TimedLimit lim(k2PerMinute, new MockMapper(), kGenericName);
176 Bucket b; 176 Bucket b;
177 177
178 b.Reset(k2PerMinute, kStartTime); 178 b.Reset(k2PerMinute, kStartTime);
179 EXPECT_TRUE(lim.Apply(&b, kStartTime)); 179 EXPECT_TRUE(lim.Apply(&b, kStartTime));
180 EXPECT_TRUE(b.has_tokens()); 180 EXPECT_TRUE(b.has_tokens());
181 EXPECT_TRUE(lim.Apply(&b, kStartTime + TimeDelta::FromSeconds(30))); 181 EXPECT_TRUE(lim.Apply(&b, kStartTime + TimeDelta::FromSeconds(30)));
182 EXPECT_FALSE(b.has_tokens()); 182 EXPECT_FALSE(b.has_tokens());
183 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart)); 183 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart));
184 184
185 b.Reset(k2PerMinute, kStartTime); 185 b.Reset(k2PerMinute, kStartTime);
186 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart - TimeDelta::FromSeconds(1))); 186 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart - TimeDelta::FromSeconds(1)));
187 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart)); 187 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart));
188 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(1))); 188 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(1)));
189 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(2))); 189 EXPECT_TRUE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(2)));
190 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(3))); 190 EXPECT_FALSE(lim.Apply(&b, k1MinuteAfterStart + TimeDelta::FromSeconds(3)));
191 } 191 }
192 192
193 TEST_F(QuotaLimitHeuristicTest, Sustained) { 193 TEST_F(QuotaLimitHeuristicTest, Sustained) {
(...skipping 14 matching lines...) Expand all
208 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1); 208 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, -1);
209 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(7))); 209 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(7)));
210 210
211 // Do the same as above except don't exhaust the 3rd (w.l.o.g) bucket. 211 // Do the same as above except don't exhaust the 3rd (w.l.o.g) bucket.
212 bucket.Reset(k2PerMinute, kStartTime); 212 bucket.Reset(k2PerMinute, kStartTime);
213 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, 3); 213 DoMoreThan2PerMinuteFor5Minutes(kStartTime, &lim, &bucket, 3);
214 // If the 3rd bucket were exhausted, this would fail (see first test). 214 // If the 3rd bucket were exhausted, this would fail (see first test).
215 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6))); 215 EXPECT_TRUE(lim.Apply(&bucket, kStartTime + TimeDelta::FromMinutes(6)));
216 } 216 }
217 217
218 TEST_F(ExtensionsQuotaServiceTest, NoHeuristic) { 218 TEST_F(QuotaServiceTest, NoHeuristic) {
219 scoped_refptr<MockFunction> f(new MockFunction("foo")); 219 scoped_refptr<MockFunction> f(new MockFunction("foo"));
220 base::ListValue args; 220 base::ListValue args;
221 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime)); 221 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
222 } 222 }
223 223
224 TEST_F(ExtensionsQuotaServiceTest, FrozenHeuristic) { 224 TEST_F(QuotaServiceTest, FrozenHeuristic) {
225 scoped_refptr<MockFunction> f(new FrozenMockFunction("foo")); 225 scoped_refptr<MockFunction> f(new FrozenMockFunction("foo"));
226 base::ListValue args; 226 base::ListValue args;
227 args.Append(new base::FundamentalValue(1)); 227 args.Append(new base::FundamentalValue(1));
228 EXPECT_NE("", service_->Assess(extension_a_, f.get(), &args, kStartTime)); 228 EXPECT_NE("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
229 } 229 }
230 230
231 TEST_F(ExtensionsQuotaServiceTest, SingleHeuristic) { 231 TEST_F(QuotaServiceTest, SingleHeuristic) {
232 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 232 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
233 base::ListValue args; 233 base::ListValue args;
234 args.Append(new base::FundamentalValue(1)); 234 args.Append(new base::FundamentalValue(1));
235 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime)); 235 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args, kStartTime));
236 EXPECT_EQ("", 236 EXPECT_EQ("",
237 service_->Assess(extension_a_, 237 service_->Assess(extension_a_,
238 f.get(), 238 f.get(),
239 &args, 239 &args,
240 kStartTime + TimeDelta::FromSeconds(10))); 240 kStartTime + TimeDelta::FromSeconds(10)));
241 EXPECT_NE("", 241 EXPECT_NE("",
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 f.get(), 292 f.get(),
293 &args, 293 &args,
294 kStartTime + TimeDelta::FromSeconds(25))); 294 kStartTime + TimeDelta::FromSeconds(25)));
295 EXPECT_NE("", 295 EXPECT_NE("",
296 service_->Assess(extension_c_, 296 service_->Assess(extension_c_,
297 f.get(), 297 f.get(),
298 &args3, 298 &args3,
299 kStartTime + TimeDelta::FromSeconds(30))); 299 kStartTime + TimeDelta::FromSeconds(30)));
300 } 300 }
301 301
302 TEST_F(ExtensionsQuotaServiceTest, ChainedHeuristics) { 302 TEST_F(QuotaServiceTest, ChainedHeuristics) {
303 scoped_refptr<MockFunction> f(new ChainedLimitsMockFunction("foo")); 303 scoped_refptr<MockFunction> f(new ChainedLimitsMockFunction("foo"));
304 base::ListValue args; 304 base::ListValue args;
305 args.Append(new base::FundamentalValue(1)); 305 args.Append(new base::FundamentalValue(1));
306 306
307 // First, test that the low limit can be avoided but the higher one is hit. 307 // First, test that the low limit can be avoided but the higher one is hit.
308 // One event per minute for 20 minutes comes in under the sustained limit, 308 // One event per minute for 20 minutes comes in under the sustained limit,
309 // but is equal to the timed limit. 309 // but is equal to the timed limit.
310 for (int i = 0; i < 20; i++) { 310 for (int i = 0; i < 20; i++) {
311 EXPECT_EQ( 311 EXPECT_EQ(
312 "", 312 "",
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 kStartTime + TimeDelta::FromSeconds(20 + i * 60))); 345 kStartTime + TimeDelta::FromSeconds(20 + i * 60)));
346 } 346 }
347 347
348 EXPECT_NE("", 348 EXPECT_NE("",
349 service_->Assess(extension_b_, 349 service_->Assess(extension_b_,
350 f.get(), 350 f.get(),
351 &args, 351 &args,
352 kStartTime + TimeDelta::FromMinutes(6))); 352 kStartTime + TimeDelta::FromMinutes(6)));
353 } 353 }
354 354
355 TEST_F(ExtensionsQuotaServiceTest, MultipleFunctionsDontInterfere) { 355 TEST_F(QuotaServiceTest, MultipleFunctionsDontInterfere) {
356 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 356 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
357 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar")); 357 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
358 358
359 base::ListValue args_f; 359 base::ListValue args_f;
360 base::ListValue args_g; 360 base::ListValue args_g;
361 args_f.Append(new base::FundamentalValue(1)); 361 args_f.Append(new base::FundamentalValue(1));
362 args_g.Append(new base::FundamentalValue(2)); 362 args_g.Append(new base::FundamentalValue(2));
363 363
364 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args_f, kStartTime)); 364 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &args_f, kStartTime));
365 EXPECT_EQ("", service_->Assess(extension_a_, g.get(), &args_g, kStartTime)); 365 EXPECT_EQ("", service_->Assess(extension_a_, g.get(), &args_g, kStartTime));
(...skipping 12 matching lines...) Expand all
378 f.get(), 378 f.get(),
379 &args_f, 379 &args_f,
380 kStartTime + TimeDelta::FromSeconds(15))); 380 kStartTime + TimeDelta::FromSeconds(15)));
381 EXPECT_NE("", 381 EXPECT_NE("",
382 service_->Assess(extension_a_, 382 service_->Assess(extension_a_,
383 g.get(), 383 g.get(),
384 &args_g, 384 &args_g,
385 kStartTime + TimeDelta::FromSeconds(15))); 385 kStartTime + TimeDelta::FromSeconds(15)));
386 } 386 }
387 387
388 TEST_F(ExtensionsQuotaServiceTest, ViolatorsWillBeViolators) { 388 TEST_F(QuotaServiceTest, ViolatorsWillBeViolators) {
389 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo")); 389 scoped_refptr<MockFunction> f(new TimedLimitMockFunction("foo"));
390 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar")); 390 scoped_refptr<MockFunction> g(new TimedLimitMockFunction("bar"));
391 base::ListValue arg; 391 base::ListValue arg;
392 arg.Append(new base::FundamentalValue(1)); 392 arg.Append(new base::FundamentalValue(1));
393 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &arg, kStartTime)); 393 EXPECT_EQ("", service_->Assess(extension_a_, f.get(), &arg, kStartTime));
394 EXPECT_EQ("", 394 EXPECT_EQ("",
395 service_->Assess(extension_a_, 395 service_->Assess(extension_a_,
396 f.get(), 396 f.get(),
397 &arg, 397 &arg,
398 kStartTime + TimeDelta::FromSeconds(10))); 398 kStartTime + TimeDelta::FromSeconds(10)));
399 EXPECT_NE("", 399 EXPECT_NE("",
400 service_->Assess(extension_a_, 400 service_->Assess(extension_a_,
401 f.get(), 401 f.get(),
402 &arg, 402 &arg,
403 kStartTime + TimeDelta::FromSeconds(15))); 403 kStartTime + TimeDelta::FromSeconds(15)));
404 404
405 // We don't allow this extension to use quota limited functions even if they 405 // We don't allow this extension to use quota limited functions even if they
406 // wait a while. 406 // wait a while.
407 EXPECT_NE( 407 EXPECT_NE(
408 "", 408 "",
409 service_->Assess( 409 service_->Assess(
410 extension_a_, f.get(), &arg, kStartTime + TimeDelta::FromDays(1))); 410 extension_a_, f.get(), &arg, kStartTime + TimeDelta::FromDays(1)));
411 EXPECT_NE( 411 EXPECT_NE(
412 "", 412 "",
413 service_->Assess( 413 service_->Assess(
414 extension_a_, g.get(), &arg, kStartTime + TimeDelta::FromDays(1))); 414 extension_a_, g.get(), &arg, kStartTime + TimeDelta::FromDays(1)));
415 } 415 }
416
417 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698