WebContentsImpl.java revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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
5package org.chromium.content.browser.webcontents;
6
7import org.chromium.base.CalledByNative;
8import org.chromium.base.JNINamespace;
9import org.chromium.content_public.browser.NavigationController;
10import org.chromium.content_public.browser.WebContents;
11
12/**
13 * The WebContentsImpl Java wrapper to allow communicating with the native WebContentsImpl
14 * object.
15 */
16@JNINamespace("content")
17//TODO(tedchoc): Remove the package restriction once this class moves to a non-public content
18//               package whose visibility will be enforced via DEPS.
19/* package */ class WebContentsImpl implements WebContents {
20
21    private long mNativeWebContentsAndroid;
22    private NavigationController mNavigationController;
23
24    private WebContentsImpl(
25            long nativeWebContentsAndroid, NavigationController navigationController) {
26        mNativeWebContentsAndroid = nativeWebContentsAndroid;
27        mNavigationController = navigationController;
28    }
29
30    @CalledByNative
31    private static WebContentsImpl create(
32            long nativeWebContentsAndroid, NavigationController navigationController) {
33        return new WebContentsImpl(nativeWebContentsAndroid, navigationController);
34    }
35
36    @CalledByNative
37    private void destroy() {
38        mNativeWebContentsAndroid = 0;
39        mNavigationController = null;
40    }
41
42    @CalledByNative
43    private long getNativePointer() {
44        return mNativeWebContentsAndroid;
45    }
46
47    @Override
48    public NavigationController getNavigationController() {
49        return mNavigationController;
50    }
51
52    @Override
53    public String getTitle() {
54        return nativeGetTitle(mNativeWebContentsAndroid);
55    }
56
57    @Override
58    public String getVisibleUrl() {
59        return nativeGetVisibleURL(mNativeWebContentsAndroid);
60    }
61
62    @Override
63    public void stop() {
64        nativeStop(mNativeWebContentsAndroid);
65    }
66
67    @Override
68    public void insertCSS(String css) {
69        if (mNativeWebContentsAndroid == 0) return;
70        nativeInsertCSS(mNativeWebContentsAndroid, css);
71    }
72
73    @Override
74    public void onHide() {
75         nativeOnHide(mNativeWebContentsAndroid);
76    }
77
78    @Override
79    public void onShow() {
80        nativeOnShow(mNativeWebContentsAndroid);
81    }
82
83    @Override
84    public int getBackgroundColor() {
85        return nativeGetBackgroundColor(mNativeWebContentsAndroid);
86    }
87
88    @Override
89    public void addStyleSheetByURL(String url) {
90        nativeAddStyleSheetByURL(mNativeWebContentsAndroid, url);
91    }
92
93    @Override
94    public void showInterstitialPage(
95            String url, long interstitialPageDelegateAndroid) {
96        nativeShowInterstitialPage(mNativeWebContentsAndroid, url, interstitialPageDelegateAndroid);
97    }
98
99    @Override
100    public boolean isShowingInterstitialPage() {
101        return nativeIsShowingInterstitialPage(mNativeWebContentsAndroid);
102    }
103
104    @Override
105    public boolean isReady() {
106        return nativeIsRenderWidgetHostViewReady(mNativeWebContentsAndroid);
107    }
108
109    @Override
110    public void exitFullscreen() {
111        nativeExitFullscreen(mNativeWebContentsAndroid);
112    }
113
114    @Override
115    public void updateTopControlsState(boolean enableHiding, boolean enableShowing,
116            boolean animate) {
117        nativeUpdateTopControlsState(mNativeWebContentsAndroid, enableHiding,
118                enableShowing, animate);
119    }
120
121    @Override
122    public void showImeIfNeeded() {
123        nativeShowImeIfNeeded(mNativeWebContentsAndroid);
124    }
125
126    @Override
127    public void scrollFocusedEditableNodeIntoView() {
128        // The native side keeps track of whether the zoom and scroll actually occurred. It is
129        // more efficient to do it this way and sometimes fire an unnecessary message rather
130        // than synchronize with the renderer and always have an additional message.
131        nativeScrollFocusedEditableNodeIntoView(mNativeWebContentsAndroid);
132    }
133
134    @Override
135    public void selectWordAroundCaret() {
136        nativeSelectWordAroundCaret(mNativeWebContentsAndroid);
137    }
138
139    private native String nativeGetTitle(long nativeWebContentsAndroid);
140    private native String nativeGetVisibleURL(long nativeWebContentsAndroid);
141    private native void nativeStop(long nativeWebContentsAndroid);
142    private native void nativeInsertCSS(long nativeWebContentsAndroid, String css);
143    private native void nativeOnHide(long nativeWebContentsAndroid);
144    private native void nativeOnShow(long nativeWebContentsAndroid);
145    private native int nativeGetBackgroundColor(long nativeWebContentsAndroid);
146    private native void nativeAddStyleSheetByURL(long nativeWebContentsAndroid,
147            String url);
148    private native void nativeShowInterstitialPage(long nativeWebContentsAndroid,
149            String url, long nativeInterstitialPageDelegateAndroid);
150    private native boolean nativeIsShowingInterstitialPage(long nativeWebContentsAndroid);
151    private native boolean nativeIsRenderWidgetHostViewReady(long nativeWebContentsAndroid);
152    private native void nativeExitFullscreen(long nativeWebContentsAndroid);
153    private native void nativeUpdateTopControlsState(long nativeWebContentsAndroid,
154            boolean enableHiding, boolean enableShowing, boolean animate);
155    private native void nativeShowImeIfNeeded(long nativeWebContentsAndroid);
156    private native void nativeScrollFocusedEditableNodeIntoView(long nativeWebContentsAndroid);
157    private native void nativeSelectWordAroundCaret(long nativeWebContentsAndroid);
158}
159