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

Unified Diff: chrome/browser/ui/webui/plugins/plugins_handler.cc

Issue 2630443002: Plugins: Remove chrome://plugins (Closed)
Patch Set: remove test Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/plugins/plugins_handler.h ('k') | chrome/browser/ui/webui/plugins/plugins_ui.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/plugins/plugins_handler.cc
diff --git a/chrome/browser/ui/webui/plugins/plugins_handler.cc b/chrome/browser/ui/webui/plugins/plugins_handler.cc
deleted file mode 100644
index 3cf11e59aed0d10a5a0d7aa99933ce2cdc0370cc..0000000000000000000000000000000000000000
--- a/chrome/browser/ui/webui/plugins/plugins_handler.cc
+++ /dev/null
@@ -1,337 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/ui/webui/plugins/plugins_handler.h"
-
-#include <memory>
-#include <vector>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/files/file_path.h"
-#include "base/path_service.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
-#include "chrome/browser/plugins/plugin_finder.h"
-#include "chrome/browser/plugins/plugin_metadata.h"
-#include "chrome/browser/plugins/plugin_prefs.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/common/chrome_content_client.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/features.h"
-#include "chrome/common/pepper_flash.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/grit/generated_resources.h"
-#include "components/content_settings/core/browser/host_content_settings_map.h"
-#include "components/prefs/pref_service.h"
-#include "components/prefs/scoped_user_pref_update.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/plugin_service.h"
-#include "content/public/browser/web_ui.h"
-#include "content/public/common/content_constants.h"
-#include "ui/base/l10n/l10n_util.h"
-
-using content::WebPluginInfo;
-// Holds grouped plugins. The key is the group identifier and
-// the value is the list of plugins belonging to the group.
-using PluginGroups =
- base::hash_map<std::string, std::vector<const content::WebPluginInfo*>>;
-
-namespace {
-
-base::string16 PluginTypeToString(int type) {
- // The type is stored as an |int|, but doing the switch on the right
- // enumeration type gives us better build-time error checking (if someone adds
- // a new type).
- switch (static_cast<WebPluginInfo::PluginType>(type)) {
- case WebPluginInfo::PLUGIN_TYPE_PEPPER_IN_PROCESS:
- return l10n_util::GetStringUTF16(IDS_PLUGINS_PPAPI_IN_PROCESS);
- case WebPluginInfo::PLUGIN_TYPE_PEPPER_OUT_OF_PROCESS:
- return l10n_util::GetStringUTF16(IDS_PLUGINS_PPAPI_OUT_OF_PROCESS);
- case WebPluginInfo::PLUGIN_TYPE_BROWSER_PLUGIN:
- return l10n_util::GetStringUTF16(IDS_PLUGINS_BROWSER_PLUGIN);
- }
- NOTREACHED();
- return base::string16();
-}
-
-base::string16 GetPluginDescription(const WebPluginInfo& plugin) {
- // If this plugin is Pepper Flash, and the plugin path is the same as the
- // path for the Pepper Flash System plugin, then mark this plugin
- // description as the system plugin to help the user disambiguate the
- // two plugins.
- base::string16 desc = plugin.desc;
- if (plugin.is_pepper_plugin() &&
- plugin.name == base::ASCIIToUTF16(content::kFlashPluginName)) {
- base::FilePath system_flash_path;
- PathService::Get(chrome::FILE_PEPPER_FLASH_SYSTEM_PLUGIN,
- &system_flash_path);
- if (base::FilePath::CompareEqualIgnoreCase(plugin.path.value(),
- system_flash_path.value())) {
- if (chrome::IsSystemFlashScriptDebuggerPresent())
- desc += base::ASCIIToUTF16(" Debug");
- else
- desc += base::ASCIIToUTF16(" System");
- }
- }
- return desc;
-}
-
-std::vector<mojom::MimeTypePtr> GeneratePluginMimeTypes(
- const WebPluginInfo& plugin) {
- std::vector<mojom::MimeTypePtr> mime_types;
- mime_types.reserve(plugin.mime_types.size());
- for (const auto& plugin_mime_type : plugin.mime_types) {
- mojom::MimeTypePtr mime_type(mojom::MimeType::New());
- mime_type->description = base::UTF16ToUTF8(plugin_mime_type.description);
- mime_type->mime_type = plugin_mime_type.mime_type;
- mime_type->file_extensions = plugin_mime_type.file_extensions;
- mime_types.push_back(std::move(mime_type));
- }
-
- return mime_types;
-}
-
-} // namespace
-
-PluginsPageHandler::PluginsPageHandler(
- content::WebUI* web_ui,
- mojo::InterfaceRequest<mojom::PluginsPageHandler> request)
- : web_ui_(web_ui),
- binding_(this, std::move(request)),
- weak_ptr_factory_(this) {
- Profile* profile = Profile::FromWebUI(web_ui_);
- PrefService* prefs = profile->GetPrefs();
- show_details_.Init(prefs::kPluginsShowDetails, prefs);
-
- registrar_.Add(this, chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED,
- content::Source<Profile>(profile));
-}
-
-PluginsPageHandler::~PluginsPageHandler() {}
-
-void PluginsPageHandler::GetShowDetails(
- const GetShowDetailsCallback& callback) {
- callback.Run(show_details_.GetValue());
-}
-
-void PluginsPageHandler::SaveShowDetailsToPrefs(bool details_mode) {
- show_details_.SetValue(details_mode);
-}
-
-void PluginsPageHandler::SetPluginAlwaysAllowed(const std::string& plugin,
- bool allowed) {
- Profile* profile = Profile::FromWebUI(web_ui_);
- HostContentSettingsMapFactory::GetForProfile(profile)
- ->SetContentSettingCustomScope(
- ContentSettingsPattern::Wildcard(),
- ContentSettingsPattern::Wildcard(), CONTENT_SETTINGS_TYPE_PLUGINS,
- plugin, allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_DEFAULT);
-
- // Keep track of the whitelist separately, so that we can distinguish plugins
- // whitelisted by the user from automatically whitelisted ones.
- DictionaryPrefUpdate update(profile->GetPrefs(),
- prefs::kContentSettingsPluginWhitelist);
- update->SetBoolean(plugin, allowed);
-}
-
-void PluginsPageHandler::GetPluginsData(
- const GetPluginsDataCallback& callback) {
- if (weak_ptr_factory_.HasWeakPtrs())
- return;
-
- content::PluginService::GetInstance()->GetPlugins(
- base::Bind(&PluginsPageHandler::RespondWithPluginsData,
- weak_ptr_factory_.GetWeakPtr(), callback));
-}
-
-void PluginsPageHandler::SetClientPage(mojom::PluginsPagePtr page) {
- page_ = std::move(page);
-}
-
-void PluginsPageHandler::Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK_EQ(chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, type);
-
- if (weak_ptr_factory_.HasWeakPtrs())
- return;
-
- content::PluginService::GetInstance()->GetPlugins(
- base::Bind(&PluginsPageHandler::NotifyWithPluginsData,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void PluginsPageHandler::RespondWithPluginsData(
- const GetPluginsDataCallback& callback,
- const std::vector<WebPluginInfo>& plugins) {
- callback.Run(GeneratePluginsData(plugins));
-}
-
-void PluginsPageHandler::NotifyWithPluginsData(
- const std::vector<WebPluginInfo>& plugins) {
- if (page_)
- page_->OnPluginsUpdated(GeneratePluginsData(plugins));
-}
-
-std::vector<mojom::PluginDataPtr> PluginsPageHandler::GeneratePluginsData(
- const std::vector<WebPluginInfo>& plugins) {
- Profile* profile = Profile::FromWebUI(web_ui_);
- PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile).get();
-
- PluginFinder* plugin_finder = PluginFinder::GetInstance();
- // Group plugins by identifier. This is done to be able to display
- // the plugins in UI in a grouped fashion.
- PluginGroups groups;
- for (size_t i = 0; i < plugins.size(); ++i) {
- std::unique_ptr<PluginMetadata> plugin(
- plugin_finder->GetPluginMetadata(plugins[i]));
- groups[plugin->identifier()].push_back(&plugins[i]);
- }
-
- std::vector<mojom::PluginDataPtr> plugins_data;
- plugins_data.reserve(groups.size());
- for (PluginGroups::const_iterator it = groups.begin(); it != groups.end();
- ++it) {
- mojom::PluginDataPtr plugin_data(mojom::PluginData::New());
- const std::vector<const WebPluginInfo*>& group_plugins = it->second;
-
- std::unique_ptr<PluginMetadata> plugin_metadata(
- plugin_finder->GetPluginMetadata(*group_plugins[0]));
- std::string group_identifier = plugin_metadata->identifier();
- plugin_data->id = group_identifier;
-
- const WebPluginInfo* active_plugin = nullptr;
- bool group_enabled = false;
-
- std::vector<mojom::PluginFilePtr> plugin_files;
- plugin_files.reserve(group_plugins.size());
- for (const auto* group_plugin : group_plugins) {
- bool plugin_enabled = plugin_prefs->IsPluginEnabled(*group_plugin);
-
- plugin_files.push_back(GeneratePluginFile(
- *group_plugin, plugin_metadata->name(), plugin_enabled));
-
- // Update |active_plugin| and |group_enabled|.
- if (!active_plugin || (plugin_enabled && !group_enabled))
- active_plugin = group_plugin;
- group_enabled = plugin_enabled || group_enabled;
- }
-
- plugin_data->enabled_mode =
- GetPluginGroupEnabledMode(plugin_files, group_enabled);
-
- plugin_data->always_allowed = false;
- plugin_data->trusted = false;
- plugin_data->policy_click_to_play = GetClickToPlayPolicyEnabled();
-
- if (group_enabled) {
- if (plugin_metadata->GetSecurityStatus(*active_plugin) ==
- PluginMetadata::SECURITY_STATUS_FULLY_TRUSTED) {
- plugin_data->trusted = true;
- plugin_data->always_allowed = true;
- } else if (!GetClickToPlayPolicyEnabled()) {
- const base::DictionaryValue* whitelist =
- profile->GetPrefs()->GetDictionary(
- prefs::kContentSettingsPluginWhitelist);
- whitelist->GetBoolean(group_identifier, &plugin_data->always_allowed);
- }
- }
-
- plugin_data->critical = false;
- plugin_data->update_url = "";
-#if BUILDFLAG(ENABLE_PLUGIN_INSTALLATION)
- bool out_of_date = plugin_metadata->GetSecurityStatus(*active_plugin) ==
- PluginMetadata::SECURITY_STATUS_OUT_OF_DATE;
- plugin_data->critical = out_of_date;
- plugin_data->update_url = plugin_metadata->plugin_url().spec();
-#endif
-
- plugin_data->description = base::UTF16ToUTF8(active_plugin->desc);
- plugin_data->name = base::UTF16ToUTF8(plugin_metadata->name());
- plugin_data->plugin_files = std::move(plugin_files);
- plugin_data->version = base::UTF16ToUTF8(active_plugin->version);
- plugins_data.push_back(std::move(plugin_data));
- }
-
- return plugins_data;
-}
-
-bool PluginsPageHandler::GetClickToPlayPolicyEnabled() const {
- Profile* profile = Profile::FromWebUI(web_ui_);
- HostContentSettingsMap* map =
- HostContentSettingsMapFactory::GetForProfile(profile);
- std::string provider_id;
- ContentSetting setting = map->GetDefaultContentSetting(
- CONTENT_SETTINGS_TYPE_PLUGINS, &provider_id);
- return (setting == CONTENT_SETTING_ASK && provider_id == "policy");
-}
-
-mojom::PluginFilePtr PluginsPageHandler::GeneratePluginFile(
- const WebPluginInfo& plugin,
- const base::string16& group_name,
- bool plugin_enabled) const {
- mojom::PluginFilePtr plugin_file(mojom::PluginFile::New());
- plugin_file->description = base::UTF16ToUTF8(GetPluginDescription(plugin));
- plugin_file->enabled_mode =
- GetPluginEnabledMode(plugin.name, group_name, plugin_enabled);
- plugin_file->name = base::UTF16ToUTF8(plugin.name);
- plugin_file->path = plugin.path.AsUTF8Unsafe();
- plugin_file->type = base::UTF16ToUTF8(PluginTypeToString(plugin.type));
- plugin_file->version = base::UTF16ToUTF8(plugin.version);
- plugin_file->mime_types = GeneratePluginMimeTypes(plugin);
-
- return plugin_file;
-}
-
-std::string PluginsPageHandler::GetPluginEnabledMode(
- const base::string16& plugin_name,
- const base::string16& group_name,
- bool plugin_enabled) const {
- Profile* profile = Profile::FromWebUI(web_ui_);
- PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile).get();
- PluginPrefs::PolicyStatus plugin_status =
- plugin_prefs->PolicyStatusForPlugin(plugin_name);
- PluginPrefs::PolicyStatus group_status =
- plugin_prefs->PolicyStatusForPlugin(group_name);
-
- if (plugin_status == PluginPrefs::POLICY_ENABLED ||
- group_status == PluginPrefs::POLICY_ENABLED) {
- return "enabledByPolicy";
- }
- if (plugin_status == PluginPrefs::POLICY_DISABLED ||
- group_status == PluginPrefs::POLICY_DISABLED) {
- return "disabledByPolicy";
- }
- return plugin_enabled ? "enabledByUser" : "disabledByUser";
-}
-
-std::string PluginsPageHandler::GetPluginGroupEnabledMode(
- const std::vector<mojom::PluginFilePtr>& plugin_files,
- bool group_enabled) const {
- bool plugins_enabled_by_policy = true;
- bool plugins_disabled_by_policy = true;
- bool plugins_managed_by_policy = true;
-
- for (size_t i = 0; i < plugin_files.size(); i++) {
- std::string plugin_enabled_mode = plugin_files[i]->enabled_mode;
-
- plugins_enabled_by_policy =
- plugins_enabled_by_policy && plugin_enabled_mode == "enabledByPolicy";
- plugins_disabled_by_policy =
- plugins_disabled_by_policy && plugin_enabled_mode == "disabledByPolicy";
- plugins_managed_by_policy = plugins_managed_by_policy &&
- (plugin_enabled_mode == "enabledByPolicy" ||
- plugin_enabled_mode == "disabledByPolicy");
- }
-
- if (plugins_enabled_by_policy)
- return "enabledByPolicy";
- if (plugins_disabled_by_policy)
- return "disabledByPolicy";
- if (plugins_managed_by_policy)
- return "managedByPolicy";
- return group_enabled ? "enabledByUser" : "disabledByUser";
-}
« no previous file with comments | « chrome/browser/ui/webui/plugins/plugins_handler.h ('k') | chrome/browser/ui/webui/plugins/plugins_ui.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698