Chromium Code Reviews| Index: content/browser/plugin_service.cc |
| diff --git a/content/browser/plugin_service.cc b/content/browser/plugin_service.cc |
| index 5e0e910656076fa2394cec4f57f871b1f52a079b..a3054fe936dba1be00d09dc91465f416c3cf903f 100644 |
| --- a/content/browser/plugin_service.cc |
| +++ b/content/browser/plugin_service.cc |
| @@ -109,13 +109,40 @@ class PluginDirWatcherDelegate : public FilePathWatcher::Delegate { |
| // static |
| PluginService* PluginService::GetInstance() { |
| - return Singleton<PluginService>::get(); |
| + PluginService* service = Singleton<PluginService>::get(); |
| + if (!service->did_init_) |
|
jam
2011/11/08 23:12:57
we should know who creates this for the first time
|
| + service->Init(); |
| + return service; |
| } |
| PluginService::PluginService() |
| - : ui_locale_( |
| + : did_init_(false), |
| + 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() { |
| + DCHECK(!did_init_); |
| + |
| + if (!plugin_list_) |
| + plugin_list_ = webkit::npapi::PluginList::Singleton(); |
| + |
| plugin_list()->set_will_load_plugins_callback( |
| base::Bind(&WillLoadPluginsCallback)); |
| @@ -138,20 +165,8 @@ PluginService::PluginService() |
| registrar_.Add(this, content::NOTIFICATION_APP_ACTIVATED, |
| content::NotificationService::AllSources()); |
| #endif |
| -} |
| -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()); |
| + did_init_ = true; |
| } |
| void PluginService::StartWatchingPlugins() { |
| @@ -640,6 +655,11 @@ webkit::npapi::PluginList* PluginService::plugin_list() { |
| return webkit::npapi::PluginList::Singleton(); |
| } |
| +void PluginService::SetPluginListForTesting( |
| + webkit::npapi::PluginList* plugin_list) { |
| + plugin_list_ = plugin_list; |
| +} |
| + |
| void PluginService::RegisterInternalPlugin(const webkit::WebPluginInfo& info) { |
| plugin_list()->RegisterInternalPlugin(info); |
| } |