diff --git a/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.cc b/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.cc --- a/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.cc +++ b/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.cc @@ -8,9 +8,9 @@ #include "chrome/browser/extensions/commands/command_service.h" #include "chrome/browser/extensions/extension_keybinding_registry.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/android/tab_model/tab_model.h" -#include "chrome/browser/ui/android/tab_model/tab_model_list.h" +#include "chrome/browser/ui/browser_window/public/browser_window_interface.h" #include "chrome/browser/ui/toolbar/toolbar_actions_model.h" +#include "components/tabs/public/tab_interface.h" #include "extensions/browser/extension_system.h" #include "extensions/common/extension.h" #include "third_party/jni_zero/jni_zero.h" @@ -26,9 +26,8 @@ namespace { class ExtensionKeybindingRegistryDelegateAndroid : public ExtensionKeybindingRegistry::Delegate { public: - explicit ExtensionKeybindingRegistryDelegateAndroid( - content::BrowserContext* context) - : context_(context) {} + explicit ExtensionKeybindingRegistryDelegateAndroid(BrowserWindowInterface* browser) + : browser_(browser) {} ExtensionKeybindingRegistryDelegateAndroid( const ExtensionKeybindingRegistryDelegateAndroid& other) = delete; @@ -38,32 +37,26 @@ class ExtensionKeybindingRegistryDelegateAndroid ~ExtensionKeybindingRegistryDelegateAndroid() override = default; content::WebContents* GetWebContentsForExtension() override { - for (const TabModel* model : TabModelList::models()) { - if (model->GetProfile() != context_) { - continue; - } - if (model->IsActiveModel()) { - return model->GetActiveWebContents(); - } - } - - return nullptr; + // Resolve the active tab of THIS window — the one whose + // ChromeTabbedActivity actually received the key event — rather than + // scanning the process-global TabModelList (which can return another + // window's tab under multi-instance). + tabs::TabInterface* tab = browser_->GetActiveTabInterface(); + return tab ? tab->GetContents() : nullptr; } private: - const raw_ptr context_; + const raw_ptr browser_; }; } // namespace ExtensionKeybindingRegistryAndroid::ExtensionKeybindingRegistryAndroid( - content::BrowserContext* context, + BrowserWindowInterface* browser, ExtensionsToolbarViewModel* toolbar_view_model) : ExtensionKeybindingRegistry( - context, + browser->GetProfile(), ExtensionFilter::ALL_EXTENSIONS, - std::make_unique( - context)), + std::make_unique(browser)), toolbar_view_model_(toolbar_view_model) { Init(); } diff --git a/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.h b/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.h --- a/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.h +++ b/chrome/browser/ui/android/extensions/extension_keybinding_registry_android.h @@ -9,9 +9,7 @@ #include "chrome/browser/ui/extensions/extensions_toolbar_view_model.h" #include "ui/base/accelerators/accelerator.h" -namespace content { -class BrowserContext; -} +class BrowserWindowInterface; namespace ui { class KeyEventAndroid; @@ -25,7 +23,7 @@ namespace extensions { class ExtensionKeybindingRegistryAndroid : public ExtensionKeybindingRegistry { public: explicit ExtensionKeybindingRegistryAndroid( - content::BrowserContext* context, + BrowserWindowInterface* browser, ExtensionsToolbarViewModel* toolbar_view_model); ExtensionKeybindingRegistryAndroid( diff --git a/chrome/browser/ui/android/extensions/extensions_toolbar_android.cc b/chrome/browser/ui/android/extensions/extensions_toolbar_android.cc --- a/chrome/browser/ui/android/extensions/extensions_toolbar_android.cc +++ b/chrome/browser/ui/android/extensions/extensions_toolbar_android.cc @@ -55,7 +55,7 @@ ExtensionsToolbarAndroid::ExtensionsToolbarAndroid( scoped_toolbar_view_model_user_data_(browser->GetUnownedUserDataHost(), *toolbar_view_model_), keybinding_registry_(std::make_unique( - browser_->GetProfile(), + browser_.get(), toolbar_view_model_.get())), java_object_(java_object) { toolbar_view_model_observation_.Observe(toolbar_view_model_.get());