Add JNI interface to content_extraction.InnerText
Change-Id: I919d0ffe4551d0941302b5a78f80f582658c7150
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5254314
Reviewed-by: Scott Violet <[email protected]>
Commit-Queue: Salvador Guerrero Ramos <[email protected]>
Reviewed-by: Tommy Nyquist <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1258102}
diff --git a/chrome/browser/content_extraction/android/inner_text_bridge.cc b/chrome/browser/content_extraction/android/inner_text_bridge.cc
new file mode 100644
index 0000000..fcf4521
--- /dev/null
+++ b/chrome/browser/content_extraction/android/inner_text_bridge.cc
@@ -0,0 +1,51 @@
+// Copyright 2024 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/android/callback_android.h"
+#include "base/functional/callback_forward.h"
+#include "base/types/optional_ref.h"
+#include "chrome/browser/content_extraction/android/jni_headers/InnerTextBridge_jni.h"
+#include "chrome/browser/content_extraction/inner_text.h"
+#include "content/public/browser/render_frame_host.h"
+
+using ::base::android::JavaParamRef;
+
+namespace {
+void OnGotInnerText(
+ base::OnceCallback<void(const base::optional_ref<const std::string>)>
+ optional_string_callback,
+ std::unique_ptr<content_extraction::InnerTextResult> inner_text) {
+ if (!optional_string_callback) {
+ return;
+ }
+
+ if (!inner_text) {
+ std::move(optional_string_callback).Run(base::optional_ref<std::string>());
+ } else {
+ std::move(optional_string_callback).Run(inner_text->inner_text);
+ }
+}
+} // namespace
+
+void JNI_InnerTextBridge_GetInnerText(
+ JNIEnv* env,
+ const base::android::JavaParamRef<jobject>& jrender_frame_host,
+ const JavaParamRef<jobject>& jcallback) {
+ CHECK(jcallback);
+ auto* render_frame_host =
+ content::RenderFrameHost::FromJavaRenderFrameHost(jrender_frame_host);
+ if (!render_frame_host) {
+ base::android::RunOptionalStringCallbackAndroid(
+ jcallback, base::optional_ref<std::string>());
+ return;
+ }
+
+ auto callback =
+ base::BindOnce(&base::android::RunOptionalStringCallbackAndroid,
+ base::android::ScopedJavaGlobalRef<jobject>(jcallback));
+
+ content_extraction::GetInnerText(
+ *render_frame_host, std::nullopt,
+ base::BindOnce(&OnGotInnerText, std::move(callback)));
+}