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 --- chrome/android/java/res/values/ids.xml | 1 + .../chrome/browser/ChromeTabbedActivity.java | 2 ++ .../chrome/browser/app/ChromeActivity.java | 5 ++++ .../AppMenuPropertiesDelegateImpl.java | 24 +++++++++++++++++++ .../CustomTabAppMenuPropertiesDelegate.java | 3 +++ .../TabbedAppMenuPropertiesDelegate.java | 3 +++ .../strings/android_chrome_strings.grd | 4 ++++ 7 files changed, 42 insertions(+) diff --git a/chrome/android/java/res/values/ids.xml b/chrome/android/java/res/values/ids.xml --- a/chrome/android/java/res/values/ids.xml +++ b/chrome/android/java/res/values/ids.xml @@ -138,6 +138,7 @@ 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 @@ -4225,6 +4225,8 @@ public class ChromeTabbedActivity extends ChromeActivity implements PreAttachInt 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()) { 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 @@ -2884,6 +2884,11 @@ public abstract class ChromeActivity extends AsyncInitializationActivity return AppInstallMenuHandler.doOpenWebApk(this, 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 @@ -1076,6 +1076,30 @@ public abstract class AppMenuPropertiesDelegateImpl implements AppMenuProperties return false; } + /** + * Updates the view source menu item's state. + * + * @param menu {@link Menu} for view source. + * @param currentTab Current tab being displayed. + */ + protected void buildAddViewSourceItem( + MVCListAdapter.ModelList modelList, + @Nullable Tab currentTab) { + boolean visible = false; + if (currentTab != null) { + String url = currentTab.getUrl().getSpec(); + visible = !url.isEmpty() && !url.startsWith("view-source:"); + } + if (visible) { + modelList.add(new MVCListAdapter.ListItem( + AppMenuHandler.AppMenuItemType.STANDARD, + buildModelForStandardMenuItem( + R.id.view_source_id, + R.string.view_source, + shouldShowIconBeforeItem() ? R.drawable.ic_drive_document_24dp : 0))); + } + } + /** * Updates the bookmark item's visibility. * 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 @@ -412,6 +412,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat modelList.add(buildOpenInAppItem()); } + // Add view source item + buildAddViewSourceItem(modelList, currentTab); + // --- Request Desktop Site --- if (requestDesktopSiteVisible) { MVCListAdapter.ListItem rdsListItem = 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 @@ -438,6 +438,9 @@ public class TabbedAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateIm modelList.add(buildOpenInAppItem()); } + // Add view source item + buildAddViewSourceItem(modelList, currentTab); + // RDS MVCListAdapter.ListItem rdsListItem = maybeBuildRequestDesktopSiteListItem( 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 @@ -355,6 +355,10 @@ CHAR_LIMIT guidelines: Chrome finds + + View source + + You and Google --