Index: content/renderer/render_widget.h |
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h |
index 998d0893e029f9e94afba6ef5ba0aa6e0cda7c68..dea17b6d752ec3b37a58a2220c99d3aee1f9419d 100644 |
--- a/content/renderer/render_widget.h |
+++ b/content/renderer/render_widget.h |
@@ -199,11 +199,6 @@ class CONTENT_EXPORT RenderWidget |
return filtered_time_per_frame_; |
} |
- enum ShowIme { |
- DO_NOT_SHOW_IME, |
- SHOW_IME_IF_NEEDED |
- }; |
- |
// Handle common setup/teardown for handling IME events. |
void StartHandlingImeEvent(); |
void FinishHandlingImeEvent(); |
@@ -326,7 +321,19 @@ class CONTENT_EXPORT RenderWidget |
#if defined(OS_ANDROID) |
void OnImeBatchStateChanged(bool is_begin); |
void OnShowImeIfNeeded(); |
+ |
+ // Whenever an IME event that needs an acknowledgement is sent to the browser, |
+ // the number of outstanding IME events that needs acknowledgement should be |
+ // incremented. All IME events will be dropped until we receive an ack from |
+ // the browser. |
+ void IncrementOutstandingImeEventAcks(); |
+ |
+ // Called by the browser process for every required IME acknowledgement. |
+ void OnImeEventAck(); |
#endif |
+ // Returns whether we currently should handle an IME event. |
+ bool ShouldHandleImeEvent(); |
+ |
void OnSnapshot(const gfx::Rect& src_subrect); |
void OnSetBrowserRenderingStats(const BrowserRenderingStats& stats); |
@@ -406,9 +413,13 @@ class CONTENT_EXPORT RenderWidget |
void UpdateTextInputType(); |
#if defined(OS_ANDROID) |
- // |show_ime_if_needed| should be SHOW_IME_IF_NEEDED iff the update may cause |
- // the ime to be displayed, e.g. after a tap on an input field on mobile. |
- void UpdateTextInputState(ShowIme show_ime); |
+ // |show_ime_if_needed| should be true iff the update may cause the ime to be |
+ // displayed, e.g. after a tap on an input field on mobile. |
+ // |send_ime_ack| should be true iff the browser side is required to |
+ // acknowledge the change before the renderer handles any more IME events. |
+ // This is when the event did not originate from the browser side IME, such as |
+ // changes from JavaScript or autofill. |
+ void UpdateTextInputState(bool show_ime_if_needed, bool send_ime_ack); |
#endif |
// Checks if the selection bounds have been changed. If they are changed, |
@@ -717,6 +728,13 @@ class CONTENT_EXPORT RenderWidget |
uint32 next_output_surface_id_; |
+#if defined(OS_ANDROID) |
+ // A counter for number of outstanding messages from the renderer to the |
+ // browser regarding IME-type events that have not been acknowledged by the |
+ // browser. If this value is not 0 IME events will be dropped. |
+ int outstanding_ime_acks_; |
+#endif |
+ |
base::WeakPtrFactory<RenderWidget> weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(RenderWidget); |