Drop patch in 144

This commit is contained in:
Carmelo Messina
2026-01-15 12:59:11 +01:00
parent cb29ab20ad
commit 558348760f
7 changed files with 0 additions and 1361 deletions
-6
View File
@@ -1,5 +1,4 @@
Do-not-link-with-libatomic.patch
Do-not-check-for-the-presence-of-use-remoteexec.patch
bromite-build-utils.patch
Add-cromite-flags-support.patch
Force-use-vpython3-for-some-scripts.patch
@@ -10,7 +9,6 @@ Restore-chrome-password-store.patch
Remove-EV-certificates.patch
do-not-hide-.orig-files.patch
do-not-add-suffix-to-package-name.patch
exit-on-failure-of-inclusion.patch
Move-some-account-settings-back-to-privacy-settings.patch
kill-Vision.patch
kill-Location-fall-back-to-system.patch
@@ -99,7 +97,6 @@ Block-gateway-attacks-via-websockets.patch
Enable-darken-websites-checkbox-in-themes.patch
Remove-blocklisted-URLs-upon-bookmark-creation.patch
Disable-the-DIAL-repeating-discovery.patch
Block-qjz9zk-or-trk-requests.patch
Hardening-against-incognito-mode-detection.patch
Restore-Simplified-NTP-launch.patch
Add-option-to-use-home-page-as-NTP.patch
@@ -156,7 +153,6 @@ Enable-Certificate-Transparency.patch
Invalidate-components-public-key.patch
Improve-plain-text-rendering-on-mobile.patch
Remove-segmentation-platform.patch
Follow-only-system-dark-mode.patch
Remove-window-name-on-cross-origin-navigation.patch
Remove-preload-of-com.google.android.gms.fonts.patch
Partition-Blink-memory-cache.patch
@@ -310,7 +306,6 @@ Disable-Sticky-User-Activation-Across-Same-Origin-Navigation.patch
Supporting-Dangling-Ptr-Detection-via-BackupRefPtr.patch
# temporary or wip patches
Temp-PerformanceNavigationTiming-privacy-fix.patch
Temp-disable-predictive-back-gesture.patch
TEMP-Add-a-log-to-track-strange-behavior.patch
Temp-guard-FileSystemAccessPersistentPermissions.patch
@@ -331,5 +326,4 @@ Eyeo-Adblock-for-Cromite.patch
# extension patches
Experimental-support-for-extensions-on-Android.patch
Backport-v144-android-extensions-changes.patch
Enable-extension-in-incognito.patch
@@ -1,954 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Thu, 6 Nov 2025 13:22:24 +0000
Subject: Backport-v144-android-extensions-changes
Enable support for anonymous browsing.
Backport of bugid
7089957: extensions Use BrowserWindowInterface in ExtensionViewHost
https://chromium-review.googlesource.com/c/chromium/src/+/7089957
7126008: Destroy ExtensionWindowControllerBridge when its Profile is destroyed
https://chromium-review.googlesource.com/c/chromium/src/+/7126008
---
.../chrome/browser/ChromeTabbedActivity.java | 1 +
.../chrome/browser/app/ChromeActivity.java | 12 ++
.../customtabs/BaseCustomTabActivity.java | 1 +
.../BaseCustomTabRootUiCoordinator.java | 5 +
.../tabbed_mode/TabbedRootUiCoordinator.java | 2 +
.../browser/toolbar/ToolbarManager.java | 4 +
.../chrome/browser/ui/RootUiCoordinator.java | 6 +
chrome/android/junit/BUILD.gn | 1 +
...aseCustomTabRootUiCoordinatorUnitTest.java | 4 +
.../extensions/extension_view_host_factory.cc | 127 +++++++++---------
.../extensions/extension_view_host_factory.h | 17 +--
chrome/browser/ui/android/extensions/BUILD.gn | 1 +
.../extension_action_popup_contents.cc | 9 +-
.../ExtensionActionPopupContents.java | 14 +-
.../extensions/windowing/internal/BUILD.gn | 1 +
.../ExtensionWindowControllerBridgeImpl.java | 45 ++++++-
chrome/browser/ui/android/toolbar/BUILD.gn | 2 +
.../ExtensionActionListCoordinator.java | 10 +-
.../ExtensionActionListMediator.java | 16 ++-
.../ExtensionActionListMediatorTest.java | 11 +-
.../ExtensionToolbarCoordinator.java | 5 +
.../ExtensionToolbarCoordinatorImpl.java | 4 +
22 files changed, 201 insertions(+), 97 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
@@ -2937,6 +2937,7 @@ public class ChromeTabbedActivity extends ChromeActivity {
mLayoutStateProviderSupplier,
getBrowserControlsManager(),
getWindowAndroid(),
+ getChromeAndroidTaskSupplier(),
getLifecycleDispatcher(),
getLayoutManagerSupplier(),
/* menuOrKeyboardActionController= */ this,
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
@@ -62,6 +62,7 @@ import org.chromium.base.metrics.RecordUserAction;
import org.chromium.base.shared_preferences.SharedPreferencesManager;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.supplier.UnownedUserDataSupplier;
import org.chromium.chrome.R;
@@ -447,6 +448,9 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
private @Nullable TabStateThemeResourceProvider mThemeResourceProvider;
+ private final OneshotSupplierImpl<ChromeAndroidTask> mChromeAndroidTaskSupplier =
+ new OneshotSupplierImpl<>();
+
protected ChromeActivity() {
mManualFillingComponentSupplier.set(ManualFillingComponentFactory.createComponent());
sNextActivityId++;
@@ -1093,9 +1097,17 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
if (extensionWindowControllerBridge != null) {
chromeAndroidTask.addFeature(extensionWindowControllerBridge);
}
+
+ // 4. Make the ChromeAndroidTask available via OneshotSupplier.
+ mChromeAndroidTaskSupplier.set(chromeAndroidTask);
}
}
+ /** Returns an {@link OneshotSupplier} for {@link ChromeAndroidTask}. */
+ protected final OneshotSupplier<ChromeAndroidTask> getChromeAndroidTaskSupplier() {
+ return mChromeAndroidTaskSupplier;
+ }
+
@Override
public void onStartWithNative() {
assert mNativeInitialized : "onStartWithNative was called before native was initialized.";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabActivity.java
@@ -364,6 +364,7 @@ public abstract class BaseCustomTabActivity extends ChromeActivity {
getTabModelSelectorSupplier(),
getBrowserControlsManager(),
getWindowAndroid(),
+ getChromeAndroidTaskSupplier(),
getLifecycleDispatcher(),
getLayoutManagerSupplier(),
/* menuOrKeyboardActionController= */ this,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinator.java
@@ -30,6 +30,7 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.supplier.OneShotCallback;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.supplier.SupplierUtils;
import org.chromium.chrome.R;
@@ -96,6 +97,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils;
import org.chromium.chrome.browser.ui.google_bottom_bar.GoogleBottomBarCoordinator;
@@ -160,6 +162,7 @@ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator {
* @param tabModelSelectorSupplier Supplies the {@link TabModelSelector}.
* @param browserControlsManager Manages the browser controls.
* @param windowAndroid The current {@link WindowAndroid}.
+ * @param chromeAndroidTaskSupplier Supplies an {@link ChromeAndroidTask}.
* @param activityLifecycleDispatcher Allows observation of the activity lifecycle.
* @param layoutManagerSupplier Supplies the {@link LayoutManager}.
* @param menuOrKeyboardActionController Controls the menu or keyboard action controller.
@@ -200,6 +203,7 @@ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator {
@NonNull ObservableSupplier<TabModelSelector> tabModelSelectorSupplier,
@NonNull BrowserControlsManager browserControlsManager,
@NonNull ActivityWindowAndroid windowAndroid,
+ @NonNull OneshotSupplier<ChromeAndroidTask> chromeAndroidTaskSupplier,
@NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher,
@NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@@ -245,6 +249,7 @@ public class BaseCustomTabRootUiCoordinator extends RootUiCoordinator {
new OneshotSupplierImpl<>(),
browserControlsManager,
windowAndroid,
+ chromeAndroidTaskSupplier,
activityLifecycleDispatcher,
layoutManagerSupplier,
menuOrKeyboardActionController,
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
@@ -411,6 +411,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
@NonNull OneshotSupplier<LayoutStateProvider> layoutStateProviderOneshotSupplier,
@NonNull BrowserControlsManager browserControlsManager,
@NonNull ActivityWindowAndroid windowAndroid,
+ @NonNull OneshotSupplier chromeAndroidTaskSupplier,
@NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher,
@NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@@ -461,6 +462,7 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
layoutStateProviderOneshotSupplier,
browserControlsManager,
windowAndroid,
+ chromeAndroidTaskSupplier,
activityLifecycleDispatcher,
layoutManagerSupplier,
menuOrKeyboardActionController,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -184,6 +184,7 @@ import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoord
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate;
import org.chromium.chrome.browser.ui.appmenu.MenuButtonDelegate;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController;
import org.chromium.chrome.browser.ui.native_page.NativePage;
import org.chromium.chrome.browser.ui.system.StatusBarColorController;
@@ -748,6 +749,7 @@ public class ToolbarManager
* @param omniboxFocusStateSupplier Supplier to access the focus state of the omnibox.
* @param promoShownOneshotSupplier Supplier for whether a promo was shown on startup.
* @param windowAndroid The {@link WindowAndroid} associated with the ToolbarManager.
+ * @param chromeAndroidTaskSupplier Supplier of the {@link ChromeAndroidTask}.
* @param isInOverviewModeSupplier Supplies whether the app is currently in overview mode.
* @param modalDialogManagerSupplier Supplies the {@link ModalDialogManager}.
* @param statusBarColorController The {@link StatusBarColorController} for the app.
@@ -800,6 +802,7 @@ public class ToolbarManager
ObservableSupplier<Boolean> omniboxFocusStateSupplier,
OneshotSupplier<Boolean> promoShownOneshotSupplier,
WindowAndroid windowAndroid,
+ OneshotSupplier<ChromeAndroidTask> chromeAndroidTaskSupplier,
Supplier<Boolean> isInOverviewModeSupplier,
Supplier<ModalDialogManager> modalDialogManagerSupplier,
StatusBarColorController statusBarColorController,
@@ -1127,6 +1130,7 @@ public class ToolbarManager
mActivity,
extensionToolbarStub,
windowAndroid,
+ chromeAndroidTaskSupplier,
(ObservableSupplier<Profile>) profileSupplier,
(ObservableSupplier<Tab>) tabProvider,
mTabCreatorManager.getTabCreator(false),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
@@ -166,6 +166,7 @@ import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinatorFactory;
import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
import org.chromium.chrome.browser.ui.appmenu.AppMenuObserver;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerCreator;
@@ -262,6 +263,7 @@ public class RootUiCoordinator
protected @Nullable AppMenuCoordinator mAppMenuCoordinator;
private final MenuOrKeyboardActionController mMenuOrKeyboardActionController;
protected final ActivityWindowAndroid mWindowAndroid;
+ private final OneshotSupplier<ChromeAndroidTask> mChromeAndroidTaskSupplier;
protected final ActivityTabProvider mActivityTabProvider;
protected ObservableSupplier<ShareDelegate> mShareDelegateSupplier;
@@ -401,6 +403,7 @@ public class RootUiCoordinator
* @param layoutStateProviderOneshotSupplier Supplier of the {@link LayoutStateProvider}.
* @param browserControlsManager Manages the browser controls.
* @param windowAndroid The current {@link WindowAndroid}.
+ * @param chromeAndroidTaskSupplier Supplies an {@link ChromeAndroidTask}.
* @param activityLifecycleDispatcher Allows observation of the activity lifecycle.
* @param layoutManagerSupplier Supplies the {@link LayoutManager}.
* @param menuOrKeyboardActionController Controls the menu or keyboard action controller.
@@ -446,6 +449,7 @@ public class RootUiCoordinator
@NonNull OneshotSupplier<LayoutStateProvider> layoutStateProviderOneshotSupplier,
@NonNull BrowserControlsManager browserControlsManager,
@NonNull ActivityWindowAndroid windowAndroid,
+ @NonNull OneshotSupplier<ChromeAndroidTask> chromeAndroidTaskSupplier,
@NonNull ActivityLifecycleDispatcher activityLifecycleDispatcher,
@NonNull ObservableSupplier<LayoutManagerImpl> layoutManagerSupplier,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@@ -478,6 +482,7 @@ public class RootUiCoordinator
mCallbackController = new CallbackController();
mActivity = activity;
mWindowAndroid = windowAndroid;
+ mChromeAndroidTaskSupplier = chromeAndroidTaskSupplier;
setupUnownedUserDataSuppliers();
mOnOmniboxFocusChangedListener = onOmniboxFocusChangedListener;
mBrowserControlsManager = browserControlsManager;
@@ -1715,6 +1720,7 @@ public class RootUiCoordinator
mOmniboxFocusStateSupplier,
mPromoShownOneshotSupplier,
mWindowAndroid,
+ mChromeAndroidTaskSupplier,
mIsInOverviewModeSupplier,
mModalDialogManagerSupplier,
mStatusBarColorController,
diff --git a/chrome/android/junit/BUILD.gn b/chrome/android/junit/BUILD.gn
--- a/chrome/android/junit/BUILD.gn
+++ b/chrome/android/junit/BUILD.gn
@@ -205,6 +205,7 @@ if (is_android) {
"//chrome/browser/ui/android/signin:java",
"//chrome/browser/ui/android/theme:java",
"//chrome/browser/ui/android/toolbar:java",
+ "//chrome/browser/ui/browser_window/public/android:java",
"//chrome/browser/ui/messages/android:java",
"//chrome/browser/uid/android:java",
"//chrome/browser/url_constants/android:java",
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinatorUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinatorUnitTest.java
--- a/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinatorUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/customtabs/BaseCustomTabRootUiCoordinatorUnitTest.java
@@ -39,6 +39,7 @@ import org.chromium.base.TimeUtils;
import org.chromium.base.UnownedUserDataHost;
import org.chromium.base.supplier.ObservableSupplier;
import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.Features.DisableFeatures;
@@ -74,6 +75,7 @@ import org.chromium.chrome.browser.tabmodel.TabCreatorManager;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.ui.appmenu.AppMenuBlocker;
import org.chromium.chrome.browser.ui.appmenu.AppMenuDelegate;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController;
import org.chromium.chrome.browser.ui.google_bottom_bar.GoogleBottomBarCoordinator;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
@@ -123,6 +125,7 @@ public final class BaseCustomTabRootUiCoordinatorUnitTest {
mBrowserStateBrowserControlsVisibilityDelegate;
@Mock private ActivityWindowAndroid mWindowAndroid;
+ @Mock private OneshotSupplier<ChromeAndroidTask> mChromeAndroidTask;
@Mock private ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
@Mock private ObservableSupplier<LayoutManagerImpl> mLayoutManagerSupplier;
@Mock private MenuOrKeyboardActionController mMenuOrKeyboardActionController;
@@ -196,6 +199,7 @@ public final class BaseCustomTabRootUiCoordinatorUnitTest {
mTabModelSelectorSupplier,
mBrowserControlsManager,
mWindowAndroid,
+ mChromeAndroidTask,
mActivityLifecycleDispatcher,
mLayoutManagerSupplier,
mMenuOrKeyboardActionController,
diff --git a/chrome/browser/extensions/extension_view_host_factory.cc b/chrome/browser/extensions/extension_view_host_factory.cc
--- a/chrome/browser/extensions/extension_view_host_factory.cc
+++ b/chrome/browser/extensions/extension_view_host_factory.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/browser_window/public/browser_window_features.h"
+#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/keyboard_event_processing_result.h"
#include "content/public/browser/web_contents.h"
@@ -21,9 +22,9 @@
#include "extensions/common/manifest_handlers/incognito_info.h"
#include "extensions/common/mojom/view_type.mojom.h"
-#if !BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/browser/ui/browser.h"
-#endif // !BUILDFLAG(IS_ANDROID)
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
@@ -31,51 +32,7 @@ namespace extensions {
namespace {
-#if BUILDFLAG(IS_ANDROID)
-
-// Delegate for ExtensionViewHost on Android.
-class ExtensionViewHostDelegateAndroid : public ExtensionViewHost::Delegate {
- public:
- ExtensionViewHostDelegateAndroid() = default;
- ExtensionViewHostDelegateAndroid(const ExtensionViewHostDelegateAndroid&) =
- delete;
- ExtensionViewHostDelegateAndroid& operator=(
- const ExtensionViewHostDelegateAndroid&) = delete;
- ~ExtensionViewHostDelegateAndroid() override = default;
-
- content::WebContents* OpenURL(
- const content::OpenURLParams& params,
- base::OnceCallback<void(content::NavigationHandle&)>
- navigation_handle_callback) override {
- // TODO(cbrug.com/385987224): Implement this method for Android.
- NOTIMPLEMENTED();
- return nullptr;
- }
-
- content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
- content::WebContents* source,
- const input::NativeWebKeyboardEvent& event) override {
- // TODO(cbrug.com/385987224): Implement this method for Android.
- NOTIMPLEMENTED();
- return content::KeyboardEventProcessingResult::NOT_HANDLED;
- }
-
- std::unique_ptr<content::EyeDropper> OpenEyeDropper(
- content::RenderFrameHost* frame,
- content::EyeDropperListener* listener) override {
- // TODO(cbrug.com/385987224): Implement this method for Android.
- NOTIMPLEMENTED();
- return nullptr;
- }
-
- WindowController* GetExtensionWindowController() const override {
- // TODO(cbrug.com/385987224): Implement this method for Android.
- NOTIMPLEMENTED();
- return nullptr;
- }
-};
-
-#else // BUILDFLAG(IS_ANDROID)
+#if BUILDFLAG(ENABLE_EXTENSIONS)
// Delegate for ExtensionViewHost attached to a specific browser window.
class ExtensionViewHostBrowserDelegate : public ExtensionViewHost::Delegate {
@@ -175,7 +132,52 @@ class ExtensionViewHostTabDelegate : public ExtensionViewHost::Delegate {
raw_ptr<content::WebContents> web_contents_;
};
-#endif // BUILDFLAG(IS_ANDROID)
+
+#else // BUILDFLAG(ENABLE_EXTENSIONS)
+
+// Delegate for ExtensionViewHost on Android.
+class ExtensionViewHostDelegateAndroid : public ExtensionViewHost::Delegate {
+ public:
+ ExtensionViewHostDelegateAndroid() = default;
+ ExtensionViewHostDelegateAndroid(const ExtensionViewHostDelegateAndroid&) =
+ delete;
+ ExtensionViewHostDelegateAndroid& operator=(
+ const ExtensionViewHostDelegateAndroid&) = delete;
+ ~ExtensionViewHostDelegateAndroid() override = default;
+
+ content::WebContents* OpenURL(
+ const content::OpenURLParams& params,
+ base::OnceCallback<void(content::NavigationHandle&)>
+ navigation_handle_callback) override {
+ // TODO(cbrug.com/385987224): Implement this method for Android.
+ NOTIMPLEMENTED();
+ return nullptr;
+ }
+
+ content::KeyboardEventProcessingResult PreHandleKeyboardEvent(
+ content::WebContents* source,
+ const input::NativeWebKeyboardEvent& event) override {
+ // TODO(cbrug.com/385987224): Implement this method for Android.
+ NOTIMPLEMENTED();
+ return content::KeyboardEventProcessingResult::NOT_HANDLED;
+ }
+
+ std::unique_ptr<content::EyeDropper> OpenEyeDropper(
+ content::RenderFrameHost* frame,
+ content::EyeDropperListener* listener) override {
+ // TODO(cbrug.com/385987224): Implement this method for Android.
+ NOTIMPLEMENTED();
+ return nullptr;
+ }
+
+ WindowController* GetExtensionWindowController() const override {
+ // TODO(cbrug.com/385987224): Implement this method for Android.
+ NOTIMPLEMENTED();
+ return nullptr;
+ }
+};
+
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
// Creates a new ExtensionHost with its associated view, grouping it in the
// appropriate SiteInstance (and therefore process) based on the URL and
@@ -264,28 +266,23 @@ std::unique_ptr<ExtensionViewHost> CreateViewHost(
} // namespace
-#if BUILDFLAG(IS_ANDROID)
-
// static
std::unique_ptr<ExtensionViewHost> ExtensionViewHostFactory::CreatePopupHost(
const GURL& url,
- Profile* profile) {
- return CreateViewHost(url, profile, mojom::ViewType::kExtensionPopup,
- std::make_unique<ExtensionViewHostDelegateAndroid>());
-}
-
-#else // BUILDFLAG(IS_ANDROID)
-
-// static
-std::unique_ptr<ExtensionViewHost> ExtensionViewHostFactory::CreatePopupHost(
- const GURL& url,
- Browser* browser) {
+ BrowserWindowInterface* browser) {
DCHECK(browser);
- return CreateViewHost(
- url, browser->profile(), mojom::ViewType::kExtensionPopup,
- std::make_unique<ExtensionViewHostBrowserDelegate>(browser));
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+ auto delegate = std::make_unique<ExtensionViewHostBrowserDelegate>(
+ browser->GetBrowserForMigrationOnly());
+#else // BUILDFLAG(ENABLE_EXTENSIONS)
+ auto delegate = std::make_unique<ExtensionViewHostDelegateAndroid>();
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
+ return CreateViewHost(url, browser->GetProfile(),
+ mojom::ViewType::kExtensionPopup, std::move(delegate));
}
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+
// static
std::unique_ptr<ExtensionViewHost>
ExtensionViewHostFactory::CreateSidePanelHost(
@@ -311,6 +308,6 @@ ExtensionViewHostFactory::CreateSidePanelHost(
std::move(delegate));
}
-#endif // BUILDFLAG(IS_ANDROID)
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
} // namespace extensions
diff --git a/chrome/browser/extensions/extension_view_host_factory.h b/chrome/browser/extensions/extension_view_host_factory.h
--- a/chrome/browser/extensions/extension_view_host_factory.h
+++ b/chrome/browser/extensions/extension_view_host_factory.h
@@ -12,10 +12,8 @@
static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));
-class Browser;
class BrowserWindowInterface;
class GURL;
-class Profile;
namespace tabs {
class TabInterface;
@@ -33,19 +31,14 @@ class ExtensionViewHostFactory {
ExtensionViewHostFactory(const ExtensionViewHostFactory&) = delete;
ExtensionViewHostFactory& operator=(const ExtensionViewHostFactory&) = delete;
-#if BUILDFLAG(IS_ANDROID)
// Creates a new ExtensionHost with its associated view, grouping it in the
// appropriate SiteInstance (and therefore process) based on the URL and
// profile.
- static std::unique_ptr<ExtensionViewHost> CreatePopupHost(const GURL& url,
- Profile* profile);
-#else // BUILDFLAG(IS_ANDROID)
- // Creates a new ExtensionHost with its associated view, grouping it in the
- // appropriate SiteInstance (and therefore process) based on the URL and
- // profile.
- static std::unique_ptr<ExtensionViewHost> CreatePopupHost(const GURL& url,
- Browser* browser);
+ static std::unique_ptr<ExtensionViewHost> CreatePopupHost(
+ const GURL& url,
+ BrowserWindowInterface* browser);
+#if BUILDFLAG(ENABLE_EXTENSIONS)
// Creates a new ExtensionHost with its associated view, grouping it in the
// appropriate SiteInstance (and therefore process) based on the URL and
// profile.
@@ -54,7 +47,7 @@ class ExtensionViewHostFactory {
const GURL& url,
BrowserWindowInterface* browser,
tabs::TabInterface* tab_interface);
-#endif // BUILDFLAG(IS_ANDROID)
+#endif // BUILDFLAG(ENABLE_EXTENSIONS)
};
} // namespace extensions
diff --git a/chrome/browser/ui/android/extensions/BUILD.gn b/chrome/browser/ui/android/extensions/BUILD.gn
--- a/chrome/browser/ui/android/extensions/BUILD.gn
+++ b/chrome/browser/ui/android/extensions/BUILD.gn
@@ -24,6 +24,7 @@ android_library("java") {
"//chrome/browser/tab:java",
"//chrome/browser/tabmodel:java",
"//chrome/browser/ui/android/theme:java",
+ "//chrome/browser/ui/browser_window/public/android:java",
"//components/browser_ui/widget/android:java",
"//third_party/android_deps:material_design_java",
"//ui/android:ui_full_java",
diff --git a/chrome/browser/ui/android/extensions/extension_action_popup_contents.cc b/chrome/browser/ui/android/extensions/extension_action_popup_contents.cc
--- a/chrome/browser/ui/android/extensions/extension_action_popup_contents.cc
+++ b/chrome/browser/ui/android/extensions/extension_action_popup_contents.cc
@@ -9,6 +9,7 @@
#include "chrome/browser/extensions/extension_view_host.h"
#include "chrome/browser/extensions/extension_view_host_factory.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_window/internal/android/android_browser_window.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_action.h"
@@ -135,9 +136,13 @@ void ExtensionActionPopupContents::HandleCloseExtensionHost(
// popup.
static ScopedJavaLocalRef<jobject> JNI_ExtensionActionPopupContents_Create(
JNIEnv* env,
- Profile* profile,
+ jlong browser_window_interface_ptr,
std::string& action_id,
int tab_id) {
+ BrowserWindowInterface* browser =
+ reinterpret_cast<BrowserWindowInterface*>(browser_window_interface_ptr);
+ Profile* profile = browser->GetProfile();
+
ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
DCHECK(registry);
@@ -154,7 +159,7 @@ static ScopedJavaLocalRef<jobject> JNI_ExtensionActionPopupContents_Create(
GURL popup_url = action->GetPopupUrl(tab_id);
std::unique_ptr<ExtensionViewHost> host =
- ExtensionViewHostFactory::CreatePopupHost(popup_url, profile);
+ ExtensionViewHostFactory::CreatePopupHost(popup_url, browser);
DCHECK(host);
// The ExtensionActionPopupContents C++ object's lifetime is managed by its
diff --git a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionPopupContents.java b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionPopupContents.java
--- a/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionPopupContents.java
+++ b/chrome/browser/ui/android/extensions/java/src/org/chromium/chrome/browser/ui/extensions/ExtensionActionPopupContents.java
@@ -12,7 +12,7 @@ import org.jni_zero.NativeMethods;
import org.chromium.base.lifetime.Destroyable;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
-import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.content_public.browser.WebContents;
/**
@@ -50,8 +50,10 @@ public class ExtensionActionPopupContents implements Destroyable {
}
/** Creates an {@link ExtensionActionPopupContents} instance. */
- public static ExtensionActionPopupContents create(Profile profile, String actionId, int tabId) {
- return ExtensionActionPopupContentsJni.get().create(profile, actionId, tabId);
+ public static ExtensionActionPopupContents create(
+ ChromeAndroidTask task, String actionId, int tabId) {
+ return ExtensionActionPopupContentsJni.get()
+ .create(task.getOrCreateNativeBrowserWindowPtr(), actionId, tabId);
}
/**
@@ -138,15 +140,13 @@ public class ExtensionActionPopupContents implements Destroyable {
/**
* Creates the native ExtensionActionPopupContents object and returns its Java peer.
*
- * @param profile The {@link Profile} associated with the extension.
+ * @param androidBrowserWindowPtr The address of a native {@code BrowserWindowInterface}.
* @param actionId The ID of the extension action.
* @param tabId The ID of the tab context.
* @return The Java {@link ExtensionActionPopupContents} object, or {@code null} on failure.
*/
ExtensionActionPopupContents create(
- @JniType("Profile*") Profile profile,
- @JniType("std::string") String actionId,
- int tabId);
+ long androidBrowserWindowPtr, @JniType("std::string") String actionId, int tabId);
/**
* Destroys the native ExtensionActionPopupContents object.
diff --git a/chrome/browser/ui/android/extensions/windowing/internal/BUILD.gn b/chrome/browser/ui/android/extensions/windowing/internal/BUILD.gn
--- a/chrome/browser/ui/android/extensions/windowing/internal/BUILD.gn
+++ b/chrome/browser/ui/android/extensions/windowing/internal/BUILD.gn
@@ -38,6 +38,7 @@ android_library("java") {
]
deps = [
"//build/android:build_java",
+ "//chrome/browser/profiles/android:java",
"//chrome/browser/ui/android/extensions/windowing:java",
"//chrome/browser/ui/browser_window/public/android:java",
"//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/chrome/browser/ui/android/extensions/windowing/internal/java/src/org/chromium/chrome/browser/ui/extensions/windowing/ExtensionWindowControllerBridgeImpl.java b/chrome/browser/ui/android/extensions/windowing/internal/java/src/org/chromium/chrome/browser/ui/extensions/windowing/ExtensionWindowControllerBridgeImpl.java
--- a/chrome/browser/ui/android/extensions/windowing/internal/java/src/org/chromium/chrome/browser/ui/extensions/windowing/ExtensionWindowControllerBridgeImpl.java
+++ b/chrome/browser/ui/android/extensions/windowing/internal/java/src/org/chromium/chrome/browser/ui/extensions/windowing/ExtensionWindowControllerBridgeImpl.java
@@ -11,6 +11,8 @@ import org.jni_zero.CalledByNative;
import org.jni_zero.NativeMethods;
import org.chromium.build.annotations.NullMarked;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.profiles.ProfileManager;
import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import java.util.ArrayList;
@@ -19,7 +21,8 @@ import java.util.Map;
/** Implements {@link ExtensionWindowControllerBridge}. */
@NullMarked
-final class ExtensionWindowControllerBridgeImpl implements ExtensionWindowControllerBridge {
+final class ExtensionWindowControllerBridgeImpl
+ implements ExtensionWindowControllerBridge, ProfileManager.Observer {
/**
* Events received by the native singleton {@code WindowControllerListObserverForTesting}.
@@ -82,6 +85,7 @@ final class ExtensionWindowControllerBridgeImpl implements ExtensionWindowContro
assert mNativeExtensionWindowControllerBridge == 0
: "ExtensionWindowControllerBridge is already added to a task.";
+ ProfileManager.addObserver(this);
mNativeExtensionWindowControllerBridge =
ExtensionWindowControllerBridgeImplJni.get()
.create(
@@ -91,10 +95,8 @@ final class ExtensionWindowControllerBridgeImpl implements ExtensionWindowContro
@Override
public void onTaskRemoved() {
- if (mNativeExtensionWindowControllerBridge != 0) {
- ExtensionWindowControllerBridgeImplJni.get()
- .destroy(mNativeExtensionWindowControllerBridge);
- }
+ destroyNativeExtensionWindowControllerBridge();
+ ProfileManager.removeObserver(this);
}
@Override
@@ -113,6 +115,32 @@ final class ExtensionWindowControllerBridgeImpl implements ExtensionWindowContro
}
}
+ @Override
+ public void onProfileAdded(Profile profile) {}
+
+ @Override
+ public void onProfileDestroyed(Profile profile) {
+ // This is a short-term fix for http://crbug.com/450234852.
+ //
+ // The native extension code is cross-platform and depends on BrowserWindowInterface. Per
+ // documentation of BrowserWindowInterface::GetProfile(), cross-platform code assumes
+ // BrowserWindowInterface will always be destroyed *before* its Profile.
+ //
+ // See:
+ // https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ui/browser_window/public/browser_window_interface.h;l=108;drc=c8dc70b538f1bb0862f1be58237d6e945ee81819
+ //
+ // However, on Android, http://crbug.com/450234852 reveals a case where the Profile is
+ // destroyed before its BrowserWindowInterface, which caused native extension code to
+ // dereference an invalid Profile pointer.
+ //
+ // To avoid this issue, we destroy the native objects for extensions as soon as the native
+ // Profile is about to be destroyed. The long-term fix should be to correct the object
+ // destruction order for the case described in http://crbug.com/450234852.
+ if (profile == mChromeAndroidTask.getProfile()) {
+ destroyNativeExtensionWindowControllerBridge();
+ }
+ }
+
long getNativePtrForTesting() {
return mNativeExtensionWindowControllerBridge;
}
@@ -123,6 +151,13 @@ final class ExtensionWindowControllerBridgeImpl implements ExtensionWindowContro
.getExtensionWindowIdForTesting(mNativeExtensionWindowControllerBridge); // IN-TEST
}
+ private void destroyNativeExtensionWindowControllerBridge() {
+ if (mNativeExtensionWindowControllerBridge != 0) {
+ ExtensionWindowControllerBridgeImplJni.get()
+ .destroy(mNativeExtensionWindowControllerBridge);
+ }
+ }
+
@CalledByNative
private void clearNativePtr() {
mNativeExtensionWindowControllerBridge = 0;
diff --git a/chrome/browser/ui/android/toolbar/BUILD.gn b/chrome/browser/ui/android/toolbar/BUILD.gn
--- a/chrome/browser/ui/android/toolbar/BUILD.gn
+++ b/chrome/browser/ui/android/toolbar/BUILD.gn
@@ -189,6 +189,7 @@ android_library("java") {
"//chrome/browser/ui/android/omnibox:java_resources",
"//chrome/browser/ui/android/pdf:java",
"//chrome/browser/ui/android/theme:java",
+ "//chrome/browser/ui/browser_window/public/android:java",
"//chrome/browser/url_constants/android:java",
"//chrome/browser/user_education:java",
"//chrome/browser/util:java",
@@ -478,6 +479,7 @@ robolectric_library("junit") {
"//chrome/browser/ui/android/omnibox:java_resources",
"//chrome/browser/ui/android/theme:java",
"//chrome/browser/ui/android/toolbar:java_resources",
+ "//chrome/browser/ui/browser_window/public/android:java",
"//chrome/browser/user_education:java",
"//chrome/test/android:chrome_java_unit_test_support",
"//components/browser_ui/bottomsheet/android:java",
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListCoordinator.java
@@ -10,11 +10,13 @@ import android.view.LayoutInflater;
import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.lifetime.LifetimeAssert;
import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.extensions.R;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.listmenu.ListMenuButton;
@@ -37,6 +39,7 @@ public class ExtensionActionListCoordinator implements Destroyable {
Context context,
ExtensionActionListContainer container,
WindowAndroid windowAndroid,
+ OneshotSupplier<ChromeAndroidTask> taskSupplier,
ObservableSupplier<Profile> profileSupplier,
ObservableSupplier<Tab> currentTabSupplier) {
mContainer = container;
@@ -44,7 +47,12 @@ public class ExtensionActionListCoordinator implements Destroyable {
mModels = new ModelList();
mMediator =
new ExtensionActionListMediator(
- context, windowAndroid, mModels, profileSupplier, currentTabSupplier);
+ context,
+ windowAndroid,
+ mModels,
+ taskSupplier,
+ profileSupplier,
+ currentTabSupplier);
mAdapter =
new ViewGroupAdapter.Builder(mContainer, mModels)
.registerType(
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediator.java
@@ -12,6 +12,7 @@ import org.chromium.base.Log;
import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.lifetime.LifetimeAssert;
import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.chrome.browser.extensions.ContextMenuSource;
@@ -19,6 +20,7 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.MenuBuilderHelper;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.extensions.ExtensionAction;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionContextMenuBridge;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionPopupContents;
@@ -38,6 +40,7 @@ class ExtensionActionListMediator implements Destroyable {
private final Context mContext;
private final WindowAndroid mWindowAndroid;
private final ModelList mModels;
+ private final OneshotSupplier<ChromeAndroidTask> mTaskSupplier;
private final ExtensionActionsUpdateHelper mExtensionActionsUpdateHelper;
private final ActionsUpdateDelegate mActionsUpdateDelegate = new ActionsUpdateDelegate();
@@ -50,11 +53,13 @@ class ExtensionActionListMediator implements Destroyable {
Context context,
WindowAndroid windowAndroid,
ModelList models,
+ OneshotSupplier<ChromeAndroidTask> taskSupplier,
ObservableSupplier<Profile> profileSupplier,
ObservableSupplier<Tab> currentTabSupplier) {
mContext = context;
mWindowAndroid = windowAndroid;
mModels = models;
+ mTaskSupplier = taskSupplier;
mExtensionActionsUpdateHelper =
new ExtensionActionsUpdateHelper(
@@ -103,16 +108,19 @@ class ExtensionActionListMediator implements Destroyable {
// button while its popup is open.
closePopup();
- Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab();
- Profile profile = mExtensionActionsUpdateHelper.getProfile();
+ ChromeAndroidTask task = mTaskSupplier.get();
+ if (task == null) {
+ return;
+ }
- if (profile == null || currentTab == null) {
+ Tab currentTab = mExtensionActionsUpdateHelper.getCurrentTab();
+ if (currentTab == null) {
return;
}
int tabId = currentTab.getId();
ExtensionActionPopupContents contents =
- ExtensionActionPopupContents.create(profile, actionId, tabId);
+ ExtensionActionPopupContents.create(task, actionId, tabId);
assert mCurrentPopup == null;
mCurrentPopup =
new ExtensionActionPopup(mContext, mWindowAndroid, buttonView, actionId, contents);
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionActionListMediatorTest.java
@@ -39,12 +39,14 @@ import org.mockito.junit.MockitoRule;
import org.robolectric.annotation.LooperMode;
import org.chromium.base.supplier.ObservableSupplierImpl;
+import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.extensions.ContextMenuSource;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.MockTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.toolbar.extensions.ExtensionActionButtonProperties.ListItemType;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionContextMenuBridge;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionContextMenuBridgeJni;
import org.chromium.chrome.browser.ui.extensions.FakeExtensionActionsBridge;
@@ -86,6 +88,7 @@ public class ExtensionActionListMediatorTest {
private FakeExtensionActionsBridge.ProfileModel mProfileModel;
private MockTab mTab1;
private MockTab mTab2;
+ private OneshotSupplierImpl<ChromeAndroidTask> mTaskSupplier;
private ObservableSupplierImpl<Profile> mProfileSupplier;
private ObservableSupplierImpl<Tab> mCurrentTabSupplier;
private ModelList mModels;
@@ -108,12 +111,18 @@ public class ExtensionActionListMediatorTest {
mTab2 = new MockTab(TAB2_ID, mProfile);
mTab1.setWebContentsOverrideForTesting(mWebContents);
mTab2.setWebContentsOverrideForTesting(mWebContents);
+ mTaskSupplier = new OneshotSupplierImpl<>();
mProfileSupplier = new ObservableSupplierImpl<>();
mCurrentTabSupplier = new ObservableSupplierImpl<>();
mModels = new ModelList();
mMediator =
new ExtensionActionListMediator(
- context, mWindowAndroid, mModels, mProfileSupplier, mCurrentTabSupplier);
+ context,
+ mWindowAndroid,
+ mModels,
+ mTaskSupplier,
+ mProfileSupplier,
+ mCurrentTabSupplier);
// Wait for the main thread to settle.
shadowOf(Looper.getMainLooper()).idle();
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinator.java
@@ -11,6 +11,7 @@ import android.view.ViewStub;
import org.chromium.base.ServiceLoaderUtil;
import org.chromium.base.lifetime.Destroyable;
import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.build.annotations.Initializer;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
@@ -18,6 +19,7 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.theme.ThemeColorProvider;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.ui.base.WindowAndroid;
/**
@@ -40,6 +42,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
+ OneshotSupplier<ChromeAndroidTask> taskSupplier,
ObservableSupplier<Profile> profileSupplier,
ObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
@@ -53,6 +56,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
context,
extensionToolbarStub,
windowAndroid,
+ taskSupplier,
profileSupplier,
currentTabSupplier,
tabCreator,
@@ -71,6 +75,7 @@ public interface ExtensionToolbarCoordinator extends Destroyable {
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
+ OneshotSupplier<ChromeAndroidTask> taskSupplier,
ObservableSupplier<Profile> profileSupplier,
ObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/extensions/ExtensionToolbarCoordinatorImpl.java
@@ -13,6 +13,7 @@ import android.widget.LinearLayout;
import org.chromium.base.Callback;
import org.chromium.base.lifetime.LifetimeAssert;
import org.chromium.base.supplier.ObservableSupplier;
+import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.build.annotations.NullMarked;
import org.chromium.build.annotations.Nullable;
import org.chromium.build.annotations.ServiceImpl;
@@ -20,6 +21,7 @@ import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabCreator;
import org.chromium.chrome.browser.theme.ThemeColorProvider;
+import org.chromium.chrome.browser.ui.browser_window.ChromeAndroidTask;
import org.chromium.chrome.browser.ui.extensions.ExtensionActionsBridge;
import org.chromium.chrome.browser.ui.extensions.ExtensionUi;
import org.chromium.chrome.browser.ui.extensions.R;
@@ -44,6 +46,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
Context context,
ViewStub extensionToolbarStub,
WindowAndroid windowAndroid,
+ OneshotSupplier<ChromeAndroidTask> taskSupplier,
ObservableSupplier<Profile> profileSupplier,
ObservableSupplier<Tab> currentTabSupplier,
TabCreator tabCreator,
@@ -63,6 +66,7 @@ public class ExtensionToolbarCoordinatorImpl implements ExtensionToolbarCoordina
context,
container.findViewById(R.id.extension_action_list),
windowAndroid,
+ taskSupplier,
profileSupplier,
currentTabSupplier);
mExtensionsMenuCoordinator =
--
@@ -1,277 +0,0 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Wed, 30 Oct 2019 11:50:13 +0100
Subject: Block 'qjz9zk' or 'trk:' requests
An info bar is displayed unless the --disable-trkbar command-line flag or the chrome://flag option is used.
This patch is based on Iridium's 'net: add "trk:" scheme and help identify URLs being retrieved'
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../chrome_autocomplete_scheme_classifier.cc | 1 +
chrome/browser/history/history_utils.cc | 1 +
chrome/browser/ui/singleton_tabs.cc | 5 ++++
.../omnibox/browser/autocomplete_input.cc | 8 ++++-
components/url_formatter/url_fixer.cc | 4 +++
.../child_process_security_policy_impl.cc | 1 +
net/BUILD.gn | 2 ++
net/url_request/trk_protocol_handler.cc | 25 ++++++++++++++++
net/url_request/trk_protocol_handler.h | 30 +++++++++++++++++++
net/url_request/url_request.cc | 8 +++++
.../url_request_context_builder.cc | 3 ++
url/url_constants.h | 1 +
url/url_util.cc | 2 ++
13 files changed, 90 insertions(+), 1 deletion(-)
create mode 100644 net/url_request/trk_protocol_handler.cc
create mode 100644 net/url_request/trk_protocol_handler.h
diff --git a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
--- a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
+++ b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc
@@ -72,6 +72,7 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForScheme(
if (base::IsStringASCII(scheme) &&
(ProfileIOData::IsHandledProtocol(scheme) ||
base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) ||
+ base::EqualsCaseInsensitiveASCII(scheme, url::kTraceScheme) ||
base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) ||
base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme))) {
return metrics::OmniboxInputType::URL;
diff --git a/chrome/browser/history/history_utils.cc b/chrome/browser/history/history_utils.cc
--- a/chrome/browser/history/history_utils.cc
+++ b/chrome/browser/history/history_utils.cc
@@ -22,6 +22,7 @@ bool CanAddURLToHistory(const GURL& url) {
url.SchemeIs(content::kChromeUIScheme) ||
url.SchemeIs(content::kChromeUIUntrustedScheme) ||
url.SchemeIs(content::kViewSourceScheme) ||
+ url.SchemeIs(url::kTraceScheme) ||
url.SchemeIs(chrome::kChromeNativeScheme) ||
url.SchemeIs(chrome::kChromeSearchScheme) ||
url.SchemeIs(dom_distiller::kDomDistillerScheme))
diff --git a/chrome/browser/ui/singleton_tabs.cc b/chrome/browser/ui/singleton_tabs.cc
--- a/chrome/browser/ui/singleton_tabs.cc
+++ b/chrome/browser/ui/singleton_tabs.cc
@@ -144,6 +144,11 @@ int GetIndexOfExistingTab(BrowserWindowInterface* browser,
continue;
}
+ // trk: URLs must not be rewritten
+ if (tab_url.SchemeIs(url::kTraceScheme)) {
+ continue;
+ }
+
GURL rewritten_tab_url = tab_url;
content::BrowserURLHandler::GetInstance()->RewriteURLIfNecessary(
&rewritten_tab_url, browser->GetProfile());
diff --git a/components/omnibox/browser/autocomplete_input.cc b/components/omnibox/browser/autocomplete_input.cc
--- a/components/omnibox/browser/autocomplete_input.cc
+++ b/components/omnibox/browser/autocomplete_input.cc
@@ -92,10 +92,15 @@ void OffsetComponentsExcludingScheme(url::Parsed* parts, int offset) {
bool HasScheme(const std::u16string& input, const char* scheme) {
std::string utf8_input(base::UTF16ToUTF8(input));
url::Component view_source_scheme;
+
+ if (url::FindAndCompareScheme(utf8_input, url::kTraceScheme, &view_source_scheme)) {
+ return false;
+ }
if (url::FindAndCompareScheme(utf8_input, kViewSourceScheme,
&view_source_scheme)) {
utf8_input.erase(0, view_source_scheme.end() + 1);
}
+
return url::FindAndCompareScheme(utf8_input, scheme, nullptr);
}
@@ -580,7 +585,8 @@ void AutocompleteInput::ParseForEmphasizeComponents(
// For the view-source and blob schemes, we should emphasize the host of the
// URL qualified by the view-source or blob prefix.
if ((base::EqualsCaseInsensitiveASCII(scheme_str, kViewSourceScheme) ||
- base::EqualsCaseInsensitiveASCII(scheme_str, url::kBlobScheme)) &&
+ base::EqualsCaseInsensitiveASCII(scheme_str, url::kBlobScheme) ||
+ base::EqualsCaseInsensitiveASCII(scheme_str, url::kTraceScheme)) &&
(static_cast<int>(text.length()) > after_scheme_and_colon)) {
// Obtain the URL prefixed by view-source or blob and parse it.
std::u16string real_url(text.substr(after_scheme_and_colon));
diff --git a/components/url_formatter/url_fixer.cc b/components/url_formatter/url_fixer.cc
--- a/components/url_formatter/url_fixer.cc
+++ b/components/url_formatter/url_fixer.cc
@@ -598,6 +598,10 @@ GURL FixupURLInternal(const std::string& text,
}
}
+ if (scheme == url::kTraceScheme) {
+ return GURL();
+ }
+
// We handle the file scheme separately.
if (scheme == url::kFileScheme) {
return GURL(parts.scheme.is_valid() ? text : FixupPath(text));
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -969,6 +969,7 @@ ChildProcessSecurityPolicyImpl::ChildProcessSecurityPolicyImpl()
RegisterPseudoScheme(url::kJavaScriptScheme);
RegisterPseudoScheme(kViewSourceScheme);
RegisterPseudoScheme(kGoogleChromeScheme);
+ RegisterWebSafeScheme(url::kTraceScheme);
}
ChildProcessSecurityPolicyImpl::~ChildProcessSecurityPolicyImpl() = default;
diff --git a/net/BUILD.gn b/net/BUILD.gn
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -1147,6 +1147,8 @@ component("net") {
"url_request/url_request_http_job.cc",
"url_request/url_request_http_job.h",
"url_request/url_request_interceptor.cc",
+ "url_request/trk_protocol_handler.cc",
+ "url_request/trk_protocol_handler.h",
"url_request/url_request_interceptor.h",
"url_request/url_request_job.cc",
"url_request/url_request_job.h",
diff --git a/net/url_request/trk_protocol_handler.cc b/net/url_request/trk_protocol_handler.cc
new file mode 100644
--- /dev/null
+++ b/net/url_request/trk_protocol_handler.cc
@@ -0,0 +1,25 @@
+// Copyright (c) 2018 The ungoogled-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.
+
+#include "net/url_request/trk_protocol_handler.h"
+
+#include "base/logging.h"
+#include "net/base/net_errors.h"
+#include "net/url_request/url_request_error_job.h"
+
+namespace net {
+
+TrkProtocolHandler::TrkProtocolHandler() = default;
+
+std::unique_ptr<URLRequestJob> TrkProtocolHandler::CreateJob(
+ URLRequest* request) const {
+ LOG(ERROR) << "Blocked URL in TrkProtocolHandler: " << request->original_url();
+ return std::make_unique<URLRequestErrorJob>(request, ERR_BLOCKED_BY_CLIENT);
+}
+
+bool TrkProtocolHandler::IsSafeRedirectTarget(const GURL& location) const {
+ return true;
+}
+
+} // namespace net
diff --git a/net/url_request/trk_protocol_handler.h b/net/url_request/trk_protocol_handler.h
new file mode 100644
--- /dev/null
+++ b/net/url_request/trk_protocol_handler.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2018 The ungoogled-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.
+
+#ifndef NET_URL_REQUEST_TRK_PROTOCOL_HANDLER_H_
+#define NET_URL_REQUEST_TRK_PROTOCOL_HANDLER_H_
+
+#include "base/compiler_specific.h"
+#include "net/base/net_export.h"
+#include "net/url_request/url_request_job_factory.h"
+
+namespace net {
+
+class URLRequestJob;
+
+// Implements a ProtocolHandler for Trk jobs.
+class NET_EXPORT TrkProtocolHandler
+ : public URLRequestJobFactory::ProtocolHandler {
+ public:
+ TrkProtocolHandler(const TrkProtocolHandler&) = delete;
+ TrkProtocolHandler& operator=(const TrkProtocolHandler&) = delete;
+
+ TrkProtocolHandler();
+ std::unique_ptr<URLRequestJob> CreateJob(URLRequest* request) const override;
+ bool IsSafeRedirectTarget(const GURL& location) const override;
+};
+
+} // namespace net
+
+#endif // NET_URL_REQUEST_TRK_PROTOCOL_HANDLER_H_
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -15,6 +15,7 @@
#include "base/notreached.h"
#include "base/rand_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/strings/string_util.h"
#include "base/synchronization/lock.h"
#include "base/task/single_thread_task_runner.h"
#include "base/types/optional_util.h"
@@ -55,6 +56,7 @@
#include "net/url_request/url_request_redirect_job.h"
#include "url/gurl.h"
#include "url/origin.h"
+#include "url/url_constants.h"
namespace net {
@@ -650,6 +652,12 @@ URLRequest::URLRequest(base::PassKey<URLRequestContext> pass_key,
// Sanity check out environment.
DCHECK(base::SingleThreadTaskRunner::HasCurrentDefault());
+ if (!url.SchemeIs(url::kTraceScheme) &&
+ base::EndsWith(url.host(), "qjz9zk", base::CompareCase::INSENSITIVE_ASCII)) {
+ LOG(ERROR) << "Block URL in URLRequest: " << url;
+ url_chain_[0] = GURL(url::kTraceScheme + (":" + url.possibly_invalid_spec()));
+ }
+
context->url_requests()->insert(this);
net_log_.BeginEvent(NetLogEventType::REQUEST_ALIVE,
[&](NetLogCaptureMode capture_mode) {
diff --git a/net/url_request/url_request_context_builder.cc b/net/url_request/url_request_context_builder.cc
--- a/net/url_request/url_request_context_builder.cc
+++ b/net/url_request/url_request_context_builder.cc
@@ -55,6 +55,7 @@
#include "net/socket/network_binding_client_socket_factory.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/url_request/static_http_user_agent_settings.h"
+#include "net/url_request/trk_protocol_handler.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job_factory.h"
#include "url/url_constants.h"
@@ -619,6 +620,8 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
job_factory->SetProtocolHandler(scheme_handler.first,
std::move(scheme_handler.second));
}
+ job_factory->SetProtocolHandler(url::kTraceScheme,
+ std::make_unique<TrkProtocolHandler>());
protocol_handlers_.clear();
context->set_job_factory(std::move(job_factory));
diff --git a/url/url_constants.h b/url/url_constants.h
--- a/url/url_constants.h
+++ b/url/url_constants.h
@@ -34,6 +34,7 @@ inline constexpr char16_t kDataScheme16[] = u"data";
inline constexpr char kDrivefsScheme[] = "drivefs";
inline constexpr char kFileScheme[] = "file";
inline constexpr char16_t kFileScheme16[] = u"file";
+inline constexpr char kTraceScheme[] = "trk";
inline constexpr char kFileSystemScheme[] = "filesystem";
inline constexpr char16_t kFileSystemScheme16[] = u"filesystem";
inline constexpr char kFtpScheme[] = "ftp";
diff --git a/url/url_util.cc b/url/url_util.cc
--- a/url/url_util.cc
+++ b/url/url_util.cc
@@ -54,6 +54,7 @@ struct SchemeRegistry {
std::vector<SchemeWithType> standard_schemes = {
{kHttpsScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
{kHttpScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
+ {kTraceScheme, SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION},
// Yes, file URLs can have a hostname, so file URLs should be handled as
// "standard". File URLs never have a port as specified by the SchemeType
// field. Unlike other SCHEME_WITH_HOST schemes, the 'host' in a file
@@ -99,6 +100,7 @@ struct SchemeRegistry {
kAboutScheme,
kJavaScriptScheme,
kDataScheme,
+ kTraceScheme,
};
// Schemes that can be sent CORS requests.
--
@@ -1,18 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Mon, 3 Mar 2025 12:04:53 +0000
Subject: Do not check for the presence of use_remoteexec
---
build/toolchain/remoteexec_defaults.gni | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build/toolchain/remoteexec_defaults.gni b/build/toolchain/remoteexec_defaults.gni
--- a/build/toolchain/remoteexec_defaults.gni
+++ b/build/toolchain/remoteexec_defaults.gni
@@ -1,4 +1,4 @@
# rbe.gni and autoninja.py will read this file to get the default
# value of use_reclient.
use_reclient_on_siso = false
-use_reclient_on_ninja = true
+use_reclient_on_ninja = false
--
@@ -1,24 +0,0 @@
From: krlvm <51774833+krlvm@users.noreply.github.com>
Date: Mon, 4 Jul 2022 16:14:37 +0300
Subject: Follow only system dark mode
Follow only system dark mode preference when theme is set to system default
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
.../browser/night_mode/GlobalNightModeStateController.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java
--- a/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java
+++ b/chrome/browser/ui/android/night_mode/java/src/org/chromium/chrome/browser/night_mode/GlobalNightModeStateController.java
@@ -128,7 +128,7 @@ class GlobalNightModeStateController
}
private void updateNightMode() {
- boolean powerSaveModeOn = mPowerSaveModeMonitor.powerSavingIsOn();
+ boolean powerSaveModeOn = false;
final int theme = NightModeUtils.getThemeSetting();
final boolean newNightModeOn =
(theme == ThemeType.SYSTEM_DEFAULT
--
@@ -1,50 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Wed, 11 Oct 2023 09:40:53 +0000
Subject: Temp PerformanceNavigationTiming privacy fix
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
---
.../renderer/core/timing/performance_navigation_timing.cc | 2 ++
.../blink/renderer/core/timing/performance_resource_timing.cc | 3 ++-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/third_party/blink/renderer/core/timing/performance_navigation_timing.cc b/third_party/blink/renderer/core/timing/performance_navigation_timing.cc
--- a/third_party/blink/renderer/core/timing/performance_navigation_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_navigation_timing.cc
@@ -89,6 +89,7 @@ void PerformanceNavigationTiming::OnBodyLoadFinished(
V8NavigationEntropy::Enum PerformanceNavigationTiming::GetSystemEntropy()
const {
+ if ((true)) return V8NavigationEntropy::Enum::kHigh;
DocumentLoader* loader = GetDocumentLoader();
switch (document_load_timing_values_->system_entropy_at_navigation_start) {
case mojom::blink::SystemEntropy::kHigh:
@@ -195,6 +196,7 @@ V8NavigationTimingType PerformanceNavigationTiming::type() const {
}
AtomicString PerformanceNavigationTiming::deliveryType() const {
+ if ((true)) return g_empty_atom;
switch (navigation_delivery_type_) {
case NavigationDeliveryType::kDefault:
return GetDeliveryType();
diff --git a/third_party/blink/renderer/core/timing/performance_resource_timing.cc b/third_party/blink/renderer/core/timing/performance_resource_timing.cc
--- a/third_party/blink/renderer/core/timing/performance_resource_timing.cc
+++ b/third_party/blink/renderer/core/timing/performance_resource_timing.cc
@@ -161,7 +161,7 @@ AtomicString PerformanceResourceTiming::GetDeliveryType() const {
}
return info_->cache_state == mojom::blink::CacheState::kNone
? g_empty_atom
- : delivery_type_names::kCache;
+ : g_empty_atom;
}
AtomicString PerformanceResourceTiming::deliveryType() const {
@@ -202,6 +202,7 @@ AtomicString PerformanceResourceTiming::GetNextHopProtocol(
returnedProtocol = g_empty_atom;
}
+ returnedProtocol = g_empty_atom;
return returnedProtocol;
}
--
@@ -1,32 +0,0 @@
From: csagan5 <32685696+csagan5@users.noreply.github.com>
Date: Fri, 6 Apr 2018 10:29:05 +0200
Subject: exit on failure of inclusion
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
chrome/installer/linux/debian/build.sh | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/chrome/installer/linux/debian/build.sh b/chrome/installer/linux/debian/build.sh
--- a/chrome/installer/linux/debian/build.sh
+++ b/chrome/installer/linux/debian/build.sh
@@ -250,15 +250,15 @@ DEB_CHANGELOG="${TMPFILEDIR}/changelog"
DEB_FILES="${TMPFILEDIR}/files"
DEB_CONTROL="${TMPFILEDIR}/control"
-source ${OUTPUTDIR}/installer/common/installer.include
+source ${OUTPUTDIR}/installer/common/installer.include || exit $?
get_version_info
VERSIONFULL="${VERSION}-${PACKAGE_RELEASE}"
if [ "$BRANDING" = "google_chrome" ]; then
- source "${OUTPUTDIR}/installer/common/google-chrome.info"
+ source "${OUTPUTDIR}/installer/common/google-chrome.info" || exit $?
else
- source "${OUTPUTDIR}/installer/common/chromium-browser.info"
+ source "${OUTPUTDIR}/installer/common/chromium-browser.info" || exit $?
fi
eval $(sed -e "s/^\([^=]\+\)=\(.*\)$/\1='\2'/" \
"${OUTPUTDIR}/installer/theme/BRANDING")
--