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

Side by Side Diff: content/browser/plugin_service_impl.cc

Issue 19761007: Move NPAPI implementation out of webkit/plugins/npapi and into content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix mac Created 7 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/plugin_service_impl.h" 5 #include "content/browser/plugin_service_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/path_service.h" 14 #include "base/path_service.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/synchronization/waitable_event.h" 17 #include "base/synchronization/waitable_event.h"
18 #include "base/threading/thread.h" 18 #include "base/threading/thread.h"
19 #include "content/browser/ppapi_plugin_process_host.h" 19 #include "content/browser/ppapi_plugin_process_host.h"
20 #include "content/browser/renderer_host/render_process_host_impl.h" 20 #include "content/browser/renderer_host/render_process_host_impl.h"
21 #include "content/browser/renderer_host/render_view_host_impl.h" 21 #include "content/browser/renderer_host/render_view_host_impl.h"
22 #include "content/common/pepper_plugin_registry.h" 22 #include "content/common/pepper_plugin_registry.h"
23 #include "content/common/plugin_list.h"
23 #include "content/common/view_messages.h" 24 #include "content/common/view_messages.h"
24 #include "content/public/browser/browser_thread.h" 25 #include "content/public/browser/browser_thread.h"
25 #include "content/public/browser/content_browser_client.h" 26 #include "content/public/browser/content_browser_client.h"
26 #include "content/public/browser/plugin_service_filter.h" 27 #include "content/public/browser/plugin_service_filter.h"
27 #include "content/public/browser/resource_context.h" 28 #include "content/public/browser/resource_context.h"
28 #include "content/public/common/content_switches.h" 29 #include "content/public/common/content_switches.h"
29 #include "content/public/common/process_type.h" 30 #include "content/public/common/process_type.h"
30 #include "webkit/plugins/npapi/plugin_list.h"
31 #include "webkit/plugins/npapi/plugin_utils.h" 31 #include "webkit/plugins/npapi/plugin_utils.h"
32 #include "webkit/plugins/plugin_constants.h" 32 #include "webkit/plugins/plugin_constants.h"
33 #include "webkit/plugins/webplugininfo.h" 33 #include "webkit/plugins/webplugininfo.h"
34 34
35 #if defined(OS_WIN) 35 #if defined(OS_WIN)
36 #include "webkit/plugins/npapi/plugin_constants_win.h" 36 #include "content/common/plugin_constants_win.h"
37 #endif 37 #endif
38 38
39 #if defined(OS_POSIX) 39 #if defined(OS_POSIX)
40 #include "content/browser/plugin_loader_posix.h" 40 #include "content/browser/plugin_loader_posix.h"
41 #endif 41 #endif
42 42
43 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID) 43 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID)
44 using ::base::FilePathWatcher; 44 using ::base::FilePathWatcher;
45 #endif 45 #endif
46 46
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID) 100 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID)
101 void NotifyPluginDirChanged(const base::FilePath& path, bool error) { 101 void NotifyPluginDirChanged(const base::FilePath& path, bool error) {
102 if (error) { 102 if (error) {
103 // TODO(pastarmovj): Add some sensible error handling. Maybe silently 103 // TODO(pastarmovj): Add some sensible error handling. Maybe silently
104 // stopping the watcher would be enough. Or possibly restart it. 104 // stopping the watcher would be enough. Or possibly restart it.
105 NOTREACHED(); 105 NOTREACHED();
106 return; 106 return;
107 } 107 }
108 VLOG(1) << "Watched path changed: " << path.value(); 108 VLOG(1) << "Watched path changed: " << path.value();
109 // Make the plugin list update itself 109 // Make the plugin list update itself
110 webkit::npapi::PluginList::Singleton()->RefreshPlugins(); 110 PluginList::Singleton()->RefreshPlugins();
111 BrowserThread::PostTask( 111 BrowserThread::PostTask(
112 BrowserThread::UI, FROM_HERE, 112 BrowserThread::UI, FROM_HERE,
113 base::Bind(&PluginService::PurgePluginListCache, 113 base::Bind(&PluginService::PurgePluginListCache,
114 static_cast<BrowserContext*>(NULL), false)); 114 static_cast<BrowserContext*>(NULL), false));
115 } 115 }
116 #endif 116 #endif
117 117
118 } // namespace 118 } // namespace
119 119
120 // static 120 // static
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 hkcu_event_->Release(); 159 hkcu_event_->Release();
160 if (hklm_event_) 160 if (hklm_event_)
161 hklm_event_->Release(); 161 hklm_event_->Release();
162 #endif 162 #endif
163 // Make sure no plugin channel requests have been leaked. 163 // Make sure no plugin channel requests have been leaked.
164 DCHECK(pending_plugin_clients_.empty()); 164 DCHECK(pending_plugin_clients_.empty());
165 } 165 }
166 166
167 void PluginServiceImpl::Init() { 167 void PluginServiceImpl::Init() {
168 plugin_list_token_ = BrowserThread::GetBlockingPool()->GetSequenceToken(); 168 plugin_list_token_ = BrowserThread::GetBlockingPool()->GetSequenceToken();
169 webkit::npapi::PluginList::Singleton()->set_will_load_plugins_callback( 169 PluginList::Singleton()->set_will_load_plugins_callback(
170 base::Bind(&WillLoadPluginsCallback, plugin_list_token_)); 170 base::Bind(&WillLoadPluginsCallback, plugin_list_token_));
171 171
172 RegisterPepperPlugins(); 172 RegisterPepperPlugins();
173 173
174 // The --site-per-process flag enables an out-of-process iframes 174 // The --site-per-process flag enables an out-of-process iframes
175 // prototype, which uses WebView for rendering. We need to register the MIME 175 // prototype, which uses WebView for rendering. We need to register the MIME
176 // type we use with the plugin, so the renderer can instantiate it. 176 // type we use with the plugin, so the renderer can instantiate it.
177 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 177 const CommandLine* command_line = CommandLine::ForCurrentProcess();
178 if (command_line->HasSwitch(switches::kSitePerProcess)) { 178 if (command_line->HasSwitch(switches::kSitePerProcess)) {
179 webkit::WebPluginInfo webview_plugin( 179 webkit::WebPluginInfo webview_plugin(
180 ASCIIToUTF16("WebView Tag"), 180 ASCIIToUTF16("WebView Tag"),
181 base::FilePath(), 181 base::FilePath(),
182 ASCIIToUTF16("1.2.3.4"), 182 ASCIIToUTF16("1.2.3.4"),
183 ASCIIToUTF16("Browser Plugin.")); 183 ASCIIToUTF16("Browser Plugin."));
184 webview_plugin.type = webkit::WebPluginInfo::PLUGIN_TYPE_NPAPI; 184 webview_plugin.type = webkit::WebPluginInfo::PLUGIN_TYPE_NPAPI;
185 webkit::WebPluginMimeType webview_plugin_mime_type; 185 webkit::WebPluginMimeType webview_plugin_mime_type;
186 webview_plugin_mime_type.mime_type = "application/browser-plugin"; 186 webview_plugin_mime_type.mime_type = "application/browser-plugin";
187 webview_plugin_mime_type.file_extensions.push_back("*"); 187 webview_plugin_mime_type.file_extensions.push_back("*");
188 webview_plugin.mime_types.push_back(webview_plugin_mime_type); 188 webview_plugin.mime_types.push_back(webview_plugin_mime_type);
189 RegisterInternalPlugin(webview_plugin, true); 189 RegisterInternalPlugin(webview_plugin, true);
190 } 190 }
191 191
192 // Load any specified on the command line as well. 192 // Load any specified on the command line as well.
193 base::FilePath path = 193 base::FilePath path =
194 command_line->GetSwitchValuePath(switches::kLoadPlugin); 194 command_line->GetSwitchValuePath(switches::kLoadPlugin);
195 if (!path.empty()) 195 if (!path.empty())
196 AddExtraPluginPath(path); 196 AddExtraPluginPath(path);
197 path = command_line->GetSwitchValuePath(switches::kExtraPluginDir); 197 path = command_line->GetSwitchValuePath(switches::kExtraPluginDir);
198 if (!path.empty()) 198 if (!path.empty())
199 webkit::npapi::PluginList::Singleton()->AddExtraPluginDir(path); 199 PluginList::Singleton()->AddExtraPluginDir(path);
200 200
201 if (command_line->HasSwitch(switches::kDisablePluginsDiscovery)) 201 if (command_line->HasSwitch(switches::kDisablePluginsDiscovery))
202 webkit::npapi::PluginList::Singleton()->DisablePluginsDiscovery(); 202 PluginList::Singleton()->DisablePluginsDiscovery();
203 } 203 }
204 204
205 void PluginServiceImpl::StartWatchingPlugins() { 205 void PluginServiceImpl::StartWatchingPlugins() {
206 // Start watching for changes in the plugin list. This means watching 206 // Start watching for changes in the plugin list. This means watching
207 // for changes in the Windows registry keys and on both Windows and POSIX 207 // for changes in the Windows registry keys and on both Windows and POSIX
208 // watch for changes in the paths that are expected to contain plugins. 208 // watch for changes in the paths that are expected to contain plugins.
209 #if defined(OS_WIN) 209 #if defined(OS_WIN)
210 if (hkcu_key_.Create(HKEY_CURRENT_USER, 210 if (hkcu_key_.Create(HKEY_CURRENT_USER,
211 webkit::npapi::kRegistryMozillaPlugins, 211 kRegistryMozillaPlugins,
212 KEY_NOTIFY) == ERROR_SUCCESS) { 212 KEY_NOTIFY) == ERROR_SUCCESS) {
213 if (hkcu_key_.StartWatching() == ERROR_SUCCESS) { 213 if (hkcu_key_.StartWatching() == ERROR_SUCCESS) {
214 hkcu_event_.reset(new base::WaitableEvent(hkcu_key_.watch_event())); 214 hkcu_event_.reset(new base::WaitableEvent(hkcu_key_.watch_event()));
215 base::WaitableEventWatcher::EventCallback callback = 215 base::WaitableEventWatcher::EventCallback callback =
216 base::Bind(&PluginServiceImpl::OnWaitableEventSignaled, 216 base::Bind(&PluginServiceImpl::OnWaitableEventSignaled,
217 base::Unretained(this)); 217 base::Unretained(this));
218 hkcu_watcher_.StartWatching(hkcu_event_.get(), callback); 218 hkcu_watcher_.StartWatching(hkcu_event_.get(), callback);
219 } 219 }
220 } 220 }
221 if (hklm_key_.Create(HKEY_LOCAL_MACHINE, 221 if (hklm_key_.Create(HKEY_LOCAL_MACHINE,
222 webkit::npapi::kRegistryMozillaPlugins, 222 kRegistryMozillaPlugins,
223 KEY_NOTIFY) == ERROR_SUCCESS) { 223 KEY_NOTIFY) == ERROR_SUCCESS) {
224 if (hklm_key_.StartWatching() == ERROR_SUCCESS) { 224 if (hklm_key_.StartWatching() == ERROR_SUCCESS) {
225 hklm_event_.reset(new base::WaitableEvent(hklm_key_.watch_event())); 225 hklm_event_.reset(new base::WaitableEvent(hklm_key_.watch_event()));
226 base::WaitableEventWatcher::EventCallback callback = 226 base::WaitableEventWatcher::EventCallback callback =
227 base::Bind(&PluginServiceImpl::OnWaitableEventSignaled, 227 base::Bind(&PluginServiceImpl::OnWaitableEventSignaled,
228 base::Unretained(this)); 228 base::Unretained(this));
229 hklm_watcher_.StartWatching(hklm_event_.get(), callback); 229 hklm_watcher_.StartWatching(hklm_event_.get(), callback);
230 } 230 }
231 } 231 }
232 #endif 232 #endif
233 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID) 233 #if defined(OS_POSIX) && !defined(OS_OPENBSD) && !defined(OS_ANDROID)
234 // On ChromeOS the user can't install plugins anyway and on Windows all 234 // On ChromeOS the user can't install plugins anyway and on Windows all
235 // important plugins register themselves in the registry so no need to do that. 235 // important plugins register themselves in the registry so no need to do that.
236 236
237 // Get the list of all paths for registering the FilePathWatchers 237 // Get the list of all paths for registering the FilePathWatchers
238 // that will track and if needed reload the list of plugins on runtime. 238 // that will track and if needed reload the list of plugins on runtime.
239 std::vector<base::FilePath> plugin_dirs; 239 std::vector<base::FilePath> plugin_dirs;
240 webkit::npapi::PluginList::Singleton()->GetPluginDirectories(&plugin_dirs); 240 PluginList::Singleton()->GetPluginDirectories(&plugin_dirs);
241 241
242 for (size_t i = 0; i < plugin_dirs.size(); ++i) { 242 for (size_t i = 0; i < plugin_dirs.size(); ++i) {
243 // FilePathWatcher can not handle non-absolute paths under windows. 243 // FilePathWatcher can not handle non-absolute paths under windows.
244 // We don't watch for file changes in windows now but if this should ever 244 // We don't watch for file changes in windows now but if this should ever
245 // be extended to Windows these lines might save some time of debugging. 245 // be extended to Windows these lines might save some time of debugging.
246 #if defined(OS_WIN) 246 #if defined(OS_WIN)
247 if (!plugin_dirs[i].IsAbsolute()) 247 if (!plugin_dirs[i].IsAbsolute())
248 continue; 248 continue;
249 #endif 249 #endif
250 FilePathWatcher* watcher = new FilePathWatcher(); 250 FilePathWatcher* watcher = new FilePathWatcher();
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 503 }
504 } 504 }
505 505
506 bool PluginServiceImpl::GetPluginInfoArray( 506 bool PluginServiceImpl::GetPluginInfoArray(
507 const GURL& url, 507 const GURL& url,
508 const std::string& mime_type, 508 const std::string& mime_type,
509 bool allow_wildcard, 509 bool allow_wildcard,
510 std::vector<webkit::WebPluginInfo>* plugins, 510 std::vector<webkit::WebPluginInfo>* plugins,
511 std::vector<std::string>* actual_mime_types) { 511 std::vector<std::string>* actual_mime_types) {
512 bool use_stale = false; 512 bool use_stale = false;
513 webkit::npapi::PluginList::Singleton()->GetPluginInfoArray( 513 PluginList::Singleton()->GetPluginInfoArray(
514 url, mime_type, allow_wildcard, &use_stale, plugins, actual_mime_types); 514 url, mime_type, allow_wildcard, &use_stale, plugins, actual_mime_types);
515 return use_stale; 515 return use_stale;
516 } 516 }
517 517
518 bool PluginServiceImpl::GetPluginInfo(int render_process_id, 518 bool PluginServiceImpl::GetPluginInfo(int render_process_id,
519 int render_view_id, 519 int render_view_id,
520 ResourceContext* context, 520 ResourceContext* context,
521 const GURL& url, 521 const GURL& url,
522 const GURL& page_url, 522 const GURL& page_url,
523 const std::string& mime_type, 523 const std::string& mime_type,
(...skipping 20 matching lines...) Expand all
544 *actual_mime_type = mime_types[i]; 544 *actual_mime_type = mime_types[i];
545 return true; 545 return true;
546 } 546 }
547 } 547 }
548 return false; 548 return false;
549 } 549 }
550 550
551 bool PluginServiceImpl::GetPluginInfoByPath(const base::FilePath& plugin_path, 551 bool PluginServiceImpl::GetPluginInfoByPath(const base::FilePath& plugin_path,
552 webkit::WebPluginInfo* info) { 552 webkit::WebPluginInfo* info) {
553 std::vector<webkit::WebPluginInfo> plugins; 553 std::vector<webkit::WebPluginInfo> plugins;
554 webkit::npapi::PluginList::Singleton()->GetPluginsNoRefresh(&plugins); 554 PluginList::Singleton()->GetPluginsNoRefresh(&plugins);
555 555
556 for (std::vector<webkit::WebPluginInfo>::iterator it = plugins.begin(); 556 for (std::vector<webkit::WebPluginInfo>::iterator it = plugins.begin();
557 it != plugins.end(); 557 it != plugins.end();
558 ++it) { 558 ++it) {
559 if (it->path == plugin_path) { 559 if (it->path == plugin_path) {
560 *info = *it; 560 *info = *it;
561 return true; 561 return true;
562 } 562 }
563 } 563 }
564 564
(...skipping 28 matching lines...) Expand all
593 plugin_list_token_, 593 plugin_list_token_,
594 FROM_HERE, 594 FROM_HERE,
595 base::Bind(&PluginServiceImpl::GetPluginsInternal, 595 base::Bind(&PluginServiceImpl::GetPluginsInternal,
596 base::Unretained(this), 596 base::Unretained(this),
597 target_loop, callback), 597 target_loop, callback),
598 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); 598 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
599 return; 599 return;
600 } 600 }
601 #if defined(OS_POSIX) 601 #if defined(OS_POSIX)
602 std::vector<webkit::WebPluginInfo> cached_plugins; 602 std::vector<webkit::WebPluginInfo> cached_plugins;
603 if (webkit::npapi::PluginList::Singleton()->GetPluginsNoRefresh( 603 if (PluginList::Singleton()->GetPluginsNoRefresh(&cached_plugins)) {
604 &cached_plugins)) {
605 // Can't assume the caller is reentrant. 604 // Can't assume the caller is reentrant.
606 target_loop->PostTask(FROM_HERE, 605 target_loop->PostTask(FROM_HERE,
607 base::Bind(callback, cached_plugins)); 606 base::Bind(callback, cached_plugins));
608 } else { 607 } else {
609 // If we switch back to loading plugins in process, then we need to make 608 // If we switch back to loading plugins in process, then we need to make
610 // sure g_thread_init() gets called since plugins may call glib at load. 609 // sure g_thread_init() gets called since plugins may call glib at load.
611 if (!plugin_loader_.get()) 610 if (!plugin_loader_.get())
612 plugin_loader_ = new PluginLoaderPosix; 611 plugin_loader_ = new PluginLoaderPosix;
613 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 612 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
614 base::Bind(&PluginLoaderPosix::LoadPlugins, plugin_loader_, 613 base::Bind(&PluginLoaderPosix::LoadPlugins, plugin_loader_,
615 target_loop, callback)); 614 target_loop, callback));
616 } 615 }
617 #else 616 #else
618 NOTREACHED(); 617 NOTREACHED();
619 #endif 618 #endif
620 } 619 }
621 620
622 void PluginServiceImpl::GetPluginsInternal( 621 void PluginServiceImpl::GetPluginsInternal(
623 base::MessageLoopProxy* target_loop, 622 base::MessageLoopProxy* target_loop,
624 const PluginService::GetPluginsCallback& callback) { 623 const PluginService::GetPluginsCallback& callback) {
625 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( 624 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread(
626 plugin_list_token_)); 625 plugin_list_token_));
627 626
628 std::vector<webkit::WebPluginInfo> plugins; 627 std::vector<webkit::WebPluginInfo> plugins;
629 webkit::npapi::PluginList::Singleton()->GetPlugins(&plugins); 628 PluginList::Singleton()->GetPlugins(&plugins);
630 629
631 target_loop->PostTask(FROM_HERE, 630 target_loop->PostTask(FROM_HERE,
632 base::Bind(callback, plugins)); 631 base::Bind(callback, plugins));
633 } 632 }
634 633
635 void PluginServiceImpl::OnWaitableEventSignaled( 634 void PluginServiceImpl::OnWaitableEventSignaled(
636 base::WaitableEvent* waitable_event) { 635 base::WaitableEvent* waitable_event) {
637 #if defined(OS_WIN) 636 #if defined(OS_WIN)
638 if (waitable_event == hkcu_event_) { 637 if (waitable_event == hkcu_event_) {
639 hkcu_key_.StartWatching(); 638 hkcu_key_.StartWatching();
640 } else { 639 } else {
641 hklm_key_.StartWatching(); 640 hklm_key_.StartWatching();
642 } 641 }
643 642
644 webkit::npapi::PluginList::Singleton()->RefreshPlugins(); 643 PluginList::Singleton()->RefreshPlugins();
645 PurgePluginListCache(NULL, false); 644 PurgePluginListCache(NULL, false);
646 #else 645 #else
647 // This event should only get signaled on a Windows machine. 646 // This event should only get signaled on a Windows machine.
648 NOTREACHED(); 647 NOTREACHED();
649 #endif // defined(OS_WIN) 648 #endif // defined(OS_WIN)
650 } 649 }
651 650
652 void PluginServiceImpl::RegisterPepperPlugins() { 651 void PluginServiceImpl::RegisterPepperPlugins() {
653 // TODO(abarth): It seems like the PepperPluginRegistry should do this work. 652 // TODO(abarth): It seems like the PepperPluginRegistry should do this work.
654 PepperPluginRegistry::ComputeList(&ppapi_plugins_); 653 PepperPluginRegistry::ComputeList(&ppapi_plugins_);
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
742 return false; 741 return false;
743 } 742 }
744 if (i->second.size() != kMaxCrashesPerInterval) { 743 if (i->second.size() != kMaxCrashesPerInterval) {
745 return false; 744 return false;
746 } 745 }
747 base::TimeDelta delta = base::Time::Now() - i->second[0]; 746 base::TimeDelta delta = base::Time::Now() - i->second[0];
748 return delta.InSeconds() <= kCrashesInterval; 747 return delta.InSeconds() <= kCrashesInterval;
749 } 748 }
750 749
751 void PluginServiceImpl::RefreshPlugins() { 750 void PluginServiceImpl::RefreshPlugins() {
752 webkit::npapi::PluginList::Singleton()->RefreshPlugins(); 751 PluginList::Singleton()->RefreshPlugins();
753 } 752 }
754 753
755 void PluginServiceImpl::AddExtraPluginPath(const base::FilePath& path) { 754 void PluginServiceImpl::AddExtraPluginPath(const base::FilePath& path) {
756 webkit::npapi::PluginList::Singleton()->AddExtraPluginPath(path); 755 PluginList::Singleton()->AddExtraPluginPath(path);
757 } 756 }
758 757
759 void PluginServiceImpl::RemoveExtraPluginPath(const base::FilePath& path) { 758 void PluginServiceImpl::RemoveExtraPluginPath(const base::FilePath& path) {
760 webkit::npapi::PluginList::Singleton()->RemoveExtraPluginPath(path); 759 PluginList::Singleton()->RemoveExtraPluginPath(path);
761 } 760 }
762 761
763 void PluginServiceImpl::AddExtraPluginDir(const base::FilePath& path) { 762 void PluginServiceImpl::AddExtraPluginDir(const base::FilePath& path) {
764 webkit::npapi::PluginList::Singleton()->AddExtraPluginDir(path); 763 PluginList::Singleton()->AddExtraPluginDir(path);
765 } 764 }
766 765
767 void PluginServiceImpl::RegisterInternalPlugin( 766 void PluginServiceImpl::RegisterInternalPlugin(
768 const webkit::WebPluginInfo& info, 767 const webkit::WebPluginInfo& info,
769 bool add_at_beginning) { 768 bool add_at_beginning) {
770 webkit::npapi::PluginList::Singleton()->RegisterInternalPlugin( 769 PluginList::Singleton()->RegisterInternalPlugin(info, add_at_beginning);
771 info, add_at_beginning);
772 } 770 }
773 771
774 void PluginServiceImpl::UnregisterInternalPlugin(const base::FilePath& path) { 772 void PluginServiceImpl::UnregisterInternalPlugin(const base::FilePath& path) {
775 webkit::npapi::PluginList::Singleton()->UnregisterInternalPlugin(path); 773 PluginList::Singleton()->UnregisterInternalPlugin(path);
776 } 774 }
777 775
778 void PluginServiceImpl::GetInternalPlugins( 776 void PluginServiceImpl::GetInternalPlugins(
779 std::vector<webkit::WebPluginInfo>* plugins) { 777 std::vector<webkit::WebPluginInfo>* plugins) {
780 webkit::npapi::PluginList::Singleton()->GetInternalPlugins(plugins); 778 PluginList::Singleton()->GetInternalPlugins(plugins);
781 } 779 }
782 780
783 void PluginServiceImpl::DisablePluginsDiscoveryForTesting() { 781 void PluginServiceImpl::DisablePluginsDiscoveryForTesting() {
784 webkit::npapi::PluginList::Singleton()->DisablePluginsDiscovery(); 782 PluginList::Singleton()->DisablePluginsDiscovery();
785 } 783 }
786 784
787 #if defined(OS_MACOSX) 785 #if defined(OS_MACOSX)
788 void PluginServiceImpl::AppActivated() { 786 void PluginServiceImpl::AppActivated() {
789 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 787 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
790 base::Bind(&NotifyPluginsOfActivation)); 788 base::Bind(&NotifyPluginsOfActivation));
791 } 789 }
792 #endif 790 #endif
793 791
794 } // namespace content 792 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698