• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.content.browser.framehost;
6 
7 import android.graphics.Bitmap;
8 
9 import org.chromium.base.CalledByNative;
10 import org.chromium.base.JNINamespace;
11 import org.chromium.base.VisibleForTesting;
12 import org.chromium.content_public.browser.LoadUrlParams;
13 import org.chromium.content_public.browser.NavigationController;
14 import org.chromium.content_public.browser.NavigationEntry;
15 import org.chromium.content_public.browser.NavigationHistory;
16 
17 /**
18  * The NavigationControllerImpl Java wrapper to allow communicating with the native
19  * NavigationControllerImpl object.
20  */
21 @JNINamespace("content")
22 // TODO(tedchoc): Remove the package restriction once this class moves to a non-public content
23 //                package whose visibility will be enforced via DEPS.
24 /* package */ class NavigationControllerImpl implements NavigationController {
25 
26     private long mNativeNavigationControllerAndroid;
27 
NavigationControllerImpl(long nativeNavigationControllerAndroid)28     private NavigationControllerImpl(long nativeNavigationControllerAndroid) {
29         mNativeNavigationControllerAndroid = nativeNavigationControllerAndroid;
30     }
31 
32     @CalledByNative
create(long nativeNavigationControllerAndroid)33     private static NavigationControllerImpl create(long nativeNavigationControllerAndroid) {
34         return new NavigationControllerImpl(nativeNavigationControllerAndroid);
35     }
36 
37     @CalledByNative
destroy()38     private void destroy() {
39         mNativeNavigationControllerAndroid = 0;
40     }
41 
42     @Override
canGoBack()43     public boolean canGoBack() {
44         return mNativeNavigationControllerAndroid != 0
45                 && nativeCanGoBack(mNativeNavigationControllerAndroid);
46     }
47 
48     @Override
canGoForward()49     public boolean canGoForward() {
50         return mNativeNavigationControllerAndroid != 0
51                 && nativeCanGoForward(mNativeNavigationControllerAndroid);
52     }
53 
54     @Override
55     @VisibleForTesting
canGoToOffset(int offset)56     public boolean canGoToOffset(int offset) {
57         return mNativeNavigationControllerAndroid != 0
58                 && nativeCanGoToOffset(mNativeNavigationControllerAndroid, offset);
59     }
60 
61     @Override
goToOffset(int offset)62     public void goToOffset(int offset) {
63         if (mNativeNavigationControllerAndroid != 0) {
64             nativeGoToOffset(mNativeNavigationControllerAndroid, offset);
65         }
66     }
67 
68     @Override
goToNavigationIndex(int index)69     public void goToNavigationIndex(int index) {
70         if (mNativeNavigationControllerAndroid != 0) {
71             nativeGoToNavigationIndex(mNativeNavigationControllerAndroid, index);
72         }
73     }
74 
75     @Override
goBack()76     public void goBack() {
77         if (mNativeNavigationControllerAndroid != 0) {
78             nativeGoBack(mNativeNavigationControllerAndroid);
79         }
80     }
81 
82     @Override
goForward()83     public void goForward() {
84         if (mNativeNavigationControllerAndroid != 0) {
85             nativeGoForward(mNativeNavigationControllerAndroid);
86         }
87     }
88 
89     @Override
loadIfNecessary()90     public void loadIfNecessary() {
91         if (mNativeNavigationControllerAndroid != 0) {
92             nativeLoadIfNecessary(mNativeNavigationControllerAndroid);
93         }
94     }
95 
96     @Override
requestRestoreLoad()97     public void requestRestoreLoad() {
98         if (mNativeNavigationControllerAndroid != 0) {
99             nativeRequestRestoreLoad(mNativeNavigationControllerAndroid);
100         }
101     }
102 
103     @Override
reload(boolean checkForRepost)104     public void reload(boolean checkForRepost) {
105         if (mNativeNavigationControllerAndroid != 0) {
106             nativeReload(mNativeNavigationControllerAndroid, checkForRepost);
107         }
108     }
109 
110     @Override
reloadIgnoringCache(boolean checkForRepost)111     public void reloadIgnoringCache(boolean checkForRepost) {
112         if (mNativeNavigationControllerAndroid != 0) {
113             nativeReloadIgnoringCache(mNativeNavigationControllerAndroid, checkForRepost);
114         }
115     }
116 
117     @Override
cancelPendingReload()118     public void cancelPendingReload() {
119         if (mNativeNavigationControllerAndroid != 0) {
120             nativeCancelPendingReload(mNativeNavigationControllerAndroid);
121         }
122     }
123 
124     @Override
continuePendingReload()125     public void continuePendingReload() {
126         if (mNativeNavigationControllerAndroid != 0) {
127             nativeContinuePendingReload(mNativeNavigationControllerAndroid);
128         }
129     }
130 
131     @Override
loadUrl(LoadUrlParams params)132     public void loadUrl(LoadUrlParams params) {
133         if (mNativeNavigationControllerAndroid != 0) {
134             nativeLoadUrl(
135                     mNativeNavigationControllerAndroid,
136                     params.getUrl(),
137                     params.getLoadUrlType(), params.getTransitionType(),
138                     params.getReferrer() != null ? params.getReferrer().getUrl() : null,
139                     params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
140                     params.getUserAgentOverrideOption(),
141                     params.getExtraHeadersString(),
142                     params.getPostData(),
143                     params.getBaseUrl(),
144                     params.getVirtualUrlForDataUrl(),
145                     params.getCanLoadLocalResources(),
146                     params.getIsRendererInitiated());
147         }
148     }
149 
150     @Override
151     @VisibleForTesting
clearHistory()152     public void clearHistory() {
153         if (mNativeNavigationControllerAndroid != 0) {
154             nativeClearHistory(mNativeNavigationControllerAndroid);
155         }
156     }
157 
158     @Override
getNavigationHistory()159     public NavigationHistory getNavigationHistory() {
160         if (mNativeNavigationControllerAndroid == 0) return null;
161         NavigationHistory history = new NavigationHistory();
162         int currentIndex = nativeGetNavigationHistory(
163                    mNativeNavigationControllerAndroid, history);
164         history.setCurrentEntryIndex(currentIndex);
165         return history;
166     }
167 
168     @Override
getDirectedNavigationHistory(boolean isForward, int itemLimit)169     public NavigationHistory getDirectedNavigationHistory(boolean isForward, int itemLimit) {
170         if (mNativeNavigationControllerAndroid == 0) return null;
171         NavigationHistory history = new NavigationHistory();
172         nativeGetDirectedNavigationHistory(mNativeNavigationControllerAndroid,
173                    history, isForward, itemLimit);
174         return history;
175     }
176 
177     @Override
getOriginalUrlForVisibleNavigationEntry()178     public String getOriginalUrlForVisibleNavigationEntry() {
179         if (mNativeNavigationControllerAndroid == 0) return null;
180         return nativeGetOriginalUrlForVisibleNavigationEntry(mNativeNavigationControllerAndroid);
181     }
182 
183     @Override
clearSslPreferences()184     public void clearSslPreferences() {
185         if (mNativeNavigationControllerAndroid != 0) {
186             nativeClearSslPreferences(mNativeNavigationControllerAndroid);
187         }
188     }
189 
190     @Override
getUseDesktopUserAgent()191     public boolean getUseDesktopUserAgent() {
192         if (mNativeNavigationControllerAndroid == 0) return false;
193         return nativeGetUseDesktopUserAgent(mNativeNavigationControllerAndroid);
194     }
195 
196     @Override
setUseDesktopUserAgent(boolean override, boolean reloadOnChange)197     public void setUseDesktopUserAgent(boolean override, boolean reloadOnChange) {
198         if (mNativeNavigationControllerAndroid != 0) {
199             nativeSetUseDesktopUserAgent(mNativeNavigationControllerAndroid,
200                      override, reloadOnChange);
201         }
202     }
203 
204     @Override
getPendingEntry()205     public NavigationEntry getPendingEntry() {
206         if (mNativeNavigationControllerAndroid != 0) {
207             return nativeGetPendingEntry(mNativeNavigationControllerAndroid);
208         }
209 
210         return null;
211     }
212 
213     @CalledByNative
addToNavigationHistory(Object history, Object navigationEntry)214     private static void addToNavigationHistory(Object history, Object navigationEntry) {
215         ((NavigationHistory) history).addEntry((NavigationEntry) navigationEntry);
216     }
217 
218     @CalledByNative
createNavigationEntry(int index, String url, String virtualUrl, String originalUrl, String title, Bitmap favicon)219     private static NavigationEntry createNavigationEntry(int index, String url,
220             String virtualUrl, String originalUrl, String title, Bitmap favicon) {
221         return new NavigationEntry(index, url, virtualUrl, originalUrl, title, favicon);
222     }
223 
nativeCanGoBack(long nativeNavigationControllerAndroid)224     private native boolean nativeCanGoBack(long nativeNavigationControllerAndroid);
nativeCanGoForward(long nativeNavigationControllerAndroid)225     private native boolean nativeCanGoForward(long nativeNavigationControllerAndroid);
nativeLoadIfNecessary(long nativeNavigationControllerAndroid)226     private native void nativeLoadIfNecessary(long nativeNavigationControllerAndroid);
nativeRequestRestoreLoad(long nativeNavigationControllerAndroid)227     private native void nativeRequestRestoreLoad(long nativeNavigationControllerAndroid);
nativeCanGoToOffset( long nativeNavigationControllerAndroid, int offset)228     private native boolean nativeCanGoToOffset(
229             long nativeNavigationControllerAndroid, int offset);
nativeGoBack(long nativeNavigationControllerAndroid)230     private native void nativeGoBack(long nativeNavigationControllerAndroid);
nativeGoForward(long nativeNavigationControllerAndroid)231     private native void nativeGoForward(long nativeNavigationControllerAndroid);
nativeGoToOffset(long nativeNavigationControllerAndroid, int offset)232     private native void nativeGoToOffset(long nativeNavigationControllerAndroid, int offset);
nativeGoToNavigationIndex( long nativeNavigationControllerAndroid, int index)233     private native void nativeGoToNavigationIndex(
234             long nativeNavigationControllerAndroid, int index);
nativeCancelPendingReload(long nativeNavigationControllerAndroid)235     private native void nativeCancelPendingReload(long nativeNavigationControllerAndroid);
nativeContinuePendingReload(long nativeNavigationControllerAndroid)236     private native void nativeContinuePendingReload(long nativeNavigationControllerAndroid);
nativeReload(long nativeNavigationControllerAndroid, boolean checkForRepost)237     private native void nativeReload(long nativeNavigationControllerAndroid,
238             boolean checkForRepost);
nativeReloadIgnoringCache(long nativeNavigationControllerAndroid, boolean checkForRepost)239     private native void nativeReloadIgnoringCache(long nativeNavigationControllerAndroid,
240             boolean checkForRepost);
nativeLoadUrl( long nativeNavigationControllerAndroid, String url, int loadUrlType, int transitionType, String referrerUrl, int referrerPolicy, int uaOverrideOption, String extraHeaders, byte[] postData, String baseUrlForDataUrl, String virtualUrlForDataUrl, boolean canLoadLocalResources, boolean isRendererInitiated)241     private native void nativeLoadUrl(
242             long nativeNavigationControllerAndroid,
243             String url,
244             int loadUrlType,
245             int transitionType,
246             String referrerUrl,
247             int referrerPolicy,
248             int uaOverrideOption,
249             String extraHeaders,
250             byte[] postData,
251             String baseUrlForDataUrl,
252             String virtualUrlForDataUrl,
253             boolean canLoadLocalResources,
254             boolean isRendererInitiated);
nativeClearHistory(long nativeNavigationControllerAndroid)255     private native void nativeClearHistory(long nativeNavigationControllerAndroid);
nativeGetNavigationHistory(long nativeNavigationControllerAndroid, Object history)256     private native int nativeGetNavigationHistory(long nativeNavigationControllerAndroid,
257             Object history);
nativeGetDirectedNavigationHistory(long nativeNavigationControllerAndroid, NavigationHistory history, boolean isForward, int itemLimit)258     private native void nativeGetDirectedNavigationHistory(long nativeNavigationControllerAndroid,
259             NavigationHistory history, boolean isForward, int itemLimit);
nativeGetOriginalUrlForVisibleNavigationEntry( long nativeNavigationControllerAndroid)260     private native String nativeGetOriginalUrlForVisibleNavigationEntry(
261             long nativeNavigationControllerAndroid);
nativeClearSslPreferences(long nativeNavigationControllerAndroid)262     private native void nativeClearSslPreferences(long nativeNavigationControllerAndroid);
nativeGetUseDesktopUserAgent(long nativeNavigationControllerAndroid)263     private native boolean nativeGetUseDesktopUserAgent(long nativeNavigationControllerAndroid);
nativeSetUseDesktopUserAgent(long nativeNavigationControllerAndroid, boolean override, boolean reloadOnChange)264     private native void nativeSetUseDesktopUserAgent(long nativeNavigationControllerAndroid,
265             boolean override, boolean reloadOnChange);
nativeGetPendingEntry(long nativeNavigationControllerAndroid)266     private native NavigationEntry nativeGetPendingEntry(long nativeNavigationControllerAndroid);
267 }
268