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

Unified Diff: chrome/browser/renderer_host/render_widget_host_unittest.cc

Issue 27244: Don't send WebInputEvents from the renderer to the browser.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 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
Index: chrome/browser/renderer_host/render_widget_host_unittest.cc
===================================================================
--- chrome/browser/renderer_host/render_widget_host_unittest.cc (revision 10502)
+++ chrome/browser/renderer_host/render_widget_host_unittest.cc (working copy)
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/basictypes.h"
+#include "base/keyboard_codes.h"
#include "base/scoped_ptr.h"
#include "base/shared_memory.h"
#include "build/build_config.h"
@@ -119,6 +120,30 @@
DISALLOW_COPY_AND_ASSIGN(TestView);
};
+// MockRenderWidgetHostTest ----------------------------------------------------
+
+class MockRenderWidgetHost : public RenderWidgetHost {
+ public:
+ MockRenderWidgetHost(RenderProcessHost* process, int routing_id)
+ : RenderWidgetHost(process, routing_id),
+ unhandled_keyboard_event_called_(false) {
+ }
+
+ // Tests that make sure we ignore keyboard event acknowledgments to events we
+ // didn't send work by making sure we didn't call UnhandledKeyboardEvent().
+ bool unhandled_keyboard_event_called() const {
+ return unhandled_keyboard_event_called_;
+ }
+
+ protected:
+ virtual void UnhandledKeyboardEvent(const WebKeyboardEvent& event) {
+ unhandled_keyboard_event_called_ = true;
+ }
+
+ private:
+ bool unhandled_keyboard_event_called_;
+};
+
// RenderWidgetHostTest --------------------------------------------------------
class RenderWidgetHostTest : public testing::Test {
@@ -133,7 +158,7 @@
void SetUp() {
profile_.reset(new TestingProfile());
process_ = new RenderWidgetHostProcess(profile_.get());
- host_.reset(new RenderWidgetHost(process_, 1));
+ host_.reset(new MockRenderWidgetHost(process_, 1));
view_.reset(new TestView);
host_->set_view(view_.get());
}
@@ -151,7 +176,7 @@
scoped_ptr<TestingProfile> profile_;
RenderWidgetHostProcess* process_; // Deleted automatically by the widget.
- scoped_ptr<RenderWidgetHost> host_;
+ scoped_ptr<MockRenderWidgetHost> host_;
scoped_ptr<TestView> view_;
DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostTest);
@@ -304,3 +329,38 @@
ViewMsg_WasRestored::Read(restored, &needs_repaint);
EXPECT_TRUE(needs_repaint);
}
+
+TEST_F(RenderWidgetHostTest, HandleKeyEventsWeSent) {
+ WebKeyboardEvent key_event;
+ key_event.type = WebInputEvent::KEY_DOWN;
+ key_event.modifiers = WebInputEvent::CTRL_KEY;
+ key_event.key_code = base::VKEY_L; // non-null made up value.
+
+ host_->ForwardKeyboardEvent(key_event);
+
+ // Make sure we sent the input event to the renderer.
+ EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(
+ ViewMsg_HandleInputEvent::ID));
+ process_->sink().ClearMessages();
+
+ // Send the simulated response from the renderer back.
+ scoped_ptr<IPC::Message> response(
+ new ViewHostMsg_HandleInputEvent_ACK(0));
+ response->WriteInt(key_event.type);
+ response->WriteBool(false);
+ host_->OnMessageReceived(*response);
+
+ EXPECT_TRUE(host_->unhandled_keyboard_event_called());
+}
+
+TEST_F(RenderWidgetHostTest, IgnoreKeyEventsWeDidntSend) {
+ // Send a simulated, unrequested key response. We should ignore this.
+ scoped_ptr<IPC::Message> response(
+ new ViewHostMsg_HandleInputEvent_ACK(0));
+ response->WriteInt(WebInputEvent::KEY_DOWN);
+ response->WriteBool(false);
+ host_->OnMessageReceived(*response);
+
+ EXPECT_FALSE(host_->unhandled_keyboard_event_called());
+}
+

Powered by Google App Engine
This is Rietveld 408576698