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

Side by Side Diff: chrome/browser/renderer_host/render_widget_host.h

Issue 400012: Refactor the keyboard events handling code related to RenderViewHostDelegate:... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_ 5 #ifndef CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_
6 #define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_ 6 #define CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_
7 7
8 #include <deque> 8 #include <deque>
9 9
10 #include "app/gfx/native_widget_types.h" 10 #include "app/gfx/native_widget_types.h"
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 void Replace(const string16& word); 338 void Replace(const string16& word);
339 339
340 // Makes an IPC call to tell webkit to advance to the next misspelling. 340 // Makes an IPC call to tell webkit to advance to the next misspelling.
341 void AdvanceToNextMisspelling(); 341 void AdvanceToNextMisspelling();
342 342
343 // Sets the active state (i.e., control tints). 343 // Sets the active state (i.e., control tints).
344 virtual void SetActive(bool active); 344 virtual void SetActive(bool active);
345 345
346 protected: 346 protected:
347 // Internal implementation of the public Forward*Event() methods. 347 // Internal implementation of the public Forward*Event() methods.
348 void ForwardInputEvent( 348 void ForwardInputEvent(const WebKit::WebInputEvent& input_event,
349 const WebKit::WebInputEvent& input_event, int event_size); 349 int event_size, bool is_keyboard_shortcut);
350 350
351 // Called when we receive a notification indicating that the renderer 351 // Called when we receive a notification indicating that the renderer
352 // process has gone. This will reset our state so that our state will be 352 // process has gone. This will reset our state so that our state will be
353 // consistent if a new renderer is created. 353 // consistent if a new renderer is created.
354 void RendererExited(); 354 void RendererExited();
355 355
356 // Retrieves an id the renderer can use to refer to its view. 356 // Retrieves an id the renderer can use to refer to its view.
357 // This is used for various IPC messages, including plugins. 357 // This is used for various IPC messages, including plugins.
358 gfx::NativeViewId GetNativeViewId(); 358 gfx::NativeViewId GetNativeViewId();
359 359
360 // Called when an InputEvent is received to check if the event should be sent 360 // Called to handled a keyboard event before sending it to the renderer.
361 // to the renderer or not. 361 // This is overridden by RenderView to send upwards to its delegate.
362 virtual bool ShouldSendToRenderer(const NativeWebKeyboardEvent& event) { 362 // Returns true if the event was handled, and then the keyboard event will
363 return true; 363 // not be sent to the renderer anymore. Otherwise, if the |event| would
364 } 364 // be handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
365 365 // |*is_keyboard_shortcut| should be set to true.
366 // Called when we an InputEvent was not processed by the renderer. This is 366 virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
367 // overridden by RenderView to send upwards to its delegate. 367 bool* is_keyboard_shortcut) {
368 // Returns true if the event was handled by its delegate.
369 virtual bool UnhandledKeyboardEvent(const NativeWebKeyboardEvent& event) {
370 return false; 368 return false;
371 } 369 }
372 370
371 // Called when a keyboard event was not processed by the renderer. This is
372 // overridden by RenderView to send upwards to its delegate.
373 virtual void UnhandledKeyboardEvent(const NativeWebKeyboardEvent& event) {}
374
373 // Notification that the user has made some kind of input that could 375 // Notification that the user has made some kind of input that could
374 // perform an action. The render view host overrides this to forward the 376 // perform an action. The render view host overrides this to forward the
375 // information to its delegate (see corresponding function in 377 // information to its delegate (see corresponding function in
376 // RenderViewHostDelegate). The gestures that count are 1) any mouse down 378 // RenderViewHostDelegate). The gestures that count are 1) any mouse down
377 // event and 2) enter or space key presses. 379 // event and 2) enter or space key presses.
378 virtual void OnUserGesture() {} 380 virtual void OnUserGesture() {}
379 381
380 // Callbacks for notification when the renderer becomes unresponsive to user 382 // Callbacks for notification when the renderer becomes unresponsive to user
381 // input events, and subsequently responsive again. RenderViewHost overrides 383 // input events, and subsequently responsive again. RenderViewHost overrides
382 // these to tell its delegate to show the user a warning. 384 // these to tell its delegate to show the user a warning.
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 // Used for UMA histogram logging to measure the time for a repaint view 536 // Used for UMA histogram logging to measure the time for a repaint view
535 // operation to finish. 537 // operation to finish.
536 base::TimeTicks repaint_start_time_; 538 base::TimeTicks repaint_start_time_;
537 539
538 // Queue of keyboard events that we need to track. 540 // Queue of keyboard events that we need to track.
539 typedef std::deque<NativeWebKeyboardEvent> KeyQueue; 541 typedef std::deque<NativeWebKeyboardEvent> KeyQueue;
540 542
541 // A queue of keyboard events. We can't trust data from the renderer so we 543 // A queue of keyboard events. We can't trust data from the renderer so we
542 // stuff key events into a queue and pop them out on ACK, feeding our copy 544 // stuff key events into a queue and pop them out on ACK, feeding our copy
543 // back to whatever unhandled handler instead of the returned version. 545 // back to whatever unhandled handler instead of the returned version.
544 // See the description of |pending_key_events_| below for more details.
545 KeyQueue key_queue_; 546 KeyQueue key_queue_;
546 547
547 // Set when we update the text direction of the selected input element. 548 // Set when we update the text direction of the selected input element.
548 bool text_direction_updated_; 549 bool text_direction_updated_;
549 WebKit::WebTextDirection text_direction_; 550 WebKit::WebTextDirection text_direction_;
550 551
551 // Set when we cancel updating the text direction. 552 // Set when we cancel updating the text direction.
552 // This flag also ignores succeeding update requests until we call 553 // This flag also ignores succeeding update requests until we call
553 // NotifyTextDirection(). 554 // NotifyTextDirection().
554 bool text_direction_canceled_; 555 bool text_direction_canceled_;
555 556
556 // How many key events in |key_queue_| are not sent to the renderer yet,
557 // counted from the back of |key_queue_|.
558 // In order to suppress a Char event when necessary (see the description of
559 // |suppress_next_char_events_| below), we can't just send it to the
560 // renderer as soon as we get it. Instead, we need wait for the result of
561 // preceding RawKeyDown event back from the renderer, and then decide how to
562 // process the pending Char events according to the result.
563 // So if we get one or more Char events before receiving the result of
564 // preceding RawKeyDown event, we need keep them in |key_queue_|. And in
565 // order to keep the order the key events, all following key events must be
566 // pending until the pending Char events got processed.
567 size_t pending_key_events_;
568
569 // Indicates if the next sequence of Char events should be suppressed or not. 557 // Indicates if the next sequence of Char events should be suppressed or not.
570 // System may translate a RawKeyDown event into zero or more Char events, 558 // System may translate a RawKeyDown event into zero or more Char events,
571 // usually we send them to the renderer directly in sequence. However, If a 559 // usually we send them to the renderer directly in sequence. However, If a
572 // RawKeyDown event was not handled by the renderer but was handled by 560 // RawKeyDown event was not handled by the renderer but was handled by
573 // our UnhandledKeyboardEvent() method, eg. as an accelerator key, then we 561 // our UnhandledKeyboardEvent() method, eg. as an accelerator key, then we
574 // shall not send the following sequence of Char events, which was generated 562 // shall not send the following sequence of Char events, which was generated
575 // by this RawKeyDown event, to the renderer. Otherwise the renderer may 563 // by this RawKeyDown event, to the renderer. Otherwise the renderer may
576 // handle the Char events and cause unexpected behavior. 564 // handle the Char events and cause unexpected behavior.
577 // For example, pressing alt-2 may let the browser switch to the second tab, 565 // For example, pressing alt-2 may let the browser switch to the second tab,
578 // but the Char event generated by alt-2 may also activate a HTML element 566 // but the Char event generated by alt-2 may also activate a HTML element
579 // if its accesskey happens to be "2", then the user may get confused when 567 // if its accesskey happens to be "2", then the user may get confused when
580 // switching back to the original tab, because the content may already be 568 // switching back to the original tab, because the content may already be
581 // changed. 569 // changed.
582 bool suppress_next_char_events_; 570 bool suppress_next_char_events_;
583 571
584 // True if the PaintRect_ACK message for the last PaintRect message is still
585 // not sent yet. This is used for optimizing the painting overhead when there
586 // are many pending key events in the queue.
587 bool paint_ack_postponed_;
588
589 // The time when a PaintRect_ACK message is postponed, so that we can send the
590 // message after a certain duration.
591 base::TimeTicks paint_ack_postponed_time_;
592
593 // During the call to some methods, eg. OnMsgInputEventAck, this
594 // RenderWidgetHost object may be destroyed before executing some code that
595 // still want to access this object. To avoid this situation, |death_flag_|
596 // shall be pointed to a local variable in the method, and then |*death_flag_|
597 // will be set to true when destroying this RenderWidgetHost object, then the
598 // method shall exit immediately when |*death_flag_| becomes true.
599 bool* death_flag_;
600
601 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHost); 572 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHost);
602 }; 573 };
603 574
604 #endif // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_ 575 #endif // CHROME_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_H_
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/render_view_host_delegate.h ('k') | chrome/browser/renderer_host/render_widget_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698