| // 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 |