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

Unified Diff: content/browser/android/text_suggestion_host_android.h

Issue 2931443003: Add support for Android spellcheck menu in Chrome/WebViews (Closed)
Patch Set: Respond to latest comments Created 3 years, 5 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: content/browser/android/text_suggestion_host_android.h
diff --git a/content/browser/android/text_suggestion_host_android.h b/content/browser/android/text_suggestion_host_android.h
new file mode 100644
index 0000000000000000000000000000000000000000..89baca701acb768ceb9354ee610d019253d5b3fa
--- /dev/null
+++ b/content/browser/android/text_suggestion_host_android.h
@@ -0,0 +1,96 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_ANDROID_TEXT_SUGGESTION_HOST_ANDROID_H_
+#define CONTENT_BROWSER_ANDROID_TEXT_SUGGESTION_HOST_ANDROID_H_
+
+#include "content/browser/android/render_widget_host_connector.h"
+#include "content/browser/renderer_host/input/timeout_monitor.h"
+#include "third_party/WebKit/public/platform/input_host.mojom.h"
+#include "third_party/WebKit/public/platform/input_messages.mojom.h"
+
+namespace content {
+
+// This class, along with its Java counterpart TextSuggestionHost, is used to
+// implement the Android text suggestion menu that appears when you tap a
+// misspelled word. This class creates the Android implementation of
+// mojom::TextSuggestionHost, which is used to communicate back-and-forth with
+// Blink side code (these are separate classes due to lifecycle considerations;
+// this class needs to be constructed from Java code, but Mojo code wants to
+// take ownership of mojom::TextSuggestionHost).
+class TextSuggestionHostAndroid : public RenderWidgetHostConnector {
+ public:
+ TextSuggestionHostAndroid(JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& obj,
+ WebContents* web_contents);
+ ~TextSuggestionHostAndroid() override;
+
+ // RenderWidgetHostConnector implementation.
+ void UpdateRenderProcessConnection(
+ RenderWidgetHostViewAndroid* old_rwhva,
+ RenderWidgetHostViewAndroid* new_rhwva) override;
+
+ // Called from the Java text suggestion menu to have Blink apply a spell
+ // check suggestion.
+ void ApplySpellCheckSuggestion(
+ JNIEnv*,
+ const base::android::JavaParamRef<jobject>&,
+ const base::android::JavaParamRef<jstring>& replacement);
+ // Called from the Java text suggestion menu to have Blink delete the
+ // currently highlighted region of text that the open suggestion menu pertains
+ // to.
+ void DeleteActiveSuggestionRange(JNIEnv*,
+ const base::android::JavaParamRef<jobject>&);
+ // Called from the Java text suggestion menu to tell Blink that a word is
+ // being added to the dictionary (so Blink can clear the spell check markers
+ // for that word).
+ void NewWordAddedToDictionary(
+ JNIEnv*,
+ const base::android::JavaParamRef<jobject>&,
+ const base::android::JavaParamRef<jstring>& word);
+ // Called from the Java text suggestion menu to tell Blink that the user
+ // closed the menu without performing one of the available actions, so Blink
+ // can re-show the insertion caret and remove the suggestion range highlight.
+ void SuggestionMenuClosed(JNIEnv*,
+ const base::android::JavaParamRef<jobject>&);
+ // Called from Blink to tell the Java TextSuggestionHost to open the text
+ // suggestion menu.
+ void ShowSpellCheckSuggestionMenu(
+ double caret_x,
+ double caret_y,
+ const std::string& marked_text,
+ const std::vector<blink::mojom::SpellCheckSuggestionPtr>& suggestions);
+
+ // Called by RenderWidgetHostViewAndroid
+ void FocusedNodeChanged();
+
+ // Called by browser-side code in response to an input event to stop the
+ // spell check menu timer and close the suggestion menu (if open).
+ void OnKeyEvent();
+ // Called by Blink when the user taps on a spell check marker and we might
+ // want to show the text suggestion menu after the double-tap timer expires.
+ void StartSpellCheckMenuTimer();
+ // Called by browser-side code in response to an input event to stop the
+ // spell check menu timer.
+ void StopSpellCheckMenuTimer();
+
+ private:
+ RenderFrameHost* GetFocusedFrame();
+ const blink::mojom::TextSuggestionBackendPtr& GetTextSuggestionBackend();
+ // Used by the spell check menu timer to notify Blink that the timer has
+ // expired.
+ void OnSpellCheckMenuTimeout();
+
+ // Current RenderWidgetHostView connected to this instance. Can be null.
+ RenderWidgetHostViewAndroid* rwhva_;
+ JavaObjectWeakGlobalRef java_text_suggestion_host_;
+ blink::mojom::TextSuggestionBackendPtr text_suggestion_backend_;
+ TimeoutMonitor spellcheck_menu_timeout_;
+};
+
+bool RegisterTextSuggestionHost(JNIEnv* env);
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_ANDROID_TEXT_SUGGESTION_HOST_ANDROID_H_

Powered by Google App Engine
This is Rietveld 408576698