| Index: chrome/browser/extensions/api/storage/settings_quota_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/api/storage/settings_quota_unittest.cc (revision 176053)
|
| +++ chrome/browser/extensions/api/storage/settings_quota_unittest.cc (working copy)
|
| @@ -1,594 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/json/json_writer.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/values.h"
|
| -#include "chrome/browser/extensions/api/storage/settings_backend.h"
|
| -#include "chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.h"
|
| -#include "chrome/browser/value_store/testing_value_store.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace extensions {
|
| -
|
| -// To save typing ValueStore::DEFAULTS/IGNORE_QUOTA everywhere.
|
| -const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS;
|
| -const ValueStore::WriteOptions IGNORE_QUOTA =
|
| - ValueStore::IGNORE_QUOTA;
|
| -
|
| -class ExtensionSettingsQuotaTest : public testing::Test {
|
| - public:
|
| - ExtensionSettingsQuotaTest()
|
| - : byte_value_1_(Value::CreateIntegerValue(1)),
|
| - byte_value_16_(Value::CreateStringValue("sixteen bytes.")),
|
| - byte_value_256_(new ListValue()),
|
| - delegate_(new TestingValueStore()) {
|
| - for (int i = 1; i < 89; ++i) {
|
| - byte_value_256_->Append(Value::CreateIntegerValue(i));
|
| - }
|
| - ValidateByteValues();
|
| - }
|
| -
|
| - void ValidateByteValues() {
|
| - std::string validate_sizes;
|
| - base::JSONWriter::Write(byte_value_1_.get(), &validate_sizes);
|
| - ASSERT_EQ(1u, validate_sizes.size());
|
| - base::JSONWriter::Write(byte_value_16_.get(), &validate_sizes);
|
| - ASSERT_EQ(16u, validate_sizes.size());
|
| - base::JSONWriter::Write(byte_value_256_.get(), &validate_sizes);
|
| - ASSERT_EQ(256u, validate_sizes.size());
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - ASSERT_TRUE(storage_.get() != NULL);
|
| - }
|
| -
|
| - protected:
|
| - // Creates |storage_|. Must only be called once.
|
| - void CreateStorage(
|
| - size_t quota_bytes, size_t quota_bytes_per_item, size_t max_items) {
|
| - ASSERT_TRUE(storage_.get() == NULL);
|
| - SettingsStorageQuotaEnforcer::Limits limits =
|
| - { quota_bytes, quota_bytes_per_item, max_items };
|
| - storage_.reset(new SettingsStorageQuotaEnforcer(limits, delegate_));
|
| - }
|
| -
|
| - // Returns whether the settings in |storage_| and |delegate_| are the same as
|
| - // |settings|.
|
| - bool SettingsEqual(const DictionaryValue& settings) {
|
| - return settings.Equals(storage_->Get()->settings().get()) &&
|
| - settings.Equals(delegate_->Get()->settings().get());
|
| - }
|
| -
|
| - // Values with different serialized sizes.
|
| - scoped_ptr<Value> byte_value_1_;
|
| - scoped_ptr<Value> byte_value_16_;
|
| - scoped_ptr<ListValue> byte_value_256_;
|
| -
|
| - // Quota enforcing storage area being tested.
|
| - scoped_ptr<SettingsStorageQuotaEnforcer> storage_;
|
| -
|
| - // In-memory storage area being delegated to. Always owned by |storage_|.
|
| - TestingValueStore* delegate_;
|
| -};
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytes) {
|
| - DictionaryValue empty;
|
| - CreateStorage(0, UINT_MAX, UINT_MAX);
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Remove("a")->HasError());
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - EXPECT_TRUE(SettingsEqual(empty));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, KeySizeTakenIntoAccount) {
|
| - DictionaryValue empty;
|
| - CreateStorage(8u, UINT_MAX, UINT_MAX);
|
| - EXPECT_TRUE(
|
| - storage_->Set(DEFAULTS, "Really long key", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(empty));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, SmallByteQuota) {
|
| - DictionaryValue settings;
|
| - CreateStorage(8u, UINT_MAX, UINT_MAX);
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, MediumByteQuota) {
|
| - DictionaryValue settings;
|
| - CreateStorage(40, UINT_MAX, UINT_MAX);
|
| -
|
| - DictionaryValue to_set;
|
| - to_set.Set("a", byte_value_1_->DeepCopy());
|
| - to_set.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Should be able to set value to other under-quota value.
|
| - to_set.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, ZeroMaxKeys) {
|
| - DictionaryValue empty;
|
| - CreateStorage(UINT_MAX, UINT_MAX, 0);
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Remove("a")->HasError());
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - EXPECT_TRUE(SettingsEqual(empty));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, SmallMaxKeys) {
|
| - DictionaryValue settings;
|
| - CreateStorage(UINT_MAX, UINT_MAX, 1);
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Should be able to set existing key to other value without going over quota.
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, MediumMaxKeys) {
|
| - DictionaryValue settings;
|
| - CreateStorage(UINT_MAX, UINT_MAX, 2);
|
| -
|
| - DictionaryValue to_set;
|
| - to_set.Set("a", byte_value_1_->DeepCopy());
|
| - to_set.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Should be able to set existing keys to other values without going over
|
| - // quota.
|
| - to_set.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, RemovingExistingSettings) {
|
| - DictionaryValue settings;
|
| - CreateStorage(266, UINT_MAX, 2);
|
| -
|
| - storage_->Set(DEFAULTS, "b", *byte_value_16_);
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - // Not enough quota.
|
| - storage_->Set(DEFAULTS, "c", *byte_value_256_);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Try again with "b" removed, enough quota.
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - settings.Remove("b", NULL);
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| - settings.Set("c", byte_value_256_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Enough byte quota but max keys not high enough.
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Back under max keys.
|
| - EXPECT_FALSE(storage_->Remove("a")->HasError());
|
| - settings.Remove("a", NULL);
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError());
|
| - settings.Set("b", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, RemovingNonexistentSettings) {
|
| - DictionaryValue settings;
|
| - CreateStorage(36, UINT_MAX, 3);
|
| -
|
| - // Max out bytes.
|
| - DictionaryValue to_set;
|
| - to_set.Set("b1", byte_value_16_->DeepCopy());
|
| - to_set.Set("b2", byte_value_16_->DeepCopy());
|
| - storage_->Set(DEFAULTS, to_set);
|
| - settings.Set("b1", byte_value_16_->DeepCopy());
|
| - settings.Set("b2", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Remove some settings that don't exist.
|
| - std::vector<std::string> to_remove;
|
| - to_remove.push_back("a1");
|
| - to_remove.push_back("a2");
|
| - EXPECT_FALSE(storage_->Remove(to_remove)->HasError());
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Still no quota.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Max out key count.
|
| - to_set.Clear();
|
| - to_set.Set("b1", byte_value_1_->DeepCopy());
|
| - to_set.Set("b2", byte_value_1_->DeepCopy());
|
| - storage_->Set(DEFAULTS, to_set);
|
| - settings.Set("b1", byte_value_1_->DeepCopy());
|
| - settings.Set("b2", byte_value_1_->DeepCopy());
|
| - storage_->Set(DEFAULTS, "b3", *byte_value_1_);
|
| - settings.Set("b3", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Remove some settings that don't exist.
|
| - to_remove.clear();
|
| - to_remove.push_back("a1");
|
| - to_remove.push_back("a2");
|
| - EXPECT_FALSE(storage_->Remove(to_remove)->HasError());
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Still no quota.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, Clear) {
|
| - DictionaryValue settings;
|
| - CreateStorage(40, UINT_MAX, 5);
|
| -
|
| - // Test running out of byte quota.
|
| - {
|
| - DictionaryValue to_set;
|
| - to_set.Set("a", byte_value_16_->DeepCopy());
|
| - to_set.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError());
|
| -
|
| - EXPECT_FALSE(storage_->Clear()->HasError());
|
| -
|
| - // (repeat)
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError());
|
| - }
|
| -
|
| - // Test reaching max keys.
|
| - storage_->Clear();
|
| - {
|
| - DictionaryValue to_set;
|
| - to_set.Set("a", byte_value_1_->DeepCopy());
|
| - to_set.Set("b", byte_value_1_->DeepCopy());
|
| - to_set.Set("c", byte_value_1_->DeepCopy());
|
| - to_set.Set("d", byte_value_1_->DeepCopy());
|
| - to_set.Set("e", byte_value_1_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "f", *byte_value_1_)->HasError());
|
| -
|
| - storage_->Clear();
|
| -
|
| - // (repeat)
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "f", *byte_value_1_)->HasError());
|
| - }
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, ChangingUsedBytesWithSet) {
|
| - DictionaryValue settings;
|
| - CreateStorage(20, UINT_MAX, UINT_MAX);
|
| -
|
| - // Change a setting to make it go over quota.
|
| - storage_->Set(DEFAULTS, "a", *byte_value_16_);
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Change a setting to reduce usage and room for another setting.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "foobar", *byte_value_1_)->HasError());
|
| - storage_->Set(DEFAULTS, "a", *byte_value_1_);
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "foobar", *byte_value_1_)->HasError());
|
| - settings.Set("foobar", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntirelyCompletedWithByteQuota) {
|
| - DictionaryValue settings;
|
| - CreateStorage(40, UINT_MAX, UINT_MAX);
|
| -
|
| - storage_->Set(DEFAULTS, "a", *byte_value_16_);
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| -
|
| - // The entire change is over quota.
|
| - DictionaryValue to_set;
|
| - to_set.Set("b", byte_value_16_->DeepCopy());
|
| - to_set.Set("c", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // The entire change is over quota, but quota reduced in existing key.
|
| - to_set.Set("a", byte_value_1_->DeepCopy());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, SetsOnlyEntireCompletedWithMaxKeys) {
|
| - DictionaryValue settings;
|
| - CreateStorage(UINT_MAX, UINT_MAX, 2);
|
| -
|
| - storage_->Set(DEFAULTS, "a", *byte_value_1_);
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| -
|
| - DictionaryValue to_set;
|
| - to_set.Set("b", byte_value_16_->DeepCopy());
|
| - to_set.Set("c", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, to_set)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndByteQuota) {
|
| - DictionaryValue settings;
|
| - delegate_->Set(DEFAULTS, "a", *byte_value_256_);
|
| - settings.Set("a", byte_value_256_->DeepCopy());
|
| -
|
| - CreateStorage(280, UINT_MAX, UINT_MAX);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Add some data.
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Not enough quota.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Reduce usage of original setting so that "c" can fit.
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Remove to free up some more data.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_256_)->HasError());
|
| -
|
| - std::vector<std::string> to_remove;
|
| - to_remove.push_back("a");
|
| - to_remove.push_back("b");
|
| - storage_->Remove(to_remove);
|
| - settings.Remove("a", NULL);
|
| - settings.Remove("b", NULL);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "d", *byte_value_256_)->HasError());
|
| - settings.Set("d", byte_value_256_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, WithInitialDataAndMaxKeys) {
|
| - DictionaryValue settings;
|
| - delegate_->Set(DEFAULTS, "a", *byte_value_1_);
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - CreateStorage(UINT_MAX, UINT_MAX, 2);
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError());
|
| - settings.Set("b", byte_value_1_->DeepCopy());
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_1_)->HasError());
|
| -
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, InitiallyOverByteQuota) {
|
| - DictionaryValue settings;
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| - delegate_->Set(DEFAULTS, settings);
|
| -
|
| - CreateStorage(40, UINT_MAX, UINT_MAX);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError());
|
| -
|
| - // Take under quota by reducing size of an existing setting
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - settings.Set("a", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Should be able set another small setting.
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "d", *byte_value_1_)->HasError());
|
| - settings.Set("d", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, InitiallyOverMaxKeys) {
|
| - DictionaryValue settings;
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| - delegate_->Set(DEFAULTS, settings);
|
| -
|
| - CreateStorage(UINT_MAX, UINT_MAX, 2);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Can't set either an existing or new setting.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Should be able after removing 2.
|
| - storage_->Remove("a");
|
| - settings.Remove("a", NULL);
|
| - storage_->Remove("b");
|
| - settings.Remove("b", NULL);
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "e", *byte_value_1_)->HasError());
|
| - settings.Set("e", byte_value_1_->DeepCopy());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -
|
| - // Still can't set any.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "d", *byte_value_16_)->HasError());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, ZeroQuotaBytesPerSetting) {
|
| - DictionaryValue empty;
|
| - CreateStorage(UINT_MAX, 0, UINT_MAX);
|
| -
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Remove("a")->HasError());
|
| - EXPECT_FALSE(storage_->Remove("b")->HasError());
|
| - EXPECT_TRUE(SettingsEqual(empty));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSetting) {
|
| - DictionaryValue settings;
|
| -
|
| - CreateStorage(UINT_MAX, 20, UINT_MAX);
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, QuotaBytesPerSettingWithInitialSettings) {
|
| - DictionaryValue settings;
|
| -
|
| - delegate_->Set(DEFAULTS, "a", *byte_value_1_);
|
| - delegate_->Set(DEFAULTS, "b", *byte_value_16_);
|
| - delegate_->Set(DEFAULTS, "c", *byte_value_256_);
|
| - CreateStorage(UINT_MAX, 20, UINT_MAX);
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "a", *byte_value_16_)->HasError());
|
| - settings.Set("a", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "a", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "b", *byte_value_16_)->HasError());
|
| - settings.Set("b", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "b", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(DEFAULTS, "c", *byte_value_16_)->HasError());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest,
|
| - QuotaBytesPerSettingWithInitialSettingsForced) {
|
| - // This is a lazy test to make sure IGNORE_QUOTA lets through changes: the
|
| - // test above copied, but using IGNORE_QUOTA and asserting nothing is ever
|
| - // rejected...
|
| - DictionaryValue settings;
|
| -
|
| - delegate_->Set(DEFAULTS, "a", *byte_value_1_);
|
| - delegate_->Set(DEFAULTS, "b", *byte_value_16_);
|
| - delegate_->Set(DEFAULTS, "c", *byte_value_256_);
|
| - CreateStorage(UINT_MAX, 20, UINT_MAX);
|
| -
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_16_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "a", *byte_value_256_)->HasError());
|
| - settings.Set("a", byte_value_256_->DeepCopy());
|
| -
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_16_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "b", *byte_value_256_)->HasError());
|
| - settings.Set("b", byte_value_256_->DeepCopy());
|
| -
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", *byte_value_1_)->HasError());
|
| - EXPECT_FALSE(storage_->Set(IGNORE_QUOTA, "c", *byte_value_16_)->HasError());
|
| - settings.Set("c", byte_value_16_->DeepCopy());
|
| -
|
| - // ... except the last. Make sure it can still fail.
|
| - EXPECT_TRUE(storage_->Set(DEFAULTS, "c", *byte_value_256_)->HasError());
|
| -
|
| - EXPECT_TRUE(SettingsEqual(settings));
|
| -}
|
| -
|
| -TEST_F(ExtensionSettingsQuotaTest, GetBytesInUse) {
|
| - // Just testing GetBytesInUse, no need for a quota.
|
| - CreateStorage(UINT_MAX, UINT_MAX, UINT_MAX);
|
| -
|
| - std::vector<std::string> ab;
|
| - ab.push_back("a");
|
| - ab.push_back("b");
|
| -
|
| - EXPECT_EQ(0u, storage_->GetBytesInUse());
|
| - EXPECT_EQ(0u, storage_->GetBytesInUse("a"));
|
| - EXPECT_EQ(0u, storage_->GetBytesInUse("b"));
|
| - EXPECT_EQ(0u, storage_->GetBytesInUse(ab));
|
| -
|
| - storage_->Set(DEFAULTS, "a", *byte_value_1_);
|
| -
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse());
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse("a"));
|
| - EXPECT_EQ(0u, storage_->GetBytesInUse("b"));
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse(ab));
|
| -
|
| - storage_->Set(DEFAULTS, "b", *byte_value_1_);
|
| -
|
| - EXPECT_EQ(4u, storage_->GetBytesInUse());
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse("a"));
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse("b"));
|
| - EXPECT_EQ(4u, storage_->GetBytesInUse(ab));
|
| -
|
| - storage_->Set(DEFAULTS, "c", *byte_value_1_);
|
| -
|
| - EXPECT_EQ(6u, storage_->GetBytesInUse());
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse("a"));
|
| - EXPECT_EQ(2u, storage_->GetBytesInUse("b"));
|
| - EXPECT_EQ(4u, storage_->GetBytesInUse(ab));
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|