| 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";
|
| -}
|
|
|