[webview] rename unresponsive renderer APIs

Followup from API council review:

* Rename Renderer to RenderProcess for consistency with existing APIs.
* Make WebViewRenderProcess constructor public.
* Document 5 second minimum interval between successive callbacks.

Bug: 124767616
Bug: 123629980
Test: atest 'CtsWebkitTestCases'
Change-Id: I4416a97e8bb449c4a14a3617ef72a49c92aa3a83
This commit is contained in:
Tobias Sargeant
2019-03-07 21:29:31 +00:00
committed by Toby Sargeant
parent 707b4655d1
commit 39b68efcc3
6 changed files with 66 additions and 68 deletions

View File

@@ -54760,8 +54760,8 @@ package android.webkit {
method @NonNull public static ClassLoader getWebViewClassLoader();
method public android.webkit.WebViewClient getWebViewClient();
method @NonNull public android.os.Looper getWebViewLooper();
method @Nullable public android.webkit.WebViewRenderer getWebViewRenderer();
method @Nullable public android.webkit.WebViewRendererClient getWebViewRendererClient();
method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
method public void goBack();
method public void goBackOrForward(int);
method public void goForward();
@@ -54811,8 +54811,8 @@ package android.webkit {
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public static void setWebContentsDebuggingEnabled(boolean);
method public void setWebViewClient(android.webkit.WebViewClient);
method public void setWebViewRendererClient(@NonNull java.util.concurrent.Executor, @NonNull android.webkit.WebViewRendererClient);
method public void setWebViewRendererClient(@Nullable android.webkit.WebViewRendererClient);
method public void setWebViewRenderProcessClient(@NonNull java.util.concurrent.Executor, @NonNull android.webkit.WebViewRenderProcessClient);
method public void setWebViewRenderProcessClient(@Nullable android.webkit.WebViewRenderProcessClient);
method @Deprecated public boolean shouldDelayChildPressedState();
method @Deprecated public boolean showFindDialog(@Nullable String, boolean);
method public static void startSafeBrowsing(@NonNull android.content.Context, @Nullable android.webkit.ValueCallback<java.lang.Boolean>);
@@ -54928,14 +54928,15 @@ package android.webkit {
method @Deprecated public android.webkit.WebView getWebView();
}
public abstract class WebViewRenderer {
public abstract class WebViewRenderProcess {
ctor public WebViewRenderProcess();
method public abstract boolean terminate();
}
public abstract class WebViewRendererClient {
ctor public WebViewRendererClient();
method public abstract void onRendererResponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderer);
method public abstract void onRendererUnresponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderer);
public abstract class WebViewRenderProcessClient {
ctor public WebViewRenderProcessClient();
method public abstract void onRenderProcessResponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
method public abstract void onRenderProcessUnresponsive(@NonNull android.webkit.WebView, @Nullable android.webkit.WebViewRenderProcess);
}
}

View File

@@ -9748,8 +9748,8 @@ package android.webkit {
method public int getVisibleTitleHeight();
method public android.webkit.WebChromeClient getWebChromeClient();
method public android.webkit.WebViewClient getWebViewClient();
method public android.webkit.WebViewRenderer getWebViewRenderer();
method public android.webkit.WebViewRendererClient getWebViewRendererClient();
method @Nullable public android.webkit.WebViewRenderProcess getWebViewRenderProcess();
method @Nullable public android.webkit.WebViewRenderProcessClient getWebViewRenderProcessClient();
method public android.view.View getZoomControls();
method public void goBack();
method public void goBackOrForward(int);
@@ -9799,7 +9799,7 @@ package android.webkit {
method public void setVerticalScrollbarOverlay(boolean);
method public void setWebChromeClient(android.webkit.WebChromeClient);
method public void setWebViewClient(android.webkit.WebViewClient);
method public void setWebViewRendererClient(@Nullable java.util.concurrent.Executor, @Nullable android.webkit.WebViewRendererClient);
method public void setWebViewRenderProcessClient(@Nullable java.util.concurrent.Executor, @Nullable android.webkit.WebViewRenderProcessClient);
method public boolean showFindDialog(String, boolean);
method public void stopLoading();
method public boolean zoomBy(float);
@@ -9881,10 +9881,6 @@ package android.webkit {
field public final android.content.pm.Signature[] signatures;
}
public abstract class WebViewRenderer {
ctor public WebViewRenderer();
}
public final class WebViewUpdateService {
method public static android.webkit.WebViewProviderInfo[] getAllWebViewPackages();
method public static String getCurrentWebViewPackageName();

View File

@@ -1704,7 +1704,7 @@ public class WebView extends AbsoluteLayout
/**
* Gets the WebView renderer associated with this WebView.
* Gets a handle to the WebView renderer process associated with this WebView.
*
* <p>In {@link android.os.Build.VERSION_CODES#O} and above, WebView may
* run in "multiprocess" mode. In multiprocess mode, rendering of web
@@ -1717,67 +1717,70 @@ public class WebView extends AbsoluteLayout
* handle to the renderer process associated with the WebView, which can
* be used to control the renderer process.
*
* @return the {@link WebViewRenderer} renderer handle associated
* @return the {@link WebViewRenderProcess} renderer handle associated
* with this {@link WebView}, or {@code null} if
* WebView is not runing in multiprocess mode.
*/
@Nullable
public WebViewRenderer getWebViewRenderer() {
public WebViewRenderProcess getWebViewRenderProcess() {
checkThread();
return mProvider.getWebViewRenderer();
return mProvider.getWebViewRenderProcess();
}
/**
* Sets the renderer client object associated with this WebView.
*
* <p>The renderer client encapsulates callbacks relevant to WebView renderer
* state. See {@link WebViewRendererClient} for details.
* state. See {@link WebViewRenderProcessClient} for details.
*
* <p>Although many WebView instances may share a single underlying
* renderer, and renderers may live either in the application
* process, or in a sandboxed process that is isolated from the
* application process, instances of {@link WebViewRendererClient}
* application process, instances of {@link WebViewRenderProcessClient}
* are set per-WebView. Callbacks represent renderer events from
* the perspective of this WebView, and may or may not be correlated
* with renderer events affecting other WebViews.
*
* @param executor the Executor on which {@link WebViewRendererClient} callbacks will execute.
* @param webViewRendererClient the {@link WebViewRendererClient} object.
* @param executor the Executor on which {@link WebViewRenderProcessClient}
* callbacks will execute.
* @param webViewRenderProcessClient the {@link WebViewRenderProcessClient}
* object.
*/
public void setWebViewRendererClient(
public void setWebViewRenderProcessClient(
@NonNull @CallbackExecutor Executor executor,
@NonNull WebViewRendererClient webViewRendererClient) {
@NonNull WebViewRenderProcessClient webViewRenderProcessClient) {
checkThread();
mProvider.setWebViewRendererClient(executor, webViewRendererClient);
mProvider.setWebViewRenderProcessClient(
executor, webViewRenderProcessClient);
}
/**
* Sets the renderer client object associated with this WebView.
*
* See {@link #setWebViewRendererClient(Executor,WebViewRendererClient)} for details.
* See {@link #setWebViewRenderProcessClient(Executor,WebViewRenderProcessClient)} for details.
*
* <p> {@link WebViewRendererClient} callbacks will run on the thread that this WebView was
* <p> {@link WebViewRenderProcessClient} callbacks will run on the thread that this WebView was
* initialized on.
*
* @param webViewRendererClient the {@link WebViewRendererClient} object.
* @param webViewRenderProcessClient the {@link WebViewRenderProcessClient} object.
*/
public void setWebViewRendererClient(
@Nullable WebViewRendererClient webViewRendererClient) {
public void setWebViewRenderProcessClient(
@Nullable WebViewRenderProcessClient webViewRenderProcessClient) {
checkThread();
mProvider.setWebViewRendererClient(null, webViewRendererClient);
mProvider.setWebViewRenderProcessClient(null, webViewRenderProcessClient);
}
/**
* Gets the renderer client object associated with this WebView.
*
* @return the {@link WebViewRendererClient} object associated with this WebView, if one has
* been set via {@link #setWebViewRendererClient(WebViewRendererClient)} or {@code null}
* otherwise.
* @return the {@link WebViewRenderProcessClient} object associated with this WebView, if one
* has been set via {@link #setWebViewRenderProcessClient(WebViewRenderProcessClient)}
* or {@code null} otherwise.
*/
@Nullable
public WebViewRendererClient getWebViewRendererClient() {
public WebViewRenderProcessClient getWebViewRenderProcessClient() {
checkThread();
return mProvider.getWebViewRendererClient();
return mProvider.getWebViewRenderProcessClient();
}
/**

View File

@@ -238,13 +238,15 @@ public interface WebViewProvider {
public WebViewClient getWebViewClient();
public WebViewRenderer getWebViewRenderer();
@Nullable
public WebViewRenderProcess getWebViewRenderProcess();
public void setWebViewRendererClient(
public void setWebViewRenderProcessClient(
@Nullable Executor executor,
@Nullable WebViewRendererClient client);
@Nullable WebViewRenderProcessClient client);
public WebViewRendererClient getWebViewRendererClient();
@Nullable
public WebViewRenderProcessClient getWebViewRenderProcessClient();
public void setDownloadListener(DownloadListener listener);

View File

@@ -16,12 +16,10 @@
package android.webkit;
import android.annotation.SystemApi;
/**
* WebViewRenderer provides an opaque handle to a {@link WebView} renderer.
* WebViewRenderProcess provides an opaque handle to a {@link WebView} renderer.
*/
public abstract class WebViewRenderer {
public abstract class WebViewRenderProcess {
/**
* Cause this renderer to terminate.
*
@@ -38,11 +36,6 @@ public abstract class WebViewRenderer {
*/
public abstract boolean terminate();
/**
* This class cannot be created by applications.
* @hide
*/
@SystemApi
public WebViewRenderer() {
public WebViewRenderProcess() {
}
}

View File

@@ -22,14 +22,14 @@ import android.annotation.Nullable;
/**
* Used to receive callbacks on {@link WebView} renderer events.
*
* WebViewRendererClient instances may be set or retrieved via {@link
* WebView#setWebViewRendererClient(WebViewRendererClient)} and {@link
* WebView#getWebViewRendererClient()}.
* WebViewRenderProcessClient instances may be set or retrieved via {@link
* WebView#setWebViewRenderProcessClient(WebViewRenderProcessClient)} and {@link
* WebView#getWebViewRenderProcessClient()}.
*
* Instances may be attached to multiple WebViews, and thus a single renderer event may cause
* a callback to be called multiple times with different WebView parameters.
*/
public abstract class WebViewRendererClient {
public abstract class WebViewRenderProcessClient {
/**
* Called when the renderer currently associated with {@code view} becomes unresponsive as a
* result of a long running blocking task such as the execution of JavaScript.
@@ -40,8 +40,11 @@ public abstract class WebViewRendererClient {
*
* <p>This callback will continue to be called at regular intervals as long as the renderer
* remains unresponsive. If the renderer becomes responsive again, {@link
* WebViewRendererClient#onRendererResponsive} will be called once, and this method will not
* subsequently be called unless another period of unresponsiveness is detected.
* WebViewRenderProcessClient#onRenderProcessResponsive} will be called once, and this method
* will not subsequently be called unless another period of unresponsiveness is detected.
*
* <p>The minimum interval between successive calls to {@code onRenderProcessUnresponsive} is 5
* seconds.
*
* <p>No action is taken by WebView as a result of this method call. Applications may
* choose to terminate the associated renderer via the object that is passed to this callback,
@@ -50,28 +53,28 @@ public abstract class WebViewRendererClient {
* with the same renderer. Failure to do so will result in application termination.
*
* @param view The {@link WebView} for which unresponsiveness was detected.
* @param renderer The {@link WebViewRenderer} that has become unresponsive,
* @param renderer The {@link WebViewRenderProcess} that has become unresponsive,
* or {@code null} if WebView is running in single process mode.
*/
public abstract void onRendererUnresponsive(
@NonNull WebView view, @Nullable WebViewRenderer renderer);
public abstract void onRenderProcessUnresponsive(
@NonNull WebView view, @Nullable WebViewRenderProcess renderer);
/**
* Called once when an unresponsive renderer currently associated with {@code view} becomes
* responsive.
*
* <p>After a WebView renderer becomes unresponsive, which is notified to the application by
* {@link WebViewRendererClient#onRendererUnresponsive}, it is possible for the blocking
* renderer task to complete, returning the renderer to a responsive state. In that case,
* this method is called once to indicate responsiveness.
* {@link WebViewRenderProcessClient#onRenderProcessUnresponsive}, it is possible for the
* blocking renderer task to complete, returning the renderer to a responsive state. In that
* case, this method is called once to indicate responsiveness.
*
* <p>No action is taken by WebView as a result of this method call.
*
* @param view The {@link WebView} for which responsiveness was detected.
*
* @param renderer The {@link WebViewRenderer} that has become responsive, or {@code null} if
* WebView is running in single process mode.
* @param renderer The {@link WebViewRenderProcess} that has become responsive, or {@code null}
* if WebView is running in single process mode.
*/
public abstract void onRendererResponsive(
@NonNull WebView view, @Nullable WebViewRenderer renderer);
public abstract void onRenderProcessResponsive(
@NonNull WebView view, @Nullable WebViewRenderProcess renderer);
}