summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/extensions/extensions_service.cc10
-rw-r--r--chrome/browser/extensions/extensions_service_unittest.cc11
-rw-r--r--chrome/browser/plugin_service.cc19
-rw-r--r--chrome/browser/plugin_service.h5
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();