blob: 82965439376097ef8ec5662e15c94e58d3633714 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.webview_shell.test;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
import android.content.Intent;
import android.support.test.filters.SmallTest;
import android.support.test.rule.ActivityTestRule;
import android.webkit.CookieManager;
import android.webkit.GeolocationPermissions;
import android.webkit.WebStorage;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.webview_shell.WebViewThreadTestActivity;
/**
* Tests running WebView on different threads.
*/
@RunWith(BaseJUnit4ClassRunner.class)
public class WebViewThreadTest {
private static final long TIMEOUT = scaleTimeout(4000);
private static final String DATA = "<html><body>Testing<script>"
+ "console.log(\"testing\")</script></body></html>";
private static final String URL_DATA = "javascript:console.log(\"testing\")";
private WebViewThreadTestActivity mActivity;
@Rule
public ActivityTestRule<WebViewThreadTestActivity> mActivityTestRule =
new ActivityTestRule<>(WebViewThreadTestActivity.class, false, false);
@Before
public void setUp() throws Exception {
mActivity = mActivityTestRule.launchActivity(new Intent());
}
@After
public void tearDown() throws Exception {
mActivity.finish();
}
/**
* Create webview then loadData, on non-ui thread
*/
@Test
@SmallTest
public void testLoadDataNonUiThread() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnNonUiThread(TIMEOUT));
Assert.assertTrue(loadDataWebViewNonUiThread(DATA));
}
/**
* Create webview then loadUrl, on non-ui thread
*/
@Test
@SmallTest
public void testLoadUrlNonUiThread() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnNonUiThread(TIMEOUT));
Assert.assertTrue(loadUrlWebViewNonUiThread(URL_DATA));
}
/**
* Run getWebViewDatabase on a non-ui thread before creating webview on ui thread
*/
@Test
@SmallTest
public void testWebViewDatabaseBeforeCreateWebView() throws InterruptedException {
mActivity.getWebViewDatabase();
mActivity.createWebViewOnUiThread(TIMEOUT);
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Create webview on ui-thread, then getWebViewDatabase on non-ui thread
*/
@Test
@SmallTest
public void testWebViewDatabaseAfterCreateWebView() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnUiThread(TIMEOUT));
mActivity.getWebViewDatabase();
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Run CookieManager.getInstance on a non-ui thread before creating webview on ui thread
*/
@Test
@SmallTest
public void testCookieManagerBeforeCreateWebView() throws InterruptedException {
CookieManager.getInstance();
mActivity.createWebViewOnUiThread(TIMEOUT);
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Create webview on ui-thread, then run CookieManager.getInstance on non-ui thread
*/
@Test
@SmallTest
public void testCookieManagerAfterCreateWebView() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnUiThread(TIMEOUT));
CookieManager.getInstance();
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Run GeolocationPermissions.getInstance on a non-ui thread before creating
* webview on ui thread
*/
@Test
@SmallTest
public void testGeolocationPermissionsBeforeCreateWebView() throws InterruptedException {
GeolocationPermissions.getInstance();
mActivity.createWebViewOnUiThread(TIMEOUT);
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Create webview on ui-thread, then run GeolocationPermissions.getInstance on non-ui thread
*/
@Test
@SmallTest
public void testGelolocationPermissionsAfterCreateWebView() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnUiThread(TIMEOUT));
GeolocationPermissions.getInstance();
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Run WebStorage.getInstance on a non-ui thread before creating webview on ui thread
*/
@Test
@SmallTest
public void testWebStorageBeforeCreateWebView() throws InterruptedException {
WebStorage.getInstance();
mActivity.createWebViewOnUiThread(TIMEOUT);
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* Create webview on ui-thread, then run WebStorage.getInstance on non-ui thread
*/
@Test
@SmallTest
public void testWebStorageAfterCreateWebView() throws InterruptedException {
Assert.assertTrue(mActivity.createWebViewOnUiThread(TIMEOUT));
WebStorage.getInstance();
Assert.assertTrue(loadDataWebViewInUiThread(DATA));
}
/**
* LoadData for webview created in non-ui thread
*/
private boolean loadDataWebViewNonUiThread(final String data) throws InterruptedException {
return mActivity.loadDataInNonUiThread(data, "text/html", null, TIMEOUT);
}
/**
* LoadUrl for webview created in non-ui thread
*/
private boolean loadUrlWebViewNonUiThread(final String url) throws InterruptedException {
return mActivity.loadUrlInNonUiThread(url, TIMEOUT);
}
/**
* LoadData for webview created in ui thread
*/
private boolean loadDataWebViewInUiThread(final String data) throws InterruptedException {
return mActivity.loadDataInUiThread(data, "text/html", null, TIMEOUT);
}
}