blob: 9f51c3556324e98bc8ca68a7c11259724cabb427 [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
Andrew Grieveab2c91582025-07-02 19:53:1340 jboolean CanGoBack(JNIEnv* env);
41 jboolean CanGoForward(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4442 jboolean CanGoToOffset(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4443 jint offset);
Andrew Grieveab2c91582025-07-02 19:53:1344 void GoBack(JNIEnv* env);
45 void GoForward(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4446 void GoToOffset(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4447 jint offset);
Andrew Grieveab2c91582025-07-02 19:53:1348 jboolean IsInitialNavigation(JNIEnv* env);
49 void LoadIfNecessary(JNIEnv* env);
50 void ContinuePendingReload(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4451 void Reload(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4452 jboolean check_for_repost);
53 void ReloadBypassingCache(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4454 jboolean check_for_repost);
Andrew Grieveab2c91582025-07-02 19:53:1355 jboolean NeedsReload(JNIEnv* env);
56 void SetNeedsReload(JNIEnv* env);
57 void CancelPendingReload(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4458 void GoToNavigationIndex(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4459 jint index);
Torne (Richard Coles)d07c794b2023-11-21 23:55:4960 base::android::ScopedJavaLocalRef<jobject> LoadUrl(
danakjc492bf82020-09-09 20:02:4461 JNIEnv* env,
danakjc492bf82020-09-09 20:02:4462 const base::android::JavaParamRef<jstring>& url,
63 jint load_url_type,
64 jint transition_type,
65 const base::android::JavaParamRef<jstring>& j_referrer_url,
66 jint referrer_policy,
67 jint ua_override_option,
68 const base::android::JavaParamRef<jstring>& extra_headers,
69 const base::android::JavaParamRef<jobject>& j_post_data,
70 const base::android::JavaParamRef<jstring>& base_url_for_data_url,
Shu Yang112ad492024-07-25 17:11:5471 const base::android::JavaParamRef<jstring>& virtual_url_for_special_cases,
danakjc492bf82020-09-09 20:02:4472 const base::android::JavaParamRef<jstring>& data_url_as_string,
73 jboolean can_load_local_resources,
74 jboolean is_renderer_initiated,
Michael Thiessend3c9a032021-04-19 17:01:3775 jboolean should_replace_current_entry,
76 const base::android::JavaParamRef<jobject>& j_initiator_origin,
77 jboolean has_user_gesture,
78 jboolean should_clear_history_list,
Liam Brady767b85e2023-07-05 16:59:5979 const base::android::JavaParamRef<jobject>&
80 j_additional_navigation_params,
Brandon Wyliea20e67ae2022-07-26 22:01:2081 jlong input_start,
Min Qin76ab3dd2024-02-07 21:23:5082 jlong navigation_ui_data_ptr,
83 jboolean is_pdf);
Andrew Grieveab2c91582025-07-02 19:53:1384 void ClearSslPreferences(JNIEnv* env);
85 bool GetUseDesktopUserAgent(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4486 void SetUseDesktopUserAgent(
87 JNIEnv* env,
danakjc492bf82020-09-09 20:02:4488 jboolean state,
Shu Yanga0b22212022-07-08 16:44:5289 jboolean reload_on_state_change,
90 jint source);
Andrew Grieveab2c91582025-07-02 19:53:1391 base::android::ScopedJavaLocalRef<jobject> GetEntryAtIndex(JNIEnv* env,
92 int index);
93 base::android::ScopedJavaLocalRef<jobject> GetVisibleEntry(JNIEnv* env);
94 base::android::ScopedJavaLocalRef<jobject> GetPendingEntry(JNIEnv* env);
danakjc492bf82020-09-09 20:02:4495 int GetNavigationHistory(JNIEnv* env,
danakjc492bf82020-09-09 20:02:4496 const base::android::JavaParamRef<jobject>& history);
97 void GetDirectedNavigationHistory(
98 JNIEnv* env,
danakjc492bf82020-09-09 20:02:4499 const base::android::JavaParamRef<jobject>& history,
100 jboolean is_forward,
101 jint max_entries);
Andrew Grieveab2c91582025-07-02 19:53:13102 void ClearHistory(JNIEnv* env);
103 int GetLastCommittedEntryIndex(JNIEnv* env);
danakjc492bf82020-09-09 20:02:44104 jboolean RemoveEntryAtIndex(JNIEnv* env,
danakjc492bf82020-09-09 20:02:44105 jint index);
Andrew Grieveab2c91582025-07-02 19:53:13106 void PruneForwardEntries(JNIEnv* env);
danakjc492bf82020-09-09 20:02:44107 base::android::ScopedJavaLocalRef<jstring> GetEntryExtraData(
108 JNIEnv* env,
danakjc492bf82020-09-09 20:02:44109 jint index,
110 const base::android::JavaParamRef<jstring>& jkey);
111 void SetEntryExtraData(JNIEnv* env,
danakjc492bf82020-09-09 20:02:44112 jint index,
113 const base::android::JavaParamRef<jstring>& jkey,
114 const base::android::JavaParamRef<jstring>& jvalue);
Jenna Himawana6d3fab72025-04-29 01:43:00115 void CopyStateFrom(JNIEnv* env,
116 jlong source_navigation_controller_ptr,
117 jboolean needs_reload);
danakjc492bf82020-09-09 20:02:44118
Michael Thiessen928d0e22021-07-30 18:14:36119 private:
Rakina Zata Amni148dcad72022-06-08 14:53:50120 void SetUseDesktopUserAgentInternal(bool enabled,
121 bool reload_on_state_change);
122
Keishi Hattori0e45c022021-11-27 09:25:52123 raw_ptr<NavigationControllerImpl> navigation_controller_;
danakjc492bf82020-09-09 20:02:44124 base::android::ScopedJavaGlobalRef<jobject> obj_;
Rakina Zata Amni148dcad72022-06-08 14:53:50125 base::WeakPtrFactory<NavigationControllerAndroid> weak_factory_{this};
danakjc492bf82020-09-09 20:02:44126};
127
128} // namespace content
129
130#endif // CONTENT_BROWSER_RENDERER_HOST_NAVIGATION_CONTROLLER_ANDROID_H_