| // Copyright 2015 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 COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECKER_SESSION_BRIDGE_ANDROID_H_ |
| #define COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECKER_SESSION_BRIDGE_ANDROID_H_ |
| |
| #include <jni.h> |
| |
| #include <memory> |
| |
| #include "base/android/scoped_java_ref.h" |
| #include "base/macros.h" |
| #include "base/strings/string16.h" |
| #include "components/spellcheck/common/spellcheck.mojom.h" |
| |
| // A class used to interface between the Java class of the same name and the |
| // android SpellCheckHost. This class receives text to be spellchecked, sends |
| // that text to the Java side via JNI to be spellchecked, and then sends those |
| // results to the renderer. |
| class SpellCheckerSessionBridge { |
| public: |
| SpellCheckerSessionBridge(); |
| ~SpellCheckerSessionBridge(); |
| |
| using RequestTextCheckCallback = |
| spellcheck::mojom::SpellCheckHost::RequestTextCheckCallback; |
| |
| // Receives text to be checked and sends it to Java to be spellchecked. |
| void RequestTextCheck(const base::string16& text, |
| RequestTextCheckCallback callback); |
| |
| // Receives information from Java side about the typos in a given string |
| // of text, processes these and sends them to the renderer. |
| void ProcessSpellCheckResults( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& jobj, |
| const base::android::JavaParamRef<jintArray>& offset_array, |
| const base::android::JavaParamRef<jintArray>& length_array, |
| const base::android::JavaParamRef<jobjectArray>& suggestions_array); |
| |
| // Sets the handle to the Java SpellCheckerSessionBridge object to null, |
| // marking the Java object for garbage collection. |
| void DisconnectSession(); |
| |
| private: |
| class SpellingRequest { |
| public: |
| SpellingRequest(const base::string16& text, |
| RequestTextCheckCallback callback); |
| ~SpellingRequest(); |
| |
| base::string16 text_; |
| RequestTextCheckCallback callback_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(SpellingRequest); |
| }; |
| |
| std::unique_ptr<SpellingRequest> active_request_; |
| std::unique_ptr<SpellingRequest> pending_request_; |
| |
| base::android::ScopedJavaGlobalRef<jobject> java_object_; |
| bool java_object_initialization_failed_; |
| bool active_session_; |
| |
| DISALLOW_COPY_AND_ASSIGN(SpellCheckerSessionBridge); |
| }; |
| |
| #endif // COMPONENTS_SPELLCHECK_BROWSER_SPELLCHECKER_SESSION_BRIDGE_ANDROID_H_ |