Chromium Code Reviews| Index: chrome/browser/plugins/chrome_plugin_service_filter.cc |
| diff --git a/chrome/browser/plugins/chrome_plugin_service_filter.cc b/chrome/browser/plugins/chrome_plugin_service_filter.cc |
| index 35962492ac85ad93c3ef94d9cccc1f01b4913684..4bc03e453120a99ddab85e66c3533cc94c901834 100644 |
| --- a/chrome/browser/plugins/chrome_plugin_service_filter.cc |
| +++ b/chrome/browser/plugins/chrome_plugin_service_filter.cc |
| @@ -4,8 +4,11 @@ |
| #include "chrome/browser/plugins/chrome_plugin_service_filter.h" |
| +#include <utility> |
| + |
| #include "base/bind.h" |
| #include "base/logging.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/chrome_notification_types.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| @@ -24,17 +27,31 @@ |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/resource_context.h" |
| +#include "content/public/browser/user_metrics.h" |
| #include "content/public/browser/web_contents.h" |
| #include "grit/components_strings.h" |
| #include "grit/theme_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/window_open_disposition.h" |
| +using base::UserMetricsAction; |
| using content::BrowserThread; |
| using content::PluginService; |
| namespace { |
| +enum PluginGroup { |
|
Alexei Svitkine (slow)
2015/05/12 17:38:15
Nit: Add a comment that this is used in UMA and en
Will Harris
2015/05/12 18:25:48
Done.
|
| + GROUP_NAME_ADOBE_READER, |
| + GROUP_NAME_JAVA, |
| + GROUP_NAME_QUICKTIME, |
| + GROUP_NAME_SHOCKWAVE, |
| + GROUP_NAME_REALPLAYER, |
| + GROUP_NAME_SILVERLIGHT, |
| + GROUP_NAME_WINDOWS_MEDIA_PLAYER, |
| + GROUP_NAME_UNKNOWN, |
| + GROUP_NAME_COUNT, |
| +}; |
| + |
| static const char kLearnMoreUrl[] = |
| "https://www.google.com/support/chrome/bin/answer.py?answer=6213033"; |
| @@ -81,6 +98,46 @@ NPAPIRemovalInfoBarDelegate::NPAPIRemovalInfoBarDelegate( |
| const base::string16& plugin_name, |
| int message_id) |
| : plugin_name_(plugin_name), message_id_(message_id) { |
| + content::RecordAction(UserMetricsAction("NPAPIRemovalInfobar.Shown")); |
| + |
| + std::string name = base::UTF16ToUTF8(plugin_name); |
|
Alexei Svitkine (slow)
2015/05/12 17:38:15
Nit: Move this closer to where it's used - i.e. ab
Will Harris
2015/05/12 18:25:48
Done.
|
| + |
| + std::pair<PluginGroup, const char*> types[] = { |
| + std::make_pair(GROUP_NAME_ADOBE_READER, |
| + PluginMetadata::kAdobeReaderGroupName), |
| + std::make_pair(GROUP_NAME_JAVA, |
| + PluginMetadata::kJavaGroupName), |
| + std::make_pair(GROUP_NAME_QUICKTIME, |
| + PluginMetadata::kQuickTimeGroupName), |
| + std::make_pair(GROUP_NAME_SHOCKWAVE, |
| + PluginMetadata::kShockwaveGroupName), |
| + std::make_pair(GROUP_NAME_REALPLAYER, |
| + PluginMetadata::kRealPlayerGroupName), |
| + std::make_pair(GROUP_NAME_SILVERLIGHT, |
| + PluginMetadata::kSilverlightGroupName), |
| + std::make_pair(GROUP_NAME_WINDOWS_MEDIA_PLAYER, |
| + PluginMetadata::kWindowsMediaPlayerGroupName)}; |
| + |
| + PluginGroup group = GROUP_NAME_UNKNOWN; |
| + |
| + for (auto type : types) { |
|
Alexei Svitkine (slow)
2015/05/12 17:38:15
Nit: const auto&
Will Harris
2015/05/12 18:25:48
Done.
|
| + if (name == type.second) { |
| + group = type.first; |
| + break; |
| + } |
| + } |
| + |
| + if (message_id == IDS_PLUGINS_NPAPI_REMOVED) { |
| + UMA_HISTOGRAM_ENUMERATION("NPAPIRemovalInfobar.Removed.PluginGroup", |
| + group, GROUP_NAME_COUNT); |
| + content::RecordAction( |
| + UserMetricsAction("NPAPIRemovalInfobar.Shown.Removed")); |
| + } else { |
|
Alexei Svitkine (slow)
2015/05/12 17:38:15
Does it make sense to add a DCHECK on the message_
Will Harris
2015/05/12 18:25:48
Done.
|
| + UMA_HISTOGRAM_ENUMERATION("NPAPIRemovalInfobar.RemovedSoon.PluginGroup", |
| + group, GROUP_NAME_COUNT); |
| + content::RecordAction( |
| + UserMetricsAction("NPAPIRemovalInfobar.Shown.RemovedSoon")); |
|
Alexei Svitkine (slow)
2015/05/12 17:38:15
Are the Removed and RemovedSoon actions necessary?
Will Harris
2015/05/12 18:25:48
Done.
|
| + } |
| } |
| NPAPIRemovalInfoBarDelegate::~NPAPIRemovalInfoBarDelegate() { |
| @@ -109,6 +166,7 @@ bool NPAPIRemovalInfoBarDelegate::LinkClicked( |
| GURL(kLearnMoreUrl), content::Referrer(), |
| (disposition == CURRENT_TAB) ? NEW_FOREGROUND_TAB : disposition, |
| ui::PAGE_TRANSITION_LINK, false)); |
| + content::RecordAction(UserMetricsAction("NPAPIRemovalInfobar.LearnMore")); |
| return true; |
| } |