Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java |
| index 6d7e2d7b8da5fcdfbd0f87847c74cad86f52868c..6906fc821750b7ea1d2ee95d9c5dfb277ccff0e3 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java |
| @@ -10,6 +10,7 @@ import android.text.TextUtils; |
| import android.view.ContextMenu; |
| import android.view.MenuInflater; |
| +import org.chromium.base.metrics.RecordHistogram; |
| import org.chromium.chrome.R; |
| import org.chromium.chrome.browser.UrlUtilities; |
| import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
| @@ -24,6 +25,44 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
| private MenuInflater mMenuInflater; |
| private static final String BLANK_URL = "about:blank"; |
| + static class ContextMenuUma { |
| + // Note: these values must match the ContextMenuAction enum in histograms.xml. |
| + static final int ACTION_OPEN_IN_NEW_TAB = 0; |
| + static final int ACTION_OPEN_IN_INCOGNITO_TAB = 1; |
| + static final int ACTION_COPY_LINK_ADDRESS = 2; |
| + static final int ACTION_COPY_EMAIL_ADDRESS = 3; |
| + static final int ACTION_COPY_LINK_TEXT = 4; |
| + static final int ACTION_SAVE_LINK = 5; |
| + static final int ACTION_SAVE_IMAGE = 6; |
| + static final int ACTION_OPEN_IMAGE = 7; |
| + static final int ACTION_OPEN_IMAGE_IN_NEW_TAB = 8; |
| + static final int ACTION_COPY_IMAGE = 9; |
| + static final int ACTION_COPY_IMAGE_URL = 10; |
| + static final int ACTION_SEARCH_BY_IMAGE = 11; |
| + static final int ACTION_LOAD_IMAGES = 12; |
| + static final int ACTION_LOAD_ORIGINAL_IMAGE = 13; |
| + static final int ACTION_SAVE_VIDEO = 14; |
| + static final int NUM_ACTIONS = 15; |
| + |
| + /** |
| + * Records a histogram entry when the user selects an item from a context menu. |
| + * @param params The ContextMenuParams describing the current context menu. |
| + * @param action The action that the user selected (e.g. ACTION_SAVE_IMAGE). |
| + */ |
| + static void record(ContextMenuParams params, int action) { |
|
David Trainor- moved to gerrit
2015/08/04 20:08:06
assert action is valid (< NUM_ACTIONS)?
newt (away)
2015/08/12 23:43:20
Done.
|
| + String histogramName; |
| + if (params.isVideo()) { |
| + histogramName = "ContextMenu.Video"; |
| + } else if (params.isImage()) { |
| + histogramName = params.isAnchor() ? "ContextMenu.ImageLink" : "ContextMenu.Image"; |
| + } else { |
| + assert params.isAnchor(); |
| + histogramName = "ContextMenu.Link"; |
| + } |
| + RecordHistogram.recordEnumeratedHistogram(histogramName, action, NUM_ACTIONS); |
| + } |
| + } |
| + |
| /** |
| * Builds a {@link ChromeContextMenuPopulator}. |
| * @param delegate The {@link ChromeContextMenuItemDelegate} that will be notified with actions |
| @@ -136,19 +175,25 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
| @Override |
| public boolean onItemSelected(ContextMenuHelper helper, ContextMenuParams params, int itemId) { |
| if (itemId == R.id.contextmenu_open_in_new_tab) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_NEW_TAB); |
| mDelegate.onOpenInNewTab(params.getLinkUrl(), params.getReferrer()); |
| } else if (itemId == R.id.contextmenu_open_in_incognito_tab) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IN_INCOGNITO_TAB); |
| mDelegate.onOpenInNewIncognitoTab(params.getLinkUrl()); |
| } else if (itemId == R.id.contextmenu_open_image) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IMAGE); |
| mDelegate.onOpenImageUrl(params.getSrcUrl(), params.getReferrer()); |
| } else if (itemId == R.id.contextmenu_open_image_in_new_tab |
| || itemId == R.id.contextmenu_open_original_image_in_new_tab) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_OPEN_IMAGE_IN_NEW_TAB); |
| mDelegate.onOpenImageInNewTab(params.getSrcUrl(), params.getReferrer()); |
| } else if (itemId == R.id.contextmenu_load_images) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_LOAD_IMAGES); |
| DataReductionProxyUma.dataReductionProxyLoFiUIAction( |
| DataReductionProxyUma.ACTION_LOAD_IMAGES_CONTEXT_MENU_CLICKED); |
| mDelegate.onReloadIgnoringCache(); |
| } else if (itemId == R.id.contextmenu_load_original_image) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_LOAD_ORIGINAL_IMAGE); |
| DataReductionProxyUma.dataReductionProxyLoFiUIAction( |
| DataReductionProxyUma.ACTION_LOAD_IMAGE_CONTEXT_MENU_CLICKED); |
| if (!DataReductionProxySettings.getInstance().wasLoFiLoadImageRequestedBefore()) { |
| @@ -158,32 +203,41 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator { |
| } |
| mDelegate.onLoadOriginalImage(); |
| } else if (itemId == R.id.contextmenu_copy_link_address_text) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_COPY_LINK_ADDRESS); |
| mDelegate.onSaveToClipboard(params.getUnfilteredLinkUrl(), |
| ChromeContextMenuItemDelegate.CLIPBOARD_TYPE_LINK_URL); |
| } else if (itemId == R.id.contextmenu_copy_email_address) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_COPY_EMAIL_ADDRESS); |
| mDelegate.onSaveToClipboard(MailTo.parse(params.getLinkUrl()).getTo(), |
| ChromeContextMenuItemDelegate.CLIPBOARD_TYPE_LINK_URL); |
| } else if (itemId == R.id.contextmenu_copy_link_text) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_COPY_LINK_TEXT); |
| mDelegate.onSaveToClipboard( |
| params.getLinkText(), ChromeContextMenuItemDelegate.CLIPBOARD_TYPE_LINK_TEXT); |
| } else if (itemId == R.id.contextmenu_save_image) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_IMAGE); |
| if (mDelegate.startDownload(params.getSrcUrl(), false)) { |
| helper.startContextMenuDownload( |
| false, mDelegate.isDataReductionProxyEnabledForURL(params.getSrcUrl())); |
| } |
| } else if (itemId == R.id.contextmenu_save_video) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_VIDEO); |
| if (mDelegate.startDownload(params.getSrcUrl(), false)) { |
| helper.startContextMenuDownload(false, false); |
| } |
| } else if (itemId == R.id.contextmenu_save_link_as) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_SAVE_LINK); |
| if (mDelegate.startDownload(params.getUnfilteredLinkUrl(), true)) { |
| helper.startContextMenuDownload(true, false); |
| } |
| } else if (itemId == R.id.contextmenu_search_by_image) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_SEARCH_BY_IMAGE); |
| mDelegate.onSearchByImageInNewTab(); |
| } else if (itemId == R.id.contextmenu_copy_image) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_COPY_IMAGE); |
| mDelegate.onSaveImageToClipboard(params.getSrcUrl()); |
| } else if (itemId == R.id.contextmenu_copy_image_url) { |
| + ContextMenuUma.record(params, ContextMenuUma.ACTION_COPY_IMAGE_URL); |
| mDelegate.onSaveToClipboard( |
| params.getSrcUrl(), ChromeContextMenuItemDelegate.CLIPBOARD_TYPE_IMAGE_URL); |
| } else { |