1// Copyright 2014 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_public.browser;
6
7/**
8 * The WebContents Java wrapper to allow communicating with the native WebContents object.
9 */
10public interface WebContents {
11    /**
12     * @return The navigation controller associated with this WebContents.
13     */
14    NavigationController getNavigationController();
15
16    /**
17     * @return The title for the current visible page.
18     */
19    String getTitle();
20
21    /**
22     * @return The URL for the current visible page.
23     */
24    String getVisibleUrl();
25
26    /**
27     * Stop any pending navigation.
28     */
29    void stop();
30
31    /**
32     * Inserts css into main frame's document.
33     */
34    void insertCSS(String css);
35    /**
36     * To be called when the ContentView is hidden.
37     */
38    public void onHide();
39
40    /**
41     * To be called when the ContentView is shown.
42     */
43    public void onShow();
44
45    /**
46     * Stops all media players for this WebContents.
47     */
48    public void releaseMediaPlayers();
49
50    /**
51     * Get the Background color from underlying RenderWidgetHost for this WebContent.
52     */
53    public int getBackgroundColor();
54
55    /**
56     * Requests the renderer insert a link to the specified stylesheet in the
57     * main frame's document.
58     */
59    void addStyleSheetByURL(String url);
60
61    /**
62     * Shows an interstitial page driven by the passed in delegate.
63     *
64     * @param url The URL being blocked by the interstitial.
65     * @param delegate The delegate handling the interstitial.
66     */
67    public void showInterstitialPage(
68            String url, long interstitialPageDelegateAndroid);
69
70    /**
71     * @return Whether the page is currently showing an interstitial, such as a bad HTTPS page.
72     */
73    public boolean isShowingInterstitialPage();
74
75    /**
76     * If the view is ready to draw contents to the screen. In hardware mode,
77     * the initialization of the surface texture may not occur until after the
78     * view has been added to the layout. This method will return {@code true}
79     * once the texture is actually ready.
80     */
81    public boolean isReady();
82
83     /**
84     * Inform WebKit that Fullscreen mode has been exited by the user.
85     */
86    public void exitFullscreen();
87
88    /**
89     * Changes whether hiding the top controls is enabled.
90     *
91     * @param enableHiding Whether hiding the top controls should be enabled or not.
92     * @param enableShowing Whether showing the top controls should be enabled or not.
93     * @param animate Whether the transition should be animated or not.
94     */
95    public void updateTopControlsState(boolean enableHiding, boolean enableShowing,
96            boolean animate);
97
98    /**
99     * Shows the IME if the focused widget could accept text input.
100     */
101    public void showImeIfNeeded();
102
103    /**
104     * Brings the Editable to the visible area while IME is up to make easier for inputing text.
105     */
106    public void scrollFocusedEditableNodeIntoView();
107
108    /**
109     * Selects the word around the caret, if any.
110     * The caller can check if selection actually occurred by listening to OnSelectionChanged.
111     */
112    public void selectWordAroundCaret();
113
114    /**
115     * Get the URL of the current page.
116     *
117     * @return The URL of the current page.
118     */
119    public String getUrl();
120
121    /**
122     * Get the InCognito state of WebContents.
123     *
124     * @return whether this WebContents is in InCognito mode or not
125     */
126    public boolean isIncognito();
127
128    /**
129     * Resumes the response which is deferred during start.
130     */
131    public void resumeResponseDeferredAtStart();
132
133    /**
134     * Set pending Navigation for transition testing on this WebContents.
135     */
136    public void setHasPendingNavigationTransitionForTesting();
137
138    /**
139     * Set delegate for notifying navigation transition.
140     */
141    public void setNavigationTransitionDelegate(NavigationTransitionDelegate delegate);
142
143    /**
144     * Inserts the provided markup sandboxed into the frame.
145     */
146    public void setupTransitionView(String markup);
147
148    /**
149     * Hides transition elements specified by the selector, and activates any
150     * exiting-transition stylesheets.
151     */
152    public void beginExitTransition(String cssSelector);
153
154    /**
155     * Injects the passed Javascript code in the current page and evaluates it.
156     * If a result is required, pass in a callback.
157     *
158     * @param script The Javascript to execute.
159     * @param callback The callback to be fired off when a result is ready. The script's
160     *                 result will be json encoded and passed as the parameter, and the call
161     *                 will be made on the main thread.
162     *                 If no result is required, pass null.
163     */
164    public void evaluateJavaScript(String script, JavaScriptCallback callback);
165
166}
167