| 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 d9f8596c71da161c633d0460e81425e25400d134..15fd66aa9dd54949c3a72c4ef7a347fe087416e6 100644
|
| --- a/chrome/browser/extensions/extension_service_unittest.cc
|
| +++ b/chrome/browser/extensions/extension_service_unittest.cc
|
| @@ -28,8 +28,9 @@
|
| #include "chrome/browser/extensions/extension_creator.h"
|
| #include "chrome/browser/extensions/extension_error_reporter.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| -#include "chrome/browser/extensions/external_extension_provider.h"
|
| -#include "chrome/browser/extensions/external_pref_extension_provider.h"
|
| +#include "chrome/browser/extensions/external_extension_provider_interface.h"
|
| +#include "chrome/browser/extensions/external_extension_provider_impl.h"
|
| +#include "chrome/browser/extensions/external_pref_extension_loader.h"
|
| #include "chrome/browser/extensions/pack_extension_job.cc"
|
| #include "chrome/browser/file_system/browser_file_system_helper.h"
|
| #include "chrome/browser/in_process_webkit/dom_storage_context.h"
|
| @@ -125,10 +126,13 @@ static void AssertEqualExtents(ExtensionExtent* extent1,
|
|
|
| } // namespace
|
|
|
| -class MockExtensionProvider : public ExternalExtensionProvider {
|
| +class MockExtensionProvider : public ExternalExtensionProviderInterface {
|
| public:
|
| - explicit MockExtensionProvider(Extension::Location location)
|
| - : location_(location), visit_count_(0) {}
|
| + explicit MockExtensionProvider(
|
| + VisitorInterface* visitor,
|
| + Extension::Location location)
|
| + : location_(location), visitor_(visitor), visit_count_(0) {
|
| + }
|
| virtual ~MockExtensionProvider() {}
|
|
|
| void UpdateOrAddExtension(const std::string& id,
|
| @@ -142,16 +146,17 @@ class MockExtensionProvider : public ExternalExtensionProvider {
|
| }
|
|
|
| // ExternalExtensionProvider implementation:
|
| - virtual void VisitRegisteredExtension(Visitor* visitor) const {
|
| + virtual void VisitRegisteredExtension() const {
|
| visit_count_++;
|
| for (DataMap::const_iterator i = extension_map_.begin();
|
| i != extension_map_.end(); ++i) {
|
| scoped_ptr<Version> version;
|
| version.reset(Version::GetVersionFromString(i->second.first));
|
|
|
| - visitor->OnExternalExtensionFileFound(
|
| + visitor_->OnExternalExtensionFileFound(
|
| i->first, version.get(), i->second.second, location_);
|
| }
|
| + visitor_->OnExternalProviderReady();
|
| }
|
|
|
| virtual bool HasExtension(const std::string& id) const {
|
| @@ -173,6 +178,14 @@ class MockExtensionProvider : public ExternalExtensionProvider {
|
|
|
| return true;
|
| }
|
| +
|
| + virtual bool IsReady() {
|
| + return true;
|
| + }
|
| +
|
| + virtual void ServiceShutdown() {
|
| + }
|
| +
|
| int visit_count() const { return visit_count_; }
|
| void set_visit_count(int visit_count) {
|
| visit_count_ = visit_count;
|
| @@ -182,6 +195,7 @@ class MockExtensionProvider : public ExternalExtensionProvider {
|
| typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap;
|
| DataMap extension_map_;
|
| Extension::Location location_;
|
| + VisitorInterface* visitor_;
|
|
|
| // visit_count_ tracks the number of calls to VisitRegisteredExtension().
|
| // Mutable because it must be incremented on each call to
|
| @@ -192,15 +206,19 @@ class MockExtensionProvider : public ExternalExtensionProvider {
|
| DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider);
|
| };
|
|
|
| -class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
|
| +class MockProviderVisitor
|
| + : public ExternalExtensionProviderInterface::VisitorInterface {
|
| public:
|
| MockProviderVisitor() : ids_found_(0) {
|
| }
|
|
|
| int Visit(const std::string& json_data) {
|
| // Give the test json file to the provider for parsing.
|
| - provider_.reset(new ExternalPrefExtensionProvider());
|
| - provider_->SetPreferencesForTesting(json_data);
|
| + provider_.reset(new ExternalExtensionProviderImpl(
|
| + this,
|
| + new ExternalTestingExtensionLoader(json_data),
|
| + Extension::EXTERNAL_PREF,
|
| + Extension::EXTERNAL_PREF_DOWNLOAD));
|
|
|
| // We also parse the file into a dictionary to compare what we get back
|
| // from the provider.
|
| @@ -219,7 +237,7 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
|
| // Reset our counter.
|
| ids_found_ = 0;
|
| // Ask the provider to look up all extensions and return them.
|
| - provider_->VisitRegisteredExtension(this);
|
| + provider_->VisitRegisteredExtension();
|
|
|
| return ids_found_;
|
| }
|
| @@ -285,10 +303,14 @@ class MockProviderVisitor : public ExternalExtensionProvider::Visitor {
|
| }
|
| }
|
|
|
| + virtual void OnExternalProviderReady() {
|
| + EXPECT_TRUE(provider_->IsReady());
|
| + }
|
| +
|
| private:
|
| int ids_found_;
|
|
|
| - scoped_ptr<ExternalPrefExtensionProvider> provider_;
|
| + scoped_ptr<ExternalExtensionProviderImpl> provider_;
|
| scoped_ptr<DictionaryValue> prefs_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor);
|
| @@ -471,7 +493,7 @@ class ExtensionServiceTest
|
| }
|
| }
|
|
|
| - void AddMockExternalProvider(ExternalExtensionProvider* provider) {
|
| + void AddMockExternalProvider(ExternalExtensionProviderInterface* provider) {
|
| service_->AddProviderForTesting(provider);
|
| }
|
|
|
| @@ -1071,8 +1093,10 @@ TEST_F(ExtensionServiceTest, KilledExtensions) {
|
| FilePath path = extensions_path.AppendASCII("good.crx");
|
| set_extensions_enabled(true);
|
|
|
| + scoped_ptr<Version> version;
|
| + version.reset(Version::GetVersionFromString("1.0.0.0"));
|
| // Install an external extension.
|
| - service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0",
|
| + service_->OnExternalExtensionFileFound(good_crx, version.get(),
|
| path, Extension::EXTERNAL_PREF);
|
| loop_.RunAllPending();
|
| ASSERT_TRUE(NULL != service_->GetExtensionById(good_crx, false));
|
| @@ -1083,15 +1107,16 @@ TEST_F(ExtensionServiceTest, KilledExtensions) {
|
| ValidateIntegerPref(good_crx, "location", Extension::KILLBIT);
|
|
|
| // Try to re-install it externally. This should fail because of the killbit.
|
| - service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0",
|
| + service_->OnExternalExtensionFileFound(good_crx, version.get(),
|
| path, Extension::EXTERNAL_PREF);
|
| loop_.RunAllPending();
|
| ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
|
| ValidateIntegerPref(good_crx, "location", Extension::KILLBIT);
|
|
|
| + version.reset(Version::GetVersionFromString("1.0.0.1"));
|
| // Repeat the same thing with a newer version of the extension.
|
| path = extensions_path.AppendASCII("good2.crx");
|
| - service_->OnExternalExtensionFileFound(good_crx, "1.0.0.1",
|
| + service_->OnExternalExtensionFileFound(good_crx, version.get(),
|
| path, Extension::EXTERNAL_PREF);
|
| loop_.RunAllPending();
|
| ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
|
| @@ -2862,8 +2887,7 @@ void ExtensionServiceTest::TestExternalProvider(
|
| provider->RemoveExtension(good_crx);
|
|
|
| loaded_.clear();
|
| - service_->UnloadAllExtensions();
|
| - service_->LoadAllExtensions();
|
| + service_->OnExternalProviderReady();
|
| loop_.RunAllPending();
|
| ASSERT_EQ(0u, loaded_.size());
|
| ValidatePrefKeyCount(0);
|
| @@ -2909,7 +2933,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallRegistry) {
|
|
|
| // Now add providers. Extension system takes ownership of the objects.
|
| MockExtensionProvider* reg_provider =
|
| - new MockExtensionProvider(Extension::EXTERNAL_REGISTRY);
|
| + new MockExtensionProvider(service_.get(), Extension::EXTERNAL_REGISTRY);
|
| AddMockExternalProvider(reg_provider);
|
| TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY);
|
| }
|
| @@ -2920,7 +2944,7 @@ TEST_F(ExtensionServiceTest, ExternalInstallPref) {
|
|
|
| // Now add providers. Extension system takes ownership of the objects.
|
| MockExtensionProvider* pref_provider =
|
| - new MockExtensionProvider(Extension::EXTERNAL_PREF);
|
| + new MockExtensionProvider(service_.get(), Extension::EXTERNAL_PREF);
|
|
|
| AddMockExternalProvider(pref_provider);
|
| TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF);
|
| @@ -2939,7 +2963,8 @@ TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) {
|
| // what the visitor does results in an extension being downloaded and
|
| // installed.
|
| MockExtensionProvider* pref_provider =
|
| - new MockExtensionProvider(Extension::EXTERNAL_PREF_DOWNLOAD);
|
| + new MockExtensionProvider(service_.get(),
|
| + Extension::EXTERNAL_PREF_DOWNLOAD);
|
| AddMockExternalProvider(pref_provider);
|
| TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD);
|
| }
|
| @@ -3119,7 +3144,7 @@ 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);
|
| EXPECT_TRUE(service->extensions_enabled());
|
| service->Init();
|
| loop.RunAllPending();
|
| @@ -3140,7 +3165,7 @@ TEST(ExtensionServiceTestSimple, Enabledness) {
|
| profile.reset(new TestingProfile());
|
| profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true);
|
| service = profile->CreateExtensionService(command_line.get(),
|
| - install_dir);
|
| + install_dir);
|
| EXPECT_FALSE(service->extensions_enabled());
|
| service->Init();
|
| loop.RunAllPending();
|
|
|