Upstream version 10.38.208.0
[platform/framework/web/crosswalk.git] / src / content / public / android / java / src / org / chromium / content / browser / webcontents / WebContentsImpl.java
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
28     private WebContentsImpl(
29             long nativeWebContentsAndroid, NavigationController navigationController) {
30         mNativeWebContentsAndroid = nativeWebContentsAndroid;
31         mNavigationController = navigationController;
32     }
33
34     @CalledByNative
35     private static WebContentsImpl create(
36             long nativeWebContentsAndroid, NavigationController navigationController) {
37         return new WebContentsImpl(nativeWebContentsAndroid, navigationController);
38     }
39
40     @CalledByNative
41     private void destroy() {
42         mNativeWebContentsAndroid = 0;
43         mNavigationController = null;
44     }
45
46     @CalledByNative
47     private long getNativePointer() {
48         return mNativeWebContentsAndroid;
49     }
50
51     @Override
52     public NavigationController getNavigationController() {
53         return mNavigationController;
54     }
55
56     @Override
57     public String getTitle() {
58         return nativeGetTitle(mNativeWebContentsAndroid);
59     }
60
61     @Override
62     public String getVisibleUrl() {
63         return nativeGetVisibleURL(mNativeWebContentsAndroid);
64     }
65
66     @Override
67     public void stop() {
68         nativeStop(mNativeWebContentsAndroid);
69     }
70
71     @Override
72     public void insertCSS(String css) {
73         if (mNativeWebContentsAndroid == 0) return;
74         nativeInsertCSS(mNativeWebContentsAndroid, css);
75     }
76
77     @Override
78     public void onHide() {
79          nativeOnHide(mNativeWebContentsAndroid);
80     }
81
82     @Override
83     public void onShow() {
84         nativeOnShow(mNativeWebContentsAndroid);
85     }
86
87     @Override
88     public void releaseMediaPlayers() {
89         nativeReleaseMediaPlayers(mNativeWebContentsAndroid);
90     }
91
92     @Override
93     public int getBackgroundColor() {
94         return nativeGetBackgroundColor(mNativeWebContentsAndroid);
95     }
96
97     @Override
98     public void addStyleSheetByURL(String url) {
99         nativeAddStyleSheetByURL(mNativeWebContentsAndroid, url);
100     }
101
102     @Override
103     public void showInterstitialPage(
104             String url, long interstitialPageDelegateAndroid) {
105         nativeShowInterstitialPage(mNativeWebContentsAndroid, url, interstitialPageDelegateAndroid);
106     }
107
108     @Override
109     public boolean isShowingInterstitialPage() {
110         return nativeIsShowingInterstitialPage(mNativeWebContentsAndroid);
111     }
112
113     @Override
114     public boolean isReady() {
115         return nativeIsRenderWidgetHostViewReady(mNativeWebContentsAndroid);
116     }
117
118     @Override
119     public void exitFullscreen() {
120         nativeExitFullscreen(mNativeWebContentsAndroid);
121     }
122
123     @Override
124     public void updateTopControlsState(boolean enableHiding, boolean enableShowing,
125             boolean animate) {
126         nativeUpdateTopControlsState(mNativeWebContentsAndroid, enableHiding,
127                 enableShowing, animate);
128     }
129
130     @Override
131     public void showImeIfNeeded() {
132         nativeShowImeIfNeeded(mNativeWebContentsAndroid);
133     }
134
135     @Override
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
144     public void selectWordAroundCaret() {
145         nativeSelectWordAroundCaret(mNativeWebContentsAndroid);
146     }
147
148     @Override
149     public String getUrl() {
150         return nativeGetURL(mNativeWebContentsAndroid);
151     }
152
153     @Override
154     public boolean isIncognito() {
155         return nativeIsIncognito(mNativeWebContentsAndroid);
156     }
157
158     @Override
159     public void resumeResponseDeferredAtStart() {
160          nativeResumeResponseDeferredAtStart(mNativeWebContentsAndroid);
161     }
162
163     @Override
164     public void setHasPendingNavigationTransitionForTesting() {
165          nativeSetHasPendingNavigationTransitionForTesting(mNativeWebContentsAndroid);
166     }
167
168     @Override
169     public void setNavigationTransitionDelegate(NavigationTransitionDelegate delegate) {
170         mNavigationTransitionDelegate = delegate;
171     }
172
173     /**
174      * Inserts the provided markup sandboxed into the frame.
175      */
176     @Override
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
186     public void beginExitTransition(String cssSelector) {
187         nativeBeginExitTransition(mNativeWebContentsAndroid, cssSelector);
188     }
189
190     @CalledByNative
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
200     private boolean willHandleDeferAfterResponseStarted() {
201         if (mNavigationTransitionDelegate == null) return false;
202         return mNavigationTransitionDelegate.willHandleDeferAfterResponseStarted();
203     }
204
205     @CalledByNative
206     private void addEnteringStylesheetToTransition(String stylesheet) {
207         if (mNavigationTransitionDelegate != null ) {
208             mNavigationTransitionDelegate.addEnteringStylesheetToTransition(stylesheet);
209         }
210     }
211
212     @CalledByNative
213     private void didStartNavigationTransitionForFrame(long frameId) {
214         if (mNavigationTransitionDelegate != null ) {
215             mNavigationTransitionDelegate.didStartNavigationTransitionForFrame(frameId);
216         }
217     }
218
219     @Override
220     public void evaluateJavaScript(String script, JavaScriptCallback callback,
221             boolean startRenderer) {
222          nativeEvaluateJavaScript(mNativeWebContentsAndroid, script, callback, true);
223     }
224
225     @CalledByNative
226     private static void onEvaluateJavaScriptResult(
227             String jsonResult, JavaScriptCallback callback) {
228         callback.handleJavaScriptResult(jsonResult);
229     }
230
231     private native String nativeGetTitle(long nativeWebContentsAndroid);
232     private native String nativeGetVisibleURL(long nativeWebContentsAndroid);
233     private native void nativeStop(long nativeWebContentsAndroid);
234     private native void nativeInsertCSS(long nativeWebContentsAndroid, String css);
235     private native void nativeOnHide(long nativeWebContentsAndroid);
236     private native void nativeOnShow(long nativeWebContentsAndroid);
237     private native void nativeReleaseMediaPlayers(long nativeWebContentsAndroid);
238     private native int nativeGetBackgroundColor(long nativeWebContentsAndroid);
239     private native void nativeAddStyleSheetByURL(long nativeWebContentsAndroid,
240             String url);
241     private native void nativeShowInterstitialPage(long nativeWebContentsAndroid,
242             String url, long nativeInterstitialPageDelegateAndroid);
243     private native boolean nativeIsShowingInterstitialPage(long nativeWebContentsAndroid);
244     private native boolean nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid);
245     private native void nativeExitFullscreen(long nativeWebContentsAndroid);
246     private native void nativeUpdateTopControlsState(long nativeWebContentsAndroid,
247             boolean enableHiding, boolean enableShowing, boolean animate);
248     private native void nativeShowImeIfNeeded(long nativeWebContentsAndroid);
249     private native void nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid);
250     private native void nativeSelectWordAroundCaret(long nativeWebContentsAndroid);
251     private native String nativeGetURL(long nativeWebContentsAndroid);
252     private native boolean nativeIsIncognito(long nativeWebContentsAndroid);
253     private native void nativeResumeResponseDeferredAtStart(long nativeWebContentsAndroid);
254     private native void nativeSetHasPendingNavigationTransitionForTesting(
255             long nativeWebContentsAndroid);
256     private native void nativeSetupTransitionView(long nativeWebContentsAndroid,
257             String markup);
258     private native void nativeBeginExitTransition(long nativeWebContentsAndroid,
259             String cssSelector);
260     private native void nativeEvaluateJavaScript(long nativeWebContentsAndroid,
261             String script, JavaScriptCallback callback, boolean startRenderer);
262 }