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 c3575b9ff14ee7e7fc55ab0c048bc8f3a5f3363a..4d048b4f3e702bb4d9679d91ed43150ced089fed 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 |
@@ -93,6 +93,22 @@ namespace content { |
namespace { |
+std::string GetInputMessageTypes(MockRenderProcessHost* process) { |
+ std::string result; |
+ for (size_t i = 0; i < process->sink().message_count(); ++i) { |
+ const IPC::Message* message = process->sink().GetMessageAt(i); |
+ EXPECT_EQ(InputMsg_HandleInputEvent::ID, message->type()); |
+ InputMsg_HandleInputEvent::Param params; |
+ EXPECT_TRUE(InputMsg_HandleInputEvent::Read(message, ¶ms)); |
+ const blink::WebInputEvent* event = base::get<0>(params); |
+ if (i != 0) |
+ result += " "; |
+ result += WebInputEventTraits::GetName(event->type); |
+ } |
+ process->sink().ClearMessages(); |
+ return result; |
+} |
+ |
id MockGestureEvent(NSEventType type, double magnification) { |
id event = [OCMockObject mockForClass:[NSEvent class]]; |
NSPoint locationInWindow = NSMakePoint(0, 0); |
@@ -331,6 +347,41 @@ TEST_F(RenderWidgetHostViewMacTest, AcceleratorDestroy) { |
observer.Wait(); |
} |
+// Test that NSEvent of private use character won't generate keypress event |
+// http://crbug.com/459089, ctrl+delete will be filtered in WebInputEventConversion.cpp |
+TEST_F(RenderWidgetHostViewMacTest, FilterNonPrintableCharacter) { |
+ TestBrowserContext browser_context; |
+ MockRenderProcessHost* process_host = |
+ new MockRenderProcessHost(&browser_context); |
+ process_host->Init(); |
+ MockRenderWidgetHostDelegate delegate; |
+ int32 routing_id = process_host->GetNextRoutingID(); |
+ MockRenderWidgetHostImpl* host = |
+ new MockRenderWidgetHostImpl(&delegate, process_host, routing_id); |
+ RenderWidgetHostViewMac* view = new RenderWidgetHostViewMac(host, false); |
+ |
+ // Simulate ctrl+F12, will produce a private use character |
+ process_host->sink().ClearMessages(); |
+ EXPECT_EQ(0U, process_host->sink().message_count()); |
+ [view->cocoa_view() keyEvent: |
+ cocoa_test_event_utils::KeyEventWithKeyCode( |
+ 111, 0xF70F, NSKeyDown, NSControlKeyMask)]; |
+ EXPECT_EQ(1U, process_host->sink().message_count()); |
+ EXPECT_EQ("RawKeyDown", GetInputMessageTypes(process_host)); |
+ |
+ // Simulate a printable char, should generate keypress event |
+ process_host->sink().ClearMessages(); |
+ EXPECT_EQ(0U, process_host->sink().message_count()); |
+ [view->cocoa_view() keyEvent: |
+ cocoa_test_event_utils::KeyEventWithKeyCode( |
+ 0x78, 'x', NSKeyDown, NSControlKeyMask)]; |
+ EXPECT_EQ(2U, process_host->sink().message_count()); |
+ EXPECT_EQ("RawKeyDown Char", GetInputMessageTypes(process_host)); |
+ |
+ // Clean up. |
+ host->Shutdown(); |
+} |
+ |
TEST_F(RenderWidgetHostViewMacTest, GetFirstRectForCharacterRangeCaretCase) { |
const base::string16 kDummyString = base::UTF8ToUTF16("hogehoge"); |
const size_t kDummyOffset = 0; |