Index: extensions/browser/api/storage/storage_frontend_unittest.cc |
diff --git a/extensions/browser/api/storage/storage_frontend_unittest.cc b/extensions/browser/api/storage/storage_frontend_unittest.cc |
index d29cc7817407644ea90cfd8088ac69d9e436d523..fe56ef2cabb623ca9a0bdd217b9acadb81ffdf03 100644 |
--- a/extensions/browser/api/storage/storage_frontend_unittest.cc |
+++ b/extensions/browser/api/storage/storage_frontend_unittest.cc |
@@ -8,11 +8,15 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/strings/stringprintf.h" |
+#include "content/public/browser/browser_context.h" |
+#include "content/public/test/test_browser_context.h" |
#include "content/public/test/test_browser_thread.h" |
+#include "extensions/browser/api/extensions_api_client.h" |
#include "extensions/browser/api/storage/leveldb_settings_storage_factory.h" |
#include "extensions/browser/api/storage/settings_namespace.h" |
#include "extensions/browser/api/storage/settings_test_util.h" |
#include "extensions/browser/api/storage/storage_frontend.h" |
+#include "extensions/browser/extensions_test.h" |
#include "extensions/browser/value_store/value_store.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -28,30 +32,12 @@ namespace { |
// To save typing ValueStore::DEFAULTS everywhere. |
const ValueStore::WriteOptions DEFAULTS = ValueStore::DEFAULTS; |
-// Creates a kilobyte of data. |
-scoped_ptr<base::Value> CreateKilobyte() { |
- std::string kilobyte_string; |
- for (int i = 0; i < 1024; ++i) { |
- kilobyte_string += "a"; |
- } |
- return scoped_ptr<base::Value>(new base::StringValue(kilobyte_string)); |
-} |
- |
-// Creates a megabyte of data. |
-scoped_ptr<base::Value> CreateMegabyte() { |
- base::ListValue* megabyte = new base::ListValue(); |
- for (int i = 0; i < 1000; ++i) { |
- megabyte->Append(CreateKilobyte().release()); |
- } |
- return scoped_ptr<base::Value>(megabyte); |
-} |
- |
} // namespace |
// A better name for this would be StorageFrontendTest, but the historical name |
// has been ExtensionSettingsFrontendTest. In order to preserve crash/failure |
// history, the test names are unchanged. |
-class ExtensionSettingsFrontendTest : public testing::Test { |
+class ExtensionSettingsFrontendTest : public ExtensionsTest { |
public: |
ExtensionSettingsFrontendTest() |
: storage_factory_(new util::ScopedSettingsStorageFactory()), |
@@ -59,29 +45,26 @@ class ExtensionSettingsFrontendTest : public testing::Test { |
file_thread_(BrowserThread::FILE, base::MessageLoop::current()) {} |
virtual void SetUp() OVERRIDE { |
+ ExtensionsTest::SetUp(); |
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
- profile_.reset(new util::MockProfile(temp_dir_.path())); |
ResetFrontend(); |
} |
virtual void TearDown() OVERRIDE { |
frontend_.reset(); |
- profile_.reset(); |
// Execute any pending deletion tasks. |
message_loop_.RunUntilIdle(); |
+ ExtensionsTest::TearDown(); |
} |
protected: |
- Profile* profile() { return profile_.get(); } |
- |
void ResetFrontend() { |
storage_factory_->Reset(new LeveldbSettingsStorageFactory()); |
frontend_.reset( |
- StorageFrontend::CreateForTesting(storage_factory_, profile_.get())); |
+ StorageFrontend::CreateForTesting(storage_factory_, browser_context())); |
} |
base::ScopedTempDir temp_dir_; |
- scoped_ptr<util::MockProfile> profile_; |
scoped_ptr<StorageFrontend> frontend_; |
scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; |
@@ -89,6 +72,7 @@ class ExtensionSettingsFrontendTest : public testing::Test { |
base::MessageLoop message_loop_; |
content::TestBrowserThread ui_thread_; |
content::TestBrowserThread file_thread_; |
+ ExtensionsAPIClient extensions_api_client_; |
}; |
// Get a semblance of coverage for both extension and app settings by |
@@ -109,9 +93,10 @@ TEST_F(ExtensionSettingsFrontendTest, Basics) { |
TEST_F(ExtensionSettingsFrontendTest, SettingsPreservedAcrossReconstruction) { |
const std::string id = "ext"; |
scoped_refptr<const Extension> extension = |
- util::AddExtensionWithId(profile(), id, Manifest::TYPE_EXTENSION); |
+ util::AddExtensionWithId(browser_context(), id, Manifest::TYPE_EXTENSION); |
- ValueStore* storage = util::GetStorage(extension, frontend_.get()); |
+ ValueStore* storage = |
+ util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
// The correctness of Get/Set/Remove/Clear is tested elsewhere so no need to |
// be too rigorous. |
@@ -128,7 +113,7 @@ TEST_F(ExtensionSettingsFrontendTest, SettingsPreservedAcrossReconstruction) { |
} |
ResetFrontend(); |
- storage = util::GetStorage(extension, frontend_.get()); |
+ storage = util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
{ |
ValueStore::ReadResult result = storage->Get(); |
@@ -140,9 +125,10 @@ TEST_F(ExtensionSettingsFrontendTest, SettingsPreservedAcrossReconstruction) { |
TEST_F(ExtensionSettingsFrontendTest, SettingsClearedOnUninstall) { |
const std::string id = "ext"; |
scoped_refptr<const Extension> extension = util::AddExtensionWithId( |
- profile(), id, Manifest::TYPE_LEGACY_PACKAGED_APP); |
+ browser_context(), id, Manifest::TYPE_LEGACY_PACKAGED_APP); |
- ValueStore* storage = util::GetStorage(extension, frontend_.get()); |
+ ValueStore* storage = |
+ util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
{ |
base::StringValue bar("bar"); |
@@ -155,7 +141,7 @@ TEST_F(ExtensionSettingsFrontendTest, SettingsClearedOnUninstall) { |
base::MessageLoop::current()->RunUntilIdle(); |
// The storage area may no longer be valid post-uninstall, so re-request. |
- storage = util::GetStorage(extension, frontend_.get()); |
+ storage = util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
{ |
ValueStore::ReadResult result = storage->Get(); |
ASSERT_FALSE(result->HasError()); |
@@ -166,9 +152,10 @@ TEST_F(ExtensionSettingsFrontendTest, SettingsClearedOnUninstall) { |
TEST_F(ExtensionSettingsFrontendTest, LeveldbDatabaseDeletedFromDiskOnClear) { |
const std::string id = "ext"; |
scoped_refptr<const Extension> extension = |
- util::AddExtensionWithId(profile(), id, Manifest::TYPE_EXTENSION); |
+ util::AddExtensionWithId(browser_context(), id, Manifest::TYPE_EXTENSION); |
- ValueStore* storage = util::GetStorage(extension, frontend_.get()); |
+ ValueStore* storage = |
+ util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
{ |
base::StringValue bar("bar"); |
@@ -198,7 +185,7 @@ TEST_F(ExtensionSettingsFrontendTest, |
DISABLED_QuotaLimitsEnforcedCorrectlyForSyncAndLocal) { |
const std::string id = "ext"; |
scoped_refptr<const Extension> extension = |
- util::AddExtensionWithId(profile(), id, Manifest::TYPE_EXTENSION); |
+ util::AddExtensionWithId(browser_context(), id, Manifest::TYPE_EXTENSION); |
ValueStore* sync_storage = |
util::GetStorage(extension, settings::SYNC, frontend_.get()); |
@@ -206,90 +193,28 @@ TEST_F(ExtensionSettingsFrontendTest, |
util::GetStorage(extension, settings::LOCAL, frontend_.get()); |
// Sync storage should run out after ~100K. |
- scoped_ptr<base::Value> kilobyte = CreateKilobyte(); |
+ scoped_ptr<base::Value> kilobyte = util::CreateKilobyte(); |
for (int i = 0; i < 100; ++i) { |
- sync_storage->Set( |
- ValueStore::DEFAULTS, base::StringPrintf("%d", i), *kilobyte); |
+ sync_storage->Set(DEFAULTS, base::StringPrintf("%d", i), *kilobyte); |
} |
- EXPECT_TRUE(sync_storage->Set( |
- ValueStore::DEFAULTS, "WillError", *kilobyte)->HasError()); |
+ EXPECT_TRUE(sync_storage->Set(DEFAULTS, "WillError", *kilobyte)->HasError()); |
// Local storage shouldn't run out after ~100K. |
for (int i = 0; i < 100; ++i) { |
- local_storage->Set( |
- ValueStore::DEFAULTS, base::StringPrintf("%d", i), *kilobyte); |
+ local_storage->Set(DEFAULTS, base::StringPrintf("%d", i), *kilobyte); |
} |
- EXPECT_FALSE(local_storage->Set( |
- ValueStore::DEFAULTS, "WontError", *kilobyte)->HasError()); |
+ EXPECT_FALSE( |
+ local_storage->Set(DEFAULTS, "WontError", *kilobyte)->HasError()); |
// Local storage should run out after ~5MB. |
- scoped_ptr<base::Value> megabyte = CreateMegabyte(); |
+ scoped_ptr<base::Value> megabyte = util::CreateMegabyte(); |
for (int i = 0; i < 5; ++i) { |
- local_storage->Set( |
- ValueStore::DEFAULTS, base::StringPrintf("%d", i), *megabyte); |
+ local_storage->Set(DEFAULTS, base::StringPrintf("%d", i), *megabyte); |
} |
- EXPECT_TRUE(local_storage->Set( |
- ValueStore::DEFAULTS, "WillError", *megabyte)->HasError()); |
-} |
- |
-// In other tests, we assume that the result of GetStorage is a pointer to the |
-// a Storage owned by a Frontend object, but for the unlimitedStorage case, this |
-// might not be true. So, write the tests in a "callback" style. |
-// We should really rewrite all tests to be asynchronous in this way. |
- |
-static void UnlimitedSyncStorageTestCallback(ValueStore* sync_storage) { |
- // Sync storage should still run out after ~100K; the unlimitedStorage |
- // permission can't apply to sync. |
- scoped_ptr<base::Value> kilobyte = CreateKilobyte(); |
- for (int i = 0; i < 100; ++i) { |
- sync_storage->Set( |
- ValueStore::DEFAULTS, base::StringPrintf("%d", i), *kilobyte); |
- } |
- |
- EXPECT_TRUE(sync_storage->Set( |
- ValueStore::DEFAULTS, "WillError", *kilobyte)->HasError()); |
-} |
- |
-static void UnlimitedLocalStorageTestCallback(ValueStore* local_storage) { |
- // Local storage should never run out. |
- scoped_ptr<base::Value> megabyte = CreateMegabyte(); |
- for (int i = 0; i < 7; ++i) { |
- local_storage->Set( |
- ValueStore::DEFAULTS, base::StringPrintf("%d", i), *megabyte); |
- } |
- |
- EXPECT_FALSE(local_storage->Set( |
- ValueStore::DEFAULTS, "WontError", *megabyte)->HasError()); |
-} |
- |
-#if defined(OS_WIN) |
-// See: http://crbug.com/227296 |
-#define MAYBE_UnlimitedStorageForLocalButNotSync \ |
- DISABLED_UnlimitedStorageForLocalButNotSync |
-#else |
-#define MAYBE_UnlimitedStorageForLocalButNotSync \ |
- UnlimitedStorageForLocalButNotSync |
-#endif |
- |
-TEST_F(ExtensionSettingsFrontendTest, |
- MAYBE_UnlimitedStorageForLocalButNotSync) { |
- const std::string id = "ext"; |
- std::set<std::string> permissions; |
- permissions.insert("unlimitedStorage"); |
- scoped_refptr<const Extension> extension = |
- util::AddExtensionWithIdAndPermissions( |
- profile(), id, Manifest::TYPE_EXTENSION, permissions); |
- |
- frontend_->RunWithStorage( |
- extension, settings::SYNC, base::Bind(&UnlimitedSyncStorageTestCallback)); |
- frontend_->RunWithStorage(extension, |
- settings::LOCAL, |
- base::Bind(&UnlimitedLocalStorageTestCallback)); |
- |
- base::MessageLoop::current()->RunUntilIdle(); |
+ EXPECT_TRUE(local_storage->Set(DEFAULTS, "WillError", *megabyte)->HasError()); |
} |
} // namespace extensions |