blob: 46cc0a05dc9a335984d701a2bd4bcd783f98d047 [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,
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,
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,
96 jlong navigation_ui_data_ptr);
danakjc492bf82020-09-09 20:02:4497 void ClearSslPreferences(
98 JNIEnv* env,
99 const base::android::JavaParamRef<jobject>& /* obj */);
100 bool GetUseDesktopUserAgent(
101 JNIEnv* env,
102 const base::android::JavaParamRef<jobject>& /* obj */);
103 void SetUseDesktopUserAgent(
104 JNIEnv* env,
105 const base::android::JavaParamRef<jobject>& /* obj */,
106 jboolean state,
Shu Yanga0b22212022-07-08 16:44:52107 jboolean reload_on_state_change,
108 jint source);
danakjc492bf82020-09-09 20:02:44109 base::android::ScopedJavaLocalRef<jobject> GetEntryAtIndex(
110 JNIEnv* env,
111 const base::android::JavaParamRef<jobject>& obj,
112 int index);
113 base::android::ScopedJavaLocalRef<jobject> GetVisibleEntry(
114 JNIEnv* env,
115 const base::android::JavaParamRef<jobject>& /* obj */);
116 base::android::ScopedJavaLocalRef<jobject> GetPendingEntry(
117 JNIEnv* env,
118 const base::android::JavaParamRef<jobject>& /* obj */);
119 int GetNavigationHistory(JNIEnv* env,
120 const base::android::JavaParamRef<jobject>& obj,
121 const base::android::JavaParamRef<jobject>& history);
122 void GetDirectedNavigationHistory(
123 JNIEnv* env,
124 const base::android::JavaParamRef<jobject>& obj,
125 const base::android::JavaParamRef<jobject>& history,
126 jboolean is_forward,
127 jint max_entries);
128 void ClearHistory(JNIEnv* env,
129 const base::android::JavaParamRef<jobject>& obj);
130 int GetLastCommittedEntryIndex(
131 JNIEnv* env,
132 const base::android::JavaParamRef<jobject>& obj);
133 jboolean RemoveEntryAtIndex(JNIEnv* env,
134 const base::android::JavaParamRef<jobject>& obj,
135 jint index);
136 void PruneForwardEntries(JNIEnv* env,
137 const base::android::JavaParamRef<jobject>& obj);
138 base::android::ScopedJavaLocalRef<jstring> GetEntryExtraData(
139 JNIEnv* env,
140 const base::android::JavaParamRef<jobject>& obj,
141 jint index,
142 const base::android::JavaParamRef<jstring>& jkey);
143 void SetEntryExtraData(JNIEnv* env,
144 const base::android::JavaParamRef<jobject>& obj,
145 jint index,
146 const base::android::JavaParamRef<jstring>& jkey,
147 const base::android::JavaParamRef<jstring>& jvalue);
danakjc492bf82020-09-09 20:02:44148
Michael Thiessen928d0e22021-07-30 18:14:36149 private:
Rakina Zata Amni148dcad72022-06-08 14:53:50150 void SetUseDesktopUserAgentInternal(bool enabled,
151 bool reload_on_state_change);
152
Keishi Hattori0e45c022021-11-27 09:25:52153 raw_ptr<NavigationControllerImpl> navigation_controller_;
danakjc492bf82020-09-09 20:02:44154 base::android::ScopedJavaGlobalRef<jobject> obj_;
Rakina Zata Amni148dcad72022-06-08 14:53:50155 base::WeakPtrFactory<NavigationControllerAndroid> weak_factory_{this};
danakjc492bf82020-09-09 20:02:44156};
157
158} // namespace content
159
160#endif // CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_