blob: e834cfab8b1c0613119f00c4d845f4898d4986ca [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2013 The Chromium Authors
danakjc492bf82020-09-09 20:02:442// 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_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_
6#define CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_
7
8#include <jni.h>
9
10#include "base/android/scoped_java_ref.h"
Keishi Hattori0e45c022021-11-27 09:25:5211#include "base/memory/raw_ptr.h"
Rakina Zata Amni148dcad72022-06-08 14:53:5012#include "base/memory/weak_ptr.h"
danakjc492bf82020-09-09 20:02:4413#include "content/common/content_export.h"
Michael Thiessend9fc0662021-06-22 22:29:1814#include "url/origin.h"
danakjc492bf82020-09-09 20:02:4415
16namespace content {
17
18class NavigationControllerImpl;
19
20// Android wrapper around NavigationController that provides safer passage
21// from java and back to native and provides java with a means of communicating
22// with its native counterpart.
23class CONTENT_EXPORT NavigationControllerAndroid {
24 public:
25 explicit NavigationControllerAndroid(
26 NavigationControllerImpl* navigation_controller);
Peter Boström828b9022021-09-21 02:28:4327
28 NavigationControllerAndroid(const NavigationControllerAndroid&) = delete;
29 NavigationControllerAndroid& operator=(const NavigationControllerAndroid&) =
30 delete;
31
danakjc492bf82020-09-09 20:02:4432 ~NavigationControllerAndroid();
33
34 NavigationControllerImpl* navigation_controller() const {
35 return navigation_controller_;
36 }
37
38 base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
39
40 jboolean CanGoBack(JNIEnv* env,
41 const base::android::JavaParamRef<jobject>& obj);
42 jboolean CanGoForward(JNIEnv* env,
43 const base::android::JavaParamRef<jobject>& obj);
44 jboolean CanGoToOffset(JNIEnv* env,
45 const base::android::JavaParamRef<jobject>& obj,
46 jint offset);
47 void GoBack(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
48 void GoForward(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj);
49 void GoToOffset(JNIEnv* env,
50 const base::android::JavaParamRef<jobject>& obj,
51 jint offset);
52 jboolean IsInitialNavigation(JNIEnv* env,
53 const base::android::JavaParamRef<jobject>& obj);
54 void LoadIfNecessary(JNIEnv* env,
55 const base::android::JavaParamRef<jobject>& obj);
56 void ContinuePendingReload(JNIEnv* env,
57 const base::android::JavaParamRef<jobject>& obj);
58 void Reload(JNIEnv* env,
59 const base::android::JavaParamRef<jobject>& obj,
60 jboolean check_for_repost);
61 void ReloadBypassingCache(JNIEnv* env,
62 const base::android::JavaParamRef<jobject>& obj,
63 jboolean check_for_repost);
64 jboolean NeedsReload(JNIEnv* env,
65 const base::android::JavaParamRef<jobject>& obj);
66 void SetNeedsReload(JNIEnv* env,
67 const base::android::JavaParamRef<jobject>& obj);
68 void CancelPendingReload(JNIEnv* env,
69 const base::android::JavaParamRef<jobject>& obj);
70 void GoToNavigationIndex(JNIEnv* env,
71 const base::android::JavaParamRef<jobject>& obj,
72 jint index);
Torne (Richard Coles)d07c794b2023-11-21 23:55:4973 base::android::ScopedJavaLocalRef<jobject> LoadUrl(
danakjc492bf82020-09-09 20:02:4474 JNIEnv* env,
75 const base::android::JavaParamRef<jobject>& obj,
76 const base::android::JavaParamRef<jstring>& url,
77 jint load_url_type,
78 jint transition_type,
79 const base::android::JavaParamRef<jstring>& j_referrer_url,
80 jint referrer_policy,
81 jint ua_override_option,
82 const base::android::JavaParamRef<jstring>& extra_headers,
83 const base::android::JavaParamRef<jobject>& j_post_data,
84 const base::android::JavaParamRef<jstring>& base_url_for_data_url,
Shu Yang112ad492024-07-25 17:11:5485 const base::android::JavaParamRef<jstring>& virtual_url_for_special_cases,
danakjc492bf82020-09-09 20:02:4486 const base::android::JavaParamRef<jstring>& data_url_as_string,
87 jboolean can_load_local_resources,
88 jboolean is_renderer_initiated,
Michael Thiessend3c9a032021-04-19 17:01:3789 jboolean should_replace_current_entry,
90 const base::android::JavaParamRef<jobject>& j_initiator_origin,
91 jboolean has_user_gesture,
92 jboolean should_clear_history_list,
Liam Brady767b85e2023-07-05 16:59:5993 const base::android::JavaParamRef<jobject>&
94 j_additional_navigation_params,
Brandon Wyliea20e67ae2022-07-26 22:01:2095 jlong input_start,
Min Qin76ab3dd2024-02-07 21:23:5096 jlong navigation_ui_data_ptr,
97 jboolean is_pdf);
danakjc492bf82020-09-09 20:02:4498 void ClearSslPreferences(
99 JNIEnv* env,
100 const base::android::JavaParamRef<jobject>& /* obj */);
101 bool GetUseDesktopUserAgent(
102 JNIEnv* env,
103 const base::android::JavaParamRef<jobject>& /* obj */);
104 void SetUseDesktopUserAgent(
105 JNIEnv* env,
106 const base::android::JavaParamRef<jobject>& /* obj */,
107 jboolean state,
Shu Yanga0b22212022-07-08 16:44:52108 jboolean reload_on_state_change,
109 jint source);
danakjc492bf82020-09-09 20:02:44110 base::android::ScopedJavaLocalRef<jobject> GetEntryAtIndex(
111 JNIEnv* env,
112 const base::android::JavaParamRef<jobject>& obj,
113 int index);
114 base::android::ScopedJavaLocalRef<jobject> GetVisibleEntry(
115 JNIEnv* env,
116 const base::android::JavaParamRef<jobject>& /* obj */);
117 base::android::ScopedJavaLocalRef<jobject> GetPendingEntry(
118 JNIEnv* env,
119 const base::android::JavaParamRef<jobject>& /* obj */);
120 int GetNavigationHistory(JNIEnv* env,
121 const base::android::JavaParamRef<jobject>& obj,
122 const base::android::JavaParamRef<jobject>& history);
123 void GetDirectedNavigationHistory(
124 JNIEnv* env,
125 const base::android::JavaParamRef<jobject>& obj,
126 const base::android::JavaParamRef<jobject>& history,
127 jboolean is_forward,
128 jint max_entries);
129 void ClearHistory(JNIEnv* env,
130 const base::android::JavaParamRef<jobject>& obj);
131 int GetLastCommittedEntryIndex(
132 JNIEnv* env,
133 const base::android::JavaParamRef<jobject>& obj);
134 jboolean RemoveEntryAtIndex(JNIEnv* env,
135 const base::android::JavaParamRef<jobject>& obj,
136 jint index);
137 void PruneForwardEntries(JNIEnv* env,
138 const base::android::JavaParamRef<jobject>& obj);
139 base::android::ScopedJavaLocalRef<jstring> GetEntryExtraData(
140 JNIEnv* env,
141 const base::android::JavaParamRef<jobject>& obj,
142 jint index,
143 const base::android::JavaParamRef<jstring>& jkey);
144 void SetEntryExtraData(JNIEnv* env,
145 const base::android::JavaParamRef<jobject>& obj,
146 jint index,
147 const base::android::JavaParamRef<jstring>& jkey,
148 const base::android::JavaParamRef<jstring>& jvalue);
Jenna Himawana6d3fab72025-04-29 01:43:00149 void CopyStateFrom(JNIEnv* env,
150 jlong source_navigation_controller_ptr,
151 jboolean needs_reload);
danakjc492bf82020-09-09 20:02:44152
Michael Thiessen928d0e22021-07-30 18:14:36153 private:
Rakina Zata Amni148dcad72022-06-08 14:53:50154 void SetUseDesktopUserAgentInternal(bool enabled,
155 bool reload_on_state_change);
156
Keishi Hattori0e45c022021-11-27 09:25:52157 raw_ptr<NavigationControllerImpl> navigation_controller_;
danakjc492bf82020-09-09 20:02:44158 base::android::ScopedJavaGlobalRef<jobject> obj_;
Rakina Zata Amni148dcad72022-06-08 14:53:50159 base::WeakPtrFactory<NavigationControllerAndroid> weak_factory_{this};
danakjc492bf82020-09-09 20:02:44160};
161
162} // namespace content
163
164#endif // CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_