fix some patches

This commit is contained in:
Carmelo Messina 2022-01-20 09:10:58 +01:00
parent 083dc07b76
commit 3f281b7659
No known key found for this signature in database
GPG key ID: 968894BE688289FD
5 changed files with 368 additions and 203 deletions

View file

@ -9,25 +9,30 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
---
chrome/android/chrome_java_sources.gni | 1 +
.../java/res/xml/privacy_preferences.xml | 5 ++
.../AlwaysIncognitoLinkInterceptor.java | 80 +++++++++++++++++++
.../chrome/browser/ChromeTabbedActivity.java | 6 +-
.../chrome/browser/app/ChromeActivity.java | 4 +
.../AppMenuPropertiesDelegateImpl.java | 6 ++
.../ChromeContextMenuPopulator.java | 8 +-
.../CustomTabActivityLifecycleUmaTracker.java | 25 ------
.../AlwaysIncognitoLinkInterceptor.java | 52 +++++++++++++++++++
.../chrome/browser/ChromeTabbedActivity.java | 6 ++-
.../chrome/browser/app/ChromeActivity.java | 4 ++
.../AppMenuPropertiesDelegateImpl.java | 8 +++
.../ChromeContextMenuPopulator.java | 7 ++-
.../CustomTabActivityLifecycleUmaTracker.java | 25 ---------
.../CustomTabIntentDataProvider.java | 5 +-
.../browser/init/StartupTabPreloader.java | 14 +++-
.../privacy/settings/PrivacySettings.java | 37 ++++++++-
.../browser/settings/SettingsActivity.java | 4 +
.../tabbed_mode/TabbedRootUiCoordinator.java | 6 +-
.../browser/tabmodel/ChromeTabCreator.java | 16 +++-
.../browser/tabmodel/TabPersistentStore.java | 10 +++
.../webapps/WebappIntentDataProvider.java | 14 ++++
.../browser/init/StartupTabPreloader.java | 14 +++--
.../privacy/settings/PrivacySettings.java | 39 +++++++++++++-
.../browser/settings/SettingsActivity.java | 4 ++
.../tabbed_mode/TabbedRootUiCoordinator.java | 5 +-
.../browser/tabmodel/ChromeTabCreator.java | 5 +-
.../tabmodel/TabModelSelectorImpl.java | 3 ++
.../browser/tabmodel/TabPersistentStore.java | 10 ++++
.../webapps/WebappIntentDataProvider.java | 14 +++++
.../host_content_settings_map_factory.cc | 16 +++++-
.../flags/android/chrome_feature_list.cc | 2 +-
.../strings/android_chrome_strings.grd | 13 +++
chrome/browser/prefs/browser_prefs.cc | 3 ++
.../strings/android_chrome_strings.grd | 13 +++++
chrome/browser/ui/messages/android/BUILD.gn | 1 +
.../snackbar/INeedSnackbarManager.java | 27 +++++++
20 files changed, 248 insertions(+), 36 deletions(-)
.../snackbar/INeedSnackbarManager.java | 27 ++++++++++
chrome/common/pref_names.cc | 4 ++
chrome/common/pref_names.h | 5 ++
25 files changed, 241 insertions(+), 37 deletions(-)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
create mode 100644 chrome/browser/ui/messages/android/java/src/org/chromium/chrome/browser/ui/messages/snackbar/INeedSnackbarManager.java
@ -61,7 +66,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognito
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
@@ -0,0 +1,80 @@
@@ -0,0 +1,52 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@ -69,76 +74,48 @@ new file mode 100644
+package org.chromium.chrome.browser;
+
+import android.content.SharedPreferences;
+import org.chromium.base.ContextUtils;
+
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tab.TabImpl;
+import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
+import org.chromium.chrome.browser.tab.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.url.GURL;
+import org.chromium.components.user_prefs.UserPrefs;
+import org.chromium.components.prefs.PrefService;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.base.Log;
+
+import androidx.annotation.Nullable;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+/**
+ * A {@link TabObserver} that implements the always-incognito preference behavior for links. When the preference is set
+ * to true, it intercepts links opened within observed {@link Tab}s and opens them in new incognito <code>Tab</code>s instead.
+ * A {@link TabObserver} that implements the always-incognito preference behavior for links.
+ */
+public class AlwaysIncognitoLinkInterceptor extends EmptyTabObserver {
+public class AlwaysIncognitoLinkInterceptor {
+
+ public static final String PREF_ALWAYS_INCOGNITO = "always_incognito";
+
+ private final SharedPreferences alwaysIncognitoContainer;
+ private final Map<Tab, String> lastUrls;
+ private final Set<Tab> revertingTabs;
+ private static @Nullable Boolean cachedIsAlwaysIncognito = null;
+
+ public AlwaysIncognitoLinkInterceptor(final SharedPreferences alwaysIncognitoContainer) {
+
+ assert alwaysIncognitoContainer != null;
+
+ this.alwaysIncognitoContainer = alwaysIncognitoContainer;
+ lastUrls = new HashMap<Tab, String>();
+ revertingTabs = new HashSet<Tab>();
+ public static boolean isAlwaysIncognito() {
+ if (cachedIsAlwaysIncognito != null) return cachedIsAlwaysIncognito;
+ cachedIsAlwaysIncognito = ContextUtils.getAppSharedPreferences()
+ .getBoolean(PREF_ALWAYS_INCOGNITO, false);
+ return cachedIsAlwaysIncognito;
+ }
+
+ @Override
+ public void onDestroyed(final Tab tab)
+ {
+ lastUrls.remove(tab);
+ revertingTabs.remove(tab);
+ public static void setAlwaysIncognito(boolean enabled) {
+ UserPrefs.get(Profile.getLastUsedRegularProfile())
+ .setBoolean(Pref.ALWAYS_INCOGNITO_ENABLED, enabled);
+
+ SharedPreferences.Editor sharedPreferenceEditor = ContextUtils.getAppSharedPreferences().edit();
+ sharedPreferenceEditor.putBoolean("always_incognito", enabled);
+ sharedPreferenceEditor.apply();
+ }
+
+ @Override
+ public void onUpdateUrl(Tab tab, GURL gurl) {
+
+ if (tab == null) return;
+ if (gurl == null) return;
+ if (tab.isIncognito()) return;
+ if (alwaysIncognitoContainer == null) return;
+
+ String spec = gurl.getValidSpecOrEmpty();
+ if (spec == null) return;
+
+ final String lastUrl = lastUrls.put(tab, spec);
+
+ if (!alwaysIncognitoContainer.getBoolean(PREF_ALWAYS_INCOGNITO, false)) return;
+ if (revertingTabs.contains(tab)) {
+ revertingTabs.remove(tab);
+ return;
+ }
+
+ ((ChromeTabbedActivity)tab.getWindowAndroid().getActivity().get())
+ .getTabCreator(true)
+ .createNewTab(new LoadUrlParams(spec), TabLaunchType.FROM_LINK, tab);
+
+ if ((spec.equals(lastUrl)) || (!tab.canGoBack())) {
+ // this call was triggered by a reload
+ } else {
+ revertingTabs.add(tab);
+ tab.goBack();
+ public static void migrateSettingToNative() {
+ if (isAlwaysIncognito()) {
+ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
+ if(!prefService.getBoolean(Pref.ALWAYS_INCOGNITO_ENABLED)) {
+ Log.i("BROMITE", "Migration: always incognito pref from java to native");
+ prefService.setBoolean(Pref.ALWAYS_INCOGNITO_ENABLED, true);
+ }
+ }
+ }
+}
@ -159,7 +136,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
// We determine the model as soon as possible so every systems get initialized coherently.
- boolean startIncognito = savedInstanceState != null
- && savedInstanceState.getBoolean(IS_INCOGNITO_SELECTED, false);
+ boolean startIncognito = ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)
+ boolean startIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()
+ || (savedInstanceState != null
+ && savedInstanceState.getBoolean(IS_INCOGNITO_SELECTED, false));
@ -180,7 +157,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
throw new IllegalStateException(
"Attempting to access TabCreator before initialization");
}
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ incognito = true;
+ }
return mTabCreatorManagerSupplier.get().getTabCreator(incognito);
@ -189,11 +166,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
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
@@ -515,6 +515,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -34,6 +34,7 @@ import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.banners.AppMenuVerbiage;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.bookmarks.BookmarkFeatures;
@@ -515,6 +516,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
+ if (ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
+ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+ if (always_incognito) {
+ final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id);
+ if (newTabOption != null)
+ newTabOption.setVisible(false);
@ -213,18 +199,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
import org.chromium.chrome.browser.contextmenu.ContextMenuCoordinator.ListItemType;
@@ -408,6 +409,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
@@ -408,6 +409,9 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
boolean hasSaveImage = false;
mShowEphemeralTabNewLabel = null;
+ boolean always_incognito =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+
List<Pair<Integer, ModelList>> groupedItems = new ArrayList<>();
if (mParams.isAnchor()) {
@@ -426,6 +431,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
@@ -426,6 +430,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
}
}
@ -232,7 +217,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) {
linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB));
}
@@ -450,7 +456,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
@@ -450,7 +455,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
}
}
if (FirstRunStatus.getFirstRunFlowComplete()) {
@ -294,7 +279,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
@Override
public boolean isIncognito() {
- return false;
+ return ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+ return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
}
@Nullable
@ -315,7 +300,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab
Intent intent = mIntentSupplier.get();
GURL url = UrlFormatter.fixupUrl(getUrlFromIntent(intent));
+ boolean isIncognito = ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+ boolean isIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+
+ Profile profile = Profile.getLastUsedRegularProfile();
ChromeTabCreator chromeTabCreator =
@ -340,10 +325,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -28,6 +28,10 @@ import org.chromium.chrome.browser.profiles.Profile;
@@ -28,6 +28,11 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.settings.ChromeManagedPreferenceDelegate;
import org.chromium.chrome.browser.settings.SettingsLauncherImpl;
import org.chromium.chrome.browser.signin.services.IdentityServicesProvider;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
+import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.INeedSnackbarManager;
+import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
@ -351,7 +337,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
import org.chromium.components.browser_ui.settings.SettingsLauncher;
@@ -42,7 +46,12 @@ import org.chromium.ui.text.SpanApplier;
@@ -42,7 +47,12 @@ import org.chromium.ui.text.SpanApplier;
* Fragment to keep track of the all the privacy related preferences.
*/
public class PrivacySettings
@ -365,7 +351,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
private static final String PREF_CAN_MAKE_PAYMENT = "can_make_payment";
private static final String PREF_NETWORK_PREDICTIONS = "preload_pages";
private static final String PREF_HTTPS_FIRST_MODE = "https_first_mode";
@@ -99,6 +108,25 @@ public class PrivacySettings
@@ -99,6 +109,25 @@ public class PrivacySettings
(ChromeSwitchPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
canMakePaymentPref.setOnPreferenceChangeListener(this);
@ -391,17 +377,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
ChromeSwitchPreference networkPredictionPref =
(ChromeSwitchPreference) findPreference(PREF_NETWORK_PREDICTIONS);
networkPredictionPref.setChecked(
@@ -130,6 +158,9 @@ public class PrivacySettings
@@ -130,6 +159,10 @@ public class PrivacySettings
} else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
PrivacyPreferencesManagerImpl.getInstance().setNetworkPredictionEnabled(
(boolean) newValue);
+ } else if (PREF_ALWAYS_INCOGNITO.equals(key)) {
+ AlwaysIncognitoLinkInterceptor.setAlwaysIncognito((boolean) newValue);
+ if (!mSnackbarManager.isShowing())
+ mSnackbarManager.showSnackbar(mSnackbar);
} else if (PREF_HTTPS_FIRST_MODE.equals(key)) {
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue);
@@ -208,4 +239,8 @@ public class PrivacySettings
@@ -208,4 +241,8 @@ public class PrivacySettings
}
return false;
}
@ -443,12 +430,11 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/Tab
/**
* A {@link RootUiCoordinator} variant that controls tabbed-mode specific UI.
@@ -494,11 +496,13 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
@@ -494,11 +496,12 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
// TODO(twellington): Supply TabModelSelector as well and move initialization earlier.
if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) {
+ boolean tabModel = ContextUtils.getAppSharedPreferences().getBoolean(
+ AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+ boolean tabModel = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
AppMenuHandler appMenuHandler =
mAppMenuCoordinator == null ? null : mAppMenuCoordinator.getAppMenuHandler();
mEmptyBackgroundViewWrapper = new EmptyBackgroundViewWrapper(
@ -472,44 +458,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
/**
* This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
*/
@@ -74,6 +78,7 @@ public class ChromeTabCreator extends TabCreator {
private final Activity mActivity;
private final StartupTabPreloader mStartupTabPreloader;
private final boolean mIncognito;
+ private final TabObserver mExtraLogic;
private WindowAndroid mNativeWindow;
private TabModel mTabModel;
@@ -96,6 +101,10 @@ public class ChromeTabCreator extends TabCreator {
mNativeWindow = nativeWindow;
mTabDelegateFactorySupplier = tabDelegateFactory;
mIncognito = incognito;
+ if (!mIncognito)
+ mExtraLogic = new AlwaysIncognitoLinkInterceptor(ContextUtils.getAppSharedPreferences());
+ else
+ mExtraLogic = null;
mOverviewNTPCreator = overviewNTPCreator;
mAsyncTabParamsManager = asyncTabParamsManager;
mTabModelSelectorSupplier = tabModelSelectorSupplier;
@@ -259,6 +268,8 @@ public class ChromeTabCreator extends TabCreator {
if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) {
creationState = TabCreationState.LIVE_IN_BACKGROUND;
}
+ if (mExtraLogic != null)
+ tab.addObserver(mExtraLogic);
mTabModel.addTab(tab, position, type, creationState);
return tab;
} finally {
@@ -293,6 +304,8 @@ public class ChromeTabCreator extends TabCreator {
@TabCreationState
int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND
: TabCreationState.LIVE_IN_BACKGROUND;
+ if (mExtraLogic != null)
+ tab.addObserver(mExtraLogic);
mTabModel.addTab(tab, position, type, creationState);
return true;
}
@@ -333,7 +346,6 @@ public class ChromeTabCreator extends TabCreator {
@@ -333,7 +337,6 @@ public class ChromeTabCreator extends TabCreator {
// TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome.
public Tab launchUrlFromExternalApp(
LoadUrlParams loadUrlParams, String appId, boolean forceNewTab, Intent intent) {
@ -517,15 +466,26 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
// Don't re-use tabs for intents from Chrome. Note that this can be spoofed so shouldn't be
// relied on for anything security sensitive.
boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
@@ -428,6 +440,8 @@ public class ChromeTabCreator extends TabCreator {
.setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData)
.build();
}
+ if (mExtraLogic != null)
+ tab.addObserver(mExtraLogic);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabModelSelectorImpl.java
@@ -10,6 +10,7 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
if (isIncognito != mIncognito) {
throw new IllegalStateException("Incognito state mismatch. TabState: "
import org.chromium.base.supplier.Supplier;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.flags.ActivityType;
import org.chromium.chrome.browser.profiles.Profile;
@@ -107,6 +108,8 @@ public class TabModelSelectorImpl extends TabModelSelectorBase implements TabMod
public void onNativeLibraryReady(TabContentManager tabContentProvider) {
assert mTabContentManager == null : "onNativeLibraryReady called twice!";
+ AlwaysIncognitoLinkInterceptor.migrateSettingToNative();
+
ChromeTabCreator regularTabCreator =
(ChromeTabCreator) getTabCreatorManager().getTabCreator(false);
ChromeTabCreator incognitoTabCreator =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
@ -550,7 +510,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer
}
}
}
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ if (!isIncognito) {
+ Log.w(TAG, "Failed to restore tab: not in incognito mode.");
+ return;
@ -587,7 +547,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI
mWebApkExtras = webApkExtras;
mActivityType = (webApkExtras != null) ? ActivityType.WEB_APK : ActivityType.WEBAPP;
+
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ mIsIncognito = true;
+ }
}
@ -605,6 +565,48 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI
@Override
public @ScreenOrientationLockType.EnumType int getDefaultOrientation() {
return mWebappExtras.orientation;
diff --git a/chrome/browser/content_settings/host_content_settings_map_factory.cc b/chrome/browser/content_settings/host_content_settings_map_factory.cc
--- a/chrome/browser/content_settings/host_content_settings_map_factory.cc
+++ b/chrome/browser/content_settings/host_content_settings_map_factory.cc
@@ -15,6 +15,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/common/buildflags.h"
+#include "chrome/common/pref_names.h"
#include "components/content_settings/core/browser/content_settings_pref_provider.h"
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h"
@@ -96,9 +97,19 @@ scoped_refptr<RefcountedKeyedService>
if (profile->IsOffTheRecord() && !profile->IsGuestSession())
GetForProfile(original_profile);
+ bool always_incognito_enabled = false;
+
+#if defined(ALWAYS_INCOGNITO_ENABLED)
+ PrefService* prefService = original_profile->GetPrefs();
+ if (prefService->GetBoolean(prefs::kAlwaysIncognitoEnabled)) {
+ profile = original_profile;
+ always_incognito_enabled = true;
+ }
+#endif
+
scoped_refptr<HostContentSettingsMap> settings_map(new HostContentSettingsMap(
profile->GetPrefs(),
- profile->IsOffTheRecord() || profile->IsGuestSession(),
+ !always_incognito_enabled && (profile->IsOffTheRecord() || profile->IsGuestSession()),
/*store_last_modified=*/true,
profile->ShouldRestoreOldSessionCookies()));
@@ -108,6 +119,9 @@ scoped_refptr<RefcountedKeyedService>
HostContentSettingsMap::WEBUI_ALLOWLIST_PROVIDER,
std::move(allowlist_provider));
+ if (always_incognito_enabled)
+ return settings_map;
+
if (base::FeatureList::IsEnabled(
permissions::features::kOneTimeGeolocationPermission)) {
auto one_time_geolocation_provider =
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@ -617,6 +619,19 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
const base::Feature kCCTPostMessageAPI{"CCTPostMessageAPI",
base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -1272,6 +1272,9 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
variations::VariationsService::RegisterProfilePrefs(registry);
video_tutorials::RegisterPrefs(registry);
feed::prefs::RegisterFeedSharedProfilePrefs(registry);
+ // register incognito pref
+ registry->RegisterBooleanPref(prefs::kAlwaysIncognitoEnabled,
+ /*default_value=*/false);
feed::RegisterProfilePrefs(registry);
#else // defined(OS_ANDROID)
AppShortcutManager::RegisterProfilePrefs(registry);
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
@ -683,6 +698,35 @@ new file mode 100644
+public interface INeedSnackbarManager {
+ void setSnackbarManager(SnackbarManager manager);
+}
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -3295,6 +3295,10 @@ const char kShowCaretBrowsingDialog[] =
const char kLacrosLaunchSwitch[] = "lacros_launch_switch";
#endif
+#if defined(OS_ANDROID)
+const char kAlwaysIncognitoEnabled[] = "always_incognito_enabled";
+#endif
+
#if BUILDFLAG(IS_CHROMEOS_ASH)
// String enum pref determining what should happen when a user who authenticates
// via a security token is removing this token. "IGNORE" - nothing happens
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -1201,6 +1201,11 @@ extern const char kLastWhatsNewVersion[];
extern const char kLensRegionSearchEnabled[];
#endif
+#if defined(OS_ANDROID)
+#define ALWAYS_INCOGNITO_ENABLED
+extern const char kAlwaysIncognitoEnabled[];
+#endif
+
extern const char kPrivacyReviewShowWelcomeCard[];
extern const char kCorsNonWildcardRequestHeadersSupport[];
--
2.20.1

View file

@ -5,11 +5,12 @@ Subject: Add exit menu item
Corrected Exit functionality
---
chrome/android/java/res/menu/main_menu.xml | 6 ++++++
.../org/chromium/chrome/browser/ApplicationLifetime.java | 2 ++
.../org/chromium/chrome/browser/ChromeTabbedActivity.java | 4 ++++
.../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++
.../chrome/browser/init/ChromeLifetimeController.java | 6 +++++-
.../browser/ui/android/strings/android_chrome_strings.grd | 3 +++
5 files changed, 24 insertions(+), 1 deletion(-)
6 files changed, 26 insertions(+), 1 deletion(-)
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
@ -34,6 +35,25 @@ diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/re
</group>
<!-- Items shown only when the tablet has no visible tabs -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser;
import org.chromium.base.ObserverList;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.incognito.IncognitoNotificationManager;
/**
* Watches for when Chrome is told to restart itself.
@@ -42,6 +43,7 @@ public class ApplicationLifetime {
@CalledByNative
public static void terminate(boolean restart) {
+ IncognitoNotificationManager.dismissIncognitoNotification();
for (Observer observer : sObservers) {
observer.onTerminate(restart);
}
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

View file

@ -13,11 +13,12 @@ See also: https://github.com/bromite/bromite/pull/1427
.../chrome_junit_test_java_sources.gni | 4 +
chrome/android/chrome_test_java_sources.gni | 6 +
.../java/res/xml/privacy_preferences.xml | 5 +
.../AppMenuPropertiesDelegateImpl.java | 29 +-
.../CustomTabAppMenuPropertiesDelegate.java | 3 +
.../AppMenuPropertiesDelegateImpl.java | 25 +-
.../CustomTabAppMenuPropertiesDelegate.java | 4 +
.../browser/download/DownloadUtils.java | 16 +-
.../browser/history/HistoryManager.java | 17 +-
.../chrome/browser/history/HistoryPage.java | 15 +
.../browser/history/HistoryManager.java | 18 +-
.../chrome/browser/history/HistoryPage.java | 16 +
.../native_page/NativePageFactory.java | 4 +-
.../chrome/browser/ntp/RecentTabsManager.java | 8 +-
.../privacy/settings/PrivacySettings.java | 18 +
.../browser/tab/HistoricalTabSaver.java | 12 +-
@ -40,13 +41,13 @@ See also: https://github.com/bromite/bromite/pull/1427
.../request_coordinator_factory.h | 2 +
chrome/browser/prefs/browser_prefs.cc | 3 +
.../browser/ui/android/native_page/BUILD.gn | 2 +
.../browser/ui/native_page/NativePage.java | 6 +-
.../browser/ui/native_page/NativePage.java | 12 +-
.../ui/native_page/NativePageTest.java | 26 ++
.../strings/android_chrome_strings.grd | 6 +
chrome/common/pref_names.cc | 5 +
chrome/common/pref_names.cc | 2 +
chrome/common/pref_names.h | 4 +
chrome/test/BUILD.gn | 5 +
36 files changed, 1045 insertions(+), 38 deletions(-)
37 files changed, 1048 insertions(+), 41 deletions(-)
create mode 100644 chrome/android/javatests/src/org/chromium/chrome/browser/history/Bromite_HistoryManagerTest.java
create mode 100644 chrome/android/javatests/src/org/chromium/chrome/browser/privacy/settings/Bromite_PrivacySettingsFragmentTest_HistoryInAlwaysIncognito.java
create mode 100644 chrome/android/junit/src/org/chromium/chrome/browser/app/appmenu/Bromite_AppMenuPropertiesDelegateUnitTest.java
@ -96,7 +97,7 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
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
@@ -94,6 +94,10 @@ import java.util.ArrayList;
@@ -95,6 +95,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -107,7 +108,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
/**
* Base implementation of {@link AppMenuPropertiesDelegate} that handles hiding and showing menu
* items based on activity state.
@@ -153,6 +157,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -154,6 +158,13 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
private @StartSurfaceState int mStartSurfaceState;
protected Runnable mAppMenuInvalidator;
@ -121,17 +122,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
/**
* Construct a new {@link AppMenuPropertiesDelegateImpl}.
* @param context The activity context.
@@ -516,7 +527,8 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
- if (ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
+ boolean always_incognito = ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false);
+ if (always_incognito) {
final MenuItem newTabOption = menu.findItem(R.id.new_tab_menu_id);
if (newTabOption != null)
newTabOption.setVisible(false);
@@ -578,7 +590,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -580,7 +591,15 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
if (item.getItemId() == R.id.recent_tabs_menu_id) {
@ -148,26 +139,33 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/App
}
if (item.getItemId() == R.id.menu_group_tabs) {
item.setVisible(isMenuGroupTabsVisible);
@@ -804,7 +824,10 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -806,7 +825,9 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
// is not persisted when adding to the homescreen.
// * If creating shortcuts it not supported by the current home screen.
return WebappsUtils.isAddToHomeIntentSupported() && !isChromeScheme && !isFileScheme
- && !isContentScheme && !isIncognito && !url.isEmpty();
+ && !isContentScheme && !url.isEmpty()
+ && (!isIncognito ||
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ "always_incognito", false));
+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito());
}
/**
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
@@ -170,6 +170,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
@@ -20,6 +20,7 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.DefaultBrowserInfo;
import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
@@ -170,6 +171,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
downloadItemVisible = false;
openInChromeItemVisible = false;
}
+ if (ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ downloadItemVisible = true;
+ }
@ -176,7 +174,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
@@ -71,6 +71,10 @@ import org.chromium.ui.widget.Toast;
@@ -34,6 +34,7 @@ import org.chromium.base.annotations.NativeMethods;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.download.items.OfflineContentAggregatorFactory;
@@ -71,6 +72,10 @@ import org.chromium.ui.widget.Toast;
import java.io.File;
@ -187,13 +193,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
/**
* A class containing some utility static methods.
*/
@@ -311,7 +315,17 @@ public class DownloadUtils {
@@ -311,7 +316,16 @@ public class DownloadUtils {
// Offline pages isn't supported in Incognito. This should be checked before calling
// OfflinePageBridge.getForProfile because OfflinePageBridge instance will not be found
// for incognito profile.
- if (tab.isIncognito()) return false;
+ boolean always_incognito =
+ ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false);
+ boolean always_incognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+ if (always_incognito) {
+ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
+ boolean historyEnabledInIncognito =
@ -209,7 +214,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/Downlo
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryManager.java
@@ -41,6 +41,12 @@ import org.chromium.ui.base.Clipboard;
@@ -22,6 +22,7 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTabsFragment;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
@@ -41,6 +42,12 @@ import org.chromium.ui.base.Clipboard;
import java.util.List;
@ -222,7 +235,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
/**
* Combines and manages the different UI components of browsing history.
*/
@@ -213,7 +219,16 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve
@@ -213,7 +220,16 @@ public class HistoryManager implements OnMenuItemClickListener, SelectionObserve
: mSelectableListLayout;
}
@ -231,7 +244,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
+
+ public boolean shouldShowIncognitoPlaceholder() {
+ if (mIsIncognito &&
+ ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
+ boolean historyEnabledInIncognito =
+ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED);
@ -243,7 +256,14 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryPage.java
@@ -16,6 +16,12 @@ import org.chromium.chrome.browser.ui.native_page.BasicNativePage;
@@ -10,12 +10,19 @@ import androidx.annotation.VisibleForTesting;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.native_page.BasicNativePage;
import org.chromium.chrome.browser.ui.native_page.NativePageHost;
import org.chromium.components.embedder_support.util.UrlConstants;
@ -256,12 +276,12 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
/**
* Native page for managing browsing history.
*/
@@ -37,8 +43,17 @@ public class HistoryPage extends BasicNativePage {
@@ -37,8 +44,17 @@ public class HistoryPage extends BasicNativePage {
boolean isIncognito, Supplier<Tab> tabSupplier) {
super(host);
+ if (isIncognito &&
+ ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false)) {
+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()) {
+ PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
+ boolean historyEnabledInIncognito =
+ prefService.getBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED);
@ -274,6 +294,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/History
mTitle = host.getContext().getResources().getString(R.string.menu_history);
initWithView(mHistoryManager.getView());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java
@@ -15,6 +15,7 @@ import org.chromium.base.jank_tracker.JankTracker;
import org.chromium.base.supplier.BooleanSupplier;
import org.chromium.base.supplier.DestroyableObservableSupplier;
import org.chromium.base.supplier.Supplier;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.bookmarks.BookmarkPage;
import org.chromium.chrome.browser.browser_controls.BrowserControlsMarginSupplier;
@@ -243,7 +244,8 @@ public class NativePageFactory {
String url, NativePage candidatePage, Tab tab, boolean isIncognito) {
NativePage page;
- switch (NativePage.nativePageType(url, candidatePage, isIncognito)) {
+ boolean isAlwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+ switch (NativePage.nativePageType(url, candidatePage, isIncognito, isAlwaysIncognito)) {
case NativePageType.NONE:
return null;
case NativePageType.CANDIDATE:
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@ -308,7 +349,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
import org.chromium.chrome.R;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
@@ -152,6 +153,11 @@ public class PrivacySettings
@@ -153,6 +154,11 @@ public class PrivacySettings
Preference secureDnsPref = findPreference(PREF_SECURE_DNS);
secureDnsPref.setVisible(SecureDnsSettings.isUiEnabled());
@ -320,7 +361,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
updatePreferences();
}
@@ -174,10 +180,15 @@ public class PrivacySettings
@@ -176,10 +182,15 @@ public class PrivacySettings
} else if (PREF_HTTPS_FIRST_MODE.equals(key)) {
UserPrefs.get(Profile.getLastUsedRegularProfile())
.setBoolean(Pref.HTTPS_ONLY_MODE_ENABLED, (boolean) newValue);
@ -336,7 +377,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
@Override
public void onResume() {
super.onResume();
@@ -219,6 +230,13 @@ public class PrivacySettings
@@ -221,6 +232,13 @@ public class PrivacySettings
closeTabsOnExitPref.setOnPreferenceChangeListener(this);
closeTabsOnExitPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
@ -397,7 +438,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer
PersistedTabData.onTabClose(tab);
- if (!tab.isIncognito()) HistoricalTabSaver.createHistoricalTab(tab);
+ boolean is_always_incognito =
+ ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+ AlwaysIncognitoLinkInterceptor.isAlwaysIncognito();
+ if (!tab.isIncognito() || is_always_incognito)
+ HistoricalTabSaver.createHistoricalTab(tab, is_always_incognito);
removeTabFromQueues(tab);
@ -1579,10 +1620,10 @@ diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browse
#include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
#include "chrome/browser/android/explore_sites/history_statistics_reporter.h"
#include "chrome/browser/android/ntp/recent_tabs_page_prefs.h"
@@ -1276,6 +1278,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
variations::VariationsService::RegisterProfilePrefs(registry);
video_tutorials::RegisterPrefs(registry);
feed::prefs::RegisterFeedSharedProfilePrefs(registry);
@@ -1279,6 +1281,7 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry,
// register incognito pref
registry->RegisterBooleanPref(prefs::kAlwaysIncognitoEnabled,
/*default_value=*/false);
+ HistoryTabHelper::RegisterProfilePrefs(registry);
feed::RegisterProfilePrefs(registry);
#else // defined(OS_ANDROID)
@ -1613,14 +1654,38 @@ diff --git a/chrome/browser/ui/android/native_page/java/src/org/chromium/chrome/
/**
* An interface for pages that will be using Android views instead of html/rendered Web content.
*/
@@ -158,7 +160,9 @@ public interface NativePage {
@@ -120,12 +122,12 @@ public interface NativePage {
*/
@Deprecated // Use GURL-variant instead.
public static boolean isNativePageUrl(String url, boolean isIncognito) {
- return nativePageType(url, null, isIncognito) != NativePageType.NONE;
+ return nativePageType(url, null, isIncognito, false) != NativePageType.NONE;
}
public static boolean isNativePageUrl(GURL url, boolean isIncognito) {
return url != null
- && nativePageType(url.getSpec(), null, isIncognito) != NativePageType.NONE;
+ && nativePageType(url.getSpec(), null, isIncognito, false) != NativePageType.NONE;
}
/**
@@ -136,7 +138,8 @@ public interface NativePage {
*/
// TODO(crbug/783819) - Convert to using GURL.
public static @NativePageType int nativePageType(
- String url, NativePage candidatePage, boolean isIncognito) {
+ String url, NativePage candidatePage, boolean isIncognito,
+ boolean isAlwaysIncognito) {
if (url == null) return NativePageType.NONE;
Uri uri = Uri.parse(url);
@@ -158,7 +161,8 @@ public interface NativePage {
return NativePageType.DOWNLOADS;
} else if (UrlConstants.HISTORY_HOST.equals(host)) {
return NativePageType.HISTORY;
- } else if (UrlConstants.RECENT_TABS_HOST.equals(host) && !isIncognito) {
+ } else if (UrlConstants.RECENT_TABS_HOST.equals(host) &&
+ (!isIncognito ||
+ ContextUtils.getAppSharedPreferences().getBoolean("always_incognito", false))) {
+ (!isIncognito || isAlwaysIncognito)) {
return NativePageType.RECENT_TABS;
} else if (UrlConstants.EXPLORE_HOST.equals(host)) {
return NativePageType.EXPLORE;
@ -1684,22 +1749,19 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -3298,6 +3298,11 @@ const char kShowCaretBrowsingDialog[] =
const char kLacrosLaunchSwitch[] = "lacros_launch_switch";
#endif
@@ -3300,6 +3300,8 @@ const char kLacrosLaunchSwitch[] = "lacros_launch_switch";
+#if defined(OS_ANDROID)
#if defined(OS_ANDROID)
const char kAlwaysIncognitoEnabled[] = "always_incognito_enabled";
+const char kIncognitoTabHistoryEnabled[] =
+ "incognito_tab_history_enabled";
+#endif
+
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
// String enum pref determining what should happen when a user who authenticates
// via a security token is removing this token. "IGNORE" - nothing happens
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -1206,6 +1206,10 @@ extern const char kPrivacyReviewShowWelcomeCard[];
@@ -1211,6 +1211,10 @@ extern const char kPrivacyReviewShowWelcomeCard[];
extern const char kCorsNonWildcardRequestHeadersSupport[];

View file

@ -10,9 +10,9 @@ See also: https://github.com/bromite/bromite/issues/1062
chrome/android/chrome_java_resources.gni | 1 +
chrome/android/chrome_java_sources.gni | 1 +
chrome/android/java/AndroidManifest.xml | 18 +++
.../res/layout/sharing_intent_content.xml | 83 +++++++++++++
.../res/layout/sharing_intent_content.xml | 83 ++++++++++++
.../init/ProcessInitializationHandler.java | 3 +
.../SharedIntentShareActivity.java | 114 ++++++++++++++++++
.../SharedIntentShareActivity.java | 118 ++++++++++++++++++
chrome/browser/about_flags.cc | 4 +
chrome/browser/flag_descriptions.cc | 5 +
chrome/browser/flag_descriptions.h | 3 +
@ -20,7 +20,7 @@ See also: https://github.com/bromite/bromite/issues/1062
.../flags/android/chrome_feature_list.h | 1 +
.../browser/flags/ChromeFeatureList.java | 1 +
.../strings/android_chrome_strings.grd | 13 ++
13 files changed, 251 insertions(+)
13 files changed, 255 insertions(+)
create mode 100644 chrome/android/java/res/layout/sharing_intent_content.xml
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_intent/SharedIntentShareActivity.java
@ -186,7 +186,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/sharing/shared_intent/SharedIntentShareActivity.java
@@ -0,0 +1,114 @@
@@ -0,0 +1,118 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
@ -210,6 +210,7 @@ new file mode 100644
+import org.chromium.base.task.PostTask;
+import org.chromium.base.task.TaskTraits;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
+import org.chromium.chrome.browser.init.AsyncInitializationActivity;
+import org.chromium.chrome.browser.LaunchIntentDispatcher;
@ -293,6 +294,9 @@ new file mode 100644
+ finish();
+ });
+
+ if (AlwaysIncognitoLinkInterceptor.isAlwaysIncognito())
+ open_url_incognito_button.setVisibility(View.GONE);
+
+ onInitialLayoutInflationComplete();
+ }
+

View file

@ -35,6 +35,7 @@ Parts of this patch were developed by csagan5, uazo and others.
.../browser/omaha/UpdateStatusProvider.java | 10 +-
.../modules/chrome_feature_modules.gni | 3 -
chrome/browser/BUILD.gn | 2 -
.../chromium/chrome/browser/gsa/GSAState.java | 4 +-
chrome/browser/language/android/BUILD.gn | 2 -
.../language/AppLanguagePromoDialog.java | 23 -
.../AppLanguagePreferenceDelegate.java | 8 -
@ -54,6 +55,7 @@ Parts of this patch were developed by csagan5, uazo and others.
components/externalauth/android/BUILD.gn | 3 -
.../externalauth/ExternalAuthUtils.java | 18 +-
.../UserRecoverableErrorHandler.java | 7 -
.../gcm_driver/GoogleCloudMessagingV2.java | 2 +
components/gcm_driver/gcm_client_impl.cc | 4 +
.../gcm_driver/instance_id/android/BUILD.gn | 3 -
.../instance_id/InstanceIDBridge.java | 47 +-
@ -93,7 +95,7 @@ Parts of this patch were developed by csagan5, uazo and others.
third_party/android_deps/BUILD.gn | 540 +-----------------
.../preconditions/javatests/BUILD.gn | 1 -
.../gms/ChromiumPlayServicesAvailability.java | 10 +-
72 files changed, 63 insertions(+), 2293 deletions(-)
74 files changed, 67 insertions(+), 2295 deletions(-)
delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskGcmTaskService.java
delete mode 100644 components/background_task_scheduler/internal/android/java/src/org/chromium/components/background_task_scheduler/internal/BackgroundTaskSchedulerGcmNetworkManager.java
@ -866,6 +868,27 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
"offline_pages/prefetch/offline_metrics_collector_impl.cc",
"offline_pages/prefetch/offline_metrics_collector_impl.h",
"offline_pages/prefetch/offline_prefetch_download_client.cc",
diff --git a/chrome/browser/gsa/java/src/org/chromium/chrome/browser/gsa/GSAState.java b/chrome/browser/gsa/java/src/org/chromium/chrome/browser/gsa/GSAState.java
--- a/chrome/browser/gsa/java/src/org/chromium/chrome/browser/gsa/GSAState.java
+++ b/chrome/browser/gsa/java/src/org/chromium/chrome/browser/gsa/GSAState.java
@@ -82,7 +82,7 @@ public class GSAState {
/**
* Caches the result of a computation on whether GSA is available.
*/
- private Boolean mGsaAvailable;
+ private Boolean mGsaAvailable = false;
/**
* The Google account email address being used by GSA according to the latest update we have
@@ -106,7 +106,7 @@ public class GSAState {
* @return Whether the given package name is the package name for Google Search App.
*/
public static boolean isGsaPackageName(String packageName) {
- return SEARCH_INTENT_PACKAGE.equals(packageName);
+ return false;
}
/* Private constructor, since this is a singleton */
diff --git a/chrome/browser/language/android/BUILD.gn b/chrome/browser/language/android/BUILD.gn
--- a/chrome/browser/language/android/BUILD.gn
+++ b/chrome/browser/language/android/BUILD.gn
@ -1714,6 +1737,18 @@ diff --git a/components/externalauth/android/java/src/org/chromium/components/ex
}
// This can happen if |errorCode| is ConnectionResult.SERVICE_INVALID.
if (mDialog != null && !mDialog.isShowing()) {
diff --git a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java
--- a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java
+++ b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GoogleCloudMessagingV2.java
@@ -129,6 +129,8 @@ public class GoogleCloudMessagingV2 implements GoogleCloudMessagingSubscriber {
}
private Intent registerRpc(Bundle data) throws IOException {
+ if ((true))
+ throw new IOException("Google Play Services missing");
if (Looper.getMainLooper() == Looper.myLooper()) {
throw new IOException(ERROR_MAIN_THREAD);
}
diff --git a/components/gcm_driver/gcm_client_impl.cc b/components/gcm_driver/gcm_client_impl.cc
--- a/components/gcm_driver/gcm_client_impl.cc
+++ b/components/gcm_driver/gcm_client_impl.cc