c2cffa9027e4f9cdc315015ccd6c583a314bee0b
[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 int getBackgroundColor() {
89         return nativeGetBackgroundColor(mNativeWebContentsAndroid);
90     }
91
92     @Override
93     public void addStyleSheetByURL(String url) {
94         nativeAddStyleSheetByURL(mNativeWebContentsAndroid, url);
95     }
96
97     @Override
98     public void showInterstitialPage(
99             String url, long interstitialPageDelegateAndroid) {
100         nativeShowInterstitialPage(mNativeWebContentsAndroid, url, interstitialPageDelegateAndroid);
101     }
102
103     @Override
104     public boolean isShowingInterstitialPage() {
105         return nativeIsShowingInterstitialPage(mNativeWebContentsAndroid);
106     }
107
108     @Override
109     public boolean isReady() {
110         return nativeIsRenderWidgetHostViewReady(mNativeWebContentsAndroid);
111     }
112
113     @Override
114     public void exitFullscreen() {
115         nativeExitFullscreen(mNativeWebContentsAndroid);
116     }
117
118     @Override
119     public void updateTopControlsState(boolean enableHiding, boolean enableShowing,
120             boolean animate) {
121         nativeUpdateTopControlsState(mNativeWebContentsAndroid, enableHiding,
122                 enableShowing, animate);
123     }
124
125     @Override
126     public void showImeIfNeeded() {
127         nativeShowImeIfNeeded(mNativeWebContentsAndroid);
128     }
129
130     @Override
131     public void scrollFocusedEditableNodeIntoView() {
132         // The native side keeps track of whether the zoom and scroll actually occurred. It is
133         // more efficient to do it this way and sometimes fire an unnecessary message rather
134         // than synchronize with the renderer and always have an additional message.
135         nativeScrollFocusedEditableNodeIntoView(mNativeWebContentsAndroid);
136     }
137
138     @Override
139     public void selectWordAroundCaret() {
140         nativeSelectWordAroundCaret(mNativeWebContentsAndroid);
141     }
142
143     @Override
144     public String getUrl() {
145         return nativeGetURL(mNativeWebContentsAndroid);
146     }
147
148     @Override
149     public boolean isIncognito() {
150         return nativeIsIncognito(mNativeWebContentsAndroid);
151     }
152
153     @Override
154     public void resumeResponseDeferredAtStart() {
155          nativeResumeResponseDeferredAtStart(mNativeWebContentsAndroid);
156     }
157
158     @Override
159     public void setHasPendingNavigationTransitionForTesting() {
160          nativeSetHasPendingNavigationTransitionForTesting(mNativeWebContentsAndroid);
161     }
162
163     @Override
164     public void setNavigationTransitionDelegate(NavigationTransitionDelegate delegate) {
165         mNavigationTransitionDelegate = delegate;
166     }
167
168     /**
169      * Inserts the provided markup sandboxed into the frame.
170      */
171     @Override
172     public void setupTransitionView(String markup) {
173         nativeSetupTransitionView(mNativeWebContentsAndroid, markup);
174     }
175
176     /**
177      * Hides transition elements specified by the selector, and activates any
178      * exiting-transition stylesheets.
179      */
180     @Override
181     public void beginExitTransition(String cssSelector) {
182         nativeBeginExitTransition(mNativeWebContentsAndroid, cssSelector);
183     }
184
185     @CalledByNative
186     private void didDeferAfterResponseStarted(String markup, String cssSelector,
187             String enteringColor) {
188         if (mNavigationTransitionDelegate != null ) {
189             mNavigationTransitionDelegate.didDeferAfterResponseStarted(markup,
190                     cssSelector, enteringColor);
191         }
192     }
193
194     @CalledByNative
195     private boolean willHandleDeferAfterResponseStarted() {
196         if (mNavigationTransitionDelegate == null) return false;
197         return mNavigationTransitionDelegate.willHandleDeferAfterResponseStarted();
198     }
199
200     @CalledByNative
201     private void addEnteringStylesheetToTransition(String stylesheet) {
202         if (mNavigationTransitionDelegate != null ) {
203             mNavigationTransitionDelegate.addEnteringStylesheetToTransition(stylesheet);
204         }
205     }
206
207     @CalledByNative
208     private void didStartNavigationTransitionForFrame(long frameId) {
209         if (mNavigationTransitionDelegate != null ) {
210             mNavigationTransitionDelegate.didStartNavigationTransitionForFrame(frameId);
211         }
212     }
213
214     @Override
215     public void evaluateJavaScript(String script, JavaScriptCallback callback,
216             boolean startRenderer) {
217          nativeEvaluateJavaScript(mNativeWebContentsAndroid, script, callback, true);
218     }
219
220     @CalledByNative
221     private static void onEvaluateJavaScriptResult(
222             String jsonResult, JavaScriptCallback callback) {
223         callback.handleJavaScriptResult(jsonResult);
224     }
225
226     private native String nativeGetTitle(long nativeWebContentsAndroid);
227     private native String nativeGetVisibleURL(long nativeWebContentsAndroid);
228     private native void nativeStop(long nativeWebContentsAndroid);
229     private native void nativeInsertCSS(long nativeWebContentsAndroid, String css);
230     private native void nativeOnHide(long nativeWebContentsAndroid);
231     private native void nativeOnShow(long nativeWebContentsAndroid);
232     private native int nativeGetBackgroundColor(long nativeWebContentsAndroid);
233     private native void nativeAddStyleSheetByURL(long nativeWebContentsAndroid,
234             String url);
235     private native void nativeShowInterstitialPage(long nativeWebContentsAndroid,
236             String url, long nativeInterstitialPageDelegateAndroid);
237     private native boolean nativeIsShowingInterstitialPage(long nativeWebContentsAndroid);
238     private native boolean nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid);
239     private native void nativeExitFullscreen(long nativeWebContentsAndroid);
240     private native void nativeUpdateTopControlsState(long nativeWebContentsAndroid,
241             boolean enableHiding, boolean enableShowing, boolean animate);
242     private native void nativeShowImeIfNeeded(long nativeWebContentsAndroid);
243     private native void nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid);
244     private native void nativeSelectWordAroundCaret(long nativeWebContentsAndroid);
245     private native String nativeGetURL(long nativeWebContentsAndroid);
246     private native boolean nativeIsIncognito(long nativeWebContentsAndroid);
247     private native void nativeResumeResponseDeferredAtStart(long nativeWebContentsAndroid);
248     private native void nativeSetHasPendingNavigationTransitionForTesting(
249             long nativeWebContentsAndroid);
250     private native void nativeSetupTransitionView(long nativeWebContentsAndroid,
251             String markup);
252     private native void nativeBeginExitTransition(long nativeWebContentsAndroid,
253             String cssSelector);
254     private native void nativeEvaluateJavaScript(long nativeWebContentsAndroid,
255             String script, JavaScriptCallback callback, boolean startRenderer);
256 }