Loading build/patches/Enable-extension-in-incognito.patch +71 −9 Original line number Diff line number Diff line Loading @@ -6,14 +6,16 @@ Full activation of incognito mode in experimental extension License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../chrome/browser/ChromeTabbedActivity.java | 33 ++++++- .../chrome/browser/ChromeTabbedActivity.java | 40 +++++++- .../chrome/browser/app/ChromeActivity.java | 24 ++++- .../customtabs/BaseCustomTabActivity.java | 2 +- .../BaseCustomTabRootUiCoordinator.java | 4 +- .../CustomTabIntentDataProvider.java | 3 + .../tabbed_mode/TabbedRootUiCoordinator.java | 3 +- .../tabmodel/TabModelSelectorBase.java | 7 ++ .../browser/toolbar/ToolbarManager.java | 4 +- .../chrome/browser/ui/RootUiCoordinator.java | 6 +- .../browser/extensions/extension_tab_util.cc | 2 +- .../tabmodel/IncognitoTabModelImpl.java | 5 + .../tabmodel/IncognitoTabModelObserver.java | 2 + .../extensions/extension_actions_bridge.cc | 12 +++ Loading @@ -25,12 +27,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../ExtensionToolbarCoordinatorImpl.java | 5 +- .../ChromeAndroidTaskTrackerImpl.java | 93 ++++++++++++++----- .../ChromeAndroidTaskTracker.java | 6 +- 19 files changed, 191 insertions(+), 49 deletions(-) 21 files changed, 201 insertions(+), 51 deletions(-) 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 @@ -284,12 +284,14 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; @@ -109,6 +109,7 @@ import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperMa import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperManager.TabModelStartupInfo; import org.chromium.chrome.browser.cookies.CookiesFetcher; import org.chromium.chrome.browser.crypto.CipherFactory; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.data_sharing.DataSharingIntentUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabGroupUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabManager; @@ -284,12 +285,14 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; import org.chromium.chrome.browser.tasks.tab_management.TabUiUtils; import org.chromium.chrome.browser.tasks.tab_management.TabsSettings; import org.chromium.chrome.browser.tasks.tab_management.archived_tabs_auto_delete_promo.ArchivedTabsAutoDeletePromoManager; Loading @@ -45,10 +55,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.ui.IncognitoRestoreAppLaunchDrawBlockerFactory; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; @@ -836,6 +838,35 @@ public class ChromeTabbedActivity extends ChromeActivity { @@ -834,7 +837,36 @@ public class ChromeTabbedActivity extends ChromeActivity { mTabModelNotificationDotManager.initWithNative(mTabModelSelector); TabModel currentTabModel = mTabModelSelector.getCurrentModel(); initializeChromeAndroidTask( BrowserWindowType.NORMAL, currentTabModel, mMultiInstanceManager); - BrowserWindowType.NORMAL, currentTabModel, mMultiInstanceManager); + BrowserWindowType.NORMAL, mTabModelSelector.getModel(false), mMultiInstanceManager); + + ProfileManager.addObserver( + new ProfileManager.Observer() { + @Override Loading Loading @@ -77,11 +90,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct + mTabModelSelector.getModel(true)); + } + }); + // For saving non-incognito tab closures for Recent Tabs. boolean alwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); @@ -2937,7 +2968,7 @@ public class ChromeTabbedActivity extends ChromeActivity { @@ -2937,7 +2969,7 @@ public class ChromeTabbedActivity extends ChromeActivity { mLayoutStateProviderSupplier, getBrowserControlsManager(), getWindowAndroid(), Loading @@ -90,6 +102,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct getLifecycleDispatcher(), getLayoutManagerSupplier(), /* menuOrKeyboardActionController= */ this, @@ -3877,6 +3909,10 @@ public class ChromeTabbedActivity extends ChromeActivity { } RecordUserAction.record("MobileMenuRecentTabs"); } else if (id == R.id.extensions_menu_id) { + if (getCurrentTabModel().isIncognito()) { + CustomTabActivity.showInfoPage(this, UrlConstants.CHROME_EXTENSIONS_URL); + return true; + } LoadUrlParams params = new LoadUrlParams( UrlConstants.CHROME_EXTENSIONS_URL, PageTransition.AUTO_TOPLEVEL); 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 Loading Loading @@ -175,6 +198,33 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Base @NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher, @NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java @@ -340,6 +340,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid private final boolean mEnableUrlBarHiding; private boolean mInteractWithBackground; + private boolean mIsExtension = false; private List<CustomButtonParams> mCustomButtonParams; private @Nullable Drawable mCloseButtonIcon; private final boolean mIsCloseButtonEnabled; @@ -717,6 +718,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid mSideSheetRoundedCornersPosition = getActivitySideSheetRoundedCornersPositionFromIntent(intent); + mIsExtension = getUrlToLoad().startsWith(UrlConstants.CHROME_EXTENSIONS_URL); logCustomTabFeatures(intent, colorScheme); String packageName = getClientPackageNameFromSessionOrCallingActivity(mIntent, mSession); RecordHistogram.recordBooleanHistogram( @@ -1333,6 +1335,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid @Override public @CustomTabProfileType int getCustomTabMode() { + if (mIsExtension) return CustomTabProfileType.REGULAR; return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() ? CustomTabProfileType.INCOGNITO : (ChromeFeatureList.sMayLaunchurlUsesSeparateStoragePartition.isEnabled() diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java Loading Loading @@ -277,6 +327,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi @NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher, @NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc @@ -1426,7 +1426,7 @@ bool ExtensionTabUtil::OpenOptionsPageFromWebContents( if (!url) { return false; } - const bool open_in_tab = ShouldOpenInTab(extension); + const bool open_in_tab = false; //ShouldOpenInTab(extension); // Opens the url as instructed by `open_in_tab`. On android we take a different // path because the `Browser` object is not available. // TODO(crbug.com/441209530): Unify the path on android after browser diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java Loading Loading
build/patches/Enable-extension-in-incognito.patch +71 −9 Original line number Diff line number Diff line Loading @@ -6,14 +6,16 @@ Full activation of incognito mode in experimental extension License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html --- .../chrome/browser/ChromeTabbedActivity.java | 33 ++++++- .../chrome/browser/ChromeTabbedActivity.java | 40 +++++++- .../chrome/browser/app/ChromeActivity.java | 24 ++++- .../customtabs/BaseCustomTabActivity.java | 2 +- .../BaseCustomTabRootUiCoordinator.java | 4 +- .../CustomTabIntentDataProvider.java | 3 + .../tabbed_mode/TabbedRootUiCoordinator.java | 3 +- .../tabmodel/TabModelSelectorBase.java | 7 ++ .../browser/toolbar/ToolbarManager.java | 4 +- .../chrome/browser/ui/RootUiCoordinator.java | 6 +- .../browser/extensions/extension_tab_util.cc | 2 +- .../tabmodel/IncognitoTabModelImpl.java | 5 + .../tabmodel/IncognitoTabModelObserver.java | 2 + .../extensions/extension_actions_bridge.cc | 12 +++ Loading @@ -25,12 +27,20 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html .../ExtensionToolbarCoordinatorImpl.java | 5 +- .../ChromeAndroidTaskTrackerImpl.java | 93 ++++++++++++++----- .../ChromeAndroidTaskTracker.java | 6 +- 19 files changed, 191 insertions(+), 49 deletions(-) 21 files changed, 201 insertions(+), 51 deletions(-) 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 @@ -284,12 +284,14 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; @@ -109,6 +109,7 @@ import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperMa import org.chromium.chrome.browser.compositor.overlays.strip.StripLayoutHelperManager.TabModelStartupInfo; import org.chromium.chrome.browser.cookies.CookiesFetcher; import org.chromium.chrome.browser.crypto.CipherFactory; +import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.data_sharing.DataSharingIntentUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabGroupUtils; import org.chromium.chrome.browser.data_sharing.DataSharingTabManager; @@ -284,12 +285,14 @@ import org.chromium.chrome.browser.tasks.tab_management.TabSwitcherPaneBase; import org.chromium.chrome.browser.tasks.tab_management.TabUiUtils; import org.chromium.chrome.browser.tasks.tab_management.TabsSettings; import org.chromium.chrome.browser.tasks.tab_management.archived_tabs_auto_delete_promo.ArchivedTabsAutoDeletePromoManager; Loading @@ -45,10 +55,13 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct import org.chromium.chrome.browser.ui.IncognitoRestoreAppLaunchDrawBlockerFactory; import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate; @@ -836,6 +838,35 @@ public class ChromeTabbedActivity extends ChromeActivity { @@ -834,7 +837,36 @@ public class ChromeTabbedActivity extends ChromeActivity { mTabModelNotificationDotManager.initWithNative(mTabModelSelector); TabModel currentTabModel = mTabModelSelector.getCurrentModel(); initializeChromeAndroidTask( BrowserWindowType.NORMAL, currentTabModel, mMultiInstanceManager); - BrowserWindowType.NORMAL, currentTabModel, mMultiInstanceManager); + BrowserWindowType.NORMAL, mTabModelSelector.getModel(false), mMultiInstanceManager); + + ProfileManager.addObserver( + new ProfileManager.Observer() { + @Override Loading Loading @@ -77,11 +90,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct + mTabModelSelector.getModel(true)); + } + }); + // For saving non-incognito tab closures for Recent Tabs. boolean alwaysIncognito = AlwaysIncognitoLinkInterceptor.isAlwaysIncognito(); PrefService prefService = UserPrefs.get(ProfileManager.getLastUsedRegularProfile()); @@ -2937,7 +2968,7 @@ public class ChromeTabbedActivity extends ChromeActivity { @@ -2937,7 +2969,7 @@ public class ChromeTabbedActivity extends ChromeActivity { mLayoutStateProviderSupplier, getBrowserControlsManager(), getWindowAndroid(), Loading @@ -90,6 +102,17 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct getLifecycleDispatcher(), getLayoutManagerSupplier(), /* menuOrKeyboardActionController= */ this, @@ -3877,6 +3909,10 @@ public class ChromeTabbedActivity extends ChromeActivity { } RecordUserAction.record("MobileMenuRecentTabs"); } else if (id == R.id.extensions_menu_id) { + if (getCurrentTabModel().isIncognito()) { + CustomTabActivity.showInfoPage(this, UrlConstants.CHROME_EXTENSIONS_URL); + return true; + } LoadUrlParams params = new LoadUrlParams( UrlConstants.CHROME_EXTENSIONS_URL, PageTransition.AUTO_TOPLEVEL); 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 Loading Loading @@ -175,6 +198,33 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Base @NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher, @NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java @@ -340,6 +340,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid private final boolean mEnableUrlBarHiding; private boolean mInteractWithBackground; + private boolean mIsExtension = false; private List<CustomButtonParams> mCustomButtonParams; private @Nullable Drawable mCloseButtonIcon; private final boolean mIsCloseButtonEnabled; @@ -717,6 +718,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid mSideSheetRoundedCornersPosition = getActivitySideSheetRoundedCornersPositionFromIntent(intent); + mIsExtension = getUrlToLoad().startsWith(UrlConstants.CHROME_EXTENSIONS_URL); logCustomTabFeatures(intent, colorScheme); String packageName = getClientPackageNameFromSessionOrCallingActivity(mIntent, mSession); RecordHistogram.recordBooleanHistogram( @@ -1333,6 +1335,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid @Override public @CustomTabProfileType int getCustomTabMode() { + if (mIsExtension) return CustomTabProfileType.REGULAR; return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito() ? CustomTabProfileType.INCOGNITO : (ChromeFeatureList.sMayLaunchurlUsesSeparateStoragePartition.isEnabled() diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java Loading Loading @@ -277,6 +327,18 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordi @NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher, @NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier, @NonNull MenuOrKeyboardActionController menuOrKeyboardActionController, diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc --- a/chrome/browser/extensions/extension_tab_util.cc +++ b/chrome/browser/extensions/extension_tab_util.cc @@ -1426,7 +1426,7 @@ bool ExtensionTabUtil::OpenOptionsPageFromWebContents( if (!url) { return false; } - const bool open_in_tab = ShouldOpenInTab(extension); + const bool open_in_tab = false; //ShouldOpenInTab(extension); // Opens the url as instructed by `open_in_tab`. On android we take a different // path because the `Browser` object is not available. // TODO(crbug.com/441209530): Unify the path on android after browser diff --git a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java --- a/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java +++ b/chrome/browser/tabmodel/android/java/src/org/chromium/chrome/browser/tabmodel/IncognitoTabModelImpl.java Loading