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

Side by Side Diff: chrome/browser/plugin_updater.cc

Issue 7627001: Revert r96364, it's breaking a NaCl test. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make it prettier Created 9 years, 4 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
« no previous file with comments | « chrome/browser/plugin_updater.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/plugin_prefs.h" 5 #include "chrome/browser/plugin_updater.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h"
10 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/singleton.h"
12 #include "base/message_loop.h" 10 #include "base/message_loop.h"
13 #include "base/path_service.h" 11 #include "base/path_service.h"
14 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
15 #include "base/values.h" 13 #include "base/values.h"
16 #include "base/version.h" 14 #include "base/version.h"
17 #include "chrome/browser/prefs/pref_service.h" 15 #include "chrome/browser/prefs/pref_service.h"
18 #include "chrome/browser/prefs/scoped_user_pref_update.h" 16 #include "chrome/browser/prefs/scoped_user_pref_update.h"
19 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/profiles/profile_dependency_manager.h"
21 #include "chrome/browser/profiles/profile_keyed_service.h"
22 #include "chrome/browser/profiles/profile_keyed_service_factory.h"
23 #include "chrome/common/chrome_content_client.h" 18 #include "chrome/common/chrome_content_client.h"
24 #include "chrome/common/chrome_notification_types.h" 19 #include "chrome/common/chrome_notification_types.h"
25 #include "chrome/common/chrome_paths.h" 20 #include "chrome/common/chrome_paths.h"
26 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
28 #include "content/browser/browser_thread.h" 22 #include "content/browser/browser_thread.h"
29 #include "content/common/notification_service.h" 23 #include "content/common/notification_service.h"
30 #include "webkit/plugins/npapi/plugin_list.h" 24 #include "webkit/plugins/npapi/plugin_list.h"
31 #include "webkit/plugins/npapi/webplugininfo.h" 25 #include "webkit/plugins/npapi/webplugininfo.h"
32 26
33 namespace {
34
35 class PluginPrefsWrapper : public ProfileKeyedService {
36 public:
37 explicit PluginPrefsWrapper(scoped_refptr<PluginPrefs> plugin_prefs)
38 : plugin_prefs_(plugin_prefs) {}
39 virtual ~PluginPrefsWrapper() {}
40
41 PluginPrefs* plugin_prefs() { return plugin_prefs_.get(); }
42
43 private:
44 // ProfileKeyedService methods:
45 virtual void Shutdown() OVERRIDE {
46 plugin_prefs_->ShutdownOnUIThread();
47 }
48
49 scoped_refptr<PluginPrefs> plugin_prefs_;
50 };
51
52 }
53
54 // How long to wait to save the plugin enabled information, which might need to 27 // How long to wait to save the plugin enabled information, which might need to
55 // go to disk. 28 // go to disk.
56 #define kPluginUpdateDelayMs (60 * 1000) 29 #define kPluginUpdateDelayMs (60 * 1000)
57 30
58 class PluginPrefs::Factory : public ProfileKeyedServiceFactory { 31 PluginUpdater::PluginUpdater()
59 public: 32 : notify_pending_(false) {
60 static Factory* GetInstance();
61
62 PluginPrefsWrapper* GetWrapperForProfile(Profile* profile);
63
64 private:
65 friend struct DefaultSingletonTraits<Factory>;
66
67 Factory();
68 virtual ~Factory() {}
69
70 // ProfileKeyedServiceFactory methods:
71 virtual ProfileKeyedService* BuildServiceInstanceFor(
72 Profile* profile) const OVERRIDE;
73 virtual bool ServiceRedirectedInIncognito() OVERRIDE { return true; }
74 virtual bool ServiceIsNULLWhileTesting() OVERRIDE { return true; }
75 };
76
77 // static
78 void PluginPrefs::Initialize() {
79 Factory::GetInstance();
80 } 33 }
81 34
82 // static 35 DictionaryValue* PluginUpdater::CreatePluginFileSummary(
83 PluginPrefs* PluginPrefs::GetForProfile(Profile* profile) {
84 PluginPrefs* plugin_prefs =
85 Factory::GetInstance()->GetWrapperForProfile(profile)->plugin_prefs();
86 DCHECK(plugin_prefs);
87 return plugin_prefs;
88 }
89
90 DictionaryValue* PluginPrefs::CreatePluginFileSummary(
91 const webkit::npapi::WebPluginInfo& plugin) { 36 const webkit::npapi::WebPluginInfo& plugin) {
92 DictionaryValue* data = new DictionaryValue(); 37 DictionaryValue* data = new DictionaryValue();
93 data->SetString("path", plugin.path.value()); 38 data->SetString("path", plugin.path.value());
94 data->SetString("name", plugin.name); 39 data->SetString("name", plugin.name);
95 data->SetString("version", plugin.version); 40 data->SetString("version", plugin.version);
96 data->SetBoolean("enabled", IsPluginEnabled(plugin)); 41 data->SetBoolean("enabled", webkit::npapi::IsPluginEnabled(plugin));
97 return data; 42 return data;
98 } 43 }
99 44
100 void PluginPrefs::EnablePluginGroup(bool enable, const string16& group_name) { 45 // static
46 ListValue* PluginUpdater::GetPluginGroupsData() {
47 std::vector<webkit::npapi::PluginGroup> plugin_groups;
48 webkit::npapi::PluginList::Singleton()->GetPluginGroups(true, &plugin_groups);
49
50 // Construct DictionaryValues to return to the UI
51 ListValue* plugin_groups_data = new ListValue();
52 for (size_t i = 0; i < plugin_groups.size(); ++i) {
53 plugin_groups_data->Append(plugin_groups[i].GetDataForUI());
54 }
55 return plugin_groups_data;
56 }
57
58 void PluginUpdater::EnablePluginGroup(bool enable, const string16& group_name) {
101 webkit::npapi::PluginList::Singleton()->EnableGroup(enable, group_name); 59 webkit::npapi::PluginList::Singleton()->EnableGroup(enable, group_name);
102 NotifyPluginStatusChanged(); 60 NotifyPluginStatusChanged();
103 } 61 }
104 62
105 void PluginPrefs::EnablePlugin(bool enable, const FilePath& path) { 63 void PluginUpdater::EnablePlugin(bool enable,
64 const FilePath::StringType& path) {
65 FilePath file_path(path);
106 if (enable) 66 if (enable)
107 webkit::npapi::PluginList::Singleton()->EnablePlugin(path); 67 webkit::npapi::PluginList::Singleton()->EnablePlugin(file_path);
108 else 68 else
109 webkit::npapi::PluginList::Singleton()->DisablePlugin(path); 69 webkit::npapi::PluginList::Singleton()->DisablePlugin(file_path);
110 70
111 NotifyPluginStatusChanged(); 71 NotifyPluginStatusChanged();
112 } 72 }
113 73
114 bool PluginPrefs::IsPluginEnabled(const webkit::npapi::WebPluginInfo& plugin) { 74 void PluginUpdater::Observe(int type,
115 // If enabling NaCl, make sure the plugin is also enabled. See bug
116 // http://code.google.com/p/chromium/issues/detail?id=81010 for more
117 // information.
118 // TODO(dspringer): When NaCl is on by default, remove this code.
119 if ((plugin.name ==
120 ASCIIToUTF16(chrome::ChromeContentClient::kNaClPluginName)) &&
121 CommandLine::ForCurrentProcess()->HasSwitch(switches::kEnableNaCl)) {
122 return true;
123 }
124 return webkit::npapi::IsPluginEnabled(plugin);
125 }
126
127 void PluginPrefs::Observe(int type,
128 const NotificationSource& source, 75 const NotificationSource& source,
129 const NotificationDetails& details) { 76 const NotificationDetails& details) {
130 DCHECK_EQ(chrome::NOTIFICATION_PREF_CHANGED, type); 77 DCHECK_EQ(chrome::NOTIFICATION_PREF_CHANGED, type);
131 const std::string* pref_name = Details<std::string>(details).ptr(); 78 const std::string* pref_name = Details<std::string>(details).ptr();
132 if (!pref_name) { 79 if (!pref_name) {
133 NOTREACHED(); 80 NOTREACHED();
134 return; 81 return;
135 } 82 }
136 DCHECK_EQ(prefs_, Source<PrefService>(source).ptr());
137 if (*pref_name == prefs::kPluginsDisabledPlugins || 83 if (*pref_name == prefs::kPluginsDisabledPlugins ||
138 *pref_name == prefs::kPluginsDisabledPluginsExceptions || 84 *pref_name == prefs::kPluginsDisabledPluginsExceptions ||
139 *pref_name == prefs::kPluginsEnabledPlugins) { 85 *pref_name == prefs::kPluginsEnabledPlugins) {
86 PrefService* pref_service = Source<PrefService>(source).ptr();
140 const ListValue* disabled_list = 87 const ListValue* disabled_list =
141 prefs_->GetList(prefs::kPluginsDisabledPlugins); 88 pref_service->GetList(prefs::kPluginsDisabledPlugins);
142 const ListValue* exceptions_list = 89 const ListValue* exceptions_list =
143 prefs_->GetList(prefs::kPluginsDisabledPluginsExceptions); 90 pref_service->GetList(prefs::kPluginsDisabledPluginsExceptions);
144 const ListValue* enabled_list = 91 const ListValue* enabled_list =
145 prefs_->GetList(prefs::kPluginsEnabledPlugins); 92 pref_service->GetList(prefs::kPluginsEnabledPlugins);
146 UpdatePluginsStateFromPolicy(disabled_list, exceptions_list, enabled_list); 93 UpdatePluginsStateFromPolicy(disabled_list, exceptions_list, enabled_list);
147 } 94 }
148 } 95 }
149 96
150 void PluginPrefs::UpdatePluginsStateFromPolicy( 97 void PluginUpdater::UpdatePluginsStateFromPolicy(
151 const ListValue* disabled_list, 98 const ListValue* disabled_list,
152 const ListValue* exceptions_list, 99 const ListValue* exceptions_list,
153 const ListValue* enabled_list) { 100 const ListValue* enabled_list) {
154 std::set<string16> disabled_plugin_patterns; 101 std::set<string16> disabled_plugin_patterns;
155 std::set<string16> disabled_plugin_exception_patterns; 102 std::set<string16> disabled_plugin_exception_patterns;
156 std::set<string16> enabled_plugin_patterns; 103 std::set<string16> enabled_plugin_patterns;
157 104
158 ListValueToStringSet(disabled_list, &disabled_plugin_patterns); 105 ListValueToStringSet(disabled_list, &disabled_plugin_patterns);
159 ListValueToStringSet(exceptions_list, &disabled_plugin_exception_patterns); 106 ListValueToStringSet(exceptions_list, &disabled_plugin_exception_patterns);
160 ListValueToStringSet(enabled_list, &enabled_plugin_patterns); 107 ListValueToStringSet(enabled_list, &enabled_plugin_patterns);
161 108
162 webkit::npapi::PluginGroup::SetPolicyEnforcedPluginPatterns( 109 webkit::npapi::PluginGroup::SetPolicyEnforcedPluginPatterns(
163 disabled_plugin_patterns, 110 disabled_plugin_patterns,
164 disabled_plugin_exception_patterns, 111 disabled_plugin_exception_patterns,
165 enabled_plugin_patterns); 112 enabled_plugin_patterns);
166 113
167 NotifyPluginStatusChanged(); 114 NotifyPluginStatusChanged();
168 } 115 }
169 116
170 void PluginPrefs::ListValueToStringSet(const ListValue* src, 117 void PluginUpdater::ListValueToStringSet(const ListValue* src,
171 std::set<string16>* dest) { 118 std::set<string16>* dest) {
172 DCHECK(src); 119 DCHECK(src);
173 DCHECK(dest); 120 DCHECK(dest);
174 ListValue::const_iterator end(src->end()); 121 ListValue::const_iterator end(src->end());
175 for (ListValue::const_iterator current(src->begin()); 122 for (ListValue::const_iterator current(src->begin());
176 current != end; ++current) { 123 current != end; ++current) {
177 string16 plugin_name; 124 string16 plugin_name;
178 if ((*current)->GetAsString(&plugin_name)) { 125 if ((*current)->GetAsString(&plugin_name)) {
179 dest->insert(plugin_name); 126 dest->insert(plugin_name);
180 } 127 }
181 } 128 }
182 } 129 }
183 130
184 void PluginPrefs::SetProfile(Profile* profile) { 131 void PluginUpdater::SetProfile(Profile* profile) {
185 prefs_ = profile->GetPrefs();
186 bool update_internal_dir = false; 132 bool update_internal_dir = false;
187 FilePath last_internal_dir = 133 FilePath last_internal_dir =
188 prefs_->GetFilePath(prefs::kPluginsLastInternalDirectory); 134 profile->GetPrefs()->GetFilePath(prefs::kPluginsLastInternalDirectory);
189 FilePath cur_internal_dir; 135 FilePath cur_internal_dir;
190 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &cur_internal_dir) && 136 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &cur_internal_dir) &&
191 cur_internal_dir != last_internal_dir) { 137 cur_internal_dir != last_internal_dir) {
192 update_internal_dir = true; 138 update_internal_dir = true;
193 prefs_->SetFilePath( 139 profile->GetPrefs()->SetFilePath(
194 prefs::kPluginsLastInternalDirectory, cur_internal_dir); 140 prefs::kPluginsLastInternalDirectory, cur_internal_dir);
195 } 141 }
196 142
197 bool force_enable_internal_pdf = false; 143 bool force_enable_internal_pdf = false;
198 bool internal_pdf_enabled = false; 144 bool internal_pdf_enabled = false;
199 string16 pdf_group_name = 145 string16 pdf_group_name =
200 ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName); 146 ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName);
201 FilePath pdf_path; 147 FilePath pdf_path;
202 PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_path); 148 PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_path);
203 FilePath::StringType pdf_path_str = pdf_path.value(); 149 FilePath::StringType pdf_path_str = pdf_path.value();
204 if (!prefs_->GetBoolean(prefs::kPluginsEnabledInternalPDF)) { 150 if (!profile->GetPrefs()->GetBoolean(prefs::kPluginsEnabledInternalPDF)) {
205 // We switched to the internal pdf plugin being on by default, and so we 151 // We switched to the internal pdf plugin being on by default, and so we
206 // need to force it to be enabled. We only want to do it this once though, 152 // need to force it to be enabled. We only want to do it this once though,
207 // i.e. we don't want to enable it again if the user disables it afterwards. 153 // i.e. we don't want to enable it again if the user disables it afterwards.
208 prefs_->SetBoolean(prefs::kPluginsEnabledInternalPDF, true); 154 profile->GetPrefs()->SetBoolean(prefs::kPluginsEnabledInternalPDF, true);
209 force_enable_internal_pdf = true; 155 force_enable_internal_pdf = true;
210 } 156 }
211 157
212 { // Scoped update of prefs::kPluginsPluginsList. 158 { // Scoped update of prefs::kPluginsPluginsList.
213 ListPrefUpdate update(prefs_, prefs::kPluginsPluginsList); 159 ListPrefUpdate update(profile->GetPrefs(), prefs::kPluginsPluginsList);
214 ListValue* saved_plugins_list = update.Get(); 160 ListValue* saved_plugins_list = update.Get();
215 if (saved_plugins_list && !saved_plugins_list->empty()) { 161 if (saved_plugins_list && !saved_plugins_list->empty()) {
216 for (ListValue::const_iterator it = saved_plugins_list->begin(); 162 for (ListValue::const_iterator it = saved_plugins_list->begin();
217 it != saved_plugins_list->end(); 163 it != saved_plugins_list->end();
218 ++it) { 164 ++it) {
219 if (!(*it)->IsType(Value::TYPE_DICTIONARY)) { 165 if (!(*it)->IsType(Value::TYPE_DICTIONARY)) {
220 LOG(WARNING) << "Invalid entry in " << prefs::kPluginsPluginsList; 166 LOG(WARNING) << "Invalid entry in " << prefs::kPluginsPluginsList;
221 continue; // Oops, don't know what to do with this item. 167 continue; // Oops, don't know what to do with this item.
222 } 168 }
223 169
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 // If the saved plugin list is empty, then the call to UpdatePreferences() 214 // If the saved plugin list is empty, then the call to UpdatePreferences()
269 // below failed in an earlier run, possibly because the user closed the 215 // below failed in an earlier run, possibly because the user closed the
270 // browser too quickly. Try to force enable the internal PDF plugin again. 216 // browser too quickly. Try to force enable the internal PDF plugin again.
271 force_enable_internal_pdf = true; 217 force_enable_internal_pdf = true;
272 } 218 }
273 } // Scoped update of prefs::kPluginsPluginsList. 219 } // Scoped update of prefs::kPluginsPluginsList.
274 220
275 // Build the set of policy enabled/disabled plugin patterns once and cache it. 221 // Build the set of policy enabled/disabled plugin patterns once and cache it.
276 // Don't do this in the constructor, there's no profile available there. 222 // Don't do this in the constructor, there's no profile available there.
277 const ListValue* disabled_plugins = 223 const ListValue* disabled_plugins =
278 prefs_->GetList(prefs::kPluginsDisabledPlugins); 224 profile->GetPrefs()->GetList(prefs::kPluginsDisabledPlugins);
279 const ListValue* disabled_exception_plugins = 225 const ListValue* disabled_exception_plugins =
280 prefs_->GetList(prefs::kPluginsDisabledPluginsExceptions); 226 profile->GetPrefs()->GetList(prefs::kPluginsDisabledPluginsExceptions);
281 const ListValue* enabled_plugins = 227 const ListValue* enabled_plugins =
282 prefs_->GetList(prefs::kPluginsEnabledPlugins); 228 profile->GetPrefs()->GetList(prefs::kPluginsEnabledPlugins);
283 UpdatePluginsStateFromPolicy(disabled_plugins, 229 UpdatePluginsStateFromPolicy(disabled_plugins,
284 disabled_exception_plugins, 230 disabled_exception_plugins,
285 enabled_plugins); 231 enabled_plugins);
286 232
287 registrar_.RemoveAll(); 233 registrar_.RemoveAll();
288 registrar_.Init(prefs_); 234 registrar_.Init(profile->GetPrefs());
289 registrar_.Add(prefs::kPluginsDisabledPlugins, this); 235 registrar_.Add(prefs::kPluginsDisabledPlugins, this);
290 registrar_.Add(prefs::kPluginsDisabledPluginsExceptions, this); 236 registrar_.Add(prefs::kPluginsDisabledPluginsExceptions, this);
291 registrar_.Add(prefs::kPluginsEnabledPlugins, this); 237 registrar_.Add(prefs::kPluginsEnabledPlugins, this);
292 238
293 if (force_enable_internal_pdf || internal_pdf_enabled) { 239 if (force_enable_internal_pdf || internal_pdf_enabled) {
294 // See http://crbug.com/50105 for background. 240 // See http://crbug.com/50105 for background.
295 EnablePluginGroup(false, ASCIIToUTF16( 241 EnablePluginGroup(false, ASCIIToUTF16(
296 webkit::npapi::PluginGroup::kAdobeReaderGroupName)); 242 webkit::npapi::PluginGroup::kAdobeReaderGroupName));
297 } 243 }
298 244
299 if (force_enable_internal_pdf) { 245 if (force_enable_internal_pdf) {
300 // We want to save this, but doing so requires loading the list of plugins, 246 // We want to save this, but doing so requires loading the list of plugins,
301 // so do it after a minute as to not impact startup performance. Note that 247 // so do it after a minute as to not impact startup performance. Note that
302 // plugins are loaded after 30s by the metrics service. 248 // plugins are loaded after 30s by the metrics service.
303 UpdatePreferences(kPluginUpdateDelayMs); 249 UpdatePreferences(profile, kPluginUpdateDelayMs);
304 } 250 }
305 } 251 }
306 252
307 void PluginPrefs::ShutdownOnUIThread() { 253 void PluginUpdater::Shutdown() {
308 prefs_ = NULL;
309 registrar_.RemoveAll(); 254 registrar_.RemoveAll();
310 } 255 }
311 256
312 // static 257 void PluginUpdater::UpdatePreferences(Profile* profile, int delay_ms) {
313 PluginPrefs::Factory* PluginPrefs::Factory::GetInstance() { 258 BrowserThread::PostDelayedTask(
314 return Singleton<PluginPrefs::Factory>::get(); 259 BrowserThread::FILE,
260 FROM_HERE,
261 NewRunnableFunction(
262 &PluginUpdater::GetPreferencesDataOnFileThread, profile), delay_ms);
315 } 263 }
316 264
317 PluginPrefsWrapper* PluginPrefs::Factory::GetWrapperForProfile( 265 void PluginUpdater::GetPreferencesDataOnFileThread(void* profile) {
318 Profile* profile) { 266 std::vector<webkit::npapi::WebPluginInfo> plugins;
319 return static_cast<PluginPrefsWrapper*>(GetServiceForProfile(profile, true)); 267 webkit::npapi::PluginList::Singleton()->GetPlugins(&plugins);
320 }
321 268
322 PluginPrefs::Factory::Factory() 269 std::vector<webkit::npapi::PluginGroup> groups;
323 : ProfileKeyedServiceFactory(ProfileDependencyManager::GetInstance()) { 270 webkit::npapi::PluginList::Singleton()->GetPluginGroups(false, &groups);
324 }
325 271
326 ProfileKeyedService* PluginPrefs::Factory::BuildServiceInstanceFor( 272 BrowserThread::PostTask(
327 Profile* profile) const { 273 BrowserThread::UI,
328 scoped_refptr<PluginPrefs> plugin_prefs(new PluginPrefs()); 274 FROM_HERE,
329 plugin_prefs->SetProfile(profile); 275 NewRunnableFunction(&PluginUpdater::OnUpdatePreferences,
330 return new PluginPrefsWrapper(plugin_prefs); 276 static_cast<Profile*>(profile),
331 }
332
333 PluginPrefs::PluginPrefs() : notify_pending_(false) {
334 }
335
336 PluginPrefs::~PluginPrefs() {
337 }
338
339 void PluginPrefs::UpdatePreferences(int delay_ms) {
340 BrowserThread::PostDelayedTask(
341 BrowserThread::FILE,
342 FROM_HERE,
343 NewRunnableMethod(this, &PluginPrefs::GetPreferencesDataOnFileThread),
344 delay_ms);
345 }
346
347 void PluginPrefs::GetPreferencesDataOnFileThread() {
348 std::vector<webkit::npapi::WebPluginInfo> plugins;
349 std::vector<webkit::npapi::PluginGroup> groups;
350
351 webkit::npapi::PluginList* plugin_list =
352 webkit::npapi::PluginList::Singleton();
353 plugin_list->GetPlugins(&plugins);
354 plugin_list->GetPluginGroups(false, &groups);
355
356 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
357 NewRunnableMethod(this, &PluginPrefs::OnUpdatePreferences,
358 plugins, groups)); 277 plugins, groups));
359 } 278 }
360 279
361 void PluginPrefs::OnUpdatePreferences( 280 void PluginUpdater::OnUpdatePreferences(
362 std::vector<webkit::npapi::WebPluginInfo> plugins, 281 Profile* profile,
363 std::vector<webkit::npapi::PluginGroup> groups) { 282 const std::vector<webkit::npapi::WebPluginInfo>& plugins,
364 if (!prefs_) 283 const std::vector<webkit::npapi::PluginGroup>& groups) {
365 return; 284 ListPrefUpdate update(profile->GetPrefs(), prefs::kPluginsPluginsList);
366
367 ListPrefUpdate update(prefs_, prefs::kPluginsPluginsList);
368 ListValue* plugins_list = update.Get(); 285 ListValue* plugins_list = update.Get();
369 plugins_list->Clear(); 286 plugins_list->Clear();
370 287
371 FilePath internal_dir; 288 FilePath internal_dir;
372 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir)) 289 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir))
373 prefs_->SetFilePath(prefs::kPluginsLastInternalDirectory, internal_dir); 290 profile->GetPrefs()->SetFilePath(prefs::kPluginsLastInternalDirectory,
291 internal_dir);
374 292
375 // Add the plugin files. 293 // Add the plugin files.
376 for (size_t i = 0; i < plugins.size(); ++i) { 294 for (size_t i = 0; i < plugins.size(); ++i) {
377 DictionaryValue* summary = CreatePluginFileSummary(plugins[i]); 295 DictionaryValue* summary = CreatePluginFileSummary(plugins[i]);
378 // If the plugin is managed by policy, store the user preferred state 296 // If the plugin is managed by policy, store the user preferred state
379 // instead. 297 // instead.
380 if (plugins[i].enabled & 298 if (plugins[i].enabled & webkit::npapi::WebPluginInfo::MANAGED_MASK) {
381 webkit::npapi::WebPluginInfo::MANAGED_MASK) {
382 bool user_enabled = 299 bool user_enabled =
383 (plugins[i].enabled & webkit::npapi::WebPluginInfo::USER_MASK) == 300 (plugins[i].enabled & webkit::npapi::WebPluginInfo::USER_MASK) ==
384 webkit::npapi::WebPluginInfo::USER_ENABLED; 301 webkit::npapi::WebPluginInfo::USER_ENABLED;
385 summary->SetBoolean("enabled", user_enabled); 302 summary->SetBoolean("enabled", user_enabled);
386 } 303 }
387 plugins_list->Append(summary); 304 plugins_list->Append(summary);
388 } 305 }
389 306
390 // Add the groups as well. 307 // Add the groups as well.
391 for (size_t i = 0; i < groups.size(); ++i) { 308 for (size_t i = 0; i < groups.size(); ++i) {
392 DictionaryValue* summary = groups[i].GetSummary(); 309 DictionaryValue* summary = groups[i].GetSummary();
393 // If the plugin is disabled only by policy don't store this state in the 310 // If the plugin is disabled only by policy don't store this state in the
394 // user pref store. 311 // user pref store.
395 if (!groups[i].Enabled() && 312 if (!groups[i].Enabled() &&
396 webkit::npapi::PluginGroup::IsPluginNameDisabledByPolicy( 313 webkit::npapi::PluginGroup::IsPluginNameDisabledByPolicy(
397 groups[i].GetGroupName())) 314 groups[i].GetGroupName()))
398 summary->SetBoolean("enabled", true); 315 summary->SetBoolean("enabled", true);
399 plugins_list->Append(summary); 316 plugins_list->Append(summary);
400 } 317 }
401 } 318 }
402 319
403 void PluginPrefs::NotifyPluginStatusChanged() { 320 void PluginUpdater::NotifyPluginStatusChanged() {
404 if (notify_pending_) 321 if (notify_pending_)
405 return; 322 return;
406 notify_pending_ = true; 323 notify_pending_ = true;
407 MessageLoop::current()->PostTask( 324 MessageLoop::current()->PostTask(
408 FROM_HERE, 325 FROM_HERE,
409 NewRunnableMethod(this, &PluginPrefs::OnNotifyPluginStatusChanged)); 326 NewRunnableFunction(&PluginUpdater::OnNotifyPluginStatusChanged));
410 } 327 }
411 328
412 void PluginPrefs::OnNotifyPluginStatusChanged() { 329 void PluginUpdater::OnNotifyPluginStatusChanged() {
413 notify_pending_ = false; 330 GetInstance()->notify_pending_ = false;
414 NotificationService::current()->Notify( 331 NotificationService::current()->Notify(
415 content::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, 332 content::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED,
416 Source<PluginPrefs>(this), 333 Source<PluginUpdater>(GetInstance()),
417 NotificationService::NoDetails()); 334 NotificationService::NoDetails());
418 } 335 }
419 336
420 /*static*/ 337 /*static*/
421 void PluginPrefs::RegisterPrefs(PrefService* prefs) { 338 PluginUpdater* PluginUpdater::GetInstance() {
339 return Singleton<PluginUpdater>::get();
340 }
341
342 /*static*/
343 void PluginUpdater::RegisterPrefs(PrefService* prefs) {
422 FilePath internal_dir; 344 FilePath internal_dir;
423 PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir); 345 PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir);
424 prefs->RegisterFilePathPref(prefs::kPluginsLastInternalDirectory, 346 prefs->RegisterFilePathPref(prefs::kPluginsLastInternalDirectory,
425 internal_dir, 347 internal_dir,
426 PrefService::UNSYNCABLE_PREF); 348 PrefService::UNSYNCABLE_PREF);
427 prefs->RegisterListPref(prefs::kPluginsDisabledPlugins, 349 prefs->RegisterListPref(prefs::kPluginsDisabledPlugins,
428 PrefService::UNSYNCABLE_PREF); 350 PrefService::UNSYNCABLE_PREF);
429 prefs->RegisterListPref(prefs::kPluginsDisabledPluginsExceptions, 351 prefs->RegisterListPref(prefs::kPluginsDisabledPluginsExceptions,
430 PrefService::UNSYNCABLE_PREF); 352 PrefService::UNSYNCABLE_PREF);
431 prefs->RegisterListPref(prefs::kPluginsEnabledPlugins, 353 prefs->RegisterListPref(prefs::kPluginsEnabledPlugins,
432 PrefService::UNSYNCABLE_PREF); 354 PrefService::UNSYNCABLE_PREF);
433 } 355 }
OLDNEW
« no previous file with comments | « chrome/browser/plugin_updater.h ('k') | chrome/browser/prefs/browser_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698