blob: f3c80b238337a2a5c3920c2d7a6b49ba4f08bcf8 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.webkit.cts;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import com.google.common.util.concurrent.SettableFuture;
// Subclasses are the ones that get actually used, so make this abstract
abstract class TestProcessService extends Service {
static final String REPLY_EXCEPTION_KEY = "exception";
private final Handler mHandler;
public TestProcessService() {
HandlerThread handlerThread = new HandlerThread("TestThread");
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper());
}
private final ITestProcessService.Stub mBinder = new ITestProcessService.Stub() {
@Override
public Bundle run(String testClassName) {
final SettableFuture<Bundle> testResultFuture = SettableFuture.create();
mHandler.post(() -> {
Bundle testResultBundle = new Bundle();
try {
Class testClass = Class.forName(testClassName);
TestProcessClient.TestRunnable test =
(TestProcessClient.TestRunnable) testClass.newInstance();
test.run(TestProcessService.this);
} catch (Throwable t) {
testResultBundle.putSerializable(REPLY_EXCEPTION_KEY, t);
}
testResultFuture.set(testResultBundle);
});
return WebkitUtils.waitForFuture(testResultFuture);
}
@Override
public void exit() {
System.exit(0);
}
};
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}