Commit 4952ad20 authored by Xing Liu's avatar Xing Liu Committed by Chromium LUCI CQ

Read later: Hide context menu for non http/https URLs.

Reading list backend only supports http/https. We should hide the
context menu entry point for invalid schemes.

Also add the missing test for context menu.

Bug: 1157808
Change-Id: I3a65626ca7d058211d9042e6d9069d9a73d47611
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2623649Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Xing Liu <xingliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#843267}
parent 59421639
......@@ -46,6 +46,7 @@ import org.chromium.chrome.browser.performance_hints.PerformanceHintsObserver.Pe
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.read_later.ReadingListUtils;
import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
import org.chromium.chrome.browser.share.ChromeShareExtras;
import org.chromium.chrome.browser.share.LensUtils;
......@@ -398,7 +399,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
&& UrlUtilities.isDownloadableScheme(mParams.getLinkUrl())) {
linkGroup.add(createListItem(Item.SAVE_LINK_AS));
if (!mParams.isImage()
&& ChromeFeatureList.isEnabled(ChromeFeatureList.READ_LATER)) {
&& ChromeFeatureList.isEnabled(ChromeFeatureList.READ_LATER)
&& ReadingListUtils.isReadingListSupported(
mParams.getLinkUrl().getValidSpecOrEmpty())) {
linkGroup.add(
createListItem(Item.READ_LATER, shouldTriggerReadLaterHelpUi()));
}
......@@ -583,7 +586,8 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
&& tracker.shouldTriggerHelpUI(FeatureConstants.EPHEMERAL_TAB_FEATURE);
}
private boolean shouldTriggerReadLaterHelpUi() {
@VisibleForTesting
boolean shouldTriggerReadLaterHelpUi() {
Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedRegularProfile());
return tracker.isInitialized()
&& tracker.shouldTriggerHelpUI(FeatureConstants.READ_LATER_CONTEXT_MENU_FEATURE);
......
......@@ -108,6 +108,7 @@ public class ChromeContextMenuPopulatorTest {
mNativeDelegate));
doReturn(mTemplateUrlService).when(mPopulator).getTemplateUrlService();
doReturn(false).when(mPopulator).shouldTriggerEphemeralTabHelpUi();
doReturn(false).when(mPopulator).shouldTriggerReadLaterHelpUi();
doReturn(true).when(mExternalAuthUtils).isGoogleSigned(IntentHandler.PACKAGE_GSA);
}
......@@ -444,4 +445,51 @@ public class ChromeContextMenuPopulatorTest {
R.id.contextmenu_share_image, R.id.contextmenu_open_in_chrome};
checkMenuOptions(expected4Tab1, expected4Tab2);
}
@Test
@SmallTest
@UiThreadTest
public void testReadLater() {
FirstRunStatus.setFirstRunFlowComplete(true);
HashMap<String, Boolean> features = new HashMap<String, Boolean>();
features.put(ChromeFeatureList.EPHEMERAL_TAB_USING_BOTTOM_SHEET, false);
features.put(ChromeFeatureList.READ_LATER, true);
ChromeFeatureList.setTestFeatures(features);
ContextMenuParams params = new ContextMenuParams(0, 0, new GURL(PAGE_URL),
new GURL(LINK_URL), LINK_TEXT, GURL.emptyGURL(), GURL.emptyGURL(), "", null, false,
0, 0, MenuSourceType.MENU_SOURCE_TOUCH);
// HTTP scheme should include read later context menu item.
initializePopulator(ChromeContextMenuPopulator.ContextMenuMode.NORMAL, params);
int[] expected = {R.id.contextmenu_open_in_new_tab, R.id.contextmenu_open_in_incognito_tab,
R.id.contextmenu_open_in_other_window, R.id.contextmenu_copy_link_address,
R.id.contextmenu_copy_link_text, R.id.contextmenu_save_link_as,
R.id.contextmenu_read_later, R.id.contextmenu_share_link};
checkMenuOptions(expected);
initializePopulator(ChromeContextMenuPopulator.ContextMenuMode.CUSTOM_TAB, params);
int[] expected2 = {R.id.contextmenu_open_in_browser_id, R.id.contextmenu_copy_link_address,
R.id.contextmenu_copy_link_text, R.id.contextmenu_save_link_as,
R.id.contextmenu_read_later, R.id.contextmenu_share_link};
checkMenuOptions(expected2);
initializePopulator(ChromeContextMenuPopulator.ContextMenuMode.WEB_APP, params);
int[] expected3 = {R.id.contextmenu_copy_link_address, R.id.contextmenu_copy_link_text,
R.id.contextmenu_save_link_as, R.id.contextmenu_read_later,
R.id.contextmenu_share_link, R.id.contextmenu_open_in_chrome};
checkMenuOptions(expected3);
// Non-http scheme should not include read later context menu item.
params = new ContextMenuParams(0, 0, new GURL("chrome://flags"), new GURL(LINK_URL),
LINK_TEXT, GURL.emptyGURL(), GURL.emptyGURL(), "", null, false, 0, 0,
MenuSourceType.MENU_SOURCE_TOUCH);
initializePopulator(ChromeContextMenuPopulator.ContextMenuMode.NORMAL, params);
int[] expected4 = {R.id.contextmenu_open_in_new_tab, R.id.contextmenu_open_in_incognito_tab,
R.id.contextmenu_open_in_other_window, R.id.contextmenu_copy_link_address,
R.id.contextmenu_copy_link_text, R.id.contextmenu_save_link_as,
R.id.contextmenu_share_link};
checkMenuOptions(expected);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment