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

Unified Diff: content/browser/plugin_service.cc

Issue 9019004: Rename PluginService to PluginServiceImpl. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years 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
« no previous file with comments | « content/browser/plugin_service.h ('k') | content/browser/plugin_service_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/plugin_service.cc
===================================================================
--- content/browser/plugin_service.cc (revision 115278)
+++ content/browser/plugin_service.cc (working copy)
@@ -1,678 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/browser/plugin_service.h"
-
-#include "base/bind.h"
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/file_path.h"
-#include "base/message_loop.h"
-#include "base/message_loop_proxy.h"
-#include "base/path_service.h"
-#include "base/string_util.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/thread.h"
-#include "base/utf_string_conversions.h"
-#include "base/values.h"
-#include "content/browser/plugin_loader_posix.h"
-#include "content/browser/plugin_service_filter.h"
-#include "content/browser/ppapi_plugin_process_host.h"
-#include "content/browser/renderer_host/render_process_host_impl.h"
-#include "content/browser/renderer_host/render_view_host.h"
-#include "content/browser/resource_context.h"
-#include "content/browser/utility_process_host.h"
-#include "content/common/pepper_plugin_registry.h"
-#include "content/common/plugin_messages.h"
-#include "content/common/utility_messages.h"
-#include "content/common/view_messages.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/content_browser_client.h"
-#include "content/public/browser/notification_service.h"
-#include "content/public/browser/notification_types.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/common/process_type.h"
-#include "webkit/plugins/npapi/plugin_constants_win.h"
-#include "webkit/plugins/npapi/plugin_group.h"
-#include "webkit/plugins/npapi/plugin_list.h"
-#include "webkit/plugins/webplugininfo.h"
-
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
-using ::base::files::FilePathWatcher;
-#endif
-
-using content::BrowserThread;
-using content::PluginServiceFilter;
-
-namespace {
-
-// Helper function that merely runs the callback with the result. Called on the
-// thread on which the original GetPlugins() call was made.
-static void RunGetPluginsCallback(
- const PluginService::GetPluginsCallback& callback,
- const std::vector<webkit::WebPluginInfo>& result) {
- callback.Run(result);
-}
-
-// A callback for GetPlugins() that then gets the freshly loaded plugin groups
-// and runs the callback for GetPluginGroups().
-static void GetPluginsForGroupsCallback(
- const PluginService::GetPluginGroupsCallback& callback,
- const std::vector<webkit::WebPluginInfo>& plugins) {
- std::vector<webkit::npapi::PluginGroup> groups;
- webkit::npapi::PluginList::Singleton()->GetPluginGroups(false, &groups);
- callback.Run(groups);
-}
-
-// Callback set on the PluginList to assert that plugin loading happens on the
-// correct thread.
-void WillLoadPluginsCallback() {
-#if defined(OS_WIN)
- CHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-#else
- CHECK(false) << "Plugin loading should happen out-of-process.";
-#endif
-}
-
-} // namespace
-
-#if defined(OS_MACOSX)
-static void NotifyPluginsOfActivation() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- for (BrowserChildProcessHost::Iterator iter(
- content::PROCESS_TYPE_PLUGIN);
- !iter.Done(); ++iter) {
- PluginProcessHost* plugin = static_cast<PluginProcessHost*>(*iter);
- plugin->OnAppActivation();
- }
-}
-#elif defined(OS_POSIX) && !defined(OS_OPENBSD)
-// Delegate class for monitoring directories.
-class PluginDirWatcherDelegate : public FilePathWatcher::Delegate {
- virtual void OnFilePathChanged(const FilePath& path) OVERRIDE {
- VLOG(1) << "Watched path changed: " << path.value();
- // Make the plugin list update itself
- webkit::npapi::PluginList::Singleton()->RefreshPlugins();
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&content::PluginService::PurgePluginListCache,
- static_cast<content::BrowserContext*>(NULL), false));
- }
-
- virtual void OnFilePathError(const FilePath& path) OVERRIDE {
- // TODO(pastarmovj): Add some sensible error handling. Maybe silently
- // stopping the watcher would be enough. Or possibly restart it.
- NOTREACHED();
- }
-};
-#endif
-
-namespace content {
-// static
-PluginService* PluginService::GetInstance() {
- return ::PluginService::GetInstance();
-}
-
-void PluginService::PurgePluginListCache(BrowserContext* browser_context,
- bool reload_pages) {
- for (RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
- !it.IsAtEnd(); it.Advance()) {
- RenderProcessHost* host = it.GetCurrentValue();
- if (!browser_context || host->GetBrowserContext() == browser_context)
- host->Send(new ViewMsg_PurgePluginListCache(reload_pages));
- }
-}
-
-} // namespace content
-
-// static
-PluginService* PluginService::GetInstance() {
- return Singleton<PluginService>::get();
-}
-
-PluginService::PluginService()
- : plugin_list_(NULL),
- ui_locale_(
- content::GetContentClient()->browser()->GetApplicationLocale()),
- filter_(NULL) {
-}
-
-PluginService::~PluginService() {
-#if defined(OS_WIN)
- // Release the events since they're owned by RegKey, not WaitableEvent.
- hkcu_watcher_.StopWatching();
- hklm_watcher_.StopWatching();
- if (hkcu_event_.get())
- hkcu_event_->Release();
- if (hklm_event_.get())
- hklm_event_->Release();
-#endif
- // Make sure no plugin channel requests have been leaked.
- DCHECK(pending_plugin_clients_.empty());
-}
-
-void PluginService::Init() {
- if (!plugin_list_)
- plugin_list_ = webkit::npapi::PluginList::Singleton();
-
- plugin_list_->set_will_load_plugins_callback(
- base::Bind(&WillLoadPluginsCallback));
-
- RegisterPepperPlugins();
-
- content::GetContentClient()->AddNPAPIPlugins(plugin_list_);
-
- // Load any specified on the command line as well.
- const CommandLine* command_line = CommandLine::ForCurrentProcess();
- FilePath path = command_line->GetSwitchValuePath(switches::kLoadPlugin);
- if (!path.empty())
- AddExtraPluginPath(path);
- path = command_line->GetSwitchValuePath(switches::kExtraPluginDir);
- if (!path.empty())
- plugin_list_->AddExtraPluginDir(path);
-
-#if defined(OS_MACOSX)
- // We need to know when the browser comes forward so we can bring modal plugin
- // windows forward too.
- registrar_.Add(this, content::NOTIFICATION_APP_ACTIVATED,
- content::NotificationService::AllSources());
-#endif
-}
-
-void PluginService::StartWatchingPlugins() {
- // Start watching for changes in the plugin list. This means watching
- // for changes in the Windows registry keys and on both Windows and POSIX
- // watch for changes in the paths that are expected to contain plugins.
-#if defined(OS_WIN)
- if (hkcu_key_.Create(HKEY_CURRENT_USER,
- webkit::npapi::kRegistryMozillaPlugins,
- KEY_NOTIFY) == ERROR_SUCCESS) {
- if (hkcu_key_.StartWatching() == ERROR_SUCCESS) {
- hkcu_event_.reset(new base::WaitableEvent(hkcu_key_.watch_event()));
- hkcu_watcher_.StartWatching(hkcu_event_.get(), this);
- }
- }
- if (hklm_key_.Create(HKEY_LOCAL_MACHINE,
- webkit::npapi::kRegistryMozillaPlugins,
- KEY_NOTIFY) == ERROR_SUCCESS) {
- if (hklm_key_.StartWatching() == ERROR_SUCCESS) {
- hklm_event_.reset(new base::WaitableEvent(hklm_key_.watch_event()));
- hklm_watcher_.StartWatching(hklm_event_.get(), this);
- }
- }
-#elif defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
-// The FilePathWatcher produces too many false positives on MacOS (access time
-// updates?) which will lead to enforcing updates of the plugins way too often.
-// On ChromeOS the user can't install plugins anyway and on Windows all
-// important plugins register themselves in the registry so no need to do that.
- file_watcher_delegate_ = new PluginDirWatcherDelegate();
- // Get the list of all paths for registering the FilePathWatchers
- // that will track and if needed reload the list of plugins on runtime.
- std::vector<FilePath> plugin_dirs;
- plugin_list_->GetPluginDirectories(&plugin_dirs);
-
- for (size_t i = 0; i < plugin_dirs.size(); ++i) {
- // FilePathWatcher can not handle non-absolute paths under windows.
- // We don't watch for file changes in windows now but if this should ever
- // be extended to Windows these lines might save some time of debugging.
-#if defined(OS_WIN)
- if (!plugin_dirs[i].IsAbsolute())
- continue;
-#endif
- FilePathWatcher* watcher = new FilePathWatcher();
- VLOG(1) << "Watching for changes in: " << plugin_dirs[i].value();
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&PluginService::RegisterFilePathWatcher, watcher,
- plugin_dirs[i], file_watcher_delegate_));
- file_watchers_.push_back(watcher);
- }
-#endif
-}
-
-const std::string& PluginService::GetUILocale() {
- return ui_locale_;
-}
-
-PluginProcessHost* PluginService::FindNpapiPluginProcess(
- const FilePath& plugin_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- for (BrowserChildProcessHost::Iterator iter(content::PROCESS_TYPE_PLUGIN);
- !iter.Done(); ++iter) {
- PluginProcessHost* plugin = static_cast<PluginProcessHost*>(*iter);
- if (plugin->info().path == plugin_path)
- return plugin;
- }
-
- return NULL;
-}
-
-PpapiPluginProcessHost* PluginService::FindPpapiPluginProcess(
- const FilePath& plugin_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- for (BrowserChildProcessHost::Iterator iter(
- content::PROCESS_TYPE_PPAPI_PLUGIN);
- !iter.Done(); ++iter) {
- PpapiPluginProcessHost* plugin =
- static_cast<PpapiPluginProcessHost*>(*iter);
- if (plugin->plugin_path() == plugin_path)
- return plugin;
- }
-
- return NULL;
-}
-
-PpapiPluginProcessHost* PluginService::FindPpapiBrokerProcess(
- const FilePath& broker_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- for (BrowserChildProcessHost::Iterator iter(
- content::PROCESS_TYPE_PPAPI_BROKER);
- !iter.Done(); ++iter) {
- PpapiPluginProcessHost* broker =
- static_cast<PpapiPluginProcessHost*>(*iter);
- if (broker->plugin_path() == broker_path)
- return broker;
- }
-
- return NULL;
-}
-
-PluginProcessHost* PluginService::FindOrStartNpapiPluginProcess(
- const FilePath& plugin_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- PluginProcessHost* plugin_host = FindNpapiPluginProcess(plugin_path);
- if (plugin_host)
- return plugin_host;
-
- webkit::WebPluginInfo info;
- if (!GetPluginInfoByPath(plugin_path, &info)) {
- return NULL;
- }
-
- // This plugin isn't loaded by any plugin process, so create a new process.
- scoped_ptr<PluginProcessHost> new_host(new PluginProcessHost());
- if (!new_host->Init(info, ui_locale_)) {
- NOTREACHED(); // Init is not expected to fail.
- return NULL;
- }
- return new_host.release();
-}
-
-PpapiPluginProcessHost* PluginService::FindOrStartPpapiPluginProcess(
- const FilePath& plugin_path,
- PpapiPluginProcessHost::PluginClient* client) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- PpapiPluginProcessHost* plugin_host = FindPpapiPluginProcess(plugin_path);
- if (plugin_host)
- return plugin_host;
-
- // Validate that the plugin is actually registered.
- content::PepperPluginInfo* info = GetRegisteredPpapiPluginInfo(plugin_path);
- if (!info)
- return NULL;
-
- // This plugin isn't loaded by any plugin process, so create a new process.
- return PpapiPluginProcessHost::CreatePluginHost(
- *info,
- client->GetResourceContext()->host_resolver());
-}
-
-PpapiPluginProcessHost* PluginService::FindOrStartPpapiBrokerProcess(
- const FilePath& plugin_path) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- PpapiPluginProcessHost* plugin_host = FindPpapiBrokerProcess(plugin_path);
- if (plugin_host)
- return plugin_host;
-
- // Validate that the plugin is actually registered.
- content::PepperPluginInfo* info = GetRegisteredPpapiPluginInfo(plugin_path);
- if (!info)
- return NULL;
-
- // TODO(ddorwin): Uncomment once out of process is supported.
- // DCHECK(info->is_out_of_process);
-
- // This broker isn't loaded by any broker process, so create a new process.
- return PpapiPluginProcessHost::CreateBrokerHost(*info);
-}
-
-void PluginService::OpenChannelToNpapiPlugin(
- int render_process_id,
- int render_view_id,
- const GURL& url,
- const GURL& page_url,
- const std::string& mime_type,
- PluginProcessHost::Client* client) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DCHECK(!ContainsKey(pending_plugin_clients_, client));
- pending_plugin_clients_.insert(client);
-
- // Make sure plugins are loaded if necessary.
- content::PluginServiceFilterParams params = {
- render_process_id,
- render_view_id,
- page_url,
- &client->GetResourceContext()
- };
- GetPlugins(
- base::Bind(&PluginService::ForwardGetAllowedPluginForOpenChannelToPlugin,
- base::Unretained(this), params, url, mime_type, client));
-}
-
-void PluginService::OpenChannelToPpapiPlugin(
- const FilePath& path,
- PpapiPluginProcessHost::PluginClient* client) {
- PpapiPluginProcessHost* plugin_host = FindOrStartPpapiPluginProcess(
- path, client);
- if (plugin_host)
- plugin_host->OpenChannelToPlugin(client);
- else // Send error.
- client->OnChannelOpened(base::kNullProcessHandle, IPC::ChannelHandle());
-}
-
-void PluginService::OpenChannelToPpapiBroker(
- const FilePath& path,
- PpapiPluginProcessHost::BrokerClient* client) {
- PpapiPluginProcessHost* plugin_host = FindOrStartPpapiBrokerProcess(path);
- if (plugin_host)
- plugin_host->OpenChannelToPlugin(client);
- else // Send error.
- client->OnChannelOpened(base::kNullProcessHandle, IPC::ChannelHandle());
-}
-
-void PluginService::CancelOpenChannelToNpapiPlugin(
- PluginProcessHost::Client* client) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DCHECK(ContainsKey(pending_plugin_clients_, client));
- pending_plugin_clients_.erase(client);
-}
-
-void PluginService::ForwardGetAllowedPluginForOpenChannelToPlugin(
- const content::PluginServiceFilterParams& params,
- const GURL& url,
- const std::string& mime_type,
- PluginProcessHost::Client* client,
- const std::vector<webkit::WebPluginInfo>&) {
- GetAllowedPluginForOpenChannelToPlugin(params.render_process_id,
- params.render_view_id, url, params.page_url, mime_type, client,
- params.resource_context);
-}
-
-void PluginService::GetAllowedPluginForOpenChannelToPlugin(
- int render_process_id,
- int render_view_id,
- const GURL& url,
- const GURL& page_url,
- const std::string& mime_type,
- PluginProcessHost::Client* client,
- const content::ResourceContext* resource_context) {
- webkit::WebPluginInfo info;
- bool allow_wildcard = true;
- bool found = GetPluginInfo(
- render_process_id, render_view_id, *resource_context,
- url, page_url, mime_type, allow_wildcard,
- NULL, &info, NULL);
- FilePath plugin_path;
- if (found)
- plugin_path = info.path;
-
- // Now we jump back to the IO thread to finish opening the channel.
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&PluginService::FinishOpenChannelToPlugin,
- base::Unretained(this), plugin_path, client));
-}
-
-void PluginService::FinishOpenChannelToPlugin(
- const FilePath& plugin_path,
- PluginProcessHost::Client* client) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
-
- // Make sure it hasn't been canceled yet.
- if (!ContainsKey(pending_plugin_clients_, client))
- return;
- pending_plugin_clients_.erase(client);
-
- PluginProcessHost* plugin_host = FindOrStartNpapiPluginProcess(plugin_path);
- if (plugin_host) {
- client->OnFoundPluginProcessHost(plugin_host);
- plugin_host->OpenChannelToPlugin(client);
- } else {
- client->OnError();
- }
-}
-
-bool PluginService::GetPluginInfoArray(
- const GURL& url,
- const std::string& mime_type,
- bool allow_wildcard,
- std::vector<webkit::WebPluginInfo>* plugins,
- std::vector<std::string>* actual_mime_types) {
- bool use_stale = false;
- plugin_list_->GetPluginInfoArray(url, mime_type, allow_wildcard,
- &use_stale, plugins, actual_mime_types);
- return use_stale;
-}
-
-bool PluginService::GetPluginInfo(int render_process_id,
- int render_view_id,
- const content::ResourceContext& context,
- const GURL& url,
- const GURL& page_url,
- const std::string& mime_type,
- bool allow_wildcard,
- bool* is_stale,
- webkit::WebPluginInfo* info,
- std::string* actual_mime_type) {
- std::vector<webkit::WebPluginInfo> plugins;
- std::vector<std::string> mime_types;
- bool stale = GetPluginInfoArray(
- url, mime_type, allow_wildcard, &plugins, &mime_types);
- if (is_stale)
- *is_stale = stale;
- if (plugins.size() > 1 &&
- plugins.back().path ==
- FilePath(webkit::npapi::kDefaultPluginLibraryName)) {
- // If there is at least one plug-in handling the required MIME type (apart
- // from the default plug-in), we don't need the default plug-in.
- plugins.pop_back();
- }
-
- for (size_t i = 0; i < plugins.size(); ++i) {
- if (!filter_ || filter_->ShouldUsePlugin(render_process_id,
- render_view_id,
- &context,
- url,
- page_url,
- &plugins[i])) {
- *info = plugins[i];
- if (actual_mime_type)
- *actual_mime_type = mime_types[i];
- return true;
- }
- }
- return false;
-}
-
-bool PluginService::GetPluginInfoByPath(const FilePath& plugin_path,
- webkit::WebPluginInfo* info) {
- std::vector<webkit::WebPluginInfo> plugins;
- plugin_list_->GetPluginsIfNoRefreshNeeded(&plugins);
-
- for (std::vector<webkit::WebPluginInfo>::iterator it = plugins.begin();
- it != plugins.end();
- ++it) {
- if (it->path == plugin_path) {
- *info = *it;
- return true;
- }
- }
-
- return false;
-}
-
-void PluginService::GetPlugins(const GetPluginsCallback& callback) {
- scoped_refptr<base::MessageLoopProxy> target_loop(
- MessageLoop::current()->message_loop_proxy());
-
-#if defined(OS_WIN)
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- base::Bind(&PluginService::GetPluginsInternal, base::Unretained(this),
- target_loop, callback));
-#else
- std::vector<webkit::WebPluginInfo> cached_plugins;
- if (plugin_list_->GetPluginsIfNoRefreshNeeded(&cached_plugins)) {
- // Can't assume the caller is reentrant.
- target_loop->PostTask(FROM_HERE,
- base::Bind(&RunGetPluginsCallback, callback, cached_plugins));
- } else {
- // If we switch back to loading plugins in process, then we need to make
- // sure g_thread_init() gets called since plugins may call glib at load.
- if (!plugin_loader_.get())
- plugin_loader_ = new PluginLoaderPosix;
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&PluginLoaderPosix::LoadPlugins, plugin_loader_,
- target_loop, callback));
- }
-#endif
-}
-
-void PluginService::GetPluginGroups(const GetPluginGroupsCallback& callback) {
- GetPlugins(base::Bind(&GetPluginsForGroupsCallback, callback));
-}
-
-void PluginService::GetPluginsInternal(
- base::MessageLoopProxy* target_loop,
- const PluginService::GetPluginsCallback& callback) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
-
- std::vector<webkit::WebPluginInfo> plugins;
- plugin_list_->GetPlugins(&plugins);
-
- target_loop->PostTask(FROM_HERE,
- base::Bind(&RunGetPluginsCallback, callback, plugins));
-}
-
-void PluginService::OnWaitableEventSignaled(
- base::WaitableEvent* waitable_event) {
-#if defined(OS_WIN)
- if (waitable_event == hkcu_event_.get()) {
- hkcu_key_.StartWatching();
- } else {
- hklm_key_.StartWatching();
- }
-
- plugin_list_->RefreshPlugins();
- PurgePluginListCache(NULL, false);
-#else
- // This event should only get signaled on a Windows machine.
- NOTREACHED();
-#endif // defined(OS_WIN)
-}
-
-void PluginService::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
-#if defined(OS_MACOSX)
- if (type == content::NOTIFICATION_APP_ACTIVATED) {
- BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
- base::Bind(&NotifyPluginsOfActivation));
- return;
- }
-#endif
- NOTREACHED();
-}
-
-void PluginService::RegisterPepperPlugins() {
- // TODO(abarth): It seems like the PepperPluginRegistry should do this work.
- PepperPluginRegistry::ComputeList(&ppapi_plugins_);
- for (size_t i = 0; i < ppapi_plugins_.size(); ++i) {
- RegisterInternalPlugin(ppapi_plugins_[i].ToWebPluginInfo());
- }
-}
-
-// There should generally be very few plugins so a brute-force search is fine.
-content::PepperPluginInfo* PluginService::GetRegisteredPpapiPluginInfo(
- const FilePath& plugin_path) {
- content::PepperPluginInfo* info = NULL;
- for (size_t i = 0; i < ppapi_plugins_.size(); i++) {
- if (ppapi_plugins_[i].path == plugin_path) {
- info = &ppapi_plugins_[i];
- break;
- }
- }
- if (info)
- return info;
- // We did not find the plugin in our list. But wait! the plugin can also
- // be a latecomer, as it happens with pepper flash. This information
- // can be obtained from the PluginList singleton and we can use it to
- // construct it and add it to the list. This same deal needs to be done
- // in the renderer side in PepperPluginRegistry.
- webkit::WebPluginInfo webplugin_info;
- if (!GetPluginInfoByPath(plugin_path, &webplugin_info))
- return NULL;
- content::PepperPluginInfo new_pepper_info;
- if (!MakePepperPluginInfo(webplugin_info, &new_pepper_info))
- return NULL;
- ppapi_plugins_.push_back(new_pepper_info);
- return &ppapi_plugins_[ppapi_plugins_.size() - 1];
-}
-
-#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD)
-// static
-void PluginService::RegisterFilePathWatcher(
- FilePathWatcher *watcher,
- const FilePath& path,
- FilePathWatcher::Delegate* delegate) {
- bool result = watcher->Watch(path, delegate);
- DCHECK(result);
-}
-#endif
-
-void PluginService::SetFilter(content::PluginServiceFilter* filter) {
- filter_ = filter;
-}
-
-content::PluginServiceFilter* PluginService::GetFilter() {
- return filter_;
-}
-
-void PluginService::RefreshPlugins() {
- plugin_list_->RefreshPlugins();
-}
-
-void PluginService::AddExtraPluginPath(const FilePath& path) {
- plugin_list_->AddExtraPluginPath(path);
-}
-
-void PluginService::RemoveExtraPluginPath(const FilePath& path) {
- plugin_list_->RemoveExtraPluginPath(path);
-}
-
-void PluginService::UnregisterInternalPlugin(const FilePath& path) {
- plugin_list_->UnregisterInternalPlugin(path);
-}
-
-void PluginService::SetPluginListForTesting(
- webkit::npapi::PluginList* plugin_list) {
- plugin_list_ = plugin_list;
-}
-
-void PluginService::RegisterInternalPlugin(const webkit::WebPluginInfo& info) {
- plugin_list_->RegisterInternalPlugin(info);
-}
-
-string16 PluginService::GetPluginGroupName(const std::string& plugin_name) {
- return plugin_list_->GetPluginGroupName(plugin_name);
-}
-
-webkit::npapi::PluginList* PluginService::GetPluginList() {
- return plugin_list_;
-}
« no previous file with comments | « content/browser/plugin_service.h ('k') | content/browser/plugin_service_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698