blob: a6dd88aa0e7666d841261da9086b92eeb060876b [file] [log] [blame]
// 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 "android_webview/browser/aw_context_menu_helper.h"
#include "android_webview/browser_jni_headers/AwContextMenuHelper_jni.h"
#include "components/embedder_support/android/contextmenu/context_menu_builder.h"
#include "content/public/browser/render_process_host.h"
#include "ui/android/view_android.h"
using base::android::JavaParamRef;
using base::android::JavaRef;
namespace android_webview {
AwContextMenuHelper::AwContextMenuHelper(content::WebContents* web_contents)
: content::WebContentsUserData<AwContextMenuHelper>(*web_contents) {
JNIEnv* env = base::android::AttachCurrentThread();
java_obj_.Reset(env, Java_AwContextMenuHelper_create(
env, web_contents->GetJavaWebContents()));
DCHECK(!java_obj_.is_null());
}
AwContextMenuHelper::~AwContextMenuHelper() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_AwContextMenuHelper_destroy(env, java_obj_);
}
void AwContextMenuHelper::ShowContextMenu(
content::RenderFrameHost& render_frame_host,
const content::ContextMenuParams& params) {
JNIEnv* env = base::android::AttachCurrentThread();
gfx::NativeView view = GetWebContents().GetNativeView();
Java_AwContextMenuHelper_showContextMenu(
env, java_obj_,
context_menu::BuildJavaContextMenuParams(
params, nullptr, render_frame_host.GetProcess()->GetDeprecatedID(),
render_frame_host.GetFrameToken().value()),
view->GetContainerView());
}
void AwContextMenuHelper::DismissContextMenu() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_AwContextMenuHelper_dismissContextMenu(env, java_obj_);
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(AwContextMenuHelper);
} // namespace android_webview