Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1670)

Unified Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 6852029: [Sync] Move some extension-sync-related logic to ExtensionService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address asargent's comments Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_service_unittest.cc
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 7b22b413e6a83b33bcb71bf103c0748e76c46f94..0faefa328b73d0516286ce82c4899563b89bb103 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -28,10 +28,14 @@
#include "chrome/browser/extensions/extension_error_reporter.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_special_storage_policy.h"
+#include "chrome/browser/extensions/extension_sync_data.h"
+#include "chrome/browser/extensions/extension_updater.h"
#include "chrome/browser/extensions/external_extension_provider_impl.h"
#include "chrome/browser/extensions/external_extension_provider_interface.h"
#include "chrome/browser/extensions/external_pref_extension_loader.h"
#include "chrome/browser/extensions/pack_extension_job.cc"
+#include "chrome/browser/extensions/pending_extension_info.h"
+#include "chrome/browser/extensions/pending_extension_manager.h"
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/pref_service_mock_builder.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
@@ -395,7 +399,8 @@ ExtensionServiceTestBase::~ExtensionServiceTestBase() {
}
void ExtensionServiceTestBase::InitializeExtensionService(
- const FilePath& pref_file, const FilePath& extensions_install_dir) {
+ const FilePath& pref_file, const FilePath& extensions_install_dir,
+ bool autoupdate_enabled) {
ExtensionTestingProfile* profile = new ExtensionTestingProfile();
// Create a PrefService that only contains user defined preference values.
PrefService* prefs =
@@ -408,7 +413,8 @@ void ExtensionServiceTestBase::InitializeExtensionService(
service_ = profile->CreateExtensionService(
CommandLine::ForCurrentProcess(),
- extensions_install_dir);
+ extensions_install_dir,
+ autoupdate_enabled);
service_->set_extensions_enabled(true);
service_->set_show_extensions_prompts(false);
profile->set_extensions_service(service_.get());
@@ -437,10 +443,20 @@ void ExtensionServiceTestBase::InitializeInstalledExtensionService(
file_util::Delete(extensions_install_dir_, true);
file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true);
- InitializeExtensionService(temp_prefs, extensions_install_dir_);
+ InitializeExtensionService(temp_prefs, extensions_install_dir_, false);
}
void ExtensionServiceTestBase::InitializeEmptyExtensionService() {
+ InitializeExtensionServiceHelper(false);
+}
+
+void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() {
+ InitializeExtensionServiceHelper(true);
+ service_->updater()->Start();
+}
+
+void ExtensionServiceTestBase::InitializeExtensionServiceHelper(
+ bool autoupdate_enabled) {
ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
FilePath path_ = temp_dir_.path();
path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath"));
@@ -452,7 +468,8 @@ void ExtensionServiceTestBase::InitializeEmptyExtensionService() {
file_util::Delete(extensions_install_dir_, true);
file_util::CreateDirectory(extensions_install_dir_);
- InitializeExtensionService(prefs_filename, extensions_install_dir_);
+ InitializeExtensionService(prefs_filename, extensions_install_dir_,
+ autoupdate_enabled);
}
// static
@@ -3256,7 +3273,8 @@ TEST(ExtensionServiceTestSimple, Enabledness) {
// By default, we are enabled.
command_line.reset(new CommandLine(CommandLine::NO_PROGRAM));
service = profile->CreateExtensionService(command_line.get(),
- install_dir);
+ install_dir,
+ false);
EXPECT_TRUE(service->extensions_enabled());
service->Init();
loop.RunAllPending();
@@ -3267,7 +3285,8 @@ TEST(ExtensionServiceTestSimple, Enabledness) {
profile.reset(new TestingProfile());
command_line->AppendSwitch(switches::kDisableExtensions);
service = profile->CreateExtensionService(command_line.get(),
- install_dir);
+ install_dir,
+ false);
EXPECT_FALSE(service->extensions_enabled());
service->Init();
loop.RunAllPending();
@@ -3277,7 +3296,8 @@ TEST(ExtensionServiceTestSimple, Enabledness) {
profile.reset(new TestingProfile());
profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true);
service = profile->CreateExtensionService(command_line.get(),
- install_dir);
+ install_dir,
+ false);
EXPECT_FALSE(service->extensions_enabled());
service->Init();
loop.RunAllPending();
@@ -3288,7 +3308,8 @@ TEST(ExtensionServiceTestSimple, Enabledness) {
profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true);
command_line.reset(new CommandLine(CommandLine::NO_PROGRAM));
service = profile->CreateExtensionService(command_line.get(),
- install_dir);
+ install_dir,
+ false);
EXPECT_FALSE(service->extensions_enabled());
service->Init();
loop.RunAllPending();
@@ -3400,6 +3421,138 @@ TEST_F(ExtensionServiceTest, ComponentExtensions) {
EXPECT_EQ(extension_id, service_->extensions()->at(0)->id());
}
+namespace {
+
+bool AlwaysInstall(const Extension& extension) {
+ return true;
+}
+
+} // namespace
+
+TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) {
+ InitializeEmptyExtensionService();
+
+ ExtensionSyncData extension_sync_data;
+ extension_sync_data.id = good_crx;
+ extension_sync_data.uninstalled = true;
+
+ // Should do nothing.
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+
+ // Install the extension.
+ FilePath extension_path = data_dir_.AppendASCII("good.crx");
+ InstallCrx(extension_path, true);
+ EXPECT_TRUE(service_->GetExtensionById(good_crx, true));
+
+ // Should uninstall the extension.
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_FALSE(service_->GetExtensionById(good_crx, true));
+
+ // Should again do nothing.
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+}
+
+
+TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) {
+ InitializeEmptyExtensionService();
+
+ FilePath extension_path = data_dir_.AppendASCII("good.crx");
+ InstallCrx(extension_path, true);
+ EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
+ EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
+
+ ExtensionSyncData extension_sync_data;
+ extension_sync_data.id = good_crx;
+ extension_sync_data.version =
+ *(service_->GetExtensionById(good_crx, true)->version());
+
+ extension_sync_data.enabled = false;
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
+ EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
+
+ extension_sync_data.enabled = true;
+ extension_sync_data.incognito_enabled = true;
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
+ EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx));
+
+ extension_sync_data.enabled = false;
+ extension_sync_data.incognito_enabled = true;
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
+ EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx));
+
+ EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
+}
+
+TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) {
+ InitializeExtensionServiceWithUpdater();
+
+ // Install the extension.
+ FilePath extension_path = data_dir_.AppendASCII("good.crx");
+ InstallCrx(extension_path, true);
+ EXPECT_TRUE(service_->IsExtensionEnabled(good_crx));
+ EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx));
+
+ ExtensionSyncData extension_sync_data;
+ extension_sync_data.id = good_crx;
+ extension_sync_data.enabled = true;
+ extension_sync_data.version =
+ *(service_->GetExtensionById(good_crx, true)->version());
+
+ // Should do nothing if extension version == sync version.
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_FALSE(service_->updater()->WillCheckSoon());
+
+ // Should do nothing if extension version > sync version (but see
+ // the TODO in ProcessSyncData).
+ {
+ scoped_ptr<Version> version(Version::GetVersionFromString("0.0.0.0"));
+ extension_sync_data.version = *version;
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_FALSE(service_->updater()->WillCheckSoon());
+ }
+
+ // Should kick off an update if extension version < sync version.
+ {
+ scoped_ptr<Version> version(Version::GetVersionFromString("9.9.9.9"));
+ extension_sync_data.version = *version;
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_TRUE(service_->updater()->WillCheckSoon());
+ }
+
+ EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
+}
+
+TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) {
+ InitializeExtensionServiceWithUpdater();
+
+ ExtensionSyncData extension_sync_data;
+ extension_sync_data.id = good_crx;
+ extension_sync_data.update_url = GURL("http://www.google.com");
+ extension_sync_data.enabled = true;
+ {
+ scoped_ptr<Version> version(Version::GetVersionFromString("1.2.3.4"));
+ extension_sync_data.version = *version;
+ }
+
+ service_->ProcessSyncData(extension_sync_data, &AlwaysInstall);
+ EXPECT_TRUE(service_->updater()->WillCheckSoon());
+
+ PendingExtensionInfo info;
+ EXPECT_TRUE(
+ service_->pending_extension_manager()->GetById(good_crx, &info));
+ EXPECT_EQ(extension_sync_data.update_url, info.update_url());
+ EXPECT_TRUE(info.is_from_sync());
+ EXPECT_TRUE(info.install_silently());
+ EXPECT_EQ(extension_sync_data.enabled, info.enable_on_install());
+ EXPECT_EQ(extension_sync_data.incognito_enabled,
+ info.enable_incognito_on_install());
+ EXPECT_EQ(Extension::INTERNAL, info.install_source());
+ // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|.
+}
+
// Test that when multiple sources try to install an extension,
// we consistently choose the right one. To make tests easy to read,
// methods that fake requests to install crx files in several ways
« no previous file with comments | « chrome/browser/extensions/extension_service_unittest.h ('k') | chrome/browser/extensions/extension_sync_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698