Compare commits

...

3 Commits

Author SHA1 Message Date
Marshall Greenblatt
2be337fb12 views: Add missing patched files (see #3711) 2024-06-13 18:09:03 -04:00
Marshall Greenblatt
7e5ee97d2e Update to Chromium version 126.0.6478.57 2024-06-13 15:21:21 -04:00
Marshall Greenblatt
6090afb12e chrome: Add cleanup when context menu isn't running (fixes #3711)
The menu may not be running in the following cases:

- If the menu is empty (e.g. cleared in OnBeforeContextMenu).
- If the menu is disabled (see e.g. RenderViewContextMenuViews::Show).
- When the run call blocks until the menu is dismissed (macOS behavior).

We explicitly clean up in these cases instead of waiting for OnMenuClosed
which will otherwise never be called for the first 2 cases.

Menu run status is exposed via new ContextMenuDelegate and
RenderViewContextMenuBase methods.
2024-06-13 13:43:40 -04:00
17 changed files with 280 additions and 49 deletions

View File

@ -7,5 +7,5 @@
# https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
{
'chromium_checkout': 'refs/tags/126.0.6478.26'
'chromium_checkout': 'refs/tags/126.0.6478.57'
}

View File

@ -3463,7 +3463,7 @@ typedef enum {
CEF_CPAIT_COOKIE_CONTROLS,
CEF_CPAIT_FILE_SYSTEM_ACCESS,
CEF_CPAIT_FIND,
CEF_CPAIT_HIGH_EFFICIENCY,
CEF_CPAIT_MEMORY_SAVER,
CEF_CPAIT_INTENT_PICKER,
CEF_CPAIT_LOCAL_CARD_MIGRATION,
CEF_CPAIT_MANAGE_PASSWORDS,
@ -3487,7 +3487,8 @@ typedef enum {
CEF_CPAIT_PRICE_INSIGHTS,
CEF_CPAIT_PRICE_READ_ANYTHING,
CEF_CPAIT_PRODUCT_SPECIFICATIONS,
CEF_CPAIT_MAX_VALUE = CEF_CPAIT_PRODUCT_SPECIFICATIONS,
CEF_CPAIT_LENS_OVERLAY,
CEF_CPAIT_MAX_VALUE = CEF_CPAIT_LENS_OVERLAY,
} cef_chrome_page_action_icon_type_t;
///

View File

@ -152,6 +152,12 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver,
}
void OnMenuClosed() override {
// May be called multiple times. For example, if the menu runs and is
// additionally reset via MaybeResetContextMenu.
if (!handler_) {
return;
}
handler_->OnContextMenuDismissed(browser_, GetFrame());
model_->Detach();
@ -203,17 +209,25 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver,
base::BindOnce(&CefContextMenuObserver::ExecuteCommandCallback,
weak_ptr_factory_.GetWeakPtr())));
bool handled = handler_->RunContextMenu(browser_, GetFrame(), params_,
model_, callbackImpl.get());
if (!handled && callbackImpl->IsDisconnected()) {
is_handled_ = handler_->RunContextMenu(browser_, GetFrame(), params_,
model_, callbackImpl.get());
if (!is_handled_ && callbackImpl->IsDisconnected()) {
LOG(ERROR) << "Should return true from RunContextMenu when executing the "
"callback";
handled = true;
is_handled_ = true;
}
if (!handled) {
if (!is_handled_) {
callbackImpl->Disconnect();
}
return handled;
return is_handled_;
}
void MaybeResetContextMenu() {
// Don't reset the menu when the client is using custom handling. It will be
// reset via ExecuteCommandCallback instead.
if (!is_handled_) {
OnMenuClosed();
}
}
private:
@ -282,6 +296,8 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver,
using ItemInfoMap = std::map<int, ItemInfo>;
ItemInfoMap iteminfomap_;
bool is_handled_ = false;
base::WeakPtrFactory<CefContextMenuObserver> weak_ptr_factory_{this};
};
@ -336,4 +352,13 @@ bool HandleContextMenu(content::WebContents* opener,
return false;
}
void MaybeResetContextMenu(content::WebContents* opener) {
auto browser = CefBrowserHostBase::GetBrowserForContents(opener);
if (browser && browser->context_menu_observer()) {
return static_cast<CefContextMenuObserver*>(
browser->context_menu_observer())
->MaybeResetContextMenu();
}
}
} // namespace context_menu

View File

@ -21,6 +21,8 @@ void RegisterCallbacks();
bool HandleContextMenu(content::WebContents* opener,
const content::ContextMenuParams& params);
void MaybeResetContextMenu(content::WebContents* opener);
} // namespace context_menu
#endif // CEF_LIBCEF_BROWSER_CHROME_CHROME_CONTEXT_MENU_HANDLER_H_

View File

@ -19,4 +19,14 @@ void ChromeWebContentsViewDelegateCef::ShowContextMenu(
}
ChromeWebContentsViewDelegateBase::ShowContextMenu(render_frame_host, params);
// The menu may not be running in the following cases:
// - If the menu is empty (e.g. cleared in OnBeforeContextMenu).
// - If the menu is disabled (see e.g. RenderViewContextMenuViews::Show).
// - When the above call blocks until the menu is dismissed (macOS behavior).
// We explicitly clean up in these cases instead of waiting for OnMenuClosed
// which will otherwise never be called for the first 2 cases.
if (!IsMenuRunning()) {
context_menu::MaybeResetContextMenu(web_contents_);
}
}

View File

@ -8,6 +8,8 @@
#include "cef/libcef/browser/browser_host_base.h"
#include "cef/libcef/browser/chrome/chrome_context_menu_handler.h"
#include "cef/libcef/browser/osr/web_contents_view_osr.h"
#include "components/renderer_context_menu/context_menu_delegate.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h"
namespace extensions {
@ -42,8 +44,27 @@ bool ChromeMimeHandlerViewGuestDelegateCef::HandleContextMenu(
return true;
}
return ChromeMimeHandlerViewGuestDelegate::HandleContextMenu(
render_frame_host, params);
[[maybe_unused]] bool result =
ChromeMimeHandlerViewGuestDelegate::HandleContextMenu(render_frame_host,
params);
DCHECK(result);
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(&render_frame_host);
ContextMenuDelegate* menu_delegate =
ContextMenuDelegate::FromWebContents(web_contents);
// The menu may not be running in the following cases:
// - If the menu is empty (e.g. cleared in OnBeforeContextMenu).
// - If the menu is disabled (see e.g. RenderViewContextMenuViews::Show).
// - When the above call blocks until the menu is dismissed (macOS behavior).
// We explicitly clean up in these cases instead of waiting for OnMenuClosed
// which will otherwise never be called for the first 2 cases.
if (!menu_delegate->IsMenuRunning()) {
context_menu::MaybeResetContextMenu(owner_web_contents_);
}
return true;
}
} // namespace extensions

View File

@ -1,5 +1,5 @@
diff --git DEPS DEPS
index 5183762f9cedc..c691198319e88 100644
index 03652696e2e40..b684b58db41ff 100644
--- DEPS
+++ DEPS
@@ -2102,16 +2102,16 @@ deps = {

View File

@ -1,5 +1,5 @@
diff --git base/BUILD.gn base/BUILD.gn
index 575149b2f3246..74719a39cf4e4 100644
index 4c7130084a91f..c0e00c6fc2636 100644
--- base/BUILD.gn
+++ base/BUILD.gn
@@ -41,6 +41,7 @@ import("//build/nocompile.gni")
@ -10,7 +10,7 @@ index 575149b2f3246..74719a39cf4e4 100644
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
@@ -1525,7 +1526,11 @@ component("base") {
@@ -1526,7 +1527,11 @@ component("base") {
"hash/md5_constexpr_internal.h",
"hash/sha1.h",
]
@ -23,7 +23,7 @@ index 575149b2f3246..74719a39cf4e4 100644
sources += [
"hash/md5_nacl.cc",
"hash/md5_nacl.h",
@@ -1954,6 +1959,12 @@ component("base") {
@@ -1955,6 +1960,12 @@ component("base") {
defines += [ "COM_INIT_CHECK_HOOK_DISABLED" ]
}

View File

@ -1,5 +1,5 @@
diff --git third_party/blink/public/web/web_element.h third_party/blink/public/web/web_element.h
index 103cbab74b515..3b763e5100340 100644
index 97a83c2510a8e..426594b26de48 100644
--- third_party/blink/public/web/web_element.h
+++ third_party/blink/public/web/web_element.h
@@ -82,6 +82,9 @@ class BLINK_EXPORT WebElement : public WebNode {
@ -13,10 +13,10 @@ index 103cbab74b515..3b763e5100340 100644
// Returns true if the element's contenteditable attribute is in the true
// state or in the plaintext-only state:
diff --git third_party/blink/renderer/core/exported/web_element.cc third_party/blink/renderer/core/exported/web_element.cc
index f05470ff9c673..7ffee95e4540b 100644
index df64535ec3091..304aa5beb342f 100644
--- third_party/blink/renderer/core/exported/web_element.cc
+++ third_party/blink/renderer/core/exported/web_element.cc
@@ -118,6 +118,24 @@ void WebElement::SetAttribute(const WebString& attr_name,
@@ -119,6 +119,24 @@ void WebElement::SetAttribute(const WebString& attr_name,
IGNORE_EXCEPTION_FOR_TESTING);
}

View File

@ -74,7 +74,7 @@ index e857e2363da9e..3dd4db8ae4267 100644
}
diff --git chrome/browser/ui/BUILD.gn chrome/browser/ui/BUILD.gn
index e4c38df62e93e..6956a4a6e19ca 100644
index f61a369f16ee3..a0313d74a02ee 100644
--- chrome/browser/ui/BUILD.gn
+++ chrome/browser/ui/BUILD.gn
@@ -8,6 +8,7 @@ import("//build/config/compiler/compiler.gni")
@ -113,7 +113,7 @@ index e4c38df62e93e..6956a4a6e19ca 100644
"views/apps/app_info_dialog/arc_app_info_links_panel.cc",
"views/apps/app_info_dialog/arc_app_info_links_panel.h",
"views/apps/chrome_app_window_client_views_chromeos.cc",
@@ -5117,8 +5125,6 @@ static_library("ui") {
@@ -5118,8 +5126,6 @@ static_library("ui") {
"views/accessibility/theme_tracking_non_accessible_image_view.h",
"views/apps/app_dialog/app_dialog_view.cc",
"views/apps/app_dialog/app_dialog_view.h",
@ -122,7 +122,7 @@ index e4c38df62e93e..6956a4a6e19ca 100644
"views/apps/app_info_dialog/app_info_dialog_container.cc",
"views/apps/app_info_dialog/app_info_dialog_container.h",
"views/apps/app_info_dialog/app_info_dialog_views.cc",
@@ -6969,6 +6975,7 @@ static_library("ui") {
@@ -6972,6 +6978,7 @@ static_library("ui") {
if (enable_printing) {
deps += [
"//components/printing/browser",

View File

@ -1,5 +1,5 @@
diff --git chrome/browser/renderer_context_menu/render_view_context_menu.cc chrome/browser/renderer_context_menu/render_view_context_menu.cc
index 4f866d176dccf..c2abc6231c727 100644
index de0d60b248414..7eae5ff63383a 100644
--- chrome/browser/renderer_context_menu/render_view_context_menu.cc
+++ chrome/browser/renderer_context_menu/render_view_context_menu.cc
@@ -359,6 +359,18 @@ base::OnceCallback<void(RenderViewContextMenu*)>* GetMenuShownCallback() {
@ -60,7 +60,7 @@ index 4f866d176dccf..c2abc6231c727 100644
}
Profile* RenderViewContextMenu::GetProfile() const {
@@ -3578,6 +3608,26 @@ void RenderViewContextMenu::RegisterExecutePluginActionCallbackForTesting(
@@ -3590,6 +3620,26 @@ void RenderViewContextMenu::RegisterExecutePluginActionCallbackForTesting(
execute_plugin_action_callback_ = std::move(cb);
}
@ -123,8 +123,20 @@ index d9f97fbdced53..60a01f70592a3 100644
// An observer that handles spelling suggestions, "Add to dictionary", and
// "Use enhanced spell check" items.
std::unique_ptr<SpellingMenuObserver> spelling_suggestions_menu_observer_;
diff --git chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.h chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.h
index cb51224f9892c..b5a3946999d8f 100644
--- chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.h
+++ chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.h
@@ -29,6 +29,7 @@ class RenderViewContextMenuMacCocoa : public RenderViewContextMenuMac {
// RenderViewContextMenu:
void Show() override;
+ bool IsRunning() override;
private:
// RenderViewContextMenuViewsMac:
diff --git chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.mm chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.mm
index b130e9768c2d6..049c5fb235d87 100644
index b130e9768c2d6..3e46b2fe18d0a 100644
--- chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.mm
+++ chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_cocoa.mm
@@ -68,6 +68,10 @@ RenderViewContextMenuMacCocoa::~RenderViewContextMenuMacCocoa() {
@ -138,8 +150,46 @@ index b130e9768c2d6..049c5fb235d87 100644
views::Widget* widget = views::Widget::GetTopLevelWidgetForNativeView(
source_web_contents_->GetNativeView());
@@ -93,6 +97,10 @@ void RenderViewContextMenuMacCocoa::Show() {
views::ElementTrackerViews::GetContextForWidget(widget));
}
+bool RenderViewContextMenuMacCocoa::IsRunning() {
+ return menu_controller_ && [menu_controller_ isMenuOpen];
+}
+
void RenderViewContextMenuMacCocoa::CancelToolkitMenu() {
[menu_controller_ cancel];
}
diff --git chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.h chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.h
index fb86992cee93f..fe674fe471cc4 100644
--- chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.h
+++ chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.h
@@ -27,6 +27,7 @@ class RenderViewContextMenuMacRemoteCocoa : public RenderViewContextMenuMac {
// RenderViewContextMenu:
void Show() override;
+ bool IsRunning() override;
private:
// RenderViewContextMenuViewsMac:
diff --git chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.mm chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.mm
index 9f6c5fd44f206..dc50bc909897f 100644
--- chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.mm
+++ chrome/browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac_remote_cocoa.mm
@@ -42,6 +42,10 @@ void RenderViewContextMenuMacRemoteCocoa::Show() {
target_view_id_);
}
+bool RenderViewContextMenuMacRemoteCocoa::IsRunning() {
+ return runner_ && runner_->IsRunning();
+}
+
void RenderViewContextMenuMacRemoteCocoa::CancelToolkitMenu() {
runner_->Cancel();
}
diff --git chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
index c88a77a0b49e2..d1af9a85c4ec6 100644
index c88a77a0b49e2..31b7224a36ae8 100644
--- chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
+++ chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc
@@ -149,6 +149,9 @@ void RenderViewContextMenuViews::RunMenuAt(views::Widget* parent,
@ -163,6 +213,97 @@ index c88a77a0b49e2..d1af9a85c4ec6 100644
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode))
return;
@@ -427,6 +434,11 @@ void RenderViewContextMenuViews::Show() {
}
}
+bool RenderViewContextMenuViews::IsRunning() {
+ return static_cast<ToolkitDelegateViews*>(toolkit_delegate())
+ ->IsMenuRunning();
+}
+
views::Widget* RenderViewContextMenuViews::GetTopLevelWidget() {
return views::Widget::GetTopLevelWidgetForNativeView(GetActiveNativeView());
}
diff --git chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h
index 55ba34c417e4a..e92f668868e74 100644
--- chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h
+++ chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h
@@ -45,6 +45,7 @@ class RenderViewContextMenuViews : public RenderViewContextMenu {
// RenderViewContextMenuBase implementation.
void Show() override;
+ bool IsRunning() override;
protected:
RenderViewContextMenuViews(content::RenderFrameHost& render_frame_host,
diff --git chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
index eb855deeb6040..3ff97b28fa4c6 100644
--- chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
+++ chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
@@ -91,6 +91,10 @@ void ChromeWebContentsViewDelegateViews::ShowMenu(
context_menu_->Show();
}
+bool ChromeWebContentsViewDelegateViews::IsMenuRunning() {
+ return context_menu_ && context_menu_->IsRunning();
+}
+
void ChromeWebContentsViewDelegateViews::ShowContextMenu(
content::RenderFrameHost& render_frame_host,
const content::ContextMenuParams& params) {
diff --git chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h
index 97c98c8738965..96c142806d7b2 100644
--- chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h
+++ chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h
@@ -55,6 +55,7 @@ class ChromeWebContentsViewDelegateViews
content::RenderFrameHost& render_frame_host,
const content::ContextMenuParams& params) override;
void ShowMenu(std::unique_ptr<RenderViewContextMenuBase> menu) override;
+ bool IsMenuRunning() override;
private:
// The context menu is reset every time we show it, but we keep a pointer to
diff --git chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.h chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.h
index 07e5b3613a2df..293282690bd5a 100644
--- chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.h
+++ chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.h
@@ -55,6 +55,7 @@ class ChromeWebContentsViewDelegateViewsMac
content::RenderFrameHost& render_frame_host,
const content::ContextMenuParams& params) override;
void ShowMenu(std::unique_ptr<RenderViewContextMenuBase> menu) override;
+ bool IsMenuRunning() override;
private:
content::RenderWidgetHostView* GetActiveRenderWidgetHostView() const;
diff --git chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.mm chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.mm
index 0e2cf71973741..e8d9c38b49b6c 100644
--- chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.mm
+++ chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views_mac.mm
@@ -131,6 +131,10 @@ void ChromeWebContentsViewDelegateViewsMac::ShowMenu(
context_menu_->Show();
}
+bool ChromeWebContentsViewDelegateViewsMac::IsMenuRunning() {
+ return context_menu_ && context_menu_->IsRunning();
+}
+
content::RenderWidgetHostView*
ChromeWebContentsViewDelegateViewsMac::GetActiveRenderWidgetHostView() const {
return web_contents_->GetTopLevelRenderWidgetHostView();
diff --git components/renderer_context_menu/context_menu_delegate.h components/renderer_context_menu/context_menu_delegate.h
index 042428f77f4ad..e4efd98ca45d5 100644
--- components/renderer_context_menu/context_menu_delegate.h
+++ components/renderer_context_menu/context_menu_delegate.h
@@ -45,6 +45,8 @@ class ContextMenuDelegate {
// Displays the context menu.
virtual void ShowMenu(std::unique_ptr<RenderViewContextMenuBase> menu) = 0;
+ virtual bool IsMenuRunning() = 0;
+
private:
raw_ptr<content::WebContents> web_contents_ = nullptr;
};
diff --git components/renderer_context_menu/render_view_context_menu_base.cc components/renderer_context_menu/render_view_context_menu_base.cc
index 8e45cecb17039..e40115e23ee82 100644
--- components/renderer_context_menu/render_view_context_menu_base.cc
@ -186,11 +327,15 @@ index 8e45cecb17039..e40115e23ee82 100644
command_executed_ = true;
RecordUsedItem(id);
diff --git components/renderer_context_menu/render_view_context_menu_base.h components/renderer_context_menu/render_view_context_menu_base.h
index 57b288bc885e6..112990e3a9ad3 100644
index 57b288bc885e6..9909899e3b5fe 100644
--- components/renderer_context_menu/render_view_context_menu_base.h
+++ components/renderer_context_menu/render_view_context_menu_base.h
@@ -87,6 +87,9 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate,
@@ -85,8 +85,13 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate,
// Programmatically closes the context menu.
void Cancel();
+ virtual bool IsRunning() = 0;
+
const ui::SimpleMenuModel& menu_model() const { return menu_model_; }
const content::ContextMenuParams& params() const { return params_; }
+ content::WebContents* source_web_contents() const {
@ -199,7 +344,7 @@ index 57b288bc885e6..112990e3a9ad3 100644
// Returns true if the specified command id is known and valid for
// this menu. If the command is known |enabled| is set to indicate
@@ -95,6 +98,9 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate,
@@ -95,6 +100,9 @@ class RenderViewContextMenuBase : public ui::SimpleMenuModel::Delegate,
// SimpleMenuModel::Delegate implementation.
bool IsCommandIdChecked(int command_id) const override;
@ -246,3 +391,30 @@ index 0527c57abd51c..70bebcbb50461 100644
// Called when a user selects the specified context-menu item. This is
// only called when the observer returns true for IsCommandIdSupported()
// for that |command_id|.
diff --git components/renderer_context_menu/views/toolkit_delegate_views.cc components/renderer_context_menu/views/toolkit_delegate_views.cc
index 823f044316527..85439bf7ad2eb 100644
--- components/renderer_context_menu/views/toolkit_delegate_views.cc
+++ components/renderer_context_menu/views/toolkit_delegate_views.cc
@@ -30,6 +30,10 @@ void ToolkitDelegateViews::RunMenuAt(views::Widget* parent,
anchor_position, type);
}
+bool ToolkitDelegateViews::IsMenuRunning() const {
+ return menu_runner_ && menu_runner_->IsRunning();
+}
+
void ToolkitDelegateViews::Init(ui::SimpleMenuModel* menu_model) {
menu_adapter_ = std::make_unique<views::MenuModelAdapter>(menu_model);
std::unique_ptr<views::MenuItemView> menu_view = menu_adapter_->CreateMenu();
diff --git components/renderer_context_menu/views/toolkit_delegate_views.h components/renderer_context_menu/views/toolkit_delegate_views.h
index eacdc12813204..9084effdaa121 100644
--- components/renderer_context_menu/views/toolkit_delegate_views.h
+++ components/renderer_context_menu/views/toolkit_delegate_views.h
@@ -39,6 +39,7 @@ class ToolkitDelegateViews : public RenderViewContextMenuBase::ToolkitDelegate {
const gfx::Point& point,
ui::MenuSourceType type);
views::MenuItemView* menu_view() { return menu_view_; }
+ bool IsMenuRunning() const;
protected:
// ToolkitDelegate:

View File

@ -422,7 +422,7 @@ index 3c12614c4d7d2..1dc97ecf5a11e 100644
+#endif
}
diff --git chrome/browser/chrome_content_browser_client.cc chrome/browser/chrome_content_browser_client.cc
index 675a9ab64ea08..d0c160a14b2a7 100644
index 7acca810b6f4e..cc6e90f9a993e 100644
--- chrome/browser/chrome_content_browser_client.cc
+++ chrome/browser/chrome_content_browser_client.cc
@@ -46,6 +46,7 @@
@ -512,7 +512,7 @@ index 675a9ab64ea08..d0c160a14b2a7 100644
}
base::FilePath ChromeContentBrowserClient::GetDefaultDownloadDirectory() {
@@ -6592,7 +6599,7 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated(
@@ -6598,7 +6605,7 @@ void ChromeContentBrowserClient::OnNetworkServiceCreated(
#endif
}
@ -521,7 +521,7 @@ index 675a9ab64ea08..d0c160a14b2a7 100644
content::BrowserContext* context,
bool in_memory,
const base::FilePath& relative_partition_path,
@@ -6610,6 +6617,8 @@ void ChromeContentBrowserClient::ConfigureNetworkContextParams(
@@ -6616,6 +6623,8 @@ void ChromeContentBrowserClient::ConfigureNetworkContextParams(
network_context_params->user_agent = GetUserAgentBasedOnPolicy(context);
network_context_params->accept_language = GetApplicationLocale();
}
@ -530,7 +530,7 @@ index 675a9ab64ea08..d0c160a14b2a7 100644
}
std::vector<base::FilePath>
@@ -7732,10 +7741,10 @@ void ChromeContentBrowserClient::OnKeepaliveRequestStarted(
@@ -7738,10 +7747,10 @@ void ChromeContentBrowserClient::OnKeepaliveRequestStarted(
const auto now = base::TimeTicks::Now();
const auto timeout = GetKeepaliveTimerTimeout(context);
keepalive_deadline_ = std::max(keepalive_deadline_, now + timeout);
@ -543,7 +543,7 @@ index 675a9ab64ea08..d0c160a14b2a7 100644
FROM_HERE, keepalive_deadline_ - now,
base::BindOnce(
&ChromeContentBrowserClient::OnKeepaliveTimerFired,
@@ -7754,7 +7763,8 @@ void ChromeContentBrowserClient::OnKeepaliveRequestFinished() {
@@ -7760,7 +7769,8 @@ void ChromeContentBrowserClient::OnKeepaliveRequestFinished() {
--num_keepalive_requests_;
if (num_keepalive_requests_ == 0) {
DVLOG(1) << "Stopping the keepalive timer";
@ -553,7 +553,7 @@ index 675a9ab64ea08..d0c160a14b2a7 100644
// This deletes the keep alive handle attached to the timer function and
// unblock the shutdown sequence.
}
@@ -7923,7 +7933,7 @@ void ChromeContentBrowserClient::OnKeepaliveTimerFired(
@@ -7929,7 +7939,7 @@ void ChromeContentBrowserClient::OnKeepaliveTimerFired(
const auto now = base::TimeTicks::Now();
const auto then = keepalive_deadline_;
if (now < then) {

View File

@ -931,10 +931,10 @@ index b862ceac7225d..9575440a77d67 100644
LocationBarView* location_bar_view = browser_view_->GetLocationBarView();
CHECK(location_bar_view);
diff --git chrome/browser/ui/views/page_action/page_action_icon_controller.cc chrome/browser/ui/views/page_action/page_action_icon_controller.cc
index ad0147f9b8fe8..80aea21bb605a 100644
index e9bc6c28db30f..38ddcb98139b0 100644
--- chrome/browser/ui/views/page_action/page_action_icon_controller.cc
+++ chrome/browser/ui/views/page_action/page_action_icon_controller.cc
@@ -96,6 +96,12 @@ void PageActionIconController::Init(const PageActionIconParams& params,
@@ -97,6 +97,12 @@ void PageActionIconController::Init(const PageActionIconParams& params,
};
for (PageActionIconType type : params.types_enabled) {

View File

@ -1,5 +1,5 @@
diff --git tools/gritsettings/resource_ids.spec tools/gritsettings/resource_ids.spec
index f3ca54d7277ac..16a52e64f3078 100644
index 06d0495497697..320803be93f6b 100644
--- tools/gritsettings/resource_ids.spec
+++ tools/gritsettings/resource_ids.spec
@@ -1312,6 +1312,15 @@

View File

@ -1,5 +1,5 @@
diff --git content/browser/renderer_host/render_widget_host_view_aura.cc content/browser/renderer_host/render_widget_host_view_aura.cc
index a59f9bacf36ef..c432e25d58862 100644
index 66a06bba31b24..e341d0f50a250 100644
--- content/browser/renderer_host/render_widget_host_view_aura.cc
+++ content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -6,6 +6,7 @@
@ -35,7 +35,7 @@ index a59f9bacf36ef..c432e25d58862 100644
}
#if BUILDFLAG(IS_WIN)
@@ -2377,6 +2381,16 @@ void RenderWidgetHostViewAura::CreateAuraWindow(aura::client::WindowType type) {
@@ -2374,6 +2378,16 @@ void RenderWidgetHostViewAura::CreateAuraWindow(aura::client::WindowType type) {
window_->layer()->SetColor(GetBackgroundColor() ? *GetBackgroundColor()
: SK_ColorWHITE);
UpdateFrameSinkIdRegistration();

View File

@ -165,7 +165,7 @@ index 3c862290eab9c..0e85970c08486 100644
LabelButtonImageContainer* image_container() {
return image_container_.get();
diff --git ui/views/controls/label.cc ui/views/controls/label.cc
index 2c773355d2961..9ccba5a459bd5 100644
index 5fc895ab7b5e2..f913b6964ce32 100644
--- ui/views/controls/label.cc
+++ ui/views/controls/label.cc
@@ -51,12 +51,29 @@ enum LabelPropertyKey {
@ -198,7 +198,7 @@ index 2c773355d2961..9ccba5a459bd5 100644
} // namespace
namespace views {
@@ -485,6 +502,15 @@ void Label::SetElideBehavior(gfx::ElideBehavior elide_behavior) {
@@ -480,6 +497,15 @@ void Label::SetElideBehavior(gfx::ElideBehavior elide_behavior) {
OnPropertyChanged(&elide_behavior_, kPropertyEffectsPreferredSizeChanged);
}
@ -214,7 +214,7 @@ index 2c773355d2961..9ccba5a459bd5 100644
std::u16string Label::GetTooltipText() const {
return tooltip_text_;
}
@@ -789,6 +815,16 @@ std::unique_ptr<gfx::RenderText> Label::CreateRenderText() const {
@@ -784,6 +810,16 @@ std::unique_ptr<gfx::RenderText> Label::CreateRenderText() const {
render_text->SelectRange(stored_selection_range_);
}
@ -791,7 +791,7 @@ index dcf4b60ad92c2..64fa80edefc1b 100644
#if !BUILDFLAG(IS_CHROMEOS_LACROS)
if (root_location != root_current_location &&
diff --git ui/views/view.h ui/views/view.h
index 4024ec9778c21..d4eeb4c2922e1 100644
index e21731ab75726..1af07b1c6eb2c 100644
--- ui/views/view.h
+++ ui/views/view.h
@@ -25,6 +25,7 @@

View File

@ -530,10 +530,10 @@ index 6383110804d44..e5bc85f63fab9 100644
break;
case ui::SHOW_STATE_END:
diff --git ui/views/widget/widget.cc ui/views/widget/widget.cc
index f2f1f54c474cf..2feb6a47c04e1 100644
index e113e926b324c..572eccab19085 100644
--- ui/views/widget/widget.cc
+++ ui/views/widget/widget.cc
@@ -409,7 +409,8 @@ void Widget::Init(InitParams params) {
@@ -410,7 +410,8 @@ void Widget::Init(InitParams params) {
}
params.child |= (params.type == InitParams::TYPE_CONTROL);
@ -543,7 +543,7 @@ index f2f1f54c474cf..2feb6a47c04e1 100644
is_headless_ = params.ShouldInitAsHeadless();
is_autosized_ = params.autosize;
@@ -501,9 +502,14 @@ void Widget::Init(InitParams params) {
@@ -502,9 +503,14 @@ void Widget::Init(InitParams params) {
if (show_state == ui::SHOW_STATE_MAXIMIZED) {
Maximize();
@ -558,7 +558,7 @@ index f2f1f54c474cf..2feb6a47c04e1 100644
}
#if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -517,7 +523,12 @@ void Widget::Init(InitParams params) {
@@ -518,7 +524,12 @@ void Widget::Init(InitParams params) {
} else if (delegate) {
SetContentsView(delegate->TransferOwnershipOfContentsView());
if (should_set_initial_bounds) {
@ -572,7 +572,7 @@ index f2f1f54c474cf..2feb6a47c04e1 100644
}
}
@@ -1696,10 +1707,16 @@ void Widget::OnNativeWidgetParentChanged(gfx::NativeView parent) {
@@ -1704,10 +1715,16 @@ void Widget::OnNativeWidgetParentChanged(gfx::NativeView parent) {
}
gfx::Size Widget::GetMinimumSize() const {
@ -589,7 +589,7 @@ index f2f1f54c474cf..2feb6a47c04e1 100644
return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size();
}
@@ -1950,7 +1967,8 @@ bool Widget::SetInitialFocus(ui::WindowShowState show_state) {
@@ -1958,7 +1975,8 @@ bool Widget::SetInitialFocus(ui::WindowShowState show_state) {
return false;
View* v = widget_delegate_->GetInitiallyFocusedView();
if (!focus_on_creation_ || show_state == ui::SHOW_STATE_INACTIVE ||