blob: 624d17289b320f6f7ba4a9edd60372acebe7faf9 [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2017 The Chromium Authors
Jinsuk Kima6490f82018-01-02 02:16:142// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CONTENT_BROWSER_ANDROID_JAVASCRIPT_INJECTOR_H_
6#define CONTENT_BROWSER_ANDROID_JAVASCRIPT_INJECTOR_H_
7
Rupert Ben Wiserb7d1894f2025-04-02 19:13:158#include <string>
9#include <vector>
10
Jinsuk Kima6490f82018-01-02 02:16:1411#include "base/android/jni_android.h"
12#include "base/android/jni_weak_ref.h"
13#include "base/android/scoped_java_ref.h"
Rupert Ben Wiser36b4404d2025-06-05 16:15:1914#include "components/origin_matcher/origin_matcher.h"
Dave Tapuska20433a52023-11-06 22:02:3915#include "content/common/gin_java_bridge.mojom-forward.h"
Jinsuk Kima6490f82018-01-02 02:16:1416#include "content/public/browser/web_contents_user_data.h"
Dave Tapuska20433a52023-11-06 22:02:3917#include "mojo/public/cpp/bindings/pending_receiver.h"
Jinsuk Kima6490f82018-01-02 02:16:1418
19namespace content {
20
21class GinJavaBridgeDispatcherHost;
Hiroki Nakagawac1e58012024-05-07 23:43:4122class WebContentsImpl;
Jinsuk Kima6490f82018-01-02 02:16:1423
24class JavascriptInjector : public WebContentsUserData<JavascriptInjector> {
25 public:
26 JavascriptInjector(
27 JNIEnv* env,
28 const base::android::JavaParamRef<jobject>& obj,
29 const base::android::JavaParamRef<jobject>& retained_objects,
30 WebContents* web_contents);
Peter Boström828b9022021-09-21 02:28:4331
32 JavascriptInjector(const JavascriptInjector&) = delete;
33 JavascriptInjector& operator=(const JavascriptInjector&) = delete;
34
Jinsuk Kima6490f82018-01-02 02:16:1435 ~JavascriptInjector() override;
36
37 void SetAllowInspection(JNIEnv* env,
Jinsuk Kima6490f82018-01-02 02:16:1438 jboolean allow);
39
Rupert Ben Wiserb7d1894f2025-04-02 19:13:1540 // See GinJavaBridgeDispatcherHost::AddNamedObject more information.
Rupert Ben Wiser36b4404d2025-06-05 16:15:1941 void AddInterface(
Jinsuk Kima6490f82018-01-02 02:16:1442 JNIEnv* env,
Jinsuk Kima6490f82018-01-02 02:16:1443 const base::android::JavaParamRef<jobject>& object,
44 const base::android::JavaParamRef<jstring>& name,
Rupert Ben Wiserb7d1894f2025-04-02 19:13:1545 const base::android::JavaParamRef<jclass>& safe_annotation_clazz,
Rupert Ben Wiser36b4404d2025-06-05 16:15:1946 origin_matcher::OriginMatcher matcher);
Jinsuk Kima6490f82018-01-02 02:16:1447
48 void RemoveInterface(JNIEnv* env,
Jinsuk Kima6490f82018-01-02 02:16:1449 const base::android::JavaParamRef<jstring>& name);
Jinsuk Kima6490f82018-01-02 02:16:1450 private:
François Doray4f51d5d2018-12-03 22:26:2451 friend class content::WebContentsUserData<JavascriptInjector>;
Hiroki Nakagawac1e58012024-05-07 23:43:4152
53 WebContentsImpl& GetWebContentsImpl();
54
Bo Liuf661a492018-01-03 00:29:0955 // A weak reference to the Java JavascriptInjectorImpl object.
Jinsuk Kima6490f82018-01-02 02:16:1456 JavaObjectWeakGlobalRef java_ref_;
57
58 // Manages injecting Java objects.
59 scoped_refptr<GinJavaBridgeDispatcherHost> java_bridge_dispatcher_host_;
60
François Doray4f51d5d2018-12-03 22:26:2461 WEB_CONTENTS_USER_DATA_KEY_DECL();
Jinsuk Kima6490f82018-01-02 02:16:1462};
63
64} // namespace content
65
66#endif // CONTENT_BROWSER_ANDROID_JAVASCRIPT_INJECTOR_H_