blob: 8a63fe8acbefcfdaf0f81e9a238ee76e92de93a9 [file] [log] [blame]
// Copyright 2017 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.base;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.SparseArray;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.process_launcher.ChildProcessServiceDelegate;
import org.chromium.native_test.MainRunner;
import java.util.List;
/** Implementation of the ChildProcessServiceDelegate used for the Multiprocess tests. */
public class MultiprocessTestClientServiceDelegate implements ChildProcessServiceDelegate {
private static final String TAG = "MPTestCSDelegate";
private ITestCallback mTestCallback;
private final ITestController.Stub mTestController = new ITestController.Stub() {
@Override
public boolean forceStopSynchronous(int exitCode) {
System.exit(exitCode);
return true;
}
@Override
public void forceStop(int exitCode) {
System.exit(exitCode);
}
};
@Override
public void onServiceCreated() {
PathUtils.setPrivateDataDirectorySuffix("chrome_multiprocess_test_client_service");
}
@Override
public void onServiceBound(Intent intent) {}
@Override
public void onConnectionSetup(Bundle connectionBundle, List<IBinder> callbacks) {
mTestCallback = ITestCallback.Stub.asInterface(callbacks.get(0));
}
@Override
public void onDestroy() {}
@Override
public void preloadNativeLibrary(Context hostContext) {
LibraryLoader.getInstance().preloadNow();
}
@Override
public boolean loadNativeLibrary(Context hostContext) {
try {
LibraryLoader.getInstance().loadNow();
return true;
} catch (ProcessInitException pie) {
Log.e(TAG, "Unable to load native libraries.", pie);
return false;
}
}
@Override
public SparseArray<String> getFileDescriptorsIdsToKeys() {
return null;
}
@Override
public void onBeforeMain() {
try {
mTestCallback.childConnected(mTestController);
} catch (RemoteException re) {
Log.e(TAG, "Failed to notify parent process of connection.");
}
}
@Override
public void runMain() {
int result = MainRunner.runMain(CommandLine.getJavaSwitchesOrNull());
try {
mTestCallback.mainReturned(result);
} catch (RemoteException re) {
Log.e(TAG, "Failed to notify parent process of main returning.");
}
}
}