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