1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 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.test;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7a3f7b4e666c476898878fa745f637129375cd889Ben Murdochimport android.graphics.Picture;
883109aa23599e63402ee03cd93f67d3ff874e241Hui Shuimport android.net.http.SslError;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.webkit.ConsoleMessage;
1083109aa23599e63402ee03cd93f67d3ff874e241Hui Shuimport android.webkit.ValueCallback;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import org.chromium.base.ThreadUtils;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.test.util.CallbackHelper;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)/**
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * AwContentsClient subclass used for testing.
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)public class TestAwContentsClient extends NullContentsClient {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private String mUpdatedTitle;
2483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    private boolean mAllowSslError;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final OnPageStartedHelper mOnPageStartedHelper;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final OnPageFinishedHelper mOnPageFinishedHelper;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final OnReceivedErrorHelper mOnReceivedErrorHelper;
2883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    private final CallbackHelper mOnReceivedSslErrorHelper;
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    private final OnDownloadStartHelper mOnDownloadStartHelper;
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    private final OnReceivedLoginRequestHelper mOnReceivedLoginRequestHelper;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final AddMessageToConsoleHelper mAddMessageToConsoleHelper;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final OnScaleChangedHelper mOnScaleChangedHelper;
34a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    private final PictureListenerHelper mPictureListenerHelper;
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private final ShouldOverrideUrlLoadingHelper mShouldOverrideUrlLoadingHelper;
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private final DoUpdateVisitedHistoryHelper mDoUpdateVisitedHistoryHelper;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public TestAwContentsClient() {
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        super(ThreadUtils.getUiThreadLooper());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnPageStartedHelper = new OnPageStartedHelper();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnPageFinishedHelper = new OnPageFinishedHelper();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnReceivedErrorHelper = new OnReceivedErrorHelper();
4383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        mOnReceivedSslErrorHelper = new CallbackHelper();
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mOnDownloadStartHelper = new OnDownloadStartHelper();
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mOnReceivedLoginRequestHelper = new OnReceivedLoginRequestHelper();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mAddMessageToConsoleHelper = new AddMessageToConsoleHelper();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mOnScaleChangedHelper = new OnScaleChangedHelper();
49a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        mPictureListenerHelper = new PictureListenerHelper();
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        mDoUpdateVisitedHistoryHelper = new DoUpdateVisitedHistoryHelper();
5283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        mAllowSslError = true;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public OnPageStartedHelper getOnPageStartedHelper() {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return mOnPageStartedHelper;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public OnPageFinishedHelper getOnPageFinishedHelper() {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return mOnPageFinishedHelper;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public OnReceivedErrorHelper getOnReceivedErrorHelper() {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return mOnReceivedErrorHelper;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    public CallbackHelper getOnReceivedSslErrorHelper() {
6883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        return mOnReceivedSslErrorHelper;
6983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    }
7083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public OnDownloadStartHelper getOnDownloadStartHelper() {
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        return mOnDownloadStartHelper;
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public OnReceivedLoginRequestHelper getOnReceivedLoginRequestHelper() {
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        return mOnReceivedLoginRequestHelper;
77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return mOnEvaluateJavaScriptResultHelper;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public ShouldOverrideUrlLoadingHelper getShouldOverrideUrlLoadingHelper() {
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return mShouldOverrideUrlLoadingHelper;
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public AddMessageToConsoleHelper getAddMessageToConsoleHelper() {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return mAddMessageToConsoleHelper;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public DoUpdateVisitedHistoryHelper getDoUpdateVisitedHistoryHelper() {
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mDoUpdateVisitedHistoryHelper;
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    /**
96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)     * Callback helper for onScaleChangedScaled.
97010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)     */
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public static class OnScaleChangedHelper extends CallbackHelper {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        private float mPreviousScale;
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        private float mCurrentScale;
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public void notifyCalled(float oldScale, float newScale) {
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mPreviousScale = oldScale;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mCurrentScale = newScale;
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            super.notifyCalled();
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
106a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
107a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public float getOldScale() {
108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mPreviousScale;
109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public float getNewScale() {
112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mCurrentScale;
113a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        public float getLastScaleRatio() {
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            assert getCallCount() > 0;
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mCurrentScale / mPreviousScale;
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public OnScaleChangedHelper getOnScaleChangedHelper() {
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mOnScaleChangedHelper;
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
125a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    public PictureListenerHelper getPictureListenerHelper() {
126a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        return mPictureListenerHelper;
127a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
128a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    @Override
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void onReceivedTitle(String title) {
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mUpdatedTitle = title;
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public String getUpdatedTitle() {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return mUpdatedTitle;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void onPageStarted(String url) {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnPageStartedHelper.notifyCalled(url);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void onPageFinished(String url) {
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnPageFinishedHelper.notifyCalled(url);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void onReceivedError(int errorCode, String description, String failingUrl) {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    @Override
15483109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) {
15583109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        callback.onReceiveValue(mAllowSslError);
15683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        mOnReceivedSslErrorHelper.notifyCalled();
15783109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    }
15883109aa23599e63402ee03cd93f67d3ff874e241Hui Shu
15983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    public void setAllowSslError(boolean allow) {
16083109aa23599e63402ee03cd93f67d3ff874e241Hui Shu        mAllowSslError = allow;
16183109aa23599e63402ee03cd93f67d3ff874e241Hui Shu    }
16283109aa23599e63402ee03cd93f67d3ff874e241Hui Shu
163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    /**
164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     * CallbackHelper for OnDownloadStart.
165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     */
166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public static class OnDownloadStartHelper extends CallbackHelper {
167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mUrl;
168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mUserAgent;
169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mContentDisposition;
170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mMimeType;
171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        long mContentLength;
172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getUrl() {
174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mUrl;
176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getUserAgent() {
179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mUserAgent;
181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getContentDisposition() {
184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mContentDisposition;
186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
188a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getMimeType() {
189a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
190a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mMimeType;
191a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
192a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
193a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public long getContentLength() {
194a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
195a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mContentLength;
196a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
197a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
198a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public void notifyCalled(String url, String userAgent, String contentDisposition,
199a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                String mimeType, long contentLength) {
200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mUrl = url;
201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mUserAgent = userAgent;
202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentDisposition = contentDisposition;
203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mMimeType = mimeType;
204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentLength = contentLength;
205a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            notifyCalled();
206a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
208a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Override
210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void onDownloadStart(String url,
211a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            String userAgent,
212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            String contentDisposition,
213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            String mimeType,
214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            long contentLength) {
215a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        getOnDownloadStartHelper().notifyCalled(url, userAgent, contentDisposition, mimeType,
216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                contentLength);
217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    /**
220a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     * CallbackHelper for OnReceivedLoginRequest.
221a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     */
222a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public static class OnReceivedLoginRequestHelper extends CallbackHelper {
223a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mRealm;
224a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mAccount;
225a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mArgs;
226a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
227a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getRealm() {
228a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
229a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mRealm;
230a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
231a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getAccount() {
233a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
234a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mAccount;
235a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
236a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
237a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getArgs() {
238a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
239a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mArgs;
240a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
241a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
242a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public void notifyCalled(String realm, String account, String args) {
243a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mRealm = realm;
244a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mAccount = account;
245a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mArgs = args;
246a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            notifyCalled();
247a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
248a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
249a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
250a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Override
251a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void onReceivedLoginRequest(String realm, String account, String args) {
252a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        getOnReceivedLoginRequestHelper().notifyCalled(realm, account, args);
253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
254a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mAddMessageToConsoleHelper.notifyCalled(consoleMessage.messageLevel().ordinal(),
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                consoleMessage.message(), consoleMessage.lineNumber(), consoleMessage.sourceId());
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
262010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    /**
26383109aa23599e63402ee03cd93f67d3ff874e241Hui Shu     * Callback helper for AddMessageToConsole.
264010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)     */
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public static class AddMessageToConsoleHelper extends CallbackHelper {
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        private int mLevel;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        private String mMessage;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        private int mLineNumber;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        private String mSourceId;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public int getLevel() {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            assert getCallCount() > 0;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mLevel;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public String getMessage() {
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            assert getCallCount() > 0;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mMessage;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public int getLineNumber() {
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            assert getCallCount() > 0;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mLineNumber;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        public String getSourceId() {
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            assert getCallCount() > 0;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mSourceId;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        void notifyCalled(int level, String message, int lineNumer, String sourceId) {
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mLevel = level;
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mMessage = message;
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mLineNumber = lineNumer;
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mSourceId = sourceId;
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            notifyCalled();
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    @Override
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void onScaleChangedScaled(float oldScale, float newScale) {
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mOnScaleChangedHelper.notifyCalled(oldScale, newScale);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
304a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
305010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    /**
30683109aa23599e63402ee03cd93f67d3ff874e241Hui Shu     * Callback helper for PictureListener.
307010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)     */
308a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    public static class PictureListenerHelper extends CallbackHelper {
309a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        // Generally null, depending on |invalidationOnly| in enableOnNewPicture()
310a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        private Picture mPicture;
311a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
312a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        public Picture getPicture() {
313a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            assert getCallCount() > 0;
314a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            return mPicture;
315a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        }
316a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
317a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        void notifyCalled(Picture picture) {
318a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            mPicture = picture;
319a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch            notifyCalled();
320a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        }
321a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
322a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
323a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    @Override
324a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    public void onNewPicture(Picture picture) {
325a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch        mPictureListenerHelper.notifyCalled(picture);
326a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch    }
3275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    /**
32983109aa23599e63402ee03cd93f67d3ff874e241Hui Shu     * Callback helper for ShouldOverrideUrlLoading.
330010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)     */
3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public static class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        private String mShouldOverrideUrlLoadingUrl;
3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        private String mPreviousShouldOverrideUrlLoadingUrl;
3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        private boolean mShouldOverrideUrlLoadingReturnValue = false;
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void setShouldOverrideUrlLoadingUrl(String url) {
3365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mShouldOverrideUrlLoadingUrl = url;
3375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void setPreviousShouldOverrideUrlLoadingUrl(String url) {
3395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mPreviousShouldOverrideUrlLoadingUrl = url;
3405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void setShouldOverrideUrlLoadingReturnValue(boolean value) {
3425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mShouldOverrideUrlLoadingReturnValue = value;
3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public String getShouldOverrideUrlLoadingUrl() {
3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            assert getCallCount() > 0;
3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return mShouldOverrideUrlLoadingUrl;
3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public String getPreviousShouldOverrideUrlLoadingUrl() {
3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            assert getCallCount() > 1;
3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return mPreviousShouldOverrideUrlLoadingUrl;
3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public boolean getShouldOverrideUrlLoadingReturnValue() {
3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return mShouldOverrideUrlLoadingReturnValue;
3545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public void notifyCalled(String url) {
3565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mPreviousShouldOverrideUrlLoadingUrl = mShouldOverrideUrlLoadingUrl;
3575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mShouldOverrideUrlLoadingUrl = url;
3585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            notifyCalled();
3595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
3605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
3625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @Override
3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    public boolean shouldOverrideUrlLoading(String url) {
3645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        super.shouldOverrideUrlLoading(url);
3655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        boolean returnValue =
3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mShouldOverrideUrlLoadingHelper.getShouldOverrideUrlLoadingReturnValue();
3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        mShouldOverrideUrlLoadingHelper.notifyCalled(url);
3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return returnValue;
3695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
3706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    /**
3736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     * Callback helper for doUpdateVisitedHistory.
3746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)     */
3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public static class DoUpdateVisitedHistoryHelper extends CallbackHelper {
3766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        String mUrl;
3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        boolean mIsReload;
3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public String getUrl() {
3806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            assert getCallCount() > 0;
3816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return mUrl;
3826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
3836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public boolean getIsReload() {
3856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            assert getCallCount() > 0;
3866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return mIsReload;
3876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
3886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        public void notifyCalled(String url, boolean isReload) {
3906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mUrl = url;
3916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            mIsReload = isReload;
3926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            notifyCalled();
3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
3946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
3956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @Override
3976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void doUpdateVisitedHistory(String url, boolean isReload) {
3986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        getDoUpdateVisitedHistoryHelper().notifyCalled(url, isReload);
3996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
401