From: csagan5 <32685696+csagan5@users.noreply.github.com> Date: Mon, 13 Jul 2020 00:37:06 +0200 Subject: Add menu item to view source License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../android/java/res/menu/custom_tabs_menu.xml | 3 +++ chrome/android/java/res/menu/main_menu.xml | 3 +++ .../chrome/browser/ChromeTabbedActivity.java | 2 ++ .../chrome/browser/app/ChromeActivity.java | 5 +++++ .../appmenu/AppMenuPropertiesDelegateImpl.java | 17 +++++++++++++++++ .../CustomTabAppMenuPropertiesDelegate.java | 2 +- .../TabbedAppMenuPropertiesDelegate.java | 6 +++--- .../android/strings/android_chrome_strings.grd | 4 ++++ 8 files changed, 38 insertions(+), 4 deletions(-) diff --git a/chrome/android/java/res/menu/custom_tabs_menu.xml b/chrome/android/java/res/menu/custom_tabs_menu.xml --- a/chrome/android/java/res/menu/custom_tabs_menu.xml +++ b/chrome/android/java/res/menu/custom_tabs_menu.xml @@ -73,6 +73,9 @@ found in the LICENSE file. + diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml --- a/chrome/android/java/res/menu/main_menu.xml +++ b/chrome/android/java/res/menu/main_menu.xml @@ -131,6 +131,9 @@ found in the LICENSE file. + diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java @@ -3434,6 +3434,8 @@ public class ChromeTabbedActivity extends ChromeActivity { NewTabPageUma.recordAction(NewTabPageUma.ACTION_OPENED_DOWNLOADS_MANAGER); } RecordUserAction.record("MobileMenuDownloadManager"); + } else if (id == R.id.view_source_id) { + currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrl().getSpec())); } else if (id == R.id.open_recently_closed_tab) { TabModel currentModel = mTabModelSelector.getCurrentModel(); if (!currentModel.isIncognito()) currentModel.openMostRecentlyClosedEntry(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java @@ -2576,6 +2576,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity return doOpenWebApk(currentTab); } + if (id == R.id.view_source_id) { + currentTab.getWebContents().getNavigationController().loadUrl(new LoadUrlParams("view-source:"+currentTab.getUrl().getSpec())); + return true; + } + if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) { boolean usingDesktopUserAgent = currentTab.getWebContents().getNavigationController().getUseDesktopUserAgent(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java --- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java @@ -864,6 +864,23 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties } } + /** + * Updates the view source menu item's state. + * + * @param menu {@link Menu} for view source. + * @param currentTab Current tab being displayed. + */ + protected void updateViewSourceMenuItem( + Menu menu, Tab currentTab) { + MenuItem viewSourceMenuItem = menu.findItem(R.id.view_source_id); + boolean visible = false; + if (currentTab != null) { + String url = currentTab.getUrl().getSpec(); + visible = !url.isEmpty() && !url.startsWith("view-source:"); + } + viewSourceMenuItem.setVisible(visible); + } + /** * Updates the request desktop site item's state. * diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabAppMenuPropertiesDelegate.java @@ -331,7 +331,7 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat // --- Request Desktop Site --- updateRequestDesktopSiteMenuItem( menu, currentTab, requestDesktopSiteVisible, isNativePage); - + updateViewSourceMenuItem(menu, currentTab); // --- Translate --- prepareTranslateMenuItem(menu, currentTab); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedAppMenuPropertiesDelegate.java @@ -173,7 +173,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm if (menuGroup == MenuGroup.PAGE_MENU) { preparePageMenu(menu, currentTab, handler, isIncognito); } - prepareCommonMenuItems(menu, menuGroup, isIncognito); + prepareCommonMenuItems(menu, menuGroup, isIncognito, currentTab); } private void setMenuGroupVisibility(@MenuGroup int menuGroup, Menu menu) { @@ -338,7 +338,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm isNativePage, isFileScheme, isContentScheme, isIncognito, url)); updateRequestDesktopSiteMenuItem(menu, currentTab, true /* can show */, isNativePage); - + updateViewSourceMenuItem(menu, currentTab); updateAutoDarkMenuItem(menu, currentTab, isNativePage); // Only display reader mode settings menu option if the current page is in reader mode. @@ -371,7 +371,7 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm && UrlUtilities.isNtpUrl(currentTab.getUrl()); } - private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) { + private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito, Tab currentTab) { boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); if (always_incognito) { final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id); diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd @@ -321,6 +321,10 @@ CHAR_LIMIT guidelines: Collaboration + + View source + + You and Google --