1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)package org.chromium.content.browser.framehost;
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport android.graphics.Bitmap;
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.base.CalledByNative;
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.base.JNINamespace;
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting;
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.LoadUrlParams;
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.chromium.content_public.browser.NavigationController;
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.NavigationEntry;
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.NavigationHistory;
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/**
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * The NavigationControllerImpl Java wrapper to allow communicating with the native
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * NavigationControllerImpl object.
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)@JNINamespace("content")
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// TODO(tedchoc): Remove the package restriction once this class moves to a non-public content
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)//                package whose visibility will be enforced via DEPS.
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/* package */ class NavigationControllerImpl implements NavigationController {
25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private long mNativeNavigationControllerAndroid;
27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private NavigationControllerImpl(long nativeNavigationControllerAndroid) {
29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        mNativeNavigationControllerAndroid = nativeNavigationControllerAndroid;
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @CalledByNative
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static NavigationControllerImpl create(long nativeNavigationControllerAndroid) {
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        return new NavigationControllerImpl(nativeNavigationControllerAndroid);
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @CalledByNative
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private void destroy() {
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        mNativeNavigationControllerAndroid = 0;
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public boolean canGoBack() {
44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        return mNativeNavigationControllerAndroid != 0
45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                && nativeCanGoBack(mNativeNavigationControllerAndroid);
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public boolean canGoForward() {
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        return mNativeNavigationControllerAndroid != 0
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                && nativeCanGoForward(mNativeNavigationControllerAndroid);
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @VisibleForTesting
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public boolean canGoToOffset(int offset) {
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        return mNativeNavigationControllerAndroid != 0
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                && nativeCanGoToOffset(mNativeNavigationControllerAndroid, offset);
59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void goToOffset(int offset) {
63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (mNativeNavigationControllerAndroid != 0) {
64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            nativeGoToOffset(mNativeNavigationControllerAndroid, offset);
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void goToNavigationIndex(int index) {
70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (mNativeNavigationControllerAndroid != 0) {
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            nativeGoToNavigationIndex(mNativeNavigationControllerAndroid, index);
72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void goBack() {
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (mNativeNavigationControllerAndroid != 0) {
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            nativeGoBack(mNativeNavigationControllerAndroid);
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    @Override
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    public void goForward() {
84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        if (mNativeNavigationControllerAndroid != 0) {
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            nativeGoForward(mNativeNavigationControllerAndroid);
86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
87a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void loadIfNecessary() {
91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeLoadIfNecessary(mNativeNavigationControllerAndroid);
93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void requestRestoreLoad() {
98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeRequestRestoreLoad(mNativeNavigationControllerAndroid);
100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void reload(boolean checkForRepost) {
105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeReload(mNativeNavigationControllerAndroid, checkForRepost);
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void reloadIgnoringCache(boolean checkForRepost) {
112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeReloadIgnoringCache(mNativeNavigationControllerAndroid, checkForRepost);
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void cancelPendingReload() {
119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeCancelPendingReload(mNativeNavigationControllerAndroid);
121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    @Override
125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    public void continuePendingReload() {
126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        if (mNativeNavigationControllerAndroid != 0) {
127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            nativeContinuePendingReload(mNativeNavigationControllerAndroid);
128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        }
129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    }
130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public void loadUrl(LoadUrlParams params) {
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid != 0) {
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            nativeLoadUrl(
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    mNativeNavigationControllerAndroid,
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getUrl(),
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getLoadUrlType(), params.getTransitionType(),
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getReferrer() != null ? params.getReferrer().getUrl() : null,
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getReferrer() != null ? params.getReferrer().getPolicy() : 0,
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getUserAgentOverrideOption(),
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getExtraHeadersString(),
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getPostData(),
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getBaseUrl(),
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getVirtualUrlForDataUrl(),
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getCanLoadLocalResources(),
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    params.getIsRendererInitiated());
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @VisibleForTesting
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public void clearHistory() {
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid != 0) {
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            nativeClearHistory(mNativeNavigationControllerAndroid);
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public NavigationHistory getNavigationHistory() {
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid == 0) return null;
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        NavigationHistory history = new NavigationHistory();
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        int currentIndex = nativeGetNavigationHistory(
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                   mNativeNavigationControllerAndroid, history);
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        history.setCurrentEntryIndex(currentIndex);
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return history;
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public NavigationHistory getDirectedNavigationHistory(boolean isForward, int itemLimit) {
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid == 0) return null;
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        NavigationHistory history = new NavigationHistory();
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        nativeGetDirectedNavigationHistory(mNativeNavigationControllerAndroid,
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                   history, isForward, itemLimit);
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return history;
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public String getOriginalUrlForVisibleNavigationEntry() {
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid == 0) return null;
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return nativeGetOriginalUrlForVisibleNavigationEntry(mNativeNavigationControllerAndroid);
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public void clearSslPreferences() {
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid != 0) {
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            nativeClearSslPreferences(mNativeNavigationControllerAndroid);
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public boolean getUseDesktopUserAgent() {
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid == 0) return false;
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return nativeGetUseDesktopUserAgent(mNativeNavigationControllerAndroid);
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public void setUseDesktopUserAgent(boolean override, boolean reloadOnChange) {
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid != 0) {
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            nativeSetUseDesktopUserAgent(mNativeNavigationControllerAndroid,
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     override, reloadOnChange);
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @Override
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    public NavigationEntry getPendingEntry() {
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        if (mNativeNavigationControllerAndroid != 0) {
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            return nativeGetPendingEntry(mNativeNavigationControllerAndroid);
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        }
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return null;
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @CalledByNative
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private static void addToNavigationHistory(Object history, Object navigationEntry) {
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        ((NavigationHistory) history).addEntry((NavigationEntry) navigationEntry);
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    @CalledByNative
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private static NavigationEntry createNavigationEntry(int index, String url,
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String virtualUrl, String originalUrl, String title, Bitmap favicon) {
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        return new NavigationEntry(index, url, virtualUrl, originalUrl, title, favicon);
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native boolean nativeCanGoBack(long nativeNavigationControllerAndroid);
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native boolean nativeCanGoForward(long nativeNavigationControllerAndroid);
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeLoadIfNecessary(long nativeNavigationControllerAndroid);
227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeRequestRestoreLoad(long nativeNavigationControllerAndroid);
228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native boolean nativeCanGoToOffset(
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            long nativeNavigationControllerAndroid, int offset);
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeGoBack(long nativeNavigationControllerAndroid);
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeGoForward(long nativeNavigationControllerAndroid);
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeGoToOffset(long nativeNavigationControllerAndroid, int offset);
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeGoToNavigationIndex(
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            long nativeNavigationControllerAndroid, int index);
235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeCancelPendingReload(long nativeNavigationControllerAndroid);
236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeContinuePendingReload(long nativeNavigationControllerAndroid);
237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeReload(long nativeNavigationControllerAndroid,
238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            boolean checkForRepost);
239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private native void nativeReloadIgnoringCache(long nativeNavigationControllerAndroid,
240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch            boolean checkForRepost);
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native void nativeLoadUrl(
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            long nativeNavigationControllerAndroid,
2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String url,
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            int loadUrlType,
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            int transitionType,
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String referrerUrl,
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            int referrerPolicy,
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            int uaOverrideOption,
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String extraHeaders,
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            byte[] postData,
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String baseUrlForDataUrl,
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            String virtualUrlForDataUrl,
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            boolean canLoadLocalResources,
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            boolean isRendererInitiated);
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native void nativeClearHistory(long nativeNavigationControllerAndroid);
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native int nativeGetNavigationHistory(long nativeNavigationControllerAndroid,
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            Object history);
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native void nativeGetDirectedNavigationHistory(long nativeNavigationControllerAndroid,
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            NavigationHistory history, boolean isForward, int itemLimit);
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native String nativeGetOriginalUrlForVisibleNavigationEntry(
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            long nativeNavigationControllerAndroid);
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native void nativeClearSslPreferences(long nativeNavigationControllerAndroid);
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native boolean nativeGetUseDesktopUserAgent(long nativeNavigationControllerAndroid);
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native void nativeSetUseDesktopUserAgent(long nativeNavigationControllerAndroid,
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            boolean override, boolean reloadOnChange);
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    private native NavigationEntry nativeGetPendingEntry(long nativeNavigationControllerAndroid);
267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
268