• 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.webcontents;
6 
7 import org.chromium.base.CalledByNative;
8 import org.chromium.base.JNINamespace;
9 import org.chromium.content_public.browser.JavaScriptCallback;
10 import org.chromium.content_public.browser.NavigationController;
11 import org.chromium.content_public.browser.NavigationTransitionDelegate;
12 import org.chromium.content_public.browser.WebContents;
13 
14 /**
15  * The WebContentsImpl Java wrapper to allow communicating with the native WebContentsImpl
16  * object.
17  */
18 @JNINamespace("content")
19 //TODO(tedchoc): Remove the package restriction once this class moves to a non-public content
20 //               package whose visibility will be enforced via DEPS.
21 /* package */ class WebContentsImpl implements WebContents {
22 
23     private long mNativeWebContentsAndroid;
24     private NavigationController mNavigationController;
25 
26     private NavigationTransitionDelegate mNavigationTransitionDelegate = null;
27 
WebContentsImpl( long nativeWebContentsAndroid, NavigationController navigationController)28     private WebContentsImpl(
29             long nativeWebContentsAndroid, NavigationController navigationController) {
30         mNativeWebContentsAndroid = nativeWebContentsAndroid;
31         mNavigationController = navigationController;
32     }
33 
34     @CalledByNative
create( long nativeWebContentsAndroid, NavigationController navigationController)35     private static WebContentsImpl create(
36             long nativeWebContentsAndroid, NavigationController navigationController) {
37         return new WebContentsImpl(nativeWebContentsAndroid, navigationController);
38     }
39 
40     @CalledByNative
destroy()41     private void destroy() {
42         mNativeWebContentsAndroid = 0;
43         mNavigationController = null;
44     }
45 
46     @CalledByNative
getNativePointer()47     private long getNativePointer() {
48         return mNativeWebContentsAndroid;
49     }
50 
51     @Override
getNavigationController()52     public NavigationController getNavigationController() {
53         return mNavigationController;
54     }
55 
56     @Override
getTitle()57     public String getTitle() {
58         return nativeGetTitle(mNativeWebContentsAndroid);
59     }
60 
61     @Override
getVisibleUrl()62     public String getVisibleUrl() {
63         return nativeGetVisibleURL(mNativeWebContentsAndroid);
64     }
65 
66     @Override
stop()67     public void stop() {
68         nativeStop(mNativeWebContentsAndroid);
69     }
70 
71     @Override
insertCSS(String css)72     public void insertCSS(String css) {
73         if (mNativeWebContentsAndroid == 0) return;
74         nativeInsertCSS(mNativeWebContentsAndroid, css);
75     }
76 
77     @Override
onHide()78     public void onHide() {
79          nativeOnHide(mNativeWebContentsAndroid);
80     }
81 
82     @Override
onShow()83     public void onShow() {
84         nativeOnShow(mNativeWebContentsAndroid);
85     }
86 
87     @Override
releaseMediaPlayers()88     public void releaseMediaPlayers() {
89         nativeReleaseMediaPlayers(mNativeWebContentsAndroid);
90     }
91 
92     @Override
getBackgroundColor()93     public int getBackgroundColor() {
94         return nativeGetBackgroundColor(mNativeWebContentsAndroid);
95     }
96 
97     @Override
addStyleSheetByURL(String url)98     public void addStyleSheetByURL(String url) {
99         nativeAddStyleSheetByURL(mNativeWebContentsAndroid, url);
100     }
101 
102     @Override
showInterstitialPage( String url, long interstitialPageDelegateAndroid)103     public void showInterstitialPage(
104             String url, long interstitialPageDelegateAndroid) {
105         nativeShowInterstitialPage(mNativeWebContentsAndroid, url, interstitialPageDelegateAndroid);
106     }
107 
108     @Override
isShowingInterstitialPage()109     public boolean isShowingInterstitialPage() {
110         return nativeIsShowingInterstitialPage(mNativeWebContentsAndroid);
111     }
112 
113     @Override
isReady()114     public boolean isReady() {
115         return nativeIsRenderWidgetHostViewReady(mNativeWebContentsAndroid);
116     }
117 
118     @Override
exitFullscreen()119     public void exitFullscreen() {
120         nativeExitFullscreen(mNativeWebContentsAndroid);
121     }
122 
123     @Override
updateTopControlsState(boolean enableHiding, boolean enableShowing, boolean animate)124     public void updateTopControlsState(boolean enableHiding, boolean enableShowing,
125             boolean animate) {
126         nativeUpdateTopControlsState(mNativeWebContentsAndroid, enableHiding,
127                 enableShowing, animate);
128     }
129 
130     @Override
showImeIfNeeded()131     public void showImeIfNeeded() {
132         nativeShowImeIfNeeded(mNativeWebContentsAndroid);
133     }
134 
135     @Override
scrollFocusedEditableNodeIntoView()136     public void scrollFocusedEditableNodeIntoView() {
137         // The native side keeps track of whether the zoom and scroll actually occurred. It is
138         // more efficient to do it this way and sometimes fire an unnecessary message rather
139         // than synchronize with the renderer and always have an additional message.
140         nativeScrollFocusedEditableNodeIntoView(mNativeWebContentsAndroid);
141     }
142 
143     @Override
selectWordAroundCaret()144     public void selectWordAroundCaret() {
145         nativeSelectWordAroundCaret(mNativeWebContentsAndroid);
146     }
147 
148     @Override
getUrl()149     public String getUrl() {
150         return nativeGetURL(mNativeWebContentsAndroid);
151     }
152 
153     @Override
isIncognito()154     public boolean isIncognito() {
155         return nativeIsIncognito(mNativeWebContentsAndroid);
156     }
157 
158     @Override
resumeResponseDeferredAtStart()159     public void resumeResponseDeferredAtStart() {
160          nativeResumeResponseDeferredAtStart(mNativeWebContentsAndroid);
161     }
162 
163     @Override
setHasPendingNavigationTransitionForTesting()164     public void setHasPendingNavigationTransitionForTesting() {
165          nativeSetHasPendingNavigationTransitionForTesting(mNativeWebContentsAndroid);
166     }
167 
168     @Override
setNavigationTransitionDelegate(NavigationTransitionDelegate delegate)169     public void setNavigationTransitionDelegate(NavigationTransitionDelegate delegate) {
170         mNavigationTransitionDelegate = delegate;
171     }
172 
173     /**
174      * Inserts the provided markup sandboxed into the frame.
175      */
176     @Override
setupTransitionView(String markup)177     public void setupTransitionView(String markup) {
178         nativeSetupTransitionView(mNativeWebContentsAndroid, markup);
179     }
180 
181     /**
182      * Hides transition elements specified by the selector, and activates any
183      * exiting-transition stylesheets.
184      */
185     @Override
beginExitTransition(String cssSelector)186     public void beginExitTransition(String cssSelector) {
187         nativeBeginExitTransition(mNativeWebContentsAndroid, cssSelector);
188     }
189 
190     @CalledByNative
didDeferAfterResponseStarted(String markup, String cssSelector, String enteringColor)191     private void didDeferAfterResponseStarted(String markup, String cssSelector,
192             String enteringColor) {
193         if (mNavigationTransitionDelegate != null) {
194             mNavigationTransitionDelegate.didDeferAfterResponseStarted(markup,
195                     cssSelector, enteringColor);
196         }
197     }
198 
199     @CalledByNative
willHandleDeferAfterResponseStarted()200     private boolean willHandleDeferAfterResponseStarted() {
201         if (mNavigationTransitionDelegate == null) return false;
202         return mNavigationTransitionDelegate.willHandleDeferAfterResponseStarted();
203     }
204 
205     @CalledByNative
addEnteringStylesheetToTransition(String stylesheet)206     private void addEnteringStylesheetToTransition(String stylesheet) {
207         if (mNavigationTransitionDelegate != null) {
208             mNavigationTransitionDelegate.addEnteringStylesheetToTransition(stylesheet);
209         }
210     }
211 
212     @CalledByNative
didStartNavigationTransitionForFrame(long frameId)213     private void didStartNavigationTransitionForFrame(long frameId) {
214         if (mNavigationTransitionDelegate != null) {
215             mNavigationTransitionDelegate.didStartNavigationTransitionForFrame(frameId);
216         }
217     }
218 
219     @Override
evaluateJavaScript(String script, JavaScriptCallback callback)220     public void evaluateJavaScript(String script, JavaScriptCallback callback) {
221          nativeEvaluateJavaScript(mNativeWebContentsAndroid, script, callback);
222     }
223 
224     @CalledByNative
onEvaluateJavaScriptResult( String jsonResult, JavaScriptCallback callback)225     private static void onEvaluateJavaScriptResult(
226             String jsonResult, JavaScriptCallback callback) {
227         callback.handleJavaScriptResult(jsonResult);
228     }
229 
nativeGetTitle(long nativeWebContentsAndroid)230     private native String nativeGetTitle(long nativeWebContentsAndroid);
nativeGetVisibleURL(long nativeWebContentsAndroid)231     private native String nativeGetVisibleURL(long nativeWebContentsAndroid);
nativeStop(long nativeWebContentsAndroid)232     private native void nativeStop(long nativeWebContentsAndroid);
nativeInsertCSS(long nativeWebContentsAndroid, String css)233     private native void nativeInsertCSS(long nativeWebContentsAndroid, String css);
nativeOnHide(long nativeWebContentsAndroid)234     private native void nativeOnHide(long nativeWebContentsAndroid);
nativeOnShow(long nativeWebContentsAndroid)235     private native void nativeOnShow(long nativeWebContentsAndroid);
nativeReleaseMediaPlayers(long nativeWebContentsAndroid)236     private native void nativeReleaseMediaPlayers(long nativeWebContentsAndroid);
nativeGetBackgroundColor(long nativeWebContentsAndroid)237     private native int nativeGetBackgroundColor(long nativeWebContentsAndroid);
nativeAddStyleSheetByURL(long nativeWebContentsAndroid, String url)238     private native void nativeAddStyleSheetByURL(long nativeWebContentsAndroid,
239             String url);
nativeShowInterstitialPage(long nativeWebContentsAndroid, String url, long nativeInterstitialPageDelegateAndroid)240     private native void nativeShowInterstitialPage(long nativeWebContentsAndroid,
241             String url, long nativeInterstitialPageDelegateAndroid);
nativeIsShowingInterstitialPage(long nativeWebContentsAndroid)242     private native boolean nativeIsShowingInterstitialPage(long nativeWebContentsAndroid);
nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid)243     private native boolean nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid);
nativeExitFullscreen(long nativeWebContentsAndroid)244     private native void nativeExitFullscreen(long nativeWebContentsAndroid);
nativeUpdateTopControlsState(long nativeWebContentsAndroid, boolean enableHiding, boolean enableShowing, boolean animate)245     private native void nativeUpdateTopControlsState(long nativeWebContentsAndroid,
246             boolean enableHiding, boolean enableShowing, boolean animate);
nativeShowImeIfNeeded(long nativeWebContentsAndroid)247     private native void nativeShowImeIfNeeded(long nativeWebContentsAndroid);
nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid)248     private native void nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid);
nativeSelectWordAroundCaret(long nativeWebContentsAndroid)249     private native void nativeSelectWordAroundCaret(long nativeWebContentsAndroid);
nativeGetURL(long nativeWebContentsAndroid)250     private native String nativeGetURL(long nativeWebContentsAndroid);
nativeIsIncognito(long nativeWebContentsAndroid)251     private native boolean nativeIsIncognito(long nativeWebContentsAndroid);
nativeResumeResponseDeferredAtStart(long nativeWebContentsAndroid)252     private native void nativeResumeResponseDeferredAtStart(long nativeWebContentsAndroid);
nativeSetHasPendingNavigationTransitionForTesting( long nativeWebContentsAndroid)253     private native void nativeSetHasPendingNavigationTransitionForTesting(
254             long nativeWebContentsAndroid);
nativeSetupTransitionView(long nativeWebContentsAndroid, String markup)255     private native void nativeSetupTransitionView(long nativeWebContentsAndroid,
256             String markup);
nativeBeginExitTransition(long nativeWebContentsAndroid, String cssSelector)257     private native void nativeBeginExitTransition(long nativeWebContentsAndroid,
258             String cssSelector);
nativeEvaluateJavaScript(long nativeWebContentsAndroid, String script, JavaScriptCallback callback)259     private native void nativeEvaluateJavaScript(long nativeWebContentsAndroid,
260             String script, JavaScriptCallback callback);
261 }
262