| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_ |
| #define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_ |
| |
| #include "base/android/jni_android.h" |
| #include "components/contextual_search/core/browser/contextual_search_context.h" |
| |
| // A ContextualSearchContext subclass that is modifiable via JNI. This is the |
| // native implementation of the Java ContextualSearchContext; Instance lifetimes |
| // are managed by the associated Java object. |
| class NativeContextualSearchContext final : public ContextualSearchContext { |
| public: |
| NativeContextualSearchContext(JNIEnv* env, |
| const base::android::JavaRef<jobject>& obj); |
| |
| NativeContextualSearchContext(const NativeContextualSearchContext&) = delete; |
| NativeContextualSearchContext& operator=( |
| const NativeContextualSearchContext&) = delete; |
| |
| ~NativeContextualSearchContext() override; |
| |
| // ContextualSearchContext |
| base::WeakPtr<ContextualSearchContext> AsWeakPtr() override; |
| |
| // Calls the destructor. Should be called when this native object is no |
| // longer needed. |
| void Destroy(JNIEnv* env); |
| |
| // Returns the NativeContextualSearchContext given the Java object. |
| static base::WeakPtr<NativeContextualSearchContext> |
| FromJavaContextualSearchContext( |
| const base::android::JavaRef<jobject>& j_contextual_search_context); |
| |
| // Sets the properties needed to resolve a context. |
| void SetResolveProperties(JNIEnv* env, |
| std::string& home_country, |
| jboolean j_may_send_base_page_url); |
| |
| // Adjust the current selection offsets by the given signed amounts. |
| void AdjustSelection(JNIEnv* env, |
| jint j_start_adjust, |
| jint j_end_adjust); |
| |
| // Prepares the context to be used in a resolve request by supplying last |
| // minute parameters. |
| // |j_is_exact_resolve| indicates if the resolved term should be an exact |
| // match for the selection range instead of an expandable selection. |
| // |j_related_searches_stamp| is a value to stamp onto search URLs to |
| // identify related searches. If the string is empty then Related Searches |
| // are not being requested. |
| void PrepareToResolve(JNIEnv* env, |
| jboolean j_is_exact_resolve, |
| std::string& related_searches_stamp); |
| |
| // Detects the language of the context using CLD from the translate utility. |
| std::string DetectLanguage(JNIEnv* env) const; |
| |
| // Sets the languages to remember for use in translation. |
| // See |GetTranslationLanguages|. |
| void SetTranslationLanguages(JNIEnv* env, |
| std::string& detected_language, |
| std::string& target_language, |
| std::string& fluent_languages); |
| |
| private: |
| // The linked Java object. |
| base::android::ScopedJavaGlobalRef<jobject> java_object_; |
| |
| base::WeakPtrFactory<NativeContextualSearchContext> weak_ptr_factory_{this}; |
| }; |
| |
| #endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_ |