Index: chrome/browser/ui/webui/plugins_ui.cc |
=================================================================== |
--- chrome/browser/ui/webui/plugins_ui.cc (revision 101271) |
+++ chrome/browser/ui/webui/plugins_ui.cc (working copy) |
@@ -36,9 +36,6 @@ |
#include "ui/base/resource/resource_bundle.h" |
#include "webkit/plugins/npapi/plugin_list.h" |
-using webkit::npapi::PluginGroup; |
-using webkit::WebPluginInfo; |
- |
namespace { |
ChromeWebUIDataSource* CreatePluginsUIHTMLSource(bool enable_controls) { |
@@ -128,17 +125,17 @@ |
private: |
// Loads the plugins on the FILE thread. |
static void LoadPluginsOnFileThread( |
- std::vector<PluginGroup>* groups, Task* task); |
+ std::vector<webkit::npapi::PluginGroup>* groups, Task* task); |
// Used in conjunction with ListWrapper to avoid any memory leaks. |
static void EnsurePluginGroupsDeleted( |
- std::vector<PluginGroup>* groups); |
+ std::vector<webkit::npapi::PluginGroup>* groups); |
// Call this to start getting the plugins on the UI thread. |
void LoadPlugins(); |
// Called on the UI thread when the plugin information is ready. |
- void PluginsLoaded(const std::vector<PluginGroup>* groups); |
+ void PluginsLoaded(const std::vector<webkit::npapi::PluginGroup>* groups); |
NotificationRegistrar registrar_; |
@@ -184,6 +181,13 @@ |
void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) { |
Profile* profile = Profile::FromWebUI(web_ui_); |
+ // If a non-first-profile user tries to trigger these methods sneakily, |
+ // forbid it. |
+#if !defined(OS_CHROMEOS) |
+ if (!profile->GetOriginalProfile()->first_launched()) |
+ return; |
+#endif |
+ |
// Be robust in accepting badness since plug-ins display HTML (hence |
// JavaScript). |
if (args->GetSize() != 3) |
@@ -205,20 +209,27 @@ |
if (enable) { |
// See http://crbug.com/50105 for background. |
string16 adobereader = ASCIIToUTF16( |
- PluginGroup::kAdobeReaderGroupName); |
+ webkit::npapi::PluginGroup::kAdobeReaderGroupName); |
string16 internalpdf = |
ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName); |
- if (group_name == adobereader) |
+ if (group_name == adobereader) { |
plugin_prefs->EnablePluginGroup(false, internalpdf); |
- else if (group_name == internalpdf) |
+ } else if (group_name == internalpdf) { |
plugin_prefs->EnablePluginGroup(false, adobereader); |
+ } |
} |
} else { |
FilePath::StringType file_path; |
if (!args->GetString(0, &file_path)) |
return; |
+ |
plugin_prefs->EnablePlugin(enable, FilePath(file_path)); |
} |
+ |
+ // TODO(viettrungluu): We might also want to ensure that the plugins |
+ // list is always written to prefs even when the user hasn't disabled a |
+ // plugin. <http://crbug.com/39101> |
+ plugin_prefs->UpdatePreferences(0); |
} |
void PluginsDOMHandler::HandleSaveShowDetailsToPrefs(const ListValue* args) { |
@@ -243,7 +254,7 @@ |
} |
void PluginsDOMHandler::LoadPluginsOnFileThread( |
- std::vector<PluginGroup>* groups, |
+ std::vector<webkit::npapi::PluginGroup>* groups, |
Task* task) { |
webkit::npapi::PluginList::Singleton()->GetPluginGroups(true, groups); |
@@ -256,7 +267,7 @@ |
} |
void PluginsDOMHandler::EnsurePluginGroupsDeleted( |
- std::vector<PluginGroup>* groups) { |
+ std::vector<webkit::npapi::PluginGroup>* groups) { |
delete groups; |
} |
@@ -264,7 +275,8 @@ |
if (!get_plugins_factory_.empty()) |
return; |
- std::vector<PluginGroup>* groups = new std::vector<PluginGroup>; |
+ std::vector<webkit::npapi::PluginGroup>* groups = |
+ new std::vector<webkit::npapi::PluginGroup>; |
Task* task = get_plugins_factory_.NewRunnableMethod( |
&PluginsDOMHandler::PluginsLoaded, groups); |
@@ -275,103 +287,13 @@ |
&PluginsDOMHandler::LoadPluginsOnFileThread, groups, task)); |
} |
-void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>* groups) { |
- PluginPrefs* plugin_prefs = |
- PluginPrefs::GetForProfile(Profile::FromWebUI(web_ui_)); |
- |
- bool all_plugins_enabled_by_policy = true; |
- bool all_plugins_disabled_by_policy = true; |
- |
+void PluginsDOMHandler::PluginsLoaded( |
+ const std::vector<webkit::npapi::PluginGroup>* groups) { |
// Construct DictionaryValues to return to the UI |
ListValue* plugin_groups_data = new ListValue(); |
for (size_t i = 0; i < groups->size(); ++i) { |
- ListValue* plugin_files = new ListValue(); |
- const PluginGroup& group = (*groups)[i]; |
- string16 group_name = group.GetGroupName(); |
- bool group_enabled = false; |
- const WebPluginInfo* active_plugin = NULL; |
- for (size_t j = 0; j < group.web_plugin_infos().size(); ++j) { |
- const WebPluginInfo& group_plugin = group.web_plugin_infos()[j]; |
- |
- DictionaryValue* plugin_file = new DictionaryValue(); |
- plugin_file->SetString("name", group_plugin.name); |
- plugin_file->SetString("description", group_plugin.desc); |
- plugin_file->SetString("path", group_plugin.path.value()); |
- plugin_file->SetString("version", group_plugin.version); |
- |
- ListValue* mime_types = new ListValue(); |
- const std::vector<webkit::WebPluginMimeType>& plugin_mime_types = |
- group_plugin.mime_types; |
- for (size_t k = 0; k < plugin_mime_types.size(); ++k) { |
- DictionaryValue* mime_type = new DictionaryValue(); |
- mime_type->SetString("mimeType", plugin_mime_types[k].mime_type); |
- mime_type->SetString("description", plugin_mime_types[k].description); |
- |
- ListValue* file_extensions = new ListValue(); |
- const std::vector<std::string>& mime_file_extensions = |
- plugin_mime_types[k].file_extensions; |
- for (size_t l = 0; l < mime_file_extensions.size(); ++l) |
- file_extensions->Append(new StringValue(mime_file_extensions[l])); |
- mime_type->Set("fileExtensions", file_extensions); |
- |
- mime_types->Append(mime_type); |
- } |
- plugin_file->Set("mimeTypes", mime_types); |
- |
- bool plugin_enabled = plugin_prefs->IsPluginEnabled(group_plugin); |
- |
- if (!active_plugin || (plugin_enabled && !group_enabled)) |
- active_plugin = &group_plugin; |
- group_enabled = plugin_enabled || group_enabled; |
- |
- std::string enabled_mode; |
- PluginPrefs::PolicyStatus plugin_status = |
- plugin_prefs->PolicyStatusForPlugin(group_plugin.name); |
- PluginPrefs::PolicyStatus group_status = |
- plugin_prefs->PolicyStatusForPlugin(group_name); |
- if (plugin_status == PluginPrefs::POLICY_ENABLED || |
- group_status == PluginPrefs::POLICY_ENABLED) { |
- enabled_mode = "enabledByPolicy"; |
- } else { |
- all_plugins_enabled_by_policy = false; |
- if (plugin_status == PluginPrefs::POLICY_DISABLED || |
- group_status == PluginPrefs::POLICY_DISABLED) { |
- enabled_mode = "disabledByPolicy"; |
- } else { |
- all_plugins_disabled_by_policy = false; |
- if (plugin_enabled) { |
- enabled_mode = "enabledByUser"; |
- } else { |
- enabled_mode = "disabledByUser"; |
- } |
- } |
- } |
- plugin_file->SetString("enabledMode", enabled_mode); |
- |
- plugin_files->Append(plugin_file); |
- } |
- DictionaryValue* group_data = new DictionaryValue(); |
- |
- group_data->Set("plugin_files", plugin_files); |
- group_data->SetString("name", group_name); |
- group_data->SetString("description", active_plugin->desc); |
- group_data->SetString("version", active_plugin->version); |
- group_data->SetBoolean("critical", group.IsVulnerable(*active_plugin)); |
- group_data->SetString("update_url", group.GetUpdateURL()); |
- |
- std::string enabled_mode; |
- if (all_plugins_enabled_by_policy) { |
- enabled_mode = "enabledByPolicy"; |
- } else if (all_plugins_disabled_by_policy) { |
- enabled_mode = "disabledByPolicy"; |
- } else if (group_enabled) { |
- enabled_mode = "enabledByUser"; |
- } else { |
- enabled_mode = "disabledByUser"; |
- } |
- group_data->SetString("enabledMode", enabled_mode); |
- |
- plugin_groups_data->Append(group_data); |
+ plugin_groups_data->Append((*groups)[i].GetDataForUI()); |
+ // TODO(bauerb): Fetch plugin enabled state from PluginPrefs. |
} |
DictionaryValue results; |
results.Set("plugins", plugin_groups_data); |
@@ -390,9 +312,11 @@ |
AddMessageHandler((new PluginsDOMHandler())->Attach(this)); |
// Set up the chrome://plugins/ source. |
- // TODO(bauerb): Remove |enable_controls| & co. |
bool enable_controls = true; |
Profile* profile = Profile::FromBrowserContext(contents->browser_context()); |
+#if !defined(OS_CHROMEOS) |
+ enable_controls = profile->GetOriginalProfile()->first_launched(); |
+#endif |
profile->GetChromeURLDataManager()->AddDataSource( |
CreatePluginsUIHTMLSource(enable_controls)); |
} |
Property changes on: chrome/browser/ui/webui/plugins_ui.cc |
___________________________________________________________________ |
Added: svn:mergeinfo |