blob: 7081008876799a179823295a93b94a386a20b60f [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);
73 void LoadUrl(
74 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,
85 const base::android::JavaParamRef<jstring>& virtual_url_for_data_url,
86 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,
Brandon Wyliea20e67ae2022-07-26 22:01:2093 jlong input_start,
94 jlong navigation_ui_data_ptr);
danakjc492bf82020-09-09 20:02:4495 void ClearSslPreferences(
96 JNIEnv* env,
97 const base::android::JavaParamRef<jobject>& /* obj */);
98 bool GetUseDesktopUserAgent(
99 JNIEnv* env,
100 const base::android::JavaParamRef<jobject>& /* obj */);
101 void SetUseDesktopUserAgent(
102 JNIEnv* env,
103 const base::android::JavaParamRef<jobject>& /* obj */,
104 jboolean state,
Shu Yanga0b22212022-07-08 16:44:52105 jboolean reload_on_state_change,
106 jint source);
danakjc492bf82020-09-09 20:02:44107 base::android::ScopedJavaLocalRef<jobject> GetEntryAtIndex(
108 JNIEnv* env,
109 const base::android::JavaParamRef<jobject>& obj,
110 int index);
111 base::android::ScopedJavaLocalRef<jobject> GetVisibleEntry(
112 JNIEnv* env,
113 const base::android::JavaParamRef<jobject>& /* obj */);
114 base::android::ScopedJavaLocalRef<jobject> GetPendingEntry(
115 JNIEnv* env,
116 const base::android::JavaParamRef<jobject>& /* obj */);
117 int GetNavigationHistory(JNIEnv* env,
118 const base::android::JavaParamRef<jobject>& obj,
119 const base::android::JavaParamRef<jobject>& history);
120 void GetDirectedNavigationHistory(
121 JNIEnv* env,
122 const base::android::JavaParamRef<jobject>& obj,
123 const base::android::JavaParamRef<jobject>& history,
124 jboolean is_forward,
125 jint max_entries);
126 void ClearHistory(JNIEnv* env,
127 const base::android::JavaParamRef<jobject>& obj);
128 int GetLastCommittedEntryIndex(
129 JNIEnv* env,
130 const base::android::JavaParamRef<jobject>& obj);
131 jboolean RemoveEntryAtIndex(JNIEnv* env,
132 const base::android::JavaParamRef<jobject>& obj,
133 jint index);
134 void PruneForwardEntries(JNIEnv* env,
135 const base::android::JavaParamRef<jobject>& obj);
136 base::android::ScopedJavaLocalRef<jstring> GetEntryExtraData(
137 JNIEnv* env,
138 const base::android::JavaParamRef<jobject>& obj,
139 jint index,
140 const base::android::JavaParamRef<jstring>& jkey);
141 void SetEntryExtraData(JNIEnv* env,
142 const base::android::JavaParamRef<jobject>& obj,
143 jint index,
144 const base::android::JavaParamRef<jstring>& jkey,
145 const base::android::JavaParamRef<jstring>& jvalue);
146 jboolean IsEntryMarkedToBeSkipped(
147 JNIEnv* env,
148 const base::android::JavaParamRef<jobject>& obj,
149 jint index);
150
Michael Thiessen928d0e22021-07-30 18:14:36151 private:
Rakina Zata Amni148dcad72022-06-08 14:53:50152 void SetUseDesktopUserAgentInternal(bool enabled,
153 bool reload_on_state_change);
154
Keishi Hattori0e45c022021-11-27 09:25:52155 raw_ptr<NavigationControllerImpl> navigation_controller_;
danakjc492bf82020-09-09 20:02:44156 base::android::ScopedJavaGlobalRef<jobject> obj_;
Rakina Zata Amni148dcad72022-06-08 14:53:50157 base::WeakPtrFactory<NavigationControllerAndroid> weak_factory_{this};
danakjc492bf82020-09-09 20:02:44158};
159
160} // namespace content
161
162#endif // CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_