Home | History | Annotate | Download | only in test
      1 // Copyright 2012 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 
      5 package org.chromium.android_webview.test;
      6 
      7 import android.graphics.Picture;
      8 import android.net.http.SslError;
      9 import android.webkit.ConsoleMessage;
     10 import android.webkit.ValueCallback;
     11 
     12 import org.chromium.base.ThreadUtils;
     13 import org.chromium.content.browser.test.util.CallbackHelper;
     14 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper;
     15 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageFinishedHelper;
     16 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
     17 import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
     18 
     19 /**
     20  * AwContentsClient subclass used for testing.
     21  */
     22 public class TestAwContentsClient extends NullContentsClient {
     23     private String mUpdatedTitle;
     24     private boolean mAllowSslError;
     25     private final OnPageStartedHelper mOnPageStartedHelper;
     26     private final OnPageFinishedHelper mOnPageFinishedHelper;
     27     private final OnReceivedErrorHelper mOnReceivedErrorHelper;
     28     private final CallbackHelper mOnReceivedSslErrorHelper;
     29     private final OnDownloadStartHelper mOnDownloadStartHelper;
     30     private final OnReceivedLoginRequestHelper mOnReceivedLoginRequestHelper;
     31     private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
     32     private final AddMessageToConsoleHelper mAddMessageToConsoleHelper;
     33     private final OnScaleChangedHelper mOnScaleChangedHelper;
     34     private final PictureListenerHelper mPictureListenerHelper;
     35     private final ShouldOverrideUrlLoadingHelper mShouldOverrideUrlLoadingHelper;
     36     private final DoUpdateVisitedHistoryHelper mDoUpdateVisitedHistoryHelper;
     37 
     38     public TestAwContentsClient() {
     39         super(ThreadUtils.getUiThreadLooper());
     40         mOnPageStartedHelper = new OnPageStartedHelper();
     41         mOnPageFinishedHelper = new OnPageFinishedHelper();
     42         mOnReceivedErrorHelper = new OnReceivedErrorHelper();
     43         mOnReceivedSslErrorHelper = new CallbackHelper();
     44         mOnDownloadStartHelper = new OnDownloadStartHelper();
     45         mOnReceivedLoginRequestHelper = new OnReceivedLoginRequestHelper();
     46         mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
     47         mAddMessageToConsoleHelper = new AddMessageToConsoleHelper();
     48         mOnScaleChangedHelper = new OnScaleChangedHelper();
     49         mPictureListenerHelper = new PictureListenerHelper();
     50         mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
     51         mDoUpdateVisitedHistoryHelper = new DoUpdateVisitedHistoryHelper();
     52         mAllowSslError = true;
     53     }
     54 
     55     public OnPageStartedHelper getOnPageStartedHelper() {
     56         return mOnPageStartedHelper;
     57     }
     58 
     59     public OnPageFinishedHelper getOnPageFinishedHelper() {
     60         return mOnPageFinishedHelper;
     61     }
     62 
     63     public OnReceivedErrorHelper getOnReceivedErrorHelper() {
     64         return mOnReceivedErrorHelper;
     65     }
     66 
     67     public CallbackHelper getOnReceivedSslErrorHelper() {
     68         return mOnReceivedSslErrorHelper;
     69     }
     70 
     71     public OnDownloadStartHelper getOnDownloadStartHelper() {
     72         return mOnDownloadStartHelper;
     73     }
     74 
     75     public OnReceivedLoginRequestHelper getOnReceivedLoginRequestHelper() {
     76         return mOnReceivedLoginRequestHelper;
     77     }
     78 
     79     public OnEvaluateJavaScriptResultHelper getOnEvaluateJavaScriptResultHelper() {
     80         return mOnEvaluateJavaScriptResultHelper;
     81     }
     82 
     83     public ShouldOverrideUrlLoadingHelper getShouldOverrideUrlLoadingHelper() {
     84         return mShouldOverrideUrlLoadingHelper;
     85     }
     86 
     87     public AddMessageToConsoleHelper getAddMessageToConsoleHelper() {
     88         return mAddMessageToConsoleHelper;
     89     }
     90 
     91     public DoUpdateVisitedHistoryHelper getDoUpdateVisitedHistoryHelper() {
     92         return mDoUpdateVisitedHistoryHelper;
     93     }
     94 
     95     /**
     96      * Callback helper for onScaleChangedScaled.
     97      */
     98     public static class OnScaleChangedHelper extends CallbackHelper {
     99         private float mPreviousScale;
    100         private float mCurrentScale;
    101         public void notifyCalled(float oldScale, float newScale) {
    102             mPreviousScale = oldScale;
    103             mCurrentScale = newScale;
    104             super.notifyCalled();
    105         }
    106 
    107         public float getOldScale() {
    108             return mPreviousScale;
    109         }
    110 
    111         public float getNewScale() {
    112             return mCurrentScale;
    113         }
    114 
    115         public float getLastScaleRatio() {
    116             assert getCallCount() > 0;
    117             return mCurrentScale / mPreviousScale;
    118         }
    119     }
    120 
    121     public OnScaleChangedHelper getOnScaleChangedHelper() {
    122         return mOnScaleChangedHelper;
    123     }
    124 
    125     public PictureListenerHelper getPictureListenerHelper() {
    126         return mPictureListenerHelper;
    127     }
    128 
    129     @Override
    130     public void onReceivedTitle(String title) {
    131         mUpdatedTitle = title;
    132     }
    133 
    134     public String getUpdatedTitle() {
    135         return mUpdatedTitle;
    136     }
    137 
    138     @Override
    139     public void onPageStarted(String url) {
    140         mOnPageStartedHelper.notifyCalled(url);
    141     }
    142 
    143     @Override
    144     public void onPageFinished(String url) {
    145         mOnPageFinishedHelper.notifyCalled(url);
    146     }
    147 
    148     @Override
    149     public void onReceivedError(int errorCode, String description, String failingUrl) {
    150         mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
    151     }
    152 
    153     @Override
    154     public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) {
    155         callback.onReceiveValue(mAllowSslError);
    156         mOnReceivedSslErrorHelper.notifyCalled();
    157     }
    158 
    159     public void setAllowSslError(boolean allow) {
    160         mAllowSslError = allow;
    161     }
    162 
    163     /**
    164      * CallbackHelper for OnDownloadStart.
    165      */
    166     public static class OnDownloadStartHelper extends CallbackHelper {
    167         private String mUrl;
    168         private String mUserAgent;
    169         private String mContentDisposition;
    170         private String mMimeType;
    171         long mContentLength;
    172 
    173         public String getUrl() {
    174             assert getCallCount() > 0;
    175             return mUrl;
    176         }
    177 
    178         public String getUserAgent() {
    179             assert getCallCount() > 0;
    180             return mUserAgent;
    181         }
    182 
    183         public String getContentDisposition() {
    184             assert getCallCount() > 0;
    185             return mContentDisposition;
    186         }
    187 
    188         public String getMimeType() {
    189             assert getCallCount() > 0;
    190             return mMimeType;
    191         }
    192 
    193         public long getContentLength() {
    194             assert getCallCount() > 0;
    195             return mContentLength;
    196         }
    197 
    198         public void notifyCalled(String url, String userAgent, String contentDisposition,
    199                 String mimeType, long contentLength) {
    200             mUrl = url;
    201             mUserAgent = userAgent;
    202             mContentDisposition = contentDisposition;
    203             mMimeType = mimeType;
    204             mContentLength = contentLength;
    205             notifyCalled();
    206         }
    207     }
    208 
    209     @Override
    210     public void onDownloadStart(String url,
    211             String userAgent,
    212             String contentDisposition,
    213             String mimeType,
    214             long contentLength) {
    215         getOnDownloadStartHelper().notifyCalled(url, userAgent, contentDisposition, mimeType,
    216                 contentLength);
    217     }
    218 
    219     /**
    220      * CallbackHelper for OnReceivedLoginRequest.
    221      */
    222     public static class OnReceivedLoginRequestHelper extends CallbackHelper {
    223         private String mRealm;
    224         private String mAccount;
    225         private String mArgs;
    226 
    227         public String getRealm() {
    228             assert getCallCount() > 0;
    229             return mRealm;
    230         }
    231 
    232         public String getAccount() {
    233             assert getCallCount() > 0;
    234             return mAccount;
    235         }
    236 
    237         public String getArgs() {
    238             assert getCallCount() > 0;
    239             return mArgs;
    240         }
    241 
    242         public void notifyCalled(String realm, String account, String args) {
    243             mRealm = realm;
    244             mAccount = account;
    245             mArgs = args;
    246             notifyCalled();
    247         }
    248     }
    249 
    250     @Override
    251     public void onReceivedLoginRequest(String realm, String account, String args) {
    252         getOnReceivedLoginRequestHelper().notifyCalled(realm, account, args);
    253     }
    254 
    255     @Override
    256     public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
    257         mAddMessageToConsoleHelper.notifyCalled(consoleMessage.messageLevel().ordinal(),
    258                 consoleMessage.message(), consoleMessage.lineNumber(), consoleMessage.sourceId());
    259         return false;
    260     }
    261 
    262     /**
    263      * Callback helper for AddMessageToConsole.
    264      */
    265     public static class AddMessageToConsoleHelper extends CallbackHelper {
    266         private int mLevel;
    267         private String mMessage;
    268         private int mLineNumber;
    269         private String mSourceId;
    270 
    271         public int getLevel() {
    272             assert getCallCount() > 0;
    273             return mLevel;
    274         }
    275 
    276         public String getMessage() {
    277             assert getCallCount() > 0;
    278             return mMessage;
    279         }
    280 
    281         public int getLineNumber() {
    282             assert getCallCount() > 0;
    283             return mLineNumber;
    284         }
    285 
    286         public String getSourceId() {
    287             assert getCallCount() > 0;
    288             return mSourceId;
    289         }
    290 
    291         void notifyCalled(int level, String message, int lineNumer, String sourceId) {
    292             mLevel = level;
    293             mMessage = message;
    294             mLineNumber = lineNumer;
    295             mSourceId = sourceId;
    296             notifyCalled();
    297         }
    298     }
    299 
    300     @Override
    301     public void onScaleChangedScaled(float oldScale, float newScale) {
    302         mOnScaleChangedHelper.notifyCalled(oldScale, newScale);
    303     }
    304 
    305     /**
    306      * Callback helper for PictureListener.
    307      */
    308     public static class PictureListenerHelper extends CallbackHelper {
    309         // Generally null, depending on |invalidationOnly| in enableOnNewPicture()
    310         private Picture mPicture;
    311 
    312         public Picture getPicture() {
    313             assert getCallCount() > 0;
    314             return mPicture;
    315         }
    316 
    317         void notifyCalled(Picture picture) {
    318             mPicture = picture;
    319             notifyCalled();
    320         }
    321     }
    322 
    323     @Override
    324     public void onNewPicture(Picture picture) {
    325         mPictureListenerHelper.notifyCalled(picture);
    326     }
    327 
    328     /**
    329      * Callback helper for ShouldOverrideUrlLoading.
    330      */
    331     public static class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
    332         private String mShouldOverrideUrlLoadingUrl;
    333         private String mPreviousShouldOverrideUrlLoadingUrl;
    334         private boolean mShouldOverrideUrlLoadingReturnValue = false;
    335         void setShouldOverrideUrlLoadingUrl(String url) {
    336             mShouldOverrideUrlLoadingUrl = url;
    337         }
    338         void setPreviousShouldOverrideUrlLoadingUrl(String url) {
    339             mPreviousShouldOverrideUrlLoadingUrl = url;
    340         }
    341         void setShouldOverrideUrlLoadingReturnValue(boolean value) {
    342             mShouldOverrideUrlLoadingReturnValue = value;
    343         }
    344         public String getShouldOverrideUrlLoadingUrl() {
    345             assert getCallCount() > 0;
    346             return mShouldOverrideUrlLoadingUrl;
    347         }
    348         public String getPreviousShouldOverrideUrlLoadingUrl() {
    349             assert getCallCount() > 1;
    350             return mPreviousShouldOverrideUrlLoadingUrl;
    351         }
    352         public boolean getShouldOverrideUrlLoadingReturnValue() {
    353             return mShouldOverrideUrlLoadingReturnValue;
    354         }
    355         public void notifyCalled(String url) {
    356             mPreviousShouldOverrideUrlLoadingUrl = mShouldOverrideUrlLoadingUrl;
    357             mShouldOverrideUrlLoadingUrl = url;
    358             notifyCalled();
    359         }
    360     }
    361 
    362     @Override
    363     public boolean shouldOverrideUrlLoading(String url) {
    364         super.shouldOverrideUrlLoading(url);
    365         boolean returnValue =
    366             mShouldOverrideUrlLoadingHelper.getShouldOverrideUrlLoadingReturnValue();
    367         mShouldOverrideUrlLoadingHelper.notifyCalled(url);
    368         return returnValue;
    369     }
    370 
    371 
    372     /**
    373      * Callback helper for doUpdateVisitedHistory.
    374      */
    375     public static class DoUpdateVisitedHistoryHelper extends CallbackHelper {
    376         String mUrl;
    377         boolean mIsReload;
    378 
    379         public String getUrl() {
    380             assert getCallCount() > 0;
    381             return mUrl;
    382         }
    383 
    384         public boolean getIsReload() {
    385             assert getCallCount() > 0;
    386             return mIsReload;
    387         }
    388 
    389         public void notifyCalled(String url, boolean isReload) {
    390             mUrl = url;
    391             mIsReload = isReload;
    392             notifyCalled();
    393         }
    394     }
    395 
    396     @Override
    397     public void doUpdateVisitedHistory(String url, boolean isReload) {
    398         getDoUpdateVisitedHistoryHelper().notifyCalled(url, isReload);
    399     }
    400 }
    401