blob: 09d240a3641b4afd94af57cbd9e4be77bfa153a7 [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.android_webview.test;
import android.os.StrictMode;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.LargeTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.Feature;
/**
* Tests ensuring that starting up WebView does not cause any diskRead StrictMode violations.
*/
@RunWith(AwJUnit4ClassRunner.class)
public class AwStrictModeTest {
@Rule
public AwActivityTestRule mActivityTestRule =
new AwActivityTestRule() {
@Override
public boolean needsAwBrowserContextCreated() {
return false;
}
@Override
public boolean needsBrowserProcessStarted() {
// Don't start the browser process in AwActivityTestRule - we want to start it
// ourselves with strictmode policies turned on.
return false;
}
}
;
private TestAwContentsClient mContentsClient;
private AwTestContainerView mAwTestContainerView;
private StrictMode.ThreadPolicy mOldThreadPolicy;
private StrictMode.VmPolicy mOldVmPolicy;
@Before
public void setUp() throws Exception {
mContentsClient = new TestAwContentsClient();
enableStrictModeOnUiThreadSync();
}
@After
public void tearDown() throws Exception {
disableStrictModeOnUiThreadSync();
}
@Test
@LargeTest
@Feature({"AndroidWebView"})
public void testStartup() throws Exception {
startEverythingSync();
}
@Test
@LargeTest
@Feature({"AndroidWebView"})
public void testLoadEmptyData() throws Exception {
startEverythingSync();
mActivityTestRule.loadDataSync(mAwTestContainerView.getAwContents(),
mContentsClient.getOnPageFinishedHelper(), "", "text/html", false);
}
@Test
@LargeTest
@Feature({"AndroidWebView"})
public void testSetJavaScriptAndLoadData() throws Exception {
startEverythingSync();
AwActivityTestRule.enableJavaScriptOnUiThread(mAwTestContainerView.getAwContents());
mActivityTestRule.loadDataSync(mAwTestContainerView.getAwContents(),
mContentsClient.getOnPageFinishedHelper(), "", "text/html", false);
}
private void enableStrictModeOnUiThreadSync() {
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
mOldThreadPolicy = StrictMode.getThreadPolicy();
mOldVmPolicy = StrictMode.getVmPolicy();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.penaltyDeath()
.build());
});
}
private void disableStrictModeOnUiThreadSync() {
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
StrictMode.setThreadPolicy(mOldThreadPolicy);
StrictMode.setVmPolicy(mOldVmPolicy);
});
}
private void startEverythingSync() throws Exception {
mActivityTestRule.getActivity();
mActivityTestRule.createAwBrowserContext();
mActivityTestRule.startBrowserProcess();
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> mAwTestContainerView =
mActivityTestRule.createAwTestContainerView(mContentsClient));
}
}