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

Unified Diff: chrome/browser/renderer_host/render_widget_host.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.cc
===================================================================
--- chrome/browser/renderer_host/render_widget_host.cc (revision 10502)
+++ chrome/browser/renderer_host/render_widget_host.cc (working copy)
@@ -5,6 +5,7 @@
#include "chrome/browser/renderer_host/render_widget_host.h"
#include "base/gfx/native_widget_types.h"
+#include "base/histogram.h"
#include "base/message_loop.h"
#include "base/keyboard_codes.h"
#include "chrome/browser/renderer_host/backing_store.h"
@@ -305,6 +306,16 @@
if (!process_->channel())
return;
+ if (input_event.type == WebInputEvent::KEY_DOWN ||
darin (slow to review) 2009/02/27 00:15:56 i think we may also need RAW_KEY_DOWN here, right?
Avi (use Gerrit) 2009/02/27 15:12:47 RAW_KEY_DOWN does not yet exist. It will once I na
+ input_event.type == WebInputEvent::KEY_UP ||
+ input_event.type == WebInputEvent::CHAR) {
+ // Put all WebKeyboardEvent objects in a queue since we can't trust the
+ // renderer and we need to give something to the UnhandledInputEvent
+ // handler.
+ key_queue_.push(static_cast<const WebKeyboardEvent&>(input_event));
+ HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size());
+ }
+
IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_);
message->WriteData(
reinterpret_cast<const char*>(&input_event), event_size);
@@ -554,12 +565,26 @@
}
}
- const char* data = NULL;
- int length = 0;
- if (message.ReadData(&iter, &data, &length)) {
- const WebInputEvent* input_event =
- reinterpret_cast<const WebInputEvent*>(data);
- UnhandledInputEvent(*input_event);
+ if (type == WebInputEvent::KEY_DOWN ||
+ type == WebInputEvent::KEY_UP ||
+ type == WebInputEvent::CHAR) {
+ if (key_queue_.size() == 0) {
+ LOG(ERROR) << "Got a KeyEvent back from the renderer but we "
+ << "don't seem to have sent it to the renderer!";
+ } else if (key_queue_.front().type != type) {
+ LOG(ERROR) << "We seem to have a different key type sent from "
+ << "the renderer. Ignoring event.";
+ } else {
+ bool processed = false;
+ r = message.ReadBool(&iter, &processed);
+ DCHECK(r);
+
+ if (!processed) {
+ UnhandledKeyboardEvent(key_queue_.front());
+ }
+
+ key_queue_.pop();
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698