blob: 2f55ef2705e89321bcc3a927648609157c5e0d75 [file] [log] [blame]
// Copyright (c) 2019 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.
#include "android_webview/browser/js_java_interaction/js_reply_proxy.h"
#include "android_webview/browser_jni_headers/JsReplyProxy_jni.h"
#include "base/android/jni_string.h"
#include "components/js_injection/browser/web_message.h"
#include "components/js_injection/browser/web_message_reply_proxy.h"
namespace android_webview {
JsReplyProxy::JsReplyProxy(js_injection::WebMessageReplyProxy* reply_proxy)
: reply_proxy_(reply_proxy) {
JNIEnv* env = base::android::AttachCurrentThread();
java_ref_.Reset(
Java_JsReplyProxy_create(env, reinterpret_cast<intptr_t>(this)));
}
JsReplyProxy::~JsReplyProxy() {
if (!java_ref_)
return;
JNIEnv* env = base::android::AttachCurrentThread();
Java_JsReplyProxy_onDestroy(env, java_ref_);
}
base::android::ScopedJavaLocalRef<jobject> JsReplyProxy::GetJavaPeer() {
return base::android::ScopedJavaLocalRef<jobject>(java_ref_);
}
void JsReplyProxy::PostMessage(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& message) {
std::unique_ptr<js_injection::WebMessage> web_message =
std::make_unique<js_injection::WebMessage>();
web_message->message = base::android::ConvertJavaStringToUTF16(env, message);
reply_proxy_->PostMessage(std::move(web_message));
}
} // namespace android_webview