1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// found in the LICENSE file.
4a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
5a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochpackage org.chromium.android_webview.test;
6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport android.graphics.Picture;
8a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport android.os.Handler;
9a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport android.os.Looper;
10a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport android.test.suitebuilder.annotation.SmallTest;
11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.android_webview.AwContentsClientCallbackHelper;
13a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper;
14a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.android_webview.test.TestAwContentsClient.OnReceivedLoginRequestHelper;
15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.android_webview.test.TestAwContentsClient.PictureListenerHelper;
16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.base.test.util.Feature;
17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.content.browser.test.util.CallbackHelper;
18a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnPageStartedHelper;
19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnReceivedErrorHelper;
20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochimport java.util.concurrent.Callable;
22a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
23a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch/**
24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch * Test suite for AwContentsClientCallbackHelper.
25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch */
26a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochpublic class AwContentsClientCallbackHelperTest extends AwTestBase {
27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    /**
28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     * Callback helper for OnLoadedResource.
29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     */
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public static class OnLoadResourceHelper extends CallbackHelper {
31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private String mLastLoadedResource;
32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public String getLastLoadedResource() {
34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            assert getCallCount() > 0;
35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mLastLoadedResource;
36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
38a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public void notifyCalled(String url) {
39a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mLastLoadedResource = url;
40a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            notifyCalled();
41a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
42a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
44a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    /**
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     * TestAwContentsClient extended with OnLoadResourceHelper.
46a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch     */
47a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public static class TestAwContentsClient
48a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            extends org.chromium.android_webview.test.TestAwContentsClient {
49a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        private final OnLoadResourceHelper mOnLoadResourceHelper;
51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public TestAwContentsClient() {
53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            super();
54a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mOnLoadResourceHelper = new OnLoadResourceHelper();
55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public OnLoadResourceHelper getOnLoadResourceHelper() {
58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            return mOnLoadResourceHelper;
59a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        @Override
62a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        public void onLoadResource(String url) {
63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mOnLoadResourceHelper.notifyCalled(url);
64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        }
65a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final int PICTURE_TIMEOUT = 5000;
68a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String TEST_URL = "www.example.com";
69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String REALM = "www.example.com";
70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String ACCOUNT = "account";
71a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String ARGS = "args";
72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String USER_AGENT = "userAgent";
73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String CONTENT_DISPOSITION = "contentDisposition";
74a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String MIME_TYPE = "mimeType";
75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final int CONTENT_LENGTH = 42;
76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
77a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final float NEW_SCALE = 1.0f;
78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final float OLD_SCALE = 2.0f;
79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final int ERROR_CODE = 2;
80a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    static final String ERROR_MESSAGE = "A horrible thing has occurred!";
81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    private TestAwContentsClient mContentsClient;
83a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    private AwContentsClientCallbackHelper mClientHelper;
84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    private Looper mLooper;
85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
86a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Override
87a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    protected void setUp() throws Exception {
88a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        super.setUp();
89a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mLooper = Looper.getMainLooper();
90a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mContentsClient = new TestAwContentsClient();
91a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper = new AwContentsClientCallbackHelper(mLooper, mContentsClient);
92a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
93a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
94a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
95a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
96a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnLoadResource() throws Exception {
97a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        OnLoadResourceHelper loadResourceHelper = mContentsClient.getOnLoadResourceHelper();
98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
99a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onLoadResourceCount = loadResourceHelper.getCallCount();
100a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnLoadResource(TEST_URL);
101a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        loadResourceHelper.waitForCallback(onLoadResourceCount);
102a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(TEST_URL, loadResourceHelper.getLastLoadedResource());
103a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
104a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
105a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
106a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
107a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnPageStarted() throws Exception {
108a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        OnPageStartedHelper pageStartedHelper = mContentsClient.getOnPageStartedHelper();
109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
110a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onPageStartedCount = pageStartedHelper.getCallCount();
111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnPageStarted(TEST_URL);
112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        pageStartedHelper.waitForCallback(onPageStartedCount);
113a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(TEST_URL, pageStartedHelper.getUrl());
114a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
115a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
117a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
118a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnDownloadStart() throws Exception {
119a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        OnDownloadStartHelper downloadStartHelper = mContentsClient.getOnDownloadStartHelper();
120a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
121a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onDownloadStartCount = downloadStartHelper.getCallCount();
122a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnDownloadStart(TEST_URL, USER_AGENT, CONTENT_DISPOSITION,
123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                MIME_TYPE, CONTENT_LENGTH);
124a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        downloadStartHelper.waitForCallback(onDownloadStartCount);
125a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(TEST_URL, downloadStartHelper.getUrl());
126a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(USER_AGENT, downloadStartHelper.getUserAgent());
127a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(CONTENT_DISPOSITION, downloadStartHelper.getContentDisposition());
128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(MIME_TYPE, downloadStartHelper.getMimeType());
129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(CONTENT_LENGTH, downloadStartHelper.getContentLength());
130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
134a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnNewPicture() throws Exception {
135a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        final PictureListenerHelper pictureListenerHelper =
136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentsClient.getPictureListenerHelper();
137a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
138a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        final Picture thePicture = new Picture();
139a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
140a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        final Callable<Picture> pictureProvider = new Callable<Picture>() {
141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            @Override
142a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            public Picture call() {
143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                return thePicture;
144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            }
145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        };
146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
147a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // AwContentsClientCallbackHelper rate limits photo callbacks so two posts in close
148a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // succession should only result in one callback.
149a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        final int onNewPictureCount = pictureListenerHelper.getCallCount();
150a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // To trip the rate limiting the second postNewPicture call needs to happen
151a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // before mLooper processes the first. To do this we run both posts as a single block
152a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // and we do it in the thread that is processes the callbacks (mLooper).
153a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        Handler mainHandler = new Handler(mLooper);
154a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        Runnable postPictures = new Runnable() {
155a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            @Override
156a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            public void run() {
157a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                mClientHelper.postOnNewPicture(pictureProvider);
158a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                mClientHelper.postOnNewPicture(pictureProvider);
159a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            }
160a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        };
161a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mainHandler.post(postPictures);
162a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // We want to check that one and only one callback is fired,
164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // First we wait for the first call back to complete, this ensures that both posts have
165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // finished.
166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        pictureListenerHelper.waitForCallback(onNewPictureCount);
167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // Then we post a runnable on the callback handler thread. Since both posts have happened
169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // and the first callback has happened a second callback (if it exists) must be
170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // in the queue before this runnable.
171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        getInstrumentation().runOnMainSync(new Runnable() {
172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            @Override
173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            public void run() {
174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            }
175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        });
176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        // When that runnable has finished we assert that one and only on callback happened.
178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(thePicture, pictureListenerHelper.getPicture());
179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(onNewPictureCount + 1, pictureListenerHelper.getCallCount());
180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnReceivedLoginRequest() throws Exception {
185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        OnReceivedLoginRequestHelper receivedLoginRequestHelper =
186a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentsClient.getOnReceivedLoginRequestHelper();
187a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
188a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onReceivedLoginRequestCount = receivedLoginRequestHelper.getCallCount();
189a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnReceivedLoginRequest(REALM, ACCOUNT, ARGS);
190a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        receivedLoginRequestHelper.waitForCallback(onReceivedLoginRequestCount);
191a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(REALM, receivedLoginRequestHelper.getRealm());
192a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(ACCOUNT, receivedLoginRequestHelper.getAccount());
193a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(ARGS, receivedLoginRequestHelper.getArgs());
194a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
195a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
196a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
197a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
198a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnReceivedError() throws Exception {
199a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        OnReceivedErrorHelper receivedErrorHelper =
200a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentsClient.getOnReceivedErrorHelper();
201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
202a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onReceivedErrorCount = receivedErrorHelper.getCallCount();
203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnReceivedError(ERROR_CODE, ERROR_MESSAGE, TEST_URL);
204a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        receivedErrorHelper.waitForCallback(onReceivedErrorCount);
205a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(ERROR_CODE, receivedErrorHelper.getErrorCode());
206a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(ERROR_MESSAGE, receivedErrorHelper.getDescription());
207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(TEST_URL, receivedErrorHelper.getFailingUrl());
208a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
209a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
210a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @Feature({"AndroidWebView"})
211a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    @SmallTest
212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    public void testOnScaleChangedScaled() throws Exception {
213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        TestAwContentsClient.OnScaleChangedHelper scaleChangedHelper =
214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            mContentsClient.getOnScaleChangedHelper();
215a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        int onScaleChangeCount = scaleChangedHelper.getCallCount();
217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        mClientHelper.postOnScaleChangedScaled(OLD_SCALE, NEW_SCALE);
218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        scaleChangedHelper.waitForCallback(onScaleChangeCount);
219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(OLD_SCALE, scaleChangedHelper.getOldScale());
220a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        assertEquals(NEW_SCALE, scaleChangedHelper.getNewScale());
221a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
222a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
223