diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/extensions/extensions_service.cc | 10 | ||||
-rw-r--r-- | chrome/browser/extensions/extensions_service_unittest.cc | 11 | ||||
-rw-r--r-- | chrome/browser/plugin_service.cc | 19 | ||||
-rw-r--r-- | chrome/browser/plugin_service.h | 5 |
4 files changed, 28 insertions, 17 deletions
diff --git a/chrome/browser/extensions/extensions_service.cc b/chrome/browser/extensions/extensions_service.cc index f0ab1e2..16a7c1a 100644 --- a/chrome/browser/extensions/extensions_service.cc +++ b/chrome/browser/extensions/extensions_service.cc @@ -570,6 +570,16 @@ Extension* ExtensionsServiceBackend::LoadExtension( } } + for (size_t i = 0; i < extension->plugins().size(); ++i) { + const Extension::PluginInfo& plugin = extension->plugins()[i]; + if (!file_util::PathExists(plugin.path)) { + ReportExtensionLoadError(extension_path, + StringPrintf("Could not load '%s' for plugin.", + WideToUTF8(plugin.path.ToWStringHack()).c_str())); + return NULL; + } + } + // Validate icon location for page actions. const PageActionMap& page_actions = extension->page_actions(); for (PageActionMap::const_iterator i(page_actions.begin()); diff --git a/chrome/browser/extensions/extensions_service_unittest.cc b/chrome/browser/extensions/extensions_service_unittest.cc index ab4a78a..f6016ce 100644 --- a/chrome/browser/extensions/extensions_service_unittest.cc +++ b/chrome/browser/extensions/extensions_service_unittest.cc @@ -235,7 +235,7 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) { scripts[0].js_scripts()[0].path().value()); EXPECT_EQ(extension->path().AppendASCII("script2.js").value(), scripts[0].js_scripts()[1].path().value()); - EXPECT_TRUE(extension->plugins_dir().empty()); + EXPECT_TRUE(extension->plugins().empty()); EXPECT_EQ(1u, scripts[1].url_patterns().size()); EXPECT_EQ("http://*.news.com/*", scripts[1].url_patterns()[0].GetAsString()); EXPECT_EQ(extension->path().AppendASCII("js_files").AppendASCII("script3.js") @@ -252,11 +252,16 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) { loaded_[1]->id()); EXPECT_EQ(std::string("My extension 2"), loaded_[1]->name()); EXPECT_EQ(std::string(""), loaded_[1]->description()); - EXPECT_EQ(loaded_[1]->path().AppendASCII("npapi").value(), - loaded_[1]->plugins_dir().value()); EXPECT_EQ(loaded_[1]->GetResourceURL("background.html"), loaded_[1]->background_url()); EXPECT_EQ(0u, loaded_[1]->content_scripts().size()); + EXPECT_EQ(2u, loaded_[1]->plugins().size()); + EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), + loaded_[1]->plugins()[0].path.value()); + EXPECT_TRUE(loaded_[1]->plugins()[0].is_public); + EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), + loaded_[1]->plugins()[1].path.value()); + EXPECT_FALSE(loaded_[1]->plugins()[1].is_public); EXPECT_EQ(Extension::INTERNAL, loaded_[1]->location()); EXPECT_EQ(std::string("20123456789abcdef0123456789abcdef0123456"), diff --git a/chrome/browser/plugin_service.cc b/chrome/browser/plugin_service.cc index d5247e2..86e2a42 100644 --- a/chrome/browser/plugin_service.cc +++ b/chrome/browser/plugin_service.cc @@ -96,12 +96,6 @@ const FilePath& PluginService::GetChromePluginDataDir() { return chrome_plugin_data_dir_; } -void PluginService::AddExtraPluginDir(const FilePath& plugin_dir) { - AutoLock lock(lock_); - NPAPI::PluginList::ResetPluginsLoaded(); - NPAPI::PluginList::AddExtraPluginDir(plugin_dir); -} - const std::wstring& PluginService::GetUILocale() { return ui_locale_; } @@ -233,11 +227,18 @@ void PluginService::Observe(NotificationType type, // cache of the plugin list when we inject user scripts, since it could // have a stale version by the time extensions are loaded. // See: http://code.google.com/p/chromium/issues/detail?id=12306 + ExtensionList* extensions = Details<ExtensionList>(details).ptr(); for (ExtensionList::iterator extension = extensions->begin(); - extension != extensions->end(); ++extension) - if (!(*extension)->plugins_dir().empty()) - AddExtraPluginDir((*extension)->plugins_dir()); + extension != extensions->end(); ++extension) { + for (size_t i = 0; i < (*extension)->plugins().size(); ++i ) { + const Extension::PluginInfo& plugin = (*extension)->plugins()[i]; + // TODO(mpcomplete): pass through plugin.is_public + AutoLock lock(lock_); + NPAPI::PluginList::ResetPluginsLoaded(); + NPAPI::PluginList::AddExtraPluginPath(plugin.path); + } + } break; } diff --git a/chrome/browser/plugin_service.h b/chrome/browser/plugin_service.h index 07a6152..b77d731 100644 --- a/chrome/browser/plugin_service.h +++ b/chrome/browser/plugin_service.h @@ -57,11 +57,6 @@ class PluginService void SetChromePluginDataDir(const FilePath& data_dir); const FilePath& GetChromePluginDataDir(); - // Add an extra plugin directory to scan when we actually do the loading. - // This will force a refresh of the plugin list the next time plugins are - // requested. - void AddExtraPluginDir(const FilePath& plugin_dir); - // Gets the browser's UI locale. const std::wstring& GetUILocale(); |