Bug 1467915 - Connect a display to background windows in TestRunnerActivity r=esawin
This is needed to make some tests pass that rely on the Compositor
to work as expected.
MozReview-Commit-ID: J6fHXYt3ySw
--- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/TestRunnerActivity.java
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/TestRunnerActivity.java
@@ -1,36 +1,43 @@
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.geckoview.test;
+import org.mozilla.gecko.gfx.GeckoDisplay;
import org.mozilla.geckoview.GeckoResponse;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoSessionSettings;
import org.mozilla.geckoview.GeckoView;
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoRuntimeSettings;
import android.app.Activity;
import android.content.Intent;
+import android.graphics.SurfaceTexture;
import android.net.Uri;
import android.os.Bundle;
+import android.view.Surface;
+
+import java.util.HashMap;
public class TestRunnerActivity extends Activity {
private static final String LOGTAG = "TestRunnerActivity";
static GeckoRuntime sRuntime;
private GeckoSession mSession;
private GeckoView mView;
private boolean mKillProcessOnDestroy;
+ private HashMap<GeckoSession, GeckoDisplay> mDisplays = new HashMap<>();
+
private GeckoSession.NavigationDelegate mNavigationDelegate = new GeckoSession.NavigationDelegate() {
@Override
public void onLocationChange(GeckoSession session, String url) {
getActionBar().setSubtitle(url);
}
@Override
public void onCanGoBack(GeckoSession session, boolean canGoBack) {
@@ -47,34 +54,34 @@ public class TestRunnerActivity extends
int flags,
GeckoResponse<Boolean> response) {
// Allow Gecko to load all URIs
response.respond(false);
}
@Override
public void onNewSession(GeckoSession session, String uri, GeckoResponse<GeckoSession> response) {
- response.respond(createSession(session.getSettings()));
+ response.respond(createBackgroundSession(session.getSettings()));
}
};
private GeckoSession.ContentDelegate mContentDelegate = new GeckoSession.ContentDelegate() {
@Override
public void onTitleChange(GeckoSession session, String title) {
}
@Override
public void onFocusRequest(GeckoSession session) {
}
@Override
public void onCloseRequest(GeckoSession session) {
- session.close();
+ closeSession(session);
}
@Override
public void onFullScreen(GeckoSession session, boolean fullScreen) {
}
@Override
@@ -100,16 +107,39 @@ public class TestRunnerActivity extends
settings = new GeckoSessionSettings();
}
final GeckoSession session = new GeckoSession(settings);
session.setNavigationDelegate(mNavigationDelegate);
return session;
}
+ private GeckoSession createBackgroundSession(GeckoSessionSettings settings) {
+ final GeckoSession session = createSession(settings);
+
+ final SurfaceTexture texture = new SurfaceTexture(0);
+ final Surface surface = new Surface(texture);
+
+ final GeckoDisplay display = session.acquireDisplay();
+ display.surfaceChanged(surface, mView.getWidth(), mView.getHeight());
+ mDisplays.put(session, display);
+
+ return session;
+ }
+
+ private void closeSession(GeckoSession session) {
+ if (mDisplays.containsKey(session)) {
+ final GeckoDisplay display = mDisplays.remove(session);
+ display.surfaceDestroyed();
+
+ session.releaseDisplay(display);
+ }
+ session.close();
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
if (sRuntime == null) {
final GeckoRuntimeSettings.Builder runtimeSettingsBuilder =