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

Side by Side 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, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/renderer_host/render_widget_host.h" 5 #include "chrome/browser/renderer_host/render_widget_host.h"
6 6
7 #include "base/gfx/native_widget_types.h" 7 #include "base/gfx/native_widget_types.h"
8 #include "base/histogram.h"
8 #include "base/message_loop.h" 9 #include "base/message_loop.h"
9 #include "base/keyboard_codes.h" 10 #include "base/keyboard_codes.h"
10 #include "chrome/browser/renderer_host/backing_store.h" 11 #include "chrome/browser/renderer_host/backing_store.h"
11 #include "chrome/browser/renderer_host/render_process_host.h" 12 #include "chrome/browser/renderer_host/render_process_host.h"
12 #include "chrome/browser/renderer_host/render_widget_helper.h" 13 #include "chrome/browser/renderer_host/render_widget_helper.h"
13 #include "chrome/browser/renderer_host/render_widget_host_view.h" 14 #include "chrome/browser/renderer_host/render_widget_host_view.h"
14 #include "chrome/common/notification_service.h" 15 #include "chrome/common/notification_service.h"
15 #include "chrome/common/render_messages.h" 16 #include "chrome/common/render_messages.h"
16 #include "chrome/views/view.h" 17 #include "chrome/views/view.h"
17 #include "webkit/glue/webcursor.h" 18 #include "webkit/glue/webcursor.h"
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 299 }
299 300
300 ForwardInputEvent(key_event, sizeof(WebKeyboardEvent)); 301 ForwardInputEvent(key_event, sizeof(WebKeyboardEvent));
301 } 302 }
302 303
303 void RenderWidgetHost::ForwardInputEvent(const WebInputEvent& input_event, 304 void RenderWidgetHost::ForwardInputEvent(const WebInputEvent& input_event,
304 int event_size) { 305 int event_size) {
305 if (!process_->channel()) 306 if (!process_->channel())
306 return; 307 return;
307 308
309 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
310 input_event.type == WebInputEvent::KEY_UP ||
311 input_event.type == WebInputEvent::CHAR) {
312 // Put all WebKeyboardEvent objects in a queue since we can't trust the
313 // renderer and we need to give something to the UnhandledInputEvent
314 // handler.
315 key_queue_.push(static_cast<const WebKeyboardEvent&>(input_event));
316 HISTOGRAM_COUNTS_100("Renderer.KeyboardQueueSize", key_queue_.size());
317 }
318
308 IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_); 319 IPC::Message* message = new ViewMsg_HandleInputEvent(routing_id_);
309 message->WriteData( 320 message->WriteData(
310 reinterpret_cast<const char*>(&input_event), event_size); 321 reinterpret_cast<const char*>(&input_event), event_size);
311 input_event_start_time_ = TimeTicks::Now(); 322 input_event_start_time_ = TimeTicks::Now();
312 Send(message); 323 Send(message);
313 324
314 // Any input event cancels a pending mouse move event. 325 // Any input event cancels a pending mouse move event.
315 next_mouse_move_.reset(); 326 next_mouse_move_.reset();
316 327
317 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kHungRendererDelayMs)); 328 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kHungRendererDelayMs));
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 if (type == WebInputEvent::MOUSE_MOVE) { 558 if (type == WebInputEvent::MOUSE_MOVE) {
548 mouse_move_pending_ = false; 559 mouse_move_pending_ = false;
549 560
550 // now, we can send the next mouse move event 561 // now, we can send the next mouse move event
551 if (next_mouse_move_.get()) { 562 if (next_mouse_move_.get()) {
552 DCHECK(next_mouse_move_->type == WebInputEvent::MOUSE_MOVE); 563 DCHECK(next_mouse_move_->type == WebInputEvent::MOUSE_MOVE);
553 ForwardMouseEvent(*next_mouse_move_); 564 ForwardMouseEvent(*next_mouse_move_);
554 } 565 }
555 } 566 }
556 567
557 const char* data = NULL; 568 if (type == WebInputEvent::KEY_DOWN ||
558 int length = 0; 569 type == WebInputEvent::KEY_UP ||
559 if (message.ReadData(&iter, &data, &length)) { 570 type == WebInputEvent::CHAR) {
560 const WebInputEvent* input_event = 571 if (key_queue_.size() == 0) {
561 reinterpret_cast<const WebInputEvent*>(data); 572 LOG(ERROR) << "Got a KeyEvent back from the renderer but we "
562 UnhandledInputEvent(*input_event); 573 << "don't seem to have sent it to the renderer!";
574 } else if (key_queue_.front().type != type) {
575 LOG(ERROR) << "We seem to have a different key type sent from "
576 << "the renderer. Ignoring event.";
577 } else {
578 bool processed = false;
579 r = message.ReadBool(&iter, &processed);
580 DCHECK(r);
581
582 if (!processed) {
583 UnhandledKeyboardEvent(key_queue_.front());
584 }
585
586 key_queue_.pop();
587 }
563 } 588 }
564 } 589 }
565 590
566 void RenderWidgetHost::OnMsgFocus() { 591 void RenderWidgetHost::OnMsgFocus() {
567 // Only the user can focus a RenderWidgetHost. 592 // Only the user can focus a RenderWidgetHost.
568 NOTREACHED(); 593 NOTREACHED();
569 } 594 }
570 595
571 void RenderWidgetHost::OnMsgBlur() { 596 void RenderWidgetHost::OnMsgBlur() {
572 if (view_) { 597 if (view_) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 653
629 // TODO(darin): do we need to do something else if our backing store is not 654 // TODO(darin): do we need to do something else if our backing store is not
630 // the same size as the advertised view? maybe we just assume there is a 655 // the same size as the advertised view? maybe we just assume there is a
631 // full paint on its way? 656 // full paint on its way?
632 BackingStore* backing_store = BackingStoreManager::Lookup(this); 657 BackingStore* backing_store = BackingStoreManager::Lookup(this);
633 if (!backing_store || (backing_store->size() != view_size)) 658 if (!backing_store || (backing_store->size() != view_size))
634 return; 659 return;
635 backing_store->ScrollRect(process_->process().handle(), bitmap, bitmap_rect, 660 backing_store->ScrollRect(process_->process().handle(), bitmap, bitmap_rect,
636 dx, dy, clip_rect, view_size); 661 dx, dy, clip_rect, view_size);
637 } 662 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698