summaryrefslogtreecommitdiffstats
path: root/content/browser/plugin_service.cc
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 21:16:58 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-05 21:16:58 +0000
commit2de307599d70dacc116ae10b84bb6860c7fdff4b (patch)
tree32d65901328da47f46df8309b0c0c264c23fc1c0 /content/browser/plugin_service.cc
parent77b6731e1d204a260b64d4c09c827bd2d600154e (diff)
downloadchromium_src-2de307599d70dacc116ae10b84bb6860c7fdff4b.zip
chromium_src-2de307599d70dacc116ae10b84bb6860c7fdff4b.tar.gz
chromium_src-2de307599d70dacc116ae10b84bb6860c7fdff4b.tar.bz2
Remove last extension related code in content\browser. Have the ExtensionService manage what to do when extensions with plugins are installed, as opposed to in PluginService which being in content shouldn't know about extensions.
BUG=76789 Review URL: http://codereview.chromium.org/6720053 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80528 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/plugin_service.cc')
-rw-r--r--content/browser/plugin_service.cc97
1 files changed, 29 insertions, 68 deletions
diff --git a/content/browser/plugin_service.cc b/content/browser/plugin_service.cc
index 7f96deb..68e6942 100644
--- a/content/browser/plugin_service.cc
+++ b/content/browser/plugin_service.cc
@@ -20,7 +20,6 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/default_plugin.h"
-#include "chrome/common/extensions/extension.h"
#include "chrome/common/logging_chrome.h"
#include "chrome/common/pepper_plugin_registry.h"
#include "chrome/common/render_messages.h"
@@ -51,13 +50,6 @@ static void NotifyPluginsOfActivation() {
}
#endif
-static void PurgePluginListCache(bool reload_pages) {
- for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
- !it.IsAtEnd(); it.Advance()) {
- it.GetCurrentValue()->Send(new ViewMsg_PurgePluginListCache(reload_pages));
- }
-}
-
#if defined(OS_LINUX)
// Delegate class for monitoring directories.
class PluginDirWatcherDelegate : public FilePathWatcher::Delegate {
@@ -173,10 +165,6 @@ PluginService::PluginService()
file_watchers_.push_back(watcher);
}
#endif
- registrar_.Add(this, NotificationType::EXTENSION_LOADED,
- NotificationService::AllSources());
- registrar_.Add(this, NotificationType::EXTENSION_UNLOADED,
- NotificationService::AllSources());
#if defined(OS_MACOSX)
// We need to know when the browser comes forward so we can bring modal plugin
// windows forward too.
@@ -410,54 +398,10 @@ void PluginService::OnWaitableEventSignaled(
#endif // defined(OS_WIN)
}
-static void ForceShutdownPlugin(const FilePath& plugin_path) {
- PluginProcessHost* plugin =
- PluginService::GetInstance()->FindNpapiPluginProcess(plugin_path);
- if (plugin)
- plugin->ForceShutdown();
-}
-
void PluginService::Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details) {
switch (type.value) {
- case NotificationType::EXTENSION_LOADED: {
- const Extension* extension = Details<const Extension>(details).ptr();
- bool plugins_changed = false;
- for (size_t i = 0; i < extension->plugins().size(); ++i) {
- const Extension::PluginInfo& plugin = extension->plugins()[i];
- webkit::npapi::PluginList::Singleton()->RefreshPlugins();
- webkit::npapi::PluginList::Singleton()->AddExtraPluginPath(plugin.path);
- plugins_changed = true;
- if (!plugin.is_public)
- private_plugins_[plugin.path] = extension->url();
- }
- if (plugins_changed)
- PurgePluginListCache(false);
- break;
- }
-
- case NotificationType::EXTENSION_UNLOADED: {
- const Extension* extension =
- Details<UnloadedExtensionInfo>(details)->extension;
- bool plugins_changed = false;
- for (size_t i = 0; i < extension->plugins().size(); ++i) {
- const Extension::PluginInfo& plugin = extension->plugins()[i];
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- NewRunnableFunction(&ForceShutdownPlugin,
- plugin.path));
- webkit::npapi::PluginList::Singleton()->RefreshPlugins();
- webkit::npapi::PluginList::Singleton()->RemoveExtraPluginPath(
- plugin.path);
- plugins_changed = true;
- if (!plugin.is_public)
- private_plugins_.erase(plugin.path);
- }
- if (plugins_changed)
- PurgePluginListCache(false);
- break;
- }
-
#if defined(OS_MACOSX)
case NotificationType::APP_ACTIVATED: {
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
@@ -488,27 +432,44 @@ void PluginService::Observe(NotificationType type,
}
}
-bool PluginService::PrivatePluginAllowedForURL(const FilePath& plugin_path,
- const GURL& url) {
+void PluginService::OverridePluginForTab(const OverriddenPlugin& plugin) {
+ base::AutoLock auto_lock(overridden_plugins_lock_);
+ overridden_plugins_.push_back(plugin);
+}
+
+void PluginService::PurgePluginListCache(bool reload_pages) {
+ for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
+ !it.IsAtEnd(); it.Advance()) {
+ it.GetCurrentValue()->Send(new ViewMsg_PurgePluginListCache(reload_pages));
+ }
+}
+
+void PluginService::RestrictPluginToUrl(const FilePath& plugin_path,
+ const GURL& url) {
+ base::AutoLock auto_lock(restricted_plugin_lock_);
+ if (url.is_empty()) {
+ restricted_plugin_.erase(plugin_path);
+ } else {
+ restricted_plugin_[plugin_path] = url;
+ }
+}
+
+bool PluginService::PluginAllowedForURL(const FilePath& plugin_path,
+ const GURL& url) {
if (url.is_empty())
return true; // Caller wants all plugins.
- PrivatePluginMap::iterator it = private_plugins_.find(plugin_path);
- if (it == private_plugins_.end())
- return true; // This plugin is not private, so it's allowed everywhere.
+ base::AutoLock auto_lock(restricted_plugin_lock_);
+
+ RestrictedPluginMap::iterator it = restricted_plugin_.find(plugin_path);
+ if (it == restricted_plugin_.end())
+ return true; // This plugin is not restricted, so it's allowed everywhere.
- // We do a dumb compare of scheme and host, rather than using the domain
- // service, since we only care about this for extensions.
const GURL& required_url = it->second;
return (url.scheme() == required_url.scheme() &&
url.host() == required_url.host());
}
-void PluginService::OverridePluginForTab(const OverriddenPlugin& plugin) {
- base::AutoLock auto_lock(overridden_plugins_lock_);
- overridden_plugins_.push_back(plugin);
-}
-
void PluginService::RegisterPepperPlugins() {
PepperPluginRegistry::ComputeList(&ppapi_plugins_);