blob: 8730422d00459085fb62b946fd32fed4915b6748 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.native_test;
import android.os.Bundle;
import androidx.fragment.app.FragmentActivity;
import java.io.File;
/** An {@link android.app.Activity} for running native browser tests. */
public abstract class NativeBrowserTestActivity extends FragmentActivity {
private static final String TAG = "NativeTest";
private NativeTest mTest = new NativeTest();
private boolean mStarted;
@Override
public void onCreate(Bundle savedInstanceState) {
mTest.preCreate(this);
super.onCreate(savedInstanceState);
mTest.postCreate(this);
for (String flag : NativeBrowserTest.BROWSER_TESTS_FLAGS) {
appendCommandLineFlags(flag);
}
String userDataDirSwitch = getUserDataDirectoryCommandLineSwitch();
if (!userDataDirSwitch.isEmpty()) {
String userDataDirFlag = "--" + userDataDirSwitch + "=" + getPrivateDataDirectory();
appendCommandLineFlags(userDataDirFlag);
}
}
@Override
public void onStart() {
super.onStart();
// onStart can be called any number of times see:
// https://developer.android.com/guide/components/activities/activity-lifecycle#onstart
// We only want to run the test once (or bad things can happen) so bail out if we've
// already started.
if (mStarted) return;
mStarted = true;
NativeBrowserTest.deletePrivateDataDirectory(getPrivateDataDirectory());
initializeBrowserProcess();
}
protected void runTests() {
mTest.postStart(this, false);
}
public void appendCommandLineFlags(String flags) {
mTest.appendCommandLineFlags(flags);
}
/** Returns the test suite's private data directory. */
protected abstract File getPrivateDataDirectory();
/**
* Returns the command line switch used to specify the user data directory.
*
* The default implementation returns an empty string, which means no user
* data directory.
* If this method returns a non-empty value, the user data directory will be overridden to be
* the private data directory, which is cleared at the beginning of each test run.
* NOTE: The switch should not start with "--".
* TODO(crbug.com/617734): Solve this problem holistically for Java and C++ at the level of
* DIR_ANDROID_APP_DATA and eliminate the need for this solution.
*/
protected String getUserDataDirectoryCommandLineSwitch() {
return "";
}
/** Initializes the browser process.
*
* This generally includes loading native libraries and switching to the native command line,
* among other things.
*/
protected abstract void initializeBrowserProcess();
}