| 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 |