AwContentsClient.java revision a3f7b4e666c476898878fa745f637129375cd889
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.android_webview;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.content.Context;
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import android.content.pm.ActivityInfo;
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.graphics.Bitmap;
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.graphics.Picture;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Rect;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.RectF;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.net.http.SslError;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Handler;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Looper;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.os.Message;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.Log;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.view.KeyEvent;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.view.View;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.webkit.ConsoleMessage;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.GeolocationPermissions;
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.SslErrorHandler;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.ValueCallback;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.WebChromeClient;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import org.chromium.content.browser.ContentVideoView;
27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)import org.chromium.content.browser.ContentVideoViewClient;
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochimport org.chromium.content.browser.ContentVideoViewControls;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.ContentViewClient;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.ContentViewCore;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.WebContentsObserverAndroid;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.net.NetError;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Base-class that an AwContents embedder derives from to receive callbacks.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This extends ContentViewClient, as in many cases we want to pass-thru ContentViewCore
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * callbacks right to our embedder, and this setup facilities that.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * For any other callbacks we need to make transformations of (e.g. adapt parameters
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or perform filtering) we can provide final overrides for methods here, and then introduce
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * new abstract methods that the our own client must implement.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * i.e.: all methods in this class should either be final, or abstract.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public abstract class AwContentsClient {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private static final String TAG = "AwContentsClient";
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final AwContentsClientCallbackHelper mCallbackHelper =
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        new AwContentsClientCallbackHelper(this);
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private AwWebContentsObserver mWebContentsObserver;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private AwContentViewClient mContentViewClient = new AwContentViewClient();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private double mDIPScale;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // Last background color reported from the renderer. Holds the sentinal value INVALID_COLOR
56a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    // if not valid.
57a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private int mCachedRendererBackgroundColor = INVALID_COLOR;
58a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
59a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private static final int INVALID_COLOR = 0;
60a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    class AwWebContentsObserver extends WebContentsObserverAndroid {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public AwWebContentsObserver(ContentViewCore contentViewCore) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            super(contentViewCore);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public void didStopLoading(String url) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            AwContentsClient.this.onPageFinished(url);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        @Override
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public void didFailLoad(boolean isProvisionalLoad,
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                boolean isMainFrame, int errorCode, String description, String failingUrl) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (errorCode == NetError.ERR_ABORTED) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // This error code is generated for the following reasons:
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // - WebView.stopLoading is called,
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                // - the navigation is intercepted by the embedder via shouldOverrideNavigation.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                //
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // The Android WebView does not notify the embedder of these situations using this
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // error code with the WebViewClient.onReceivedError callback.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                return;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (!isMainFrame) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                // The Android WebView does not notify the embedder of sub-frame failures.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                return;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            AwContentsClient.this.onReceivedError(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    ErrorCodeConversionHelper.convertErrorCode(errorCode), description, failingUrl);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        @Override
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public void didNavigateAnyFrame(String url, String baseUrl, boolean isReload) {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            AwContentsClient.this.doUpdateVisitedHistory(url, isReload);
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private class AwContentViewClient extends ContentViewClient {
99a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        @Override
100a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        public void onBackgroundColorChanged(int color) {
101a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are both
102a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            // fully transparent so this transpose makes no visible difference).
103a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color;
104a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        }
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        @Override
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        public void onScaleChanged(float oldScale, float newScale) {
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            AwContentsClient.this.onScaleChangedScaled((float)(oldScale * mDIPScale),
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    (float)(newScale * mDIPScale));
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        @Override
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        public void onStartContentIntent(Context context, String contentUrl) {
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            //  Callback when detecting a click on a content link.
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            AwContentsClient.this.shouldOverrideUrlLoading(contentUrl);
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        @Override
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        public void onTabCrash() {
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            // This is not possible so long as the webview is run single process!
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            throw new RuntimeException("Renderer crash reported.");
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        @Override
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        public void onUpdateTitle(String title) {
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            AwContentsClient.this.onReceivedTitle(title);
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        @Override
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        public boolean shouldOverrideKeyEvent(KeyEvent event) {
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return AwContentsClient.this.shouldOverrideKeyEvent(event);
132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        @Override
135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        final public ContentVideoViewClient getContentVideoViewClient() {
136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            return new AwContentVideoViewClient();
137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        }
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final void installWebContentsObserver(ContentViewCore contentViewCore) {
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (mWebContentsObserver != null) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mWebContentsObserver.detachFromWebContents();
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mWebContentsObserver = new AwWebContentsObserver(contentViewCore);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
147868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    private class AwContentVideoViewClient implements ContentVideoViewClient {
148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        @Override
149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        public void onShowCustomView(View view) {
150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            WebChromeClient.CustomViewCallback cb = new WebChromeClient.CustomViewCallback() {
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                @Override
152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                public void onCustomViewHidden() {
153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    ContentVideoView contentVideoView = ContentVideoView.getContentVideoView();
154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                    if (contentVideoView != null)
155868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                        contentVideoView.exitFullscreen(false);
156868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                }
157868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            };
158868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            AwContentsClient.this.onShowCustomView(view, cb);
159868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        }
160868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
161868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        @Override
162868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        public void onDestroyContentVideoView() {
163868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            AwContentsClient.this.onHideCustomView();
164868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        }
165868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
166868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        @Override
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        public View getVideoLoadingProgressView() {
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            return AwContentsClient.this.getVideoLoadingProgressView();
169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        }
170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        @Override
1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        public ContentVideoViewControls createControls() {
1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            return null;
1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        }
175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
176868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final void setDIPScale(double dipScale) {
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mDIPScale = dipScale;
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    final AwContentsClientCallbackHelper getCallbackHelper() {
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mCallbackHelper;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    final ContentViewClient getContentViewClient() {
186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return mContentViewClient;
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
189a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final int getCachedRendererBackgroundColor() {
190a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        assert isCachedRendererBackgroundColorValid();
191a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor;
192a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
193a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
194a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    final boolean isCachedRendererBackgroundColorValid() {
195a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mCachedRendererBackgroundColor != INVALID_COLOR;
196a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
197a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //             WebView specific methods that map directly to WebViewClient / WebChromeClient
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //--------------------------------------------------------------------------------------------
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void getVisitedHistory(ValueCallback<String[]> callback);
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void doUpdateVisitedHistory(String url, boolean isReload);
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onProgressChanged(int progress);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract InterceptedRequestData shouldInterceptRequest(String url);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideKeyEvent(KeyEvent event);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract boolean shouldOverrideUrlLoading(String url);
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onLoadResource(String url);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onUnhandledKeyEvent(KeyEvent event);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract boolean onConsoleMessage(ConsoleMessage consoleMessage);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedHttpAuthRequest(AwHttpAuthHandler handler,
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            String host, String realm);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedSslError(ValueCallback<Boolean> callback, SslError error);
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedLoginRequest(String realm, String account, String args);
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onFormResubmission(Message dontResend, Message resend);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onDownloadStart(String url, String userAgent, String contentDisposition,
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            String mimeType, long contentLength);
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsShowPrompt(String origin,
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            GeolocationPermissions.Callback callback);
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onGeolocationPermissionsHidePrompt();
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onScaleChangedScaled(float oldScale, float newScale);
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsBeforeUnload(String url, String message,
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            JsResultReceiver receiver);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsConfirm(String url, String message, JsResultReceiver receiver);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected abstract void handleJsPrompt(String url, String message, String defaultValue,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            JsPromptResultReceiver receiver);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract boolean onCreateWindow(boolean isDialog, boolean isUserGesture);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onCloseWindow();
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedTouchIconUrl(String url, boolean precomposed);
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onReceivedIcon(Bitmap bitmap);
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onReceivedTitle(String title);
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract void onRequestFocus();
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    protected abstract View getVideoLoadingProgressView();
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageStarted(String url);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onPageFinished(String url);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public abstract void onReceivedError(int errorCode, String description, String failingUrl);
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // TODO (michaelbai): Remove this method once the same method remove from
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // WebViewContentsClientAdapter.
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view,
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)           int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // TODO (michaelbai): This method should be abstract, having empty body here
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // makes the merge to the Android easy.
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        onShowCustomView(view, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, callback);
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract void onHideCustomView();
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public abstract Bitmap getDefaultVideoPoster();
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //                              Other WebView-specific methods
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //--------------------------------------------------------------------------------------------
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    //
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            boolean isDoneCounting);
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * Called whenever there is a new content picture available.
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @param picture New picture.
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public abstract void onNewPicture(Picture picture);
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
299