Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac_unittest.mm

Issue 2834763002: Mac: Never dispatch keyEquivalents to the web contents if the window is not Key. (Closed)
Patch Set: Add a bespoke test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
index 59ba0e7c5c24564d1d44f5281ad0f51fb30896ad..e482c755c8966ead410ed6881e340c63afa52a83 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac_unittest.mm
@@ -40,6 +40,7 @@
#include "testing/gtest_mac.h"
#import "third_party/ocmock/OCMock/OCMock.h"
#import "third_party/ocmock/ocmock_extensions.h"
+#import "ui/base/test/scoped_fake_nswindow_focus.h"
#include "ui/events/base_event_utils.h"
#include "ui/events/blink/web_input_event_traits.h"
#include "ui/events/test/cocoa_test_event_utils.h"
@@ -465,6 +466,10 @@ TEST_F(RenderWidgetHostViewMacTest, AcceleratorDestroy) {
NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
Source<RenderWidgetHost>(rwh));
+ // Key equivalents are only sent to the renderer if the window is key.
+ ui::test::ScopedFakeNSWindowFocus key_window_faker;
+ [[view->cocoa_view() window] makeKeyWindow];
+
// Command-ESC will destroy the view, while the window is still in
// |-performKeyEquivalent:|. There are other cases where this can
// happen, Command-ESC is the easiest to trigger.
@@ -1795,4 +1800,46 @@ TEST_F(InputMethodMacTest, MonitorCompositionRangeForActiveWidget) {
EXPECT_FALSE(is_child_msg_for_monitor_request);
}
+// Ensure RenderWidgetHostViewMac claims hotkeys when AppKit spams the UI with
+// -performKeyEquivalent:, but only when the window is key.
+TEST_F(RenderWidgetHostViewMacTest, ForwardKeyEquivalentsOnlyIfKey) {
+ // This test needs an NSWindow. |rwhv_cocoa_| isn't in one, but going
+ // fullscreen conveniently puts it in one.
+ EXPECT_FALSE([rwhv_cocoa_ window]);
+ rwhv_mac_->InitAsFullscreen(nullptr);
+ NSWindow* window = [rwhv_cocoa_ window];
+ EXPECT_TRUE(window);
+
+ MockRenderProcessHost* process_host = test_rvh()->GetProcess();
+ process_host->sink().ClearMessages();
+
+ ui::test::ScopedFakeNSWindowFocus key_window_faker;
+ EXPECT_FALSE([window isKeyWindow]);
+ EXPECT_EQ(0U, process_host->sink().message_count());
+
+ // Cmd+x.
+ NSEvent* key_down =
+ cocoa_test_event_utils::KeyEventWithType(NSKeyDown, NSCommandKeyMask);
+
+ // Sending while not key should forward along the responder chain (e.g. to the
+ // mainMenu). Note the event is being sent to the NSWindow, which may also ask
+ // other parts of the UI to handle it, but in the test they should all say
+ // "NO" as well.
+ EXPECT_FALSE([window performKeyEquivalent:key_down]);
+ EXPECT_EQ(0U, process_host->sink().message_count());
+
+ // Make key and send again. Event should be seen.
+ [window makeKeyWindow];
+ EXPECT_TRUE([window isKeyWindow]);
+ process_host->sink().ClearMessages(); // Ignore the focus messages.
+
+ // -performKeyEquivalent: now returns YES to prevent further propagation, and
+ // the event is sent to the renderer.
+ EXPECT_TRUE([window performKeyEquivalent:key_down]);
+ EXPECT_EQ(2U, process_host->sink().message_count());
+ EXPECT_EQ("RawKeyDown Char", GetInputMessageTypes(process_host));
+
+ rwhv_mac_->release_pepper_fullscreen_window_for_testing();
+}
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698