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

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

Issue 6012002: Move the NPAPI files from webkit/glue/plugins to webkit/plugins/npapi and put... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/plugin_updater.h ('k') | chrome/browser/renderer_host/render_message_filter.h » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_updater.h" 5 #include "chrome/browser/plugin_updater.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/path_service.h" 12 #include "base/path_service.h"
13 #include "base/scoped_ptr.h" 13 #include "base/scoped_ptr.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "base/version.h" 16 #include "base/version.h"
17 #include "chrome/browser/browser_thread.h" 17 #include "chrome/browser/browser_thread.h"
18 #include "chrome/browser/prefs/pref_service.h" 18 #include "chrome/browser/prefs/pref_service.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/common/chrome_paths.h" 20 #include "chrome/common/chrome_paths.h"
21 #include "chrome/common/chrome_switches.h" 21 #include "chrome/common/chrome_switches.h"
22 #include "chrome/common/notification_service.h" 22 #include "chrome/common/notification_service.h"
23 #include "chrome/common/pepper_plugin_registry.h" 23 #include "chrome/common/pepper_plugin_registry.h"
24 #include "chrome/common/pref_names.h" 24 #include "chrome/common/pref_names.h"
25 #include "webkit/glue/plugins/webplugininfo.h" 25 #include "webkit/plugins/npapi/plugin_list.h"
26 #include "webkit/plugins/npapi/webplugininfo.h"
26 27
27 // How long to wait to save the plugin enabled information, which might need to 28 // How long to wait to save the plugin enabled information, which might need to
28 // go to disk. 29 // go to disk.
29 #define kPluginUpdateDelayMs (60 * 1000) 30 #define kPluginUpdateDelayMs (60 * 1000)
30 31
31 PluginUpdater::PluginUpdater() 32 PluginUpdater::PluginUpdater()
32 : enable_internal_pdf_(true), 33 : enable_internal_pdf_(true),
33 notify_pending_(false) { 34 notify_pending_(false) {
34 } 35 }
35 36
36 DictionaryValue* PluginUpdater::CreatePluginFileSummary( 37 DictionaryValue* PluginUpdater::CreatePluginFileSummary(
37 const WebPluginInfo& plugin) { 38 const webkit::npapi::WebPluginInfo& plugin) {
38 DictionaryValue* data = new DictionaryValue(); 39 DictionaryValue* data = new DictionaryValue();
39 data->SetString("path", plugin.path.value()); 40 data->SetString("path", plugin.path.value());
40 data->SetString("name", plugin.name); 41 data->SetString("name", plugin.name);
41 data->SetString("version", plugin.version); 42 data->SetString("version", plugin.version);
42 data->SetBoolean("enabled", plugin.enabled); 43 data->SetBoolean("enabled", plugin.enabled);
43 return data; 44 return data;
44 } 45 }
45 46
46 // static 47 // static
47 ListValue* PluginUpdater::GetPluginGroupsData() { 48 ListValue* PluginUpdater::GetPluginGroupsData() {
48 std::vector<PluginGroup> plugin_groups; 49 std::vector<webkit::npapi::PluginGroup> plugin_groups;
49 NPAPI::PluginList::Singleton()->GetPluginGroups(true, &plugin_groups); 50 webkit::npapi::PluginList::Singleton()->GetPluginGroups(true, &plugin_groups);
50 51
51 // Construct DictionaryValues to return to the UI 52 // Construct DictionaryValues to return to the UI
52 ListValue* plugin_groups_data = new ListValue(); 53 ListValue* plugin_groups_data = new ListValue();
53 for (size_t i = 0; i < plugin_groups.size(); ++i) { 54 for (size_t i = 0; i < plugin_groups.size(); ++i) {
54 plugin_groups_data->Append(plugin_groups[i].GetDataForUI()); 55 plugin_groups_data->Append(plugin_groups[i].GetDataForUI());
55 } 56 }
56 return plugin_groups_data; 57 return plugin_groups_data;
57 } 58 }
58 59
59 void PluginUpdater::EnablePluginGroup(bool enable, const string16& group_name) { 60 void PluginUpdater::EnablePluginGroup(bool enable, const string16& group_name) {
60 if (PluginGroup::IsPluginNameDisabledByPolicy(group_name)) 61 if (webkit::npapi::PluginGroup::IsPluginNameDisabledByPolicy(group_name))
61 enable = false; 62 enable = false;
62 NPAPI::PluginList::Singleton()->EnableGroup(enable, group_name); 63 webkit::npapi::PluginList::Singleton()->EnableGroup(enable, group_name);
63 NotifyPluginStatusChanged(); 64 NotifyPluginStatusChanged();
64 } 65 }
65 66
66 void PluginUpdater::EnablePluginFile(bool enable, 67 void PluginUpdater::EnablePluginFile(bool enable,
67 const FilePath::StringType& path) { 68 const FilePath::StringType& path) {
68 FilePath file_path(path); 69 FilePath file_path(path);
69 if (enable && !PluginGroup::IsPluginPathDisabledByPolicy(file_path)) 70 if (enable &&
70 NPAPI::PluginList::Singleton()->EnablePlugin(file_path); 71 !webkit::npapi::PluginGroup::IsPluginPathDisabledByPolicy(file_path))
72 webkit::npapi::PluginList::Singleton()->EnablePlugin(file_path);
71 else 73 else
72 NPAPI::PluginList::Singleton()->DisablePlugin(file_path); 74 webkit::npapi::PluginList::Singleton()->DisablePlugin(file_path);
73 75
74 NotifyPluginStatusChanged(); 76 NotifyPluginStatusChanged();
75 } 77 }
76 78
77 void PluginUpdater::Observe(NotificationType type, 79 void PluginUpdater::Observe(NotificationType type,
78 const NotificationSource& source, 80 const NotificationSource& source,
79 const NotificationDetails& details) { 81 const NotificationDetails& details) {
80 DCHECK_EQ(NotificationType::PREF_CHANGED, type.value); 82 DCHECK_EQ(NotificationType::PREF_CHANGED, type.value);
81 const std::string* pref_name = Details<std::string>(details).ptr(); 83 const std::string* pref_name = Details<std::string>(details).ptr();
82 if (!pref_name) { 84 if (!pref_name) {
(...skipping 15 matching lines...) Expand all
98 if (plugin_names) { 100 if (plugin_names) {
99 ListValue::const_iterator end(plugin_names->end()); 101 ListValue::const_iterator end(plugin_names->end());
100 for (ListValue::const_iterator current(plugin_names->begin()); 102 for (ListValue::const_iterator current(plugin_names->begin());
101 current != end; ++current) { 103 current != end; ++current) {
102 string16 plugin_name; 104 string16 plugin_name;
103 if ((*current)->GetAsString(&plugin_name)) { 105 if ((*current)->GetAsString(&plugin_name)) {
104 policy_disabled_plugin_patterns.insert(plugin_name); 106 policy_disabled_plugin_patterns.insert(plugin_name);
105 } 107 }
106 } 108 }
107 } 109 }
108 PluginGroup::SetPolicyDisabledPluginPatterns(policy_disabled_plugin_patterns); 110 webkit::npapi::PluginGroup::SetPolicyDisabledPluginPatterns(
111 policy_disabled_plugin_patterns);
109 112
110 NotifyPluginStatusChanged(); 113 NotifyPluginStatusChanged();
111 } 114 }
112 115
113 void PluginUpdater::DisablePluginGroupsFromPrefs(Profile* profile) { 116 void PluginUpdater::DisablePluginGroupsFromPrefs(Profile* profile) {
114 bool update_internal_dir = false; 117 bool update_internal_dir = false;
115 FilePath last_internal_dir = 118 FilePath last_internal_dir =
116 profile->GetPrefs()->GetFilePath(prefs::kPluginsLastInternalDirectory); 119 profile->GetPrefs()->GetFilePath(prefs::kPluginsLastInternalDirectory);
117 FilePath cur_internal_dir; 120 FilePath cur_internal_dir;
118 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &cur_internal_dir) && 121 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &cur_internal_dir) &&
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 if (!enabled) { 186 if (!enabled) {
184 if (force_enable_internal_pdf) { 187 if (force_enable_internal_pdf) {
185 enabled = true; 188 enabled = true;
186 plugin->SetBoolean("enabled", true); 189 plugin->SetBoolean("enabled", true);
187 } else if (force_internal_pdf_for_this_run) { 190 } else if (force_internal_pdf_for_this_run) {
188 enabled = true; 191 enabled = true;
189 } 192 }
190 } 193 }
191 } 194 }
192 if (!enabled) 195 if (!enabled)
193 NPAPI::PluginList::Singleton()->DisablePlugin(plugin_path); 196 webkit::npapi::PluginList::Singleton()->DisablePlugin(plugin_path);
194 } else if (!enabled && plugin->GetString("name", &group_name)) { 197 } else if (!enabled && plugin->GetString("name", &group_name)) {
195 // Don't disable this group if it's for the pdf plugin and we just 198 // Don't disable this group if it's for the pdf plugin and we just
196 // forced it on. 199 // forced it on.
197 if (force_enable_internal_pdf && pdf_group_name == group_name) 200 if (force_enable_internal_pdf && pdf_group_name == group_name)
198 continue; 201 continue;
199 202
200 // Otherwise this is a list of groups. 203 // Otherwise this is a list of groups.
201 EnablePluginGroup(false, group_name); 204 EnablePluginGroup(false, group_name);
202 } 205 }
203 } 206 }
204 } 207 }
205 208
206 // Build the set of policy-disabled plugin patterns once and cache it. 209 // Build the set of policy-disabled plugin patterns once and cache it.
207 // Don't do this in the constructor, there's no profile available there. 210 // Don't do this in the constructor, there's no profile available there.
208 const ListValue* plugin_blacklist = 211 const ListValue* plugin_blacklist =
209 profile->GetPrefs()->GetList(prefs::kPluginsPluginsBlacklist); 212 profile->GetPrefs()->GetList(prefs::kPluginsPluginsBlacklist);
210 DisablePluginsFromPolicy(plugin_blacklist); 213 DisablePluginsFromPolicy(plugin_blacklist);
211 214
212 if ((!enable_internal_pdf_ && !found_internal_pdf) && 215 if ((!enable_internal_pdf_ && !found_internal_pdf) &&
213 !force_internal_pdf_for_this_run) { 216 !force_internal_pdf_for_this_run) {
214 // The internal PDF plugin is disabled by default, and the user hasn't 217 // The internal PDF plugin is disabled by default, and the user hasn't
215 // overridden the default. 218 // overridden the default.
216 NPAPI::PluginList::Singleton()->DisablePlugin(pdf_path); 219 webkit::npapi::PluginList::Singleton()->DisablePlugin(pdf_path);
217 EnablePluginGroup(false, pdf_group_name); 220 EnablePluginGroup(false, pdf_group_name);
218 } 221 }
219 222
220 if (force_enable_internal_pdf) { 223 if (force_enable_internal_pdf) {
221 // See http://crbug.com/50105 for background. 224 // See http://crbug.com/50105 for background.
222 EnablePluginGroup(false, ASCIIToUTF16(PluginGroup::kAdobeReaderGroupName)); 225 EnablePluginGroup(false, ASCIIToUTF16(
226 webkit::npapi::PluginGroup::kAdobeReaderGroupName));
223 227
224 // We want to save this, but doing so requires loading the list of plugins, 228 // We want to save this, but doing so requires loading the list of plugins,
225 // so do it after a minute as to not impact startup performance. Note that 229 // so do it after a minute as to not impact startup performance. Note that
226 // plugins are loaded after 30s by the metrics service. 230 // plugins are loaded after 30s by the metrics service.
227 UpdatePreferences(profile, kPluginUpdateDelayMs); 231 UpdatePreferences(profile, kPluginUpdateDelayMs);
228 } 232 }
229 } 233 }
230 234
231 void PluginUpdater::UpdatePreferences(Profile* profile, int delay_ms) { 235 void PluginUpdater::UpdatePreferences(Profile* profile, int delay_ms) {
232 BrowserThread::PostDelayedTask( 236 BrowserThread::PostDelayedTask(
233 BrowserThread::FILE, 237 BrowserThread::FILE,
234 FROM_HERE, 238 FROM_HERE,
235 NewRunnableFunction( 239 NewRunnableFunction(
236 &PluginUpdater::GetPreferencesDataOnFileThread, profile), delay_ms); 240 &PluginUpdater::GetPreferencesDataOnFileThread, profile), delay_ms);
237 } 241 }
238 242
239 void PluginUpdater::GetPreferencesDataOnFileThread(void* profile) { 243 void PluginUpdater::GetPreferencesDataOnFileThread(void* profile) {
240 std::vector<WebPluginInfo> plugins; 244 std::vector<webkit::npapi::WebPluginInfo> plugins;
241 NPAPI::PluginList::Singleton()->GetPlugins(false, &plugins); 245 webkit::npapi::PluginList::Singleton()->GetPlugins(false, &plugins);
242 246
243 std::vector<PluginGroup> groups; 247 std::vector<webkit::npapi::PluginGroup> groups;
244 NPAPI::PluginList::Singleton()->GetPluginGroups(false, &groups); 248 webkit::npapi::PluginList::Singleton()->GetPluginGroups(false, &groups);
245 249
246 BrowserThread::PostTask( 250 BrowserThread::PostTask(
247 BrowserThread::UI, 251 BrowserThread::UI,
248 FROM_HERE, 252 FROM_HERE,
249 NewRunnableFunction( 253 NewRunnableFunction(
250 &PluginUpdater::OnUpdatePreferences, 254 &PluginUpdater::OnUpdatePreferences,
251 static_cast<Profile*>(profile), plugins, groups)); 255 static_cast<Profile*>(profile), plugins, groups));
252 } 256 }
253 257
254 void PluginUpdater::OnUpdatePreferences( 258 void PluginUpdater::OnUpdatePreferences(
255 Profile* profile, 259 Profile* profile,
256 const std::vector<WebPluginInfo>& plugins, 260 const std::vector<webkit::npapi::WebPluginInfo>& plugins,
257 const std::vector<PluginGroup>& groups) { 261 const std::vector<webkit::npapi::PluginGroup>& groups) {
258 ListValue* plugins_list = profile->GetPrefs()->GetMutableList( 262 ListValue* plugins_list = profile->GetPrefs()->GetMutableList(
259 prefs::kPluginsPluginsList); 263 prefs::kPluginsPluginsList);
260 plugins_list->Clear(); 264 plugins_list->Clear();
261 265
262 FilePath internal_dir; 266 FilePath internal_dir;
263 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir)) 267 if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir))
264 profile->GetPrefs()->SetFilePath(prefs::kPluginsLastInternalDirectory, 268 profile->GetPrefs()->SetFilePath(prefs::kPluginsLastInternalDirectory,
265 internal_dir); 269 internal_dir);
266 270
267 // Add the plugin files. 271 // Add the plugin files.
268 for (std::vector<WebPluginInfo>::const_iterator it = plugins.begin(); 272 for (std::vector<webkit::npapi::WebPluginInfo>::const_iterator it =
273 plugins.begin();
269 it != plugins.end(); 274 it != plugins.end();
270 ++it) { 275 ++it) {
271 plugins_list->Append(CreatePluginFileSummary(*it)); 276 plugins_list->Append(CreatePluginFileSummary(*it));
272 } 277 }
273 278
274 // Add the groups as well. 279 // Add the groups as well.
275 for (size_t i = 0; i < groups.size(); ++i) { 280 for (size_t i = 0; i < groups.size(); ++i) {
276 // Don't save preferences for vulnerable pugins. 281 // Don't save preferences for vulnerable pugins.
277 if (!CommandLine::ForCurrentProcess()->HasSwitch( 282 if (!CommandLine::ForCurrentProcess()->HasSwitch(
278 switches::kDisableOutdatedPlugins) || 283 switches::kDisableOutdatedPlugins) ||
(...skipping 17 matching lines...) Expand all
296 NotificationService::current()->Notify( 301 NotificationService::current()->Notify(
297 NotificationType::PLUGIN_ENABLE_STATUS_CHANGED, 302 NotificationType::PLUGIN_ENABLE_STATUS_CHANGED,
298 Source<PluginUpdater>(GetInstance()), 303 Source<PluginUpdater>(GetInstance()),
299 NotificationService::NoDetails()); 304 NotificationService::NoDetails());
300 } 305 }
301 306
302 /*static*/ 307 /*static*/
303 PluginUpdater* PluginUpdater::GetInstance() { 308 PluginUpdater* PluginUpdater::GetInstance() {
304 return Singleton<PluginUpdater>::get(); 309 return Singleton<PluginUpdater>::get();
305 } 310 }
OLDNEW
« no previous file with comments | « chrome/browser/plugin_updater.h ('k') | chrome/browser/renderer_host/render_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698