OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/json/json_writer.h" | 5 #include "base/json/json_writer.h" |
6 #include "base/memory/ref_counted.h" | 6 #include "base/memory/ref_counted.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/values.h" | 8 #include "base/values.h" |
9 #include "extensions/browser/api/storage/settings_storage_quota_enforcer.h" | 9 #include "extensions/browser/api/storage/settings_storage_quota_enforcer.h" |
10 #include "extensions/browser/value_store/testing_value_store.h" | 10 #include "extensions/browser/value_store/testing_value_store.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 using base::DictionaryValue; | 13 using base::DictionaryValue; |
14 using base::ListValue; | 14 using base::ListValue; |
15 using base::Value; | 15 using base::Value; |
16 | 16 |
17 namespace extensions { | 17 namespace extensions { |
18 | 18 |
19 // To save typing ValueStore::DEFAULTS/IGNORE_QUOTA everywhere. | 19 // To save typing ValueStore::DEFAULTS/IGNORE_QUOTA everywhere. |
20 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; | 20 const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; |
21 const ValueStore::WriteOptions IGNORE_QUOTA = | 21 const ValueStore::WriteOptions IGNORE_QUOTA = |
22 ValueStore::IGNORE_QUOTA; | 22 ValueStore::IGNORE_QUOTA; |
23 | 23 |
24 class ExtensionSettingsQuotaTest : public testing::Test { | 24 class ExtensionSettingsQuotaTest : public testing::Test { |
25 public: | 25 public: |
26 ExtensionSettingsQuotaTest() | 26 ExtensionSettingsQuotaTest() |
27 : byte_value_1_(new base::FundamentalValue(1)), | 27 : byte_value_1_(1), |
28 byte_value_16_(new base::StringValue("sixteen bytes.")), | 28 byte_value_16_("sixteen bytes."), |
29 byte_value_256_(new base::ListValue()), | |
30 delegate_(new TestingValueStore()) { | 29 delegate_(new TestingValueStore()) { |
31 for (int i = 1; i < 89; ++i) { | 30 for (int i = 1; i < 89; ++i) { |
32 byte_value_256_->Append(new base::FundamentalValue(i)); | 31 byte_value_256_.AppendInteger(i); |
33 } | 32 } |
34 ValidateByteValues(); | 33 ValidateByteValues(); |
35 } | 34 } |
36 | 35 |
37 void ValidateByteValues() { | 36 void ValidateByteValues() { |
38 std::string validate_sizes; | 37 std::string validate_sizes; |
39 base::JSONWriter::Write(byte_value_1_.get(), &validate_sizes); | 38 base::JSONWriter::Write(byte_value_1_, &validate_sizes); |
40 ASSERT_EQ(1u, validate_sizes.size()); | 39 ASSERT_EQ(1u, validate_sizes.size()); |
41 base::JSONWriter::Write(byte_value_16_.get(), &validate_sizes); | 40 base::JSONWriter::Write(byte_value_16_, &validate_sizes); |
42 ASSERT_EQ(16u, validate_sizes.size()); | 41 ASSERT_EQ(16u, validate_sizes.size()); |
43 base::JSONWriter::Write(byte_value_256_.get(), &validate_sizes); | 42 base::JSONWriter::Write(byte_value_256_, &validate_sizes); |
44 ASSERT_EQ(256u, validate_sizes.size()); | 43 ASSERT_EQ(256u, validate_sizes.size()); |
45 } | 44 } |
46 | 45 |
47 void TearDown() override { ASSERT_TRUE(storage_.get() != NULL); } | 46 void TearDown() override { ASSERT_TRUE(storage_.get() != NULL); } |
48 | 47 |
49 protected: | 48 protected: |
50 // Creates |storage_|. Must only be called once. | 49 // Creates |storage_|. Must only be called once. |
51 void CreateStorage( | 50 void CreateStorage( |
52 size_t quota_bytes, size_t quota_bytes_per_item, size_t max_items) { | 51 size_t quota_bytes, size_t quota_bytes_per_item, size_t max_items) { |
53 ASSERT_TRUE(storage_.get() == NULL); | 52 ASSERT_TRUE(storage_.get() == NULL); |
54 SettingsStorageQuotaEnforcer::Limits limits = | 53 SettingsStorageQuotaEnforcer::Limits limits = |
55 { quota_bytes, quota_bytes_per_item, max_items }; | 54 { quota_bytes, quota_bytes_per_item, max_items }; |
56 storage_.reset(new SettingsStorageQuotaEnforcer(limits, delegate_)); | 55 storage_.reset(new SettingsStorageQuotaEnforcer(limits, delegate_)); |
57 } | 56 } |
58 | 57 |
59 // Returns whether the settings in |storage_| and |delegate_| are the same as | 58 // Returns whether the settings in |storage_| and |delegate_| are the same as |
60 // |settings|. | 59 // |settings|. |
61 bool SettingsEqual(const base::DictionaryValue& settings) { | 60 bool SettingsEqual(const base::DictionaryValue& settings) { |
62 return settings.Equals(&storage_->Get()->settings()) && | 61 return settings.Equals(&storage_->Get()->settings()) && |
63 settings.Equals(&delegate_->Get()->settings()); | 62 settings.Equals(&delegate_->Get()->settings()); |
64 } | 63 } |
65 | 64 |
66 // Values with different serialized sizes. | 65 // Values with different serialized sizes. |
67 scoped_ptr<base::Value> byte_value_1_; | 66 base::FundamentalValue byte_value_1_; |
68 scoped_ptr<base::Value> byte_value_16_; | 67 base::StringValue byte_value_16_; |
69 scoped_ptr<base::ListValue> byte_value_256_; | 68 base::ListValue byte_value_256_; |
70 | 69 |
71 // Quota enforcing storage area being tested. | 70 // Quota enforcing storage area being tested. |
72 scoped_ptr<SettingsStorageQuotaEnforcer> storage_; | 71 scoped_ptr<SettingsStorageQuotaEnforcer> storage_; |
73 | 72 |
74 // In-memory storage area being delegated to. Always owned by |storage_|. | 73 // In-memory storage area being delegated to. Always owned by |storage_|. |
75 TestingValueStore* delegate_; | 74 TestingValueStore* delegate_; |
76 }; | 75 }; |
77 | 76 |
78 TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytes) { | 77 TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytes) { |
79 base::DictionaryValue empty; | 78 base::DictionaryValue empty; |
80 CreateStorage(0, UINT_MAX, UINT_MAX); | 79 CreateStorage(0, UINT_MAX, UINT_MAX); |
81 | 80 |
82 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 81 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
83 EXPECT_FALSE(storage_->Remove("a")->HasError()); | 82 EXPECT_FALSE(storage_->Remove("a")->HasError()); |
84 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 83 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
85 EXPECT_TRUE(SettingsEqual(empty)); | 84 EXPECT_TRUE(SettingsEqual(empty)); |
86 } | 85 } |
87 | 86 |
88 TEST_F(ExtensionSettingsQuotaTest, KeySizeTakenIntoAccount) { | 87 TEST_F(ExtensionSettingsQuotaTest, KeySizeTakenIntoAccount) { |
89 base::DictionaryValue empty; | 88 base::DictionaryValue empty; |
90 CreateStorage(8u, UINT_MAX, UINT_MAX); | 89 CreateStorage(8u, UINT_MAX, UINT_MAX); |
91 EXPECT_TRUE( | 90 EXPECT_TRUE( |
92 storage_->Set(DEFAULTS, "Really long key", *byte_value_1_)->HasError()); | 91 storage_->Set(DEFAULTS, "Really long key", byte_value_1_)->HasError()); |
93 EXPECT_TRUE(SettingsEqual(empty)); | 92 EXPECT_TRUE(SettingsEqual(empty)); |
94 } | 93 } |
95 | 94 |
96 TEST_F(ExtensionSettingsQuotaTest, SmallByteQuota) { | 95 TEST_F(ExtensionSettingsQuotaTest, SmallByteQuota) { |
97 base::DictionaryValue settings; | 96 base::DictionaryValue settings; |
98 CreateStorage(8u, UINT_MAX, UINT_MAX); | 97 CreateStorage(8u, UINT_MAX, UINT_MAX); |
99 | 98 |
100 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 99 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
101 settings.Set("a", byte_value_1_->DeepCopy()); | 100 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
102 EXPECT_TRUE(SettingsEqual(settings)); | 101 EXPECT_TRUE(SettingsEqual(settings)); |
103 | 102 |
104 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError()); | 103 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", byte_value_16_)->HasError()); |
105 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 104 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
106 EXPECT_TRUE(SettingsEqual(settings)); | 105 EXPECT_TRUE(SettingsEqual(settings)); |
107 } | 106 } |
108 | 107 |
109 TEST_F(ExtensionSettingsQuotaTest, MediumByteQuota) { | 108 TEST_F(ExtensionSettingsQuotaTest, MediumByteQuota) { |
110 base::DictionaryValue settings; | 109 base::DictionaryValue settings; |
111 CreateStorage(40, UINT_MAX, UINT_MAX); | 110 CreateStorage(40, UINT_MAX, UINT_MAX); |
112 | 111 |
113 base::DictionaryValue to_set; | 112 base::DictionaryValue to_set; |
114 to_set.Set("a", byte_value_1_->DeepCopy()); | 113 to_set.Set("a", byte_value_1_.CreateDeepCopy()); |
115 to_set.Set("b", byte_value_16_->DeepCopy()); | 114 to_set.Set("b", byte_value_16_.CreateDeepCopy()); |
116 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 115 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
117 settings.Set("a", byte_value_1_->DeepCopy()); | 116 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
118 settings.Set("b", byte_value_16_->DeepCopy()); | 117 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
119 EXPECT_TRUE(SettingsEqual(settings)); | 118 EXPECT_TRUE(SettingsEqual(settings)); |
120 | 119 |
121 // Should be able to set value to other under-quota value. | 120 // Should be able to set value to other under-quota value. |
122 to_set.Set("a", byte_value_16_->DeepCopy()); | 121 to_set.Set("a", byte_value_16_.CreateDeepCopy()); |
123 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 122 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
124 settings.Set("a", byte_value_16_->DeepCopy()); | 123 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
125 EXPECT_TRUE(SettingsEqual(settings)); | 124 EXPECT_TRUE(SettingsEqual(settings)); |
126 | 125 |
127 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 126 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
128 EXPECT_TRUE(SettingsEqual(settings)); | 127 EXPECT_TRUE(SettingsEqual(settings)); |
129 } | 128 } |
130 | 129 |
131 TEST_F(ExtensionSettingsQuotaTest, ZeroMaxKeys) { | 130 TEST_F(ExtensionSettingsQuotaTest, ZeroMaxKeys) { |
132 base::DictionaryValue empty; | 131 base::DictionaryValue empty; |
133 CreateStorage(UINT_MAX, UINT_MAX, 0); | 132 CreateStorage(UINT_MAX, UINT_MAX, 0); |
134 | 133 |
135 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 134 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
136 EXPECT_FALSE(storage_->Remove("a")->HasError()); | 135 EXPECT_FALSE(storage_->Remove("a")->HasError()); |
137 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 136 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
138 EXPECT_TRUE(SettingsEqual(empty)); | 137 EXPECT_TRUE(SettingsEqual(empty)); |
139 } | 138 } |
140 | 139 |
141 TEST_F(ExtensionSettingsQuotaTest, SmallMaxKeys) { | 140 TEST_F(ExtensionSettingsQuotaTest, SmallMaxKeys) { |
142 base::DictionaryValue settings; | 141 base::DictionaryValue settings; |
143 CreateStorage(UINT_MAX, UINT_MAX, 1); | 142 CreateStorage(UINT_MAX, UINT_MAX, 1); |
144 | 143 |
145 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 144 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
146 settings.Set("a", byte_value_1_->DeepCopy()); | 145 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
147 EXPECT_TRUE(SettingsEqual(settings)); | 146 EXPECT_TRUE(SettingsEqual(settings)); |
148 | 147 |
149 // Should be able to set existing key to other value without going over quota. | 148 // Should be able to set existing key to other value without going over quota. |
150 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError()); | 149 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_16_)->HasError()); |
151 settings.Set("a", byte_value_16_->DeepCopy()); | 150 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
152 EXPECT_TRUE(SettingsEqual(settings)); | 151 EXPECT_TRUE(SettingsEqual(settings)); |
153 | 152 |
154 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError()); | 153 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", byte_value_16_)->HasError()); |
155 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 154 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
156 EXPECT_TRUE(SettingsEqual(settings)); | 155 EXPECT_TRUE(SettingsEqual(settings)); |
157 } | 156 } |
158 | 157 |
159 TEST_F(ExtensionSettingsQuotaTest, MediumMaxKeys) { | 158 TEST_F(ExtensionSettingsQuotaTest, MediumMaxKeys) { |
160 base::DictionaryValue settings; | 159 base::DictionaryValue settings; |
161 CreateStorage(UINT_MAX, UINT_MAX, 2); | 160 CreateStorage(UINT_MAX, UINT_MAX, 2); |
162 | 161 |
163 base::DictionaryValue to_set; | 162 base::DictionaryValue to_set; |
164 to_set.Set("a", byte_value_1_->DeepCopy()); | 163 to_set.Set("a", byte_value_1_.CreateDeepCopy()); |
165 to_set.Set("b", byte_value_16_->DeepCopy()); | 164 to_set.Set("b", byte_value_16_.CreateDeepCopy()); |
166 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 165 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
167 settings.Set("a", byte_value_1_->DeepCopy()); | 166 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
168 settings.Set("b", byte_value_16_->DeepCopy()); | 167 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
169 EXPECT_TRUE(SettingsEqual(settings)); | 168 EXPECT_TRUE(SettingsEqual(settings)); |
170 | 169 |
171 // Should be able to set existing keys to other values without going over | 170 // Should be able to set existing keys to other values without going over |
172 // quota. | 171 // quota. |
173 to_set.Set("a", byte_value_16_->DeepCopy()); | 172 to_set.Set("a", byte_value_16_.CreateDeepCopy()); |
174 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 173 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
175 settings.Set("a", byte_value_16_->DeepCopy()); | 174 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
176 EXPECT_TRUE(SettingsEqual(settings)); | 175 EXPECT_TRUE(SettingsEqual(settings)); |
177 | 176 |
178 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 177 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
179 EXPECT_TRUE(SettingsEqual(settings)); | 178 EXPECT_TRUE(SettingsEqual(settings)); |
180 } | 179 } |
181 | 180 |
182 TEST_F(ExtensionSettingsQuotaTest, RemovingExistingSettings) { | 181 TEST_F(ExtensionSettingsQuotaTest, RemovingExistingSettings) { |
183 base::DictionaryValue settings; | 182 base::DictionaryValue settings; |
184 CreateStorage(266, UINT_MAX, 2); | 183 CreateStorage(266, UINT_MAX, 2); |
185 | 184 |
186 storage_->Set(DEFAULTS, "b", *byte_value_16_); | 185 storage_->Set(DEFAULTS, "b", byte_value_16_); |
187 settings.Set("b", byte_value_16_->DeepCopy()); | 186 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
188 // Not enough quota. | 187 // Not enough quota. |
189 storage_->Set(DEFAULTS, "c", *byte_value_256_); | 188 storage_->Set(DEFAULTS, "c", byte_value_256_); |
190 EXPECT_TRUE(SettingsEqual(settings)); | 189 EXPECT_TRUE(SettingsEqual(settings)); |
191 | 190 |
192 // Try again with "b" removed, enough quota. | 191 // Try again with "b" removed, enough quota. |
193 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 192 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
194 settings.Remove("b", NULL); | 193 settings.Remove("b", NULL); |
195 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 194 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
196 settings.Set("c", byte_value_256_->DeepCopy()); | 195 settings.Set("c", byte_value_256_.CreateDeepCopy()); |
197 EXPECT_TRUE(SettingsEqual(settings)); | 196 EXPECT_TRUE(SettingsEqual(settings)); |
198 | 197 |
199 // Enough byte quota but max keys not high enough. | 198 // Enough byte quota but max keys not high enough. |
200 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 199 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
201 settings.Set("a", byte_value_1_->DeepCopy()); | 200 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
202 EXPECT_TRUE(SettingsEqual(settings)); | 201 EXPECT_TRUE(SettingsEqual(settings)); |
203 | 202 |
204 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError()); | 203 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", byte_value_1_)->HasError()); |
205 EXPECT_TRUE(SettingsEqual(settings)); | 204 EXPECT_TRUE(SettingsEqual(settings)); |
206 | 205 |
207 // Back under max keys. | 206 // Back under max keys. |
208 EXPECT_FALSE(storage_->Remove("a")->HasError()); | 207 EXPECT_FALSE(storage_->Remove("a")->HasError()); |
209 settings.Remove("a", NULL); | 208 settings.Remove("a", NULL); |
210 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError()); | 209 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_1_)->HasError()); |
211 settings.Set("b", byte_value_1_->DeepCopy()); | 210 settings.Set("b", byte_value_1_.CreateDeepCopy()); |
212 EXPECT_TRUE(SettingsEqual(settings)); | 211 EXPECT_TRUE(SettingsEqual(settings)); |
213 } | 212 } |
214 | 213 |
215 TEST_F(ExtensionSettingsQuotaTest, RemovingNonexistentSettings) { | 214 TEST_F(ExtensionSettingsQuotaTest, RemovingNonexistentSettings) { |
216 base::DictionaryValue settings; | 215 base::DictionaryValue settings; |
217 CreateStorage(36, UINT_MAX, 3); | 216 CreateStorage(36, UINT_MAX, 3); |
218 | 217 |
219 // Max out bytes. | 218 // Max out bytes. |
220 base::DictionaryValue to_set; | 219 base::DictionaryValue to_set; |
221 to_set.Set("b1", byte_value_16_->DeepCopy()); | 220 to_set.Set("b1", byte_value_16_.CreateDeepCopy()); |
222 to_set.Set("b2", byte_value_16_->DeepCopy()); | 221 to_set.Set("b2", byte_value_16_.CreateDeepCopy()); |
223 storage_->Set(DEFAULTS, to_set); | 222 storage_->Set(DEFAULTS, to_set); |
224 settings.Set("b1", byte_value_16_->DeepCopy()); | 223 settings.Set("b1", byte_value_16_.CreateDeepCopy()); |
225 settings.Set("b2", byte_value_16_->DeepCopy()); | 224 settings.Set("b2", byte_value_16_.CreateDeepCopy()); |
226 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 225 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
227 EXPECT_TRUE(SettingsEqual(settings)); | 226 EXPECT_TRUE(SettingsEqual(settings)); |
228 | 227 |
229 // Remove some settings that don't exist. | 228 // Remove some settings that don't exist. |
230 std::vector<std::string> to_remove; | 229 std::vector<std::string> to_remove; |
231 to_remove.push_back("a1"); | 230 to_remove.push_back("a1"); |
232 to_remove.push_back("a2"); | 231 to_remove.push_back("a2"); |
233 EXPECT_FALSE(storage_->Remove(to_remove)->HasError()); | 232 EXPECT_FALSE(storage_->Remove(to_remove)->HasError()); |
234 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 233 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
235 EXPECT_TRUE(SettingsEqual(settings)); | 234 EXPECT_TRUE(SettingsEqual(settings)); |
236 | 235 |
237 // Still no quota. | 236 // Still no quota. |
238 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 237 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
239 EXPECT_TRUE(SettingsEqual(settings)); | 238 EXPECT_TRUE(SettingsEqual(settings)); |
240 | 239 |
241 // Max out key count. | 240 // Max out key count. |
242 to_set.Clear(); | 241 to_set.Clear(); |
243 to_set.Set("b1", byte_value_1_->DeepCopy()); | 242 to_set.Set("b1", byte_value_1_.CreateDeepCopy()); |
244 to_set.Set("b2", byte_value_1_->DeepCopy()); | 243 to_set.Set("b2", byte_value_1_.CreateDeepCopy()); |
245 storage_->Set(DEFAULTS, to_set); | 244 storage_->Set(DEFAULTS, to_set); |
246 settings.Set("b1", byte_value_1_->DeepCopy()); | 245 settings.Set("b1", byte_value_1_.CreateDeepCopy()); |
247 settings.Set("b2", byte_value_1_->DeepCopy()); | 246 settings.Set("b2", byte_value_1_.CreateDeepCopy()); |
248 storage_->Set(DEFAULTS, "b3", *byte_value_1_); | 247 storage_->Set(DEFAULTS, "b3", byte_value_1_); |
249 settings.Set("b3", byte_value_1_->DeepCopy()); | 248 settings.Set("b3", byte_value_1_.CreateDeepCopy()); |
250 EXPECT_TRUE(SettingsEqual(settings)); | 249 EXPECT_TRUE(SettingsEqual(settings)); |
251 | 250 |
252 // Remove some settings that don't exist. | 251 // Remove some settings that don't exist. |
253 to_remove.clear(); | 252 to_remove.clear(); |
254 to_remove.push_back("a1"); | 253 to_remove.push_back("a1"); |
255 to_remove.push_back("a2"); | 254 to_remove.push_back("a2"); |
256 EXPECT_FALSE(storage_->Remove(to_remove)->HasError()); | 255 EXPECT_FALSE(storage_->Remove(to_remove)->HasError()); |
257 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 256 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
258 EXPECT_TRUE(SettingsEqual(settings)); | 257 EXPECT_TRUE(SettingsEqual(settings)); |
259 | 258 |
260 // Still no quota. | 259 // Still no quota. |
261 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 260 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
262 EXPECT_TRUE(SettingsEqual(settings)); | 261 EXPECT_TRUE(SettingsEqual(settings)); |
263 } | 262 } |
264 | 263 |
265 TEST_F(ExtensionSettingsQuotaTest, Clear) { | 264 TEST_F(ExtensionSettingsQuotaTest, Clear) { |
266 base::DictionaryValue settings; | 265 base::DictionaryValue settings; |
267 CreateStorage(40, UINT_MAX, 5); | 266 CreateStorage(40, UINT_MAX, 5); |
268 | 267 |
269 // Test running out of byte quota. | 268 // Test running out of byte quota. |
270 { | 269 { |
271 base::DictionaryValue to_set; | 270 base::DictionaryValue to_set; |
272 to_set.Set("a", byte_value_16_->DeepCopy()); | 271 to_set.Set("a", byte_value_16_.CreateDeepCopy()); |
273 to_set.Set("b", byte_value_16_->DeepCopy()); | 272 to_set.Set("b", byte_value_16_.CreateDeepCopy()); |
274 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 273 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
275 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError()); | 274 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_16_)->HasError()); |
276 | 275 |
277 EXPECT_FALSE(storage_->Clear()->HasError()); | 276 EXPECT_FALSE(storage_->Clear()->HasError()); |
278 | 277 |
279 // (repeat) | 278 // (repeat) |
280 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 279 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
281 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError()); | 280 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_16_)->HasError()); |
282 } | 281 } |
283 | 282 |
284 // Test reaching max keys. | 283 // Test reaching max keys. |
285 storage_->Clear(); | 284 storage_->Clear(); |
286 { | 285 { |
287 base::DictionaryValue to_set; | 286 base::DictionaryValue to_set; |
288 to_set.Set("a", byte_value_1_->DeepCopy()); | 287 to_set.Set("a", byte_value_1_.CreateDeepCopy()); |
289 to_set.Set("b", byte_value_1_->DeepCopy()); | 288 to_set.Set("b", byte_value_1_.CreateDeepCopy()); |
290 to_set.Set("c", byte_value_1_->DeepCopy()); | 289 to_set.Set("c", byte_value_1_.CreateDeepCopy()); |
291 to_set.Set("d", byte_value_1_->DeepCopy()); | 290 to_set.Set("d", byte_value_1_.CreateDeepCopy()); |
292 to_set.Set("e", byte_value_1_->DeepCopy()); | 291 to_set.Set("e", byte_value_1_.CreateDeepCopy()); |
293 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 292 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
294 EXPECT_TRUE(storage_->Set(DEFAULTS, "f", *byte_value_1_)->HasError()); | 293 EXPECT_TRUE(storage_->Set(DEFAULTS, "f", byte_value_1_)->HasError()); |
295 | 294 |
296 storage_->Clear(); | 295 storage_->Clear(); |
297 | 296 |
298 // (repeat) | 297 // (repeat) |
299 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 298 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
300 EXPECT_TRUE(storage_->Set(DEFAULTS, "f", *byte_value_1_)->HasError()); | 299 EXPECT_TRUE(storage_->Set(DEFAULTS, "f", byte_value_1_)->HasError()); |
301 } | 300 } |
302 } | 301 } |
303 | 302 |
304 TEST_F(ExtensionSettingsQuotaTest, ChangingUsedBytesWithSet) { | 303 TEST_F(ExtensionSettingsQuotaTest, ChangingUsedBytesWithSet) { |
305 base::DictionaryValue settings; | 304 base::DictionaryValue settings; |
306 CreateStorage(20, UINT_MAX, UINT_MAX); | 305 CreateStorage(20, UINT_MAX, UINT_MAX); |
307 | 306 |
308 // Change a setting to make it go over quota. | 307 // Change a setting to make it go over quota. |
309 storage_->Set(DEFAULTS, "a", *byte_value_16_); | 308 storage_->Set(DEFAULTS, "a", byte_value_16_); |
310 settings.Set("a", byte_value_16_->DeepCopy()); | 309 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
311 EXPECT_TRUE(SettingsEqual(settings)); | 310 EXPECT_TRUE(SettingsEqual(settings)); |
312 | 311 |
313 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError()); | 312 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_256_)->HasError()); |
314 EXPECT_TRUE(SettingsEqual(settings)); | 313 EXPECT_TRUE(SettingsEqual(settings)); |
315 | 314 |
316 // Change a setting to reduce usage and room for another setting. | 315 // Change a setting to reduce usage and room for another setting. |
317 EXPECT_TRUE(storage_->Set(DEFAULTS, "foobar", *byte_value_1_)->HasError()); | 316 EXPECT_TRUE(storage_->Set(DEFAULTS, "foobar", byte_value_1_)->HasError()); |
318 storage_->Set(DEFAULTS, "a", *byte_value_1_); | 317 storage_->Set(DEFAULTS, "a", byte_value_1_); |
319 settings.Set("a", byte_value_1_->DeepCopy()); | 318 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
320 | 319 |
321 EXPECT_FALSE(storage_->Set(DEFAULTS, "foobar", *byte_value_1_)->HasError()); | 320 EXPECT_FALSE(storage_->Set(DEFAULTS, "foobar", byte_value_1_)->HasError()); |
322 settings.Set("foobar", byte_value_1_->DeepCopy()); | 321 settings.Set("foobar", byte_value_1_.CreateDeepCopy()); |
323 EXPECT_TRUE(SettingsEqual(settings)); | 322 EXPECT_TRUE(SettingsEqual(settings)); |
324 } | 323 } |
325 | 324 |
326 TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntirelyCompletedWithByteQuota) { | 325 TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntirelyCompletedWithByteQuota) { |
327 base::DictionaryValue settings; | 326 base::DictionaryValue settings; |
328 CreateStorage(40, UINT_MAX, UINT_MAX); | 327 CreateStorage(40, UINT_MAX, UINT_MAX); |
329 | 328 |
330 storage_->Set(DEFAULTS, "a", *byte_value_16_); | 329 storage_->Set(DEFAULTS, "a", byte_value_16_); |
331 settings.Set("a", byte_value_16_->DeepCopy()); | 330 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
332 | 331 |
333 // The entire change is over quota. | 332 // The entire change is over quota. |
334 base::DictionaryValue to_set; | 333 base::DictionaryValue to_set; |
335 to_set.Set("b", byte_value_16_->DeepCopy()); | 334 to_set.Set("b", byte_value_16_.CreateDeepCopy()); |
336 to_set.Set("c", byte_value_16_->DeepCopy()); | 335 to_set.Set("c", byte_value_16_.CreateDeepCopy()); |
337 EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError()); | 336 EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError()); |
338 EXPECT_TRUE(SettingsEqual(settings)); | 337 EXPECT_TRUE(SettingsEqual(settings)); |
339 | 338 |
340 // The entire change is over quota, but quota reduced in existing key. | 339 // The entire change is over quota, but quota reduced in existing key. |
341 to_set.Set("a", byte_value_1_->DeepCopy()); | 340 to_set.Set("a", byte_value_1_.CreateDeepCopy()); |
342 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); | 341 EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError()); |
343 settings.Set("a", byte_value_1_->DeepCopy()); | 342 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
344 settings.Set("b", byte_value_16_->DeepCopy()); | 343 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
345 settings.Set("c", byte_value_16_->DeepCopy()); | 344 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
346 EXPECT_TRUE(SettingsEqual(settings)); | 345 EXPECT_TRUE(SettingsEqual(settings)); |
347 } | 346 } |
348 | 347 |
349 TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntireCompletedWithMaxKeys) { | 348 TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntireCompletedWithMaxKeys) { |
350 base::DictionaryValue settings; | 349 base::DictionaryValue settings; |
351 CreateStorage(UINT_MAX, UINT_MAX, 2); | 350 CreateStorage(UINT_MAX, UINT_MAX, 2); |
352 | 351 |
353 storage_->Set(DEFAULTS, "a", *byte_value_1_); | 352 storage_->Set(DEFAULTS, "a", byte_value_1_); |
354 settings.Set("a", byte_value_1_->DeepCopy()); | 353 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
355 | 354 |
356 base::DictionaryValue to_set; | 355 base::DictionaryValue to_set; |
357 to_set.Set("b", byte_value_16_->DeepCopy()); | 356 to_set.Set("b", byte_value_16_.CreateDeepCopy()); |
358 to_set.Set("c", byte_value_16_->DeepCopy()); | 357 to_set.Set("c", byte_value_16_.CreateDeepCopy()); |
359 EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError()); | 358 EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError()); |
360 EXPECT_TRUE(SettingsEqual(settings)); | 359 EXPECT_TRUE(SettingsEqual(settings)); |
361 } | 360 } |
362 | 361 |
363 TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndByteQuota) { | 362 TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndByteQuota) { |
364 base::DictionaryValue settings; | 363 base::DictionaryValue settings; |
365 delegate_->Set(DEFAULTS, "a", *byte_value_256_); | 364 delegate_->Set(DEFAULTS, "a", byte_value_256_); |
366 settings.Set("a", byte_value_256_->DeepCopy()); | 365 settings.Set("a", byte_value_256_.CreateDeepCopy()); |
367 | 366 |
368 CreateStorage(280, UINT_MAX, UINT_MAX); | 367 CreateStorage(280, UINT_MAX, UINT_MAX); |
369 EXPECT_TRUE(SettingsEqual(settings)); | 368 EXPECT_TRUE(SettingsEqual(settings)); |
370 | 369 |
371 // Add some data. | 370 // Add some data. |
372 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError()); | 371 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_16_)->HasError()); |
373 settings.Set("b", byte_value_16_->DeepCopy()); | 372 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
374 EXPECT_TRUE(SettingsEqual(settings)); | 373 EXPECT_TRUE(SettingsEqual(settings)); |
375 | 374 |
376 // Not enough quota. | 375 // Not enough quota. |
377 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError()); | 376 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_16_)->HasError()); |
378 EXPECT_TRUE(SettingsEqual(settings)); | 377 EXPECT_TRUE(SettingsEqual(settings)); |
379 | 378 |
380 // Reduce usage of original setting so that "c" can fit. | 379 // Reduce usage of original setting so that "c" can fit. |
381 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError()); | 380 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_16_)->HasError()); |
382 settings.Set("a", byte_value_16_->DeepCopy()); | 381 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
383 EXPECT_TRUE(SettingsEqual(settings)); | 382 EXPECT_TRUE(SettingsEqual(settings)); |
384 | 383 |
385 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError()); | 384 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", byte_value_16_)->HasError()); |
386 settings.Set("c", byte_value_16_->DeepCopy()); | 385 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
387 EXPECT_TRUE(SettingsEqual(settings)); | 386 EXPECT_TRUE(SettingsEqual(settings)); |
388 | 387 |
389 // Remove to free up some more data. | 388 // Remove to free up some more data. |
390 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_256_)->HasError()); | 389 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", byte_value_256_)->HasError()); |
391 | 390 |
392 std::vector<std::string> to_remove; | 391 std::vector<std::string> to_remove; |
393 to_remove.push_back("a"); | 392 to_remove.push_back("a"); |
394 to_remove.push_back("b"); | 393 to_remove.push_back("b"); |
395 storage_->Remove(to_remove); | 394 storage_->Remove(to_remove); |
396 settings.Remove("a", NULL); | 395 settings.Remove("a", NULL); |
397 settings.Remove("b", NULL); | 396 settings.Remove("b", NULL); |
398 EXPECT_TRUE(SettingsEqual(settings)); | 397 EXPECT_TRUE(SettingsEqual(settings)); |
399 | 398 |
400 EXPECT_FALSE(storage_->Set(DEFAULTS, "d", *byte_value_256_)->HasError()); | 399 EXPECT_FALSE(storage_->Set(DEFAULTS, "d", byte_value_256_)->HasError()); |
401 settings.Set("d", byte_value_256_->DeepCopy()); | 400 settings.Set("d", byte_value_256_.CreateDeepCopy()); |
402 EXPECT_TRUE(SettingsEqual(settings)); | 401 EXPECT_TRUE(SettingsEqual(settings)); |
403 } | 402 } |
404 | 403 |
405 TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndMaxKeys) { | 404 TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndMaxKeys) { |
406 base::DictionaryValue settings; | 405 base::DictionaryValue settings; |
407 delegate_->Set(DEFAULTS, "a", *byte_value_1_); | 406 delegate_->Set(DEFAULTS, "a", byte_value_1_); |
408 settings.Set("a", byte_value_1_->DeepCopy()); | 407 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
409 CreateStorage(UINT_MAX, UINT_MAX, 2); | 408 CreateStorage(UINT_MAX, UINT_MAX, 2); |
410 | 409 |
411 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError()); | 410 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_1_)->HasError()); |
412 settings.Set("b", byte_value_1_->DeepCopy()); | 411 settings.Set("b", byte_value_1_.CreateDeepCopy()); |
413 | 412 |
414 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_1_)->HasError()); | 413 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_1_)->HasError()); |
415 | 414 |
416 EXPECT_TRUE(SettingsEqual(settings)); | 415 EXPECT_TRUE(SettingsEqual(settings)); |
417 } | 416 } |
418 | 417 |
419 TEST_F(ExtensionSettingsQuotaTest, InitiallyOverByteQuota) { | 418 TEST_F(ExtensionSettingsQuotaTest, InitiallyOverByteQuota) { |
420 base::DictionaryValue settings; | 419 base::DictionaryValue settings; |
421 settings.Set("a", byte_value_16_->DeepCopy()); | 420 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
422 settings.Set("b", byte_value_16_->DeepCopy()); | 421 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
423 settings.Set("c", byte_value_16_->DeepCopy()); | 422 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
424 delegate_->Set(DEFAULTS, settings); | 423 delegate_->Set(DEFAULTS, settings); |
425 | 424 |
426 CreateStorage(40, UINT_MAX, UINT_MAX); | 425 CreateStorage(40, UINT_MAX, UINT_MAX); |
427 EXPECT_TRUE(SettingsEqual(settings)); | 426 EXPECT_TRUE(SettingsEqual(settings)); |
428 | 427 |
429 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError()); | 428 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", byte_value_16_)->HasError()); |
430 | 429 |
431 // Take under quota by reducing size of an existing setting | 430 // Take under quota by reducing size of an existing setting |
432 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 431 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
433 settings.Set("a", byte_value_1_->DeepCopy()); | 432 settings.Set("a", byte_value_1_.CreateDeepCopy()); |
434 EXPECT_TRUE(SettingsEqual(settings)); | 433 EXPECT_TRUE(SettingsEqual(settings)); |
435 | 434 |
436 // Should be able set another small setting. | 435 // Should be able set another small setting. |
437 EXPECT_FALSE(storage_->Set(DEFAULTS, "d", *byte_value_1_)->HasError()); | 436 EXPECT_FALSE(storage_->Set(DEFAULTS, "d", byte_value_1_)->HasError()); |
438 settings.Set("d", byte_value_1_->DeepCopy()); | 437 settings.Set("d", byte_value_1_.CreateDeepCopy()); |
439 EXPECT_TRUE(SettingsEqual(settings)); | 438 EXPECT_TRUE(SettingsEqual(settings)); |
440 } | 439 } |
441 | 440 |
442 TEST_F(ExtensionSettingsQuotaTest, InitiallyOverMaxKeys) { | 441 TEST_F(ExtensionSettingsQuotaTest, InitiallyOverMaxKeys) { |
443 base::DictionaryValue settings; | 442 base::DictionaryValue settings; |
444 settings.Set("a", byte_value_16_->DeepCopy()); | 443 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
445 settings.Set("b", byte_value_16_->DeepCopy()); | 444 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
446 settings.Set("c", byte_value_16_->DeepCopy()); | 445 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
447 delegate_->Set(DEFAULTS, settings); | 446 delegate_->Set(DEFAULTS, settings); |
448 | 447 |
449 CreateStorage(UINT_MAX, UINT_MAX, 2); | 448 CreateStorage(UINT_MAX, UINT_MAX, 2); |
450 EXPECT_TRUE(SettingsEqual(settings)); | 449 EXPECT_TRUE(SettingsEqual(settings)); |
451 | 450 |
452 // Can't set either an existing or new setting. | 451 // Can't set either an existing or new setting. |
453 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError()); | 452 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", byte_value_16_)->HasError()); |
454 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 453 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
455 EXPECT_TRUE(SettingsEqual(settings)); | 454 EXPECT_TRUE(SettingsEqual(settings)); |
456 | 455 |
457 // Should be able after removing 2. | 456 // Should be able after removing 2. |
458 storage_->Remove("a"); | 457 storage_->Remove("a"); |
459 settings.Remove("a", NULL); | 458 settings.Remove("a", NULL); |
460 storage_->Remove("b"); | 459 storage_->Remove("b"); |
461 settings.Remove("b", NULL); | 460 settings.Remove("b", NULL); |
462 EXPECT_TRUE(SettingsEqual(settings)); | 461 EXPECT_TRUE(SettingsEqual(settings)); |
463 | 462 |
464 EXPECT_FALSE(storage_->Set(DEFAULTS, "e", *byte_value_1_)->HasError()); | 463 EXPECT_FALSE(storage_->Set(DEFAULTS, "e", byte_value_1_)->HasError()); |
465 settings.Set("e", byte_value_1_->DeepCopy()); | 464 settings.Set("e", byte_value_1_.CreateDeepCopy()); |
466 EXPECT_TRUE(SettingsEqual(settings)); | 465 EXPECT_TRUE(SettingsEqual(settings)); |
467 | 466 |
468 // Still can't set any. | 467 // Still can't set any. |
469 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError()); | 468 EXPECT_TRUE(storage_->Set(DEFAULTS, "d", byte_value_16_)->HasError()); |
470 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 469 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
471 EXPECT_TRUE(SettingsEqual(settings)); | 470 EXPECT_TRUE(SettingsEqual(settings)); |
472 } | 471 } |
473 | 472 |
474 TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytesPerSetting) { | 473 TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytesPerSetting) { |
475 base::DictionaryValue empty; | 474 base::DictionaryValue empty; |
476 CreateStorage(UINT_MAX, 0, UINT_MAX); | 475 CreateStorage(UINT_MAX, 0, UINT_MAX); |
477 | 476 |
478 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 477 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
479 EXPECT_FALSE(storage_->Remove("a")->HasError()); | 478 EXPECT_FALSE(storage_->Remove("a")->HasError()); |
480 EXPECT_FALSE(storage_->Remove("b")->HasError()); | 479 EXPECT_FALSE(storage_->Remove("b")->HasError()); |
481 EXPECT_TRUE(SettingsEqual(empty)); | 480 EXPECT_TRUE(SettingsEqual(empty)); |
482 } | 481 } |
483 | 482 |
484 TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSetting) { | 483 TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSetting) { |
485 base::DictionaryValue settings; | 484 base::DictionaryValue settings; |
486 | 485 |
487 CreateStorage(UINT_MAX, 20, UINT_MAX); | 486 CreateStorage(UINT_MAX, 20, UINT_MAX); |
488 | 487 |
489 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 488 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
490 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError()); | 489 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_16_)->HasError()); |
491 settings.Set("a", byte_value_16_->DeepCopy()); | 490 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
492 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError()); | 491 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_256_)->HasError()); |
493 | 492 |
494 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError()); | 493 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_1_)->HasError()); |
495 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError()); | 494 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_16_)->HasError()); |
496 settings.Set("b", byte_value_16_->DeepCopy()); | 495 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
497 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_256_)->HasError()); | 496 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", byte_value_256_)->HasError()); |
498 | 497 |
499 EXPECT_TRUE(SettingsEqual(settings)); | 498 EXPECT_TRUE(SettingsEqual(settings)); |
500 } | 499 } |
501 | 500 |
502 TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSettingWithInitialSettings) { | 501 TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSettingWithInitialSettings) { |
503 base::DictionaryValue settings; | 502 base::DictionaryValue settings; |
504 | 503 |
505 delegate_->Set(DEFAULTS, "a", *byte_value_1_); | 504 delegate_->Set(DEFAULTS, "a", byte_value_1_); |
506 delegate_->Set(DEFAULTS, "b", *byte_value_16_); | 505 delegate_->Set(DEFAULTS, "b", byte_value_16_); |
507 delegate_->Set(DEFAULTS, "c", *byte_value_256_); | 506 delegate_->Set(DEFAULTS, "c", byte_value_256_); |
508 CreateStorage(UINT_MAX, 20, UINT_MAX); | 507 CreateStorage(UINT_MAX, 20, UINT_MAX); |
509 | 508 |
510 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError()); | 509 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_1_)->HasError()); |
511 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError()); | 510 EXPECT_FALSE(storage_->Set(DEFAULTS, "a", byte_value_16_)->HasError()); |
512 settings.Set("a", byte_value_16_->DeepCopy()); | 511 settings.Set("a", byte_value_16_.CreateDeepCopy()); |
513 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError()); | 512 EXPECT_TRUE(storage_->Set(DEFAULTS, "a", byte_value_256_)->HasError()); |
514 | 513 |
515 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError()); | 514 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_1_)->HasError()); |
516 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError()); | 515 EXPECT_FALSE(storage_->Set(DEFAULTS, "b", byte_value_16_)->HasError()); |
517 settings.Set("b", byte_value_16_->DeepCopy()); | 516 settings.Set("b", byte_value_16_.CreateDeepCopy()); |
518 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_256_)->HasError()); | 517 EXPECT_TRUE(storage_->Set(DEFAULTS, "b", byte_value_256_)->HasError()); |
519 | 518 |
520 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_1_)->HasError()); | 519 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", byte_value_1_)->HasError()); |
521 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError()); | 520 EXPECT_FALSE(storage_->Set(DEFAULTS, "c", byte_value_16_)->HasError()); |
522 settings.Set("c", byte_value_16_->DeepCopy()); | 521 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
523 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 522 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
524 | 523 |
525 EXPECT_TRUE(SettingsEqual(settings)); | 524 EXPECT_TRUE(SettingsEqual(settings)); |
526 } | 525 } |
527 | 526 |
528 TEST_F(ExtensionSettingsQuotaTest, | 527 TEST_F(ExtensionSettingsQuotaTest, |
529 QuotaBytesPerSettingWithInitialSettingsForced) { | 528 QuotaBytesPerSettingWithInitialSettingsForced) { |
530 // This is a lazy test to make sure IGNORE_QUOTA lets through changes: the | 529 // This is a lazy test to make sure IGNORE_QUOTA lets through changes: the |
531 // test above copied, but using IGNORE_QUOTA and asserting nothing is ever | 530 // test above copied, but using IGNORE_QUOTA and asserting nothing is ever |
532 // rejected... | 531 // rejected... |
533 base::DictionaryValue settings; | 532 base::DictionaryValue settings; |
534 | 533 |
535 delegate_->Set(DEFAULTS, "a", *byte_value_1_); | 534 delegate_->Set(DEFAULTS, "a", byte_value_1_); |
536 delegate_->Set(DEFAULTS, "b", *byte_value_16_); | 535 delegate_->Set(DEFAULTS, "b", byte_value_16_); |
537 delegate_->Set(DEFAULTS, "c", *byte_value_256_); | 536 delegate_->Set(DEFAULTS, "c", byte_value_256_); |
538 CreateStorage(UINT_MAX, 20, UINT_MAX); | 537 CreateStorage(UINT_MAX, 20, UINT_MAX); |
539 | 538 |
540 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_1_)->HasError()); | 539 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", byte_value_1_)->HasError()); |
541 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_16_)->HasError()); | 540 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", byte_value_16_)->HasError()); |
542 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_256_)->HasError()); | 541 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", byte_value_256_)->HasError()); |
543 settings.Set("a", byte_value_256_->DeepCopy()); | 542 settings.Set("a", byte_value_256_.CreateDeepCopy()); |
544 | 543 |
545 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_1_)->HasError()); | 544 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", byte_value_1_)->HasError()); |
546 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_16_)->HasError()); | 545 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", byte_value_16_)->HasError()); |
547 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_256_)->HasError()); | 546 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", byte_value_256_)->HasError()); |
548 settings.Set("b", byte_value_256_->DeepCopy()); | 547 settings.Set("b", byte_value_256_.CreateDeepCopy()); |
549 | 548 |
550 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", *byte_value_1_)->HasError()); | 549 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", byte_value_1_)->HasError()); |
551 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", *byte_value_16_)->HasError()); | 550 EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", byte_value_16_)->HasError()); |
552 settings.Set("c", byte_value_16_->DeepCopy()); | 551 settings.Set("c", byte_value_16_.CreateDeepCopy()); |
553 | 552 |
554 // ... except the last. Make sure it can still fail. | 553 // ... except the last. Make sure it can still fail. |
555 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError()); | 554 EXPECT_TRUE(storage_->Set(DEFAULTS, "c", byte_value_256_)->HasError()); |
556 | 555 |
557 EXPECT_TRUE(SettingsEqual(settings)); | 556 EXPECT_TRUE(SettingsEqual(settings)); |
558 } | 557 } |
559 | 558 |
560 TEST_F(ExtensionSettingsQuotaTest, GetBytesInUse) { | 559 TEST_F(ExtensionSettingsQuotaTest, GetBytesInUse) { |
561 // Just testing GetBytesInUse, no need for a quota. | 560 // Just testing GetBytesInUse, no need for a quota. |
562 CreateStorage(UINT_MAX, UINT_MAX, UINT_MAX); | 561 CreateStorage(UINT_MAX, UINT_MAX, UINT_MAX); |
563 | 562 |
564 std::vector<std::string> ab; | 563 std::vector<std::string> ab; |
565 ab.push_back("a"); | 564 ab.push_back("a"); |
566 ab.push_back("b"); | 565 ab.push_back("b"); |
567 | 566 |
568 EXPECT_EQ(0u, storage_->GetBytesInUse()); | 567 EXPECT_EQ(0u, storage_->GetBytesInUse()); |
569 EXPECT_EQ(0u, storage_->GetBytesInUse("a")); | 568 EXPECT_EQ(0u, storage_->GetBytesInUse("a")); |
570 EXPECT_EQ(0u, storage_->GetBytesInUse("b")); | 569 EXPECT_EQ(0u, storage_->GetBytesInUse("b")); |
571 EXPECT_EQ(0u, storage_->GetBytesInUse(ab)); | 570 EXPECT_EQ(0u, storage_->GetBytesInUse(ab)); |
572 | 571 |
573 storage_->Set(DEFAULTS, "a", *byte_value_1_); | 572 storage_->Set(DEFAULTS, "a", byte_value_1_); |
574 | 573 |
575 EXPECT_EQ(2u, storage_->GetBytesInUse()); | 574 EXPECT_EQ(2u, storage_->GetBytesInUse()); |
576 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); | 575 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); |
577 EXPECT_EQ(0u, storage_->GetBytesInUse("b")); | 576 EXPECT_EQ(0u, storage_->GetBytesInUse("b")); |
578 EXPECT_EQ(2u, storage_->GetBytesInUse(ab)); | 577 EXPECT_EQ(2u, storage_->GetBytesInUse(ab)); |
579 | 578 |
580 storage_->Set(DEFAULTS, "b", *byte_value_1_); | 579 storage_->Set(DEFAULTS, "b", byte_value_1_); |
581 | 580 |
582 EXPECT_EQ(4u, storage_->GetBytesInUse()); | 581 EXPECT_EQ(4u, storage_->GetBytesInUse()); |
583 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); | 582 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); |
584 EXPECT_EQ(2u, storage_->GetBytesInUse("b")); | 583 EXPECT_EQ(2u, storage_->GetBytesInUse("b")); |
585 EXPECT_EQ(4u, storage_->GetBytesInUse(ab)); | 584 EXPECT_EQ(4u, storage_->GetBytesInUse(ab)); |
586 | 585 |
587 storage_->Set(DEFAULTS, "c", *byte_value_1_); | 586 storage_->Set(DEFAULTS, "c", byte_value_1_); |
588 | 587 |
589 EXPECT_EQ(6u, storage_->GetBytesInUse()); | 588 EXPECT_EQ(6u, storage_->GetBytesInUse()); |
590 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); | 589 EXPECT_EQ(2u, storage_->GetBytesInUse("a")); |
591 EXPECT_EQ(2u, storage_->GetBytesInUse("b")); | 590 EXPECT_EQ(2u, storage_->GetBytesInUse("b")); |
592 EXPECT_EQ(4u, storage_->GetBytesInUse(ab)); | 591 EXPECT_EQ(4u, storage_->GetBytesInUse(ab)); |
593 } | 592 } |
594 | 593 |
595 } // namespace extensions | 594 } // namespace extensions |
OLD | NEW |