OLD | NEW |
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" |
(...skipping 16 matching lines...) Expand all Loading... |
27 const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) }; | 27 const Config kFrozenConfig = { 0, TimeDelta::FromDays(0) }; |
28 const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) }; | 28 const Config k2PerMinute = { 2, TimeDelta::FromMinutes(1) }; |
29 const Config k20PerHour = { 20, TimeDelta::FromHours(1) }; | 29 const Config k20PerHour = { 20, TimeDelta::FromHours(1) }; |
30 const TimeTicks kStartTime = TimeTicks(); | 30 const TimeTicks kStartTime = TimeTicks(); |
31 const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1); | 31 const TimeTicks k1MinuteAfterStart = kStartTime + TimeDelta::FromMinutes(1); |
32 | 32 |
33 class Mapper : public QuotaLimitHeuristic::BucketMapper { | 33 class Mapper : public QuotaLimitHeuristic::BucketMapper { |
34 public: | 34 public: |
35 Mapper() {} | 35 Mapper() {} |
36 virtual ~Mapper() { STLDeleteValues(&buckets_); } | 36 virtual ~Mapper() { STLDeleteValues(&buckets_); } |
37 virtual void GetBucketsForArgs(const ListValue* args, BucketList* buckets) { | 37 virtual void GetBucketsForArgs(const ListValue* args, |
| 38 BucketList* buckets) OVERRIDE { |
38 for (size_t i = 0; i < args->GetSize(); i++) { | 39 for (size_t i = 0; i < args->GetSize(); i++) { |
39 int id; | 40 int id; |
40 ASSERT_TRUE(args->GetInteger(i, &id)); | 41 ASSERT_TRUE(args->GetInteger(i, &id)); |
41 if (buckets_.find(id) == buckets_.end()) | 42 if (buckets_.find(id) == buckets_.end()) |
42 buckets_[id] = new Bucket(); | 43 buckets_[id] = new Bucket(); |
43 buckets->push_back(buckets_[id]); | 44 buckets->push_back(buckets_[id]); |
44 } | 45 } |
45 } | 46 } |
46 private: | 47 private: |
47 typedef std::map<int, Bucket*> BucketMap; | 48 typedef std::map<int, Bucket*> BucketMap; |
48 BucketMap buckets_; | 49 BucketMap buckets_; |
49 DISALLOW_COPY_AND_ASSIGN(Mapper); | 50 DISALLOW_COPY_AND_ASSIGN(Mapper); |
50 }; | 51 }; |
51 | 52 |
52 class MockMapper : public QuotaLimitHeuristic::BucketMapper { | 53 class MockMapper : public QuotaLimitHeuristic::BucketMapper { |
53 public: | 54 public: |
54 virtual void GetBucketsForArgs(const ListValue* args, BucketList* buckets) {} | 55 virtual void GetBucketsForArgs(const ListValue* args, |
| 56 BucketList* buckets) OVERRIDE { |
| 57 } |
55 }; | 58 }; |
56 | 59 |
57 class MockFunction : public ExtensionFunction { | 60 class MockFunction : public ExtensionFunction { |
58 public: | 61 public: |
59 explicit MockFunction(const std::string& name) { set_name(name); } | 62 explicit MockFunction(const std::string& name) { set_name(name); } |
60 | 63 |
61 virtual void SetArgs(const ListValue* args) OVERRIDE {} | 64 virtual void SetArgs(const ListValue* args) OVERRIDE {} |
62 virtual const std::string GetError() OVERRIDE { return std::string(); } | 65 virtual const std::string GetError() OVERRIDE { return std::string(); } |
63 virtual void SetError(const std::string& error) OVERRIDE {} | 66 virtual void SetError(const std::string& error) OVERRIDE {} |
64 virtual void Run() OVERRIDE {} | 67 virtual void Run() OVERRIDE {} |
65 virtual void Destruct() const OVERRIDE { delete this; } | 68 virtual void Destruct() const OVERRIDE { delete this; } |
66 virtual bool RunImpl() OVERRIDE { return true; } | 69 virtual bool RunImpl() OVERRIDE { return true; } |
67 virtual void SendResponse(bool) OVERRIDE { } | 70 virtual void SendResponse(bool) OVERRIDE { } |
68 | 71 |
69 protected: | 72 protected: |
70 virtual ~MockFunction() {} | 73 virtual ~MockFunction() {} |
71 }; | 74 }; |
72 | 75 |
73 class TimedLimitMockFunction : public MockFunction { | 76 class TimedLimitMockFunction : public MockFunction { |
74 public: | 77 public: |
75 explicit TimedLimitMockFunction(const std::string& name) | 78 explicit TimedLimitMockFunction(const std::string& name) |
76 : MockFunction(name) {} | 79 : MockFunction(name) {} |
77 virtual void GetQuotaLimitHeuristics( | 80 virtual void GetQuotaLimitHeuristics( |
78 QuotaLimitHeuristics* heuristics) const { | 81 QuotaLimitHeuristics* heuristics) const OVERRIDE { |
79 heuristics->push_back( | 82 heuristics->push_back( |
80 new TimedLimit(k2PerMinute, new Mapper(), kGenericName)); | 83 new TimedLimit(k2PerMinute, new Mapper(), kGenericName)); |
81 } | 84 } |
82 | 85 |
83 private: | 86 private: |
84 virtual ~TimedLimitMockFunction() {} | 87 virtual ~TimedLimitMockFunction() {} |
85 }; | 88 }; |
86 | 89 |
87 class ChainedLimitsMockFunction : public MockFunction { | 90 class ChainedLimitsMockFunction : public MockFunction { |
88 public: | 91 public: |
89 explicit ChainedLimitsMockFunction(const std::string& name) | 92 explicit ChainedLimitsMockFunction(const std::string& name) |
90 : MockFunction(name) {} | 93 : MockFunction(name) {} |
91 virtual void GetQuotaLimitHeuristics( | 94 virtual void GetQuotaLimitHeuristics( |
92 QuotaLimitHeuristics* heuristics) const { | 95 QuotaLimitHeuristics* heuristics) const OVERRIDE { |
93 // No more than 2 per minute sustained over 5 minutes. | 96 // No more than 2 per minute sustained over 5 minutes. |
94 heuristics->push_back(new SustainedLimit( | 97 heuristics->push_back(new SustainedLimit( |
95 TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName)); | 98 TimeDelta::FromMinutes(5), k2PerMinute, new Mapper(), kGenericName)); |
96 // No more than 20 per hour. | 99 // No more than 20 per hour. |
97 heuristics->push_back( | 100 heuristics->push_back( |
98 new TimedLimit(k20PerHour, new Mapper(), kGenericName)); | 101 new TimedLimit(k20PerHour, new Mapper(), kGenericName)); |
99 } | 102 } |
100 | 103 |
101 private: | 104 private: |
102 virtual ~ChainedLimitsMockFunction() {} | 105 virtual ~ChainedLimitsMockFunction() {} |
103 }; | 106 }; |
104 | 107 |
105 class FrozenMockFunction : public MockFunction { | 108 class FrozenMockFunction : public MockFunction { |
106 public: | 109 public: |
107 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {} | 110 explicit FrozenMockFunction(const std::string& name) : MockFunction(name) {} |
108 virtual void GetQuotaLimitHeuristics( | 111 virtual void GetQuotaLimitHeuristics( |
109 QuotaLimitHeuristics* heuristics) const { | 112 QuotaLimitHeuristics* heuristics) const OVERRIDE { |
110 heuristics->push_back( | 113 heuristics->push_back( |
111 new TimedLimit(kFrozenConfig, new Mapper(), kGenericName)); | 114 new TimedLimit(kFrozenConfig, new Mapper(), kGenericName)); |
112 } | 115 } |
113 | 116 |
114 private: | 117 private: |
115 virtual ~FrozenMockFunction() {} | 118 virtual ~FrozenMockFunction() {} |
116 }; | 119 }; |
117 } // namespace | 120 } // namespace |
118 | 121 |
119 class ExtensionsQuotaServiceTest : public testing::Test { | 122 class ExtensionsQuotaServiceTest : public testing::Test { |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
333 EXPECT_NE("", service_->Assess(extension_a_, f, &arg, | 336 EXPECT_NE("", service_->Assess(extension_a_, f, &arg, |
334 kStartTime + TimeDelta::FromSeconds(15))); | 337 kStartTime + TimeDelta::FromSeconds(15))); |
335 | 338 |
336 // We don't allow this extension to use quota limited functions even if they | 339 // We don't allow this extension to use quota limited functions even if they |
337 // wait a while. | 340 // wait a while. |
338 EXPECT_NE("", service_->Assess(extension_a_, f, &arg, | 341 EXPECT_NE("", service_->Assess(extension_a_, f, &arg, |
339 kStartTime + TimeDelta::FromDays(1))); | 342 kStartTime + TimeDelta::FromDays(1))); |
340 EXPECT_NE("", service_->Assess(extension_a_, g, &arg, | 343 EXPECT_NE("", service_->Assess(extension_a_, g, &arg, |
341 kStartTime + TimeDelta::FromDays(1))); | 344 kStartTime + TimeDelta::FromDays(1))); |
342 } | 345 } |
OLD | NEW |