Index: trunk/src/chrome/browser/extensions/extension_garbage_collector_chromeos_unittest.cc |
=================================================================== |
--- trunk/src/chrome/browser/extensions/extension_garbage_collector_chromeos_unittest.cc (revision 273797) |
+++ trunk/src/chrome/browser/extensions/extension_garbage_collector_chromeos_unittest.cc (working copy) |
@@ -1,196 +0,0 @@ |
-// Copyright 2014 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/file_util.h" |
-#include "base/prefs/scoped_user_pref_update.h" |
-#include "base/prefs/testing_pref_service.h" |
-#include "base/strings/string_util.h" |
-#include "base/threading/sequenced_worker_pool.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/login/users/fake_user_manager.h" |
-#include "chrome/browser/chromeos/login/users/user_manager.h" |
-#include "chrome/browser/extensions/extension_assets_manager_chromeos.h" |
-#include "chrome/browser/extensions/extension_garbage_collector_chromeos.h" |
-#include "chrome/browser/extensions/extension_service_unittest.h" |
-#include "chrome/browser/prefs/browser_prefs.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/test/base/testing_browser_process.h" |
-#include "chrome/test/base/testing_profile.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/plugin_service.h" |
-#include "extensions/browser/extension_prefs.h" |
-#include "extensions/common/manifest_constants.h" |
- |
-namespace { |
-const char kExtensionId1[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
-const char kExtensionId2[] = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; |
-} // namespace |
- |
-namespace extensions { |
- |
-class ExtensionGarbageCollectorChromeOSUnitTest |
- : public ExtensionServiceTestBase { |
- protected: |
- PrefService& local_state() { return local_state_; } |
- const base::FilePath& cache_dir() { return cache_dir_.path(); } |
- |
- virtual void SetUp() OVERRIDE { |
- TestingBrowserProcess::GetGlobal()->SetLocalState(&local_state_); |
- chrome::RegisterLocalState(local_state_.registry()); |
- |
-#if defined(ENABLE_PLUGINS) |
- content::PluginService::GetInstance()->Init(); |
-#endif |
- InitializeGoodInstalledExtensionService(); |
- |
- // Need real IO thread. |
- service_->SetFileTaskRunnerForTesting( |
- content::BrowserThread::GetBlockingPool() |
- ->GetSequencedTaskRunnerWithShutdownBehavior( |
- content::BrowserThread::GetBlockingPool() |
- ->GetNamedSequenceToken("ext_install-"), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); |
- |
- CHECK(cache_dir_.CreateUniqueTempDir()); |
- ExtensionAssetsManagerChromeOS::SetSharedInstallDirForTesting( |
- cache_dir_.path()); |
- |
- // Initialize the UserManager singleton to a fresh FakeUserManager instance. |
- user_manager_enabler_.reset( |
- new chromeos::ScopedUserManagerEnabler(new chromeos::FakeUserManager)); |
- |
- GetFakeUserManager()->AddUser(chromeos::UserManager::kStubUser); |
- GetFakeUserManager()->LoginUser(chromeos::UserManager::kStubUser); |
- GetFakeUserManager()->SetProfileForUser( |
- GetFakeUserManager()->GetActiveUser(), profile_.get()); |
- } |
- |
- virtual void TearDown() OVERRIDE { |
- TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); |
- } |
- |
- void GarbageCollectExtensions() { |
- ExtensionGarbageCollector::Get(profile_.get()) |
- ->GarbageCollectExtensionsForTest(); |
- // Wait for GarbageCollectExtensions task to complete. |
- content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
- } |
- |
- base::FilePath CreateSharedExtensionDir(const std::string& id, |
- const std::string& version, |
- const base::FilePath& shared_dir) { |
- base::FilePath path = shared_dir.AppendASCII(id).AppendASCII(version); |
- CreateDirectory(path); |
- return path; |
- } |
- |
- void CreateSharedExtensionPrefs(const std::string& id, |
- const std::string& version, |
- const std::string& users_string, |
- const base::FilePath& path) { |
- DictionaryPrefUpdate shared_extensions(&local_state_, |
- ExtensionAssetsManagerChromeOS::kSharedExtensions); |
- |
- base::DictionaryValue* extension_info = NULL; |
- if (!shared_extensions->GetDictionary(id, &extension_info)) { |
- extension_info = new base::DictionaryValue; |
- shared_extensions->Set(id, extension_info); |
- } |
- |
- base::DictionaryValue* version_info = new base::DictionaryValue; |
- extension_info->SetWithoutPathExpansion(version, version_info); |
- version_info->SetString( |
- ExtensionAssetsManagerChromeOS::kSharedExtensionPath, path.value()); |
- |
- base::ListValue* users = new base::ListValue; |
- version_info->Set(ExtensionAssetsManagerChromeOS::kSharedExtensionUsers, |
- users); |
- std::vector<std::string> users_list; |
- if (Tokenize(users_string, ",", &users_list)) { |
- for (size_t i = 0; i < users_list.size(); i++) { |
- users->AppendString(users_list[i]); |
- } |
- } |
- } |
- |
- scoped_refptr<Extension> CreateExtension(const std::string& id, |
- const std::string& version, |
- const base::FilePath& path) { |
- base::DictionaryValue manifest; |
- manifest.SetString(manifest_keys::kName, "test"); |
- manifest.SetString(manifest_keys::kVersion, version); |
- |
- std::string error; |
- scoped_refptr<Extension> extension = Extension::Create( |
- path, Manifest::INTERNAL, manifest, Extension::NO_FLAGS, id, &error); |
- CHECK(extension.get()) << error; |
- CHECK_EQ(id, extension->id()); |
- |
- return extension; |
- } |
- |
- ExtensionPrefs* GetExtensionPrefs() { |
- return ExtensionPrefs::Get(profile_.get()); |
- } |
- |
- chromeos::FakeUserManager* GetFakeUserManager() { |
- return static_cast<chromeos::FakeUserManager*>( |
- chromeos::UserManager::Get()); |
- } |
- |
- private: |
- scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; |
- TestingPrefServiceSimple local_state_; |
- base::ScopedTempDir cache_dir_; |
-}; |
- |
-// Test shared extensions clean up. |
-TEST_F(ExtensionGarbageCollectorChromeOSUnitTest, SharedExtensions) { |
- // Version for non-existing user. |
- base::FilePath path_id1_1 = CreateSharedExtensionDir( |
- kExtensionId1, "1.0", cache_dir()); |
- CreateSharedExtensionPrefs(kExtensionId1, "1.0", "test@test.com", path_id1_1); |
- EXPECT_TRUE(base::PathExists(path_id1_1)); |
- |
- // Version for current user but the extension is not installed. |
- base::FilePath path_id1_2 = CreateSharedExtensionDir( |
- kExtensionId1, "2.0", cache_dir()); |
- CreateSharedExtensionPrefs( |
- kExtensionId1, "2.0", chromeos::UserManager::kStubUser, path_id1_2); |
- EXPECT_TRUE(base::PathExists(path_id1_2)); |
- |
- // Version for current user that delayed install. |
- base::FilePath path_id2_1 = CreateSharedExtensionDir( |
- kExtensionId2, "1.0", cache_dir()); |
- CreateSharedExtensionPrefs( |
- kExtensionId2, "1.0", chromeos::UserManager::kStubUser, path_id2_1); |
- scoped_refptr<Extension> extension2 = CreateExtension(kExtensionId2, "1.0", |
- path_id2_1); |
- GetExtensionPrefs()->SetDelayedInstallInfo( |
- extension2.get(), |
- Extension::ENABLED, |
- false, |
- false, |
- ExtensionPrefs::DELAY_REASON_WAIT_FOR_IDLE, |
- syncer::StringOrdinal(), |
- std::string()); |
- EXPECT_TRUE(base::PathExists(path_id2_1)); |
- |
- GarbageCollectExtensions(); |
- |
- EXPECT_FALSE(base::PathExists(path_id1_1)); |
- EXPECT_FALSE(base::PathExists(path_id1_2)); |
- EXPECT_FALSE(base::PathExists(cache_dir().AppendASCII(kExtensionId1))); |
- |
- EXPECT_TRUE(base::PathExists(path_id2_1)); |
- |
- const base::DictionaryValue* shared_extensions = local_state().GetDictionary( |
- ExtensionAssetsManagerChromeOS::kSharedExtensions); |
- ASSERT_TRUE(shared_extensions); |
- |
- EXPECT_FALSE(shared_extensions->HasKey(kExtensionId1)); |
- EXPECT_TRUE(shared_extensions->HasKey(kExtensionId2)); |
-} |
- |
-} // namespace extensions |