JBR-2287 [jcef] add CefBrowser wrapper to jtreg tests

(cherry picked from commit fa961d1769)
This commit is contained in:
Anton Tarasov
2020-04-15 15:59:37 +03:00
committed by jbrbot
parent efad45bde2
commit 0a4265ec1e
2 changed files with 106 additions and 6 deletions

View File

@@ -0,0 +1,100 @@
import org.cef.CefClient;
import org.cef.browser.CefBrowser;
import org.cef.handler.CefLifeSpanHandlerAdapter;
import javax.swing.*;
import java.awt.Component;
/**
* @author tav
*/
public class JBCefBrowser {
private final CefBrowser myCefBrowser;
private final CefClient myCefClient;
private volatile boolean myIsCefBrowserCreated;
private volatile LoadDeferrer myLoadDeferrer;
private static class LoadDeferrer {
protected final String myHtml;
protected final String myUrl;
private LoadDeferrer(String html, String url) {
myHtml = html;
myUrl = url;
}
public static LoadDeferrer urlDeferrer(String url) {
return new LoadDeferrer(null, url);
}
public static LoadDeferrer htmlDeferrer(String html, String url) {
return new LoadDeferrer(html, url);
}
public void load(CefBrowser browser) {
// JCEF demands async loading.
SwingUtilities.invokeLater(
myHtml == null ?
() -> browser.loadURL(myUrl) :
() -> browser.loadString(myHtml, myUrl));
}
}
public JBCefBrowser() {
myCefClient = JBCefApp.getInstance().createClient();
myCefBrowser = myCefClient.createBrowser("about:blank", false, false);
myCefClient.addLifeSpanHandler(new CefLifeSpanHandlerAdapter() {
@Override
public void onAfterCreated(CefBrowser browser) {
myIsCefBrowserCreated = true;
LoadDeferrer loader = myLoadDeferrer;
if (loader != null) {
loader.load(browser);
myLoadDeferrer = null;
}
}
});
}
public Component getComponent() {
return myCefBrowser.getUIComponent();
}
public void loadURL(String url) {
if (myIsCefBrowserCreated) {
myCefBrowser.loadURL(url);
}
else {
myLoadDeferrer = LoadDeferrer.urlDeferrer(url);
}
}
public void loadHTML(String html, String url) {
if (myIsCefBrowserCreated) {
myCefBrowser.loadString(html, url);
}
else {
myLoadDeferrer = LoadDeferrer.htmlDeferrer(html, url);
}
}
public void loadHTML(String html) {
loadHTML(html, "about:blank");
}
public CefClient getCefClient() {
return myCefClient;
}
public CefBrowser getCefBrowser() {
return myCefBrowser;
}
public void dispose() {
myCefBrowser.close(false);
myCefClient.dispose();
}
}

View File

@@ -19,15 +19,16 @@ import java.util.concurrent.TimeUnit;
* @run main JCEFStartupTest
*/
public class JCEFStartupTest {
static CefClient CEF_CLIENT = JBCefApp.getInstance().createClient();
static final CountDownLatch LATCH = new CountDownLatch(1);
static volatile boolean PASSED;
static volatile JBCefBrowser BROWSER;
JCEFStartupTest() {
JFrame frame = new JFrame("JCEF");
BROWSER = new JBCefBrowser();
CEF_CLIENT.addLoadHandler(new CefLoadHandlerAdapter() {
BROWSER.getCefClient().addLoadHandler(new CefLoadHandlerAdapter() {
@Override
public void onLoadStart(CefBrowser cefBrowser, CefFrame cefFrame, CefRequest.TransitionType transitionType) {
System.out.println("onLoadStart");
@@ -46,8 +47,7 @@ public class JCEFStartupTest {
}
});
CefBrowser browser = CEF_CLIENT.createBrowser("about:blank", false, false);
frame.add(browser.getUIComponent());
frame.add(BROWSER.getComponent());
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
@@ -64,7 +64,7 @@ public class JCEFStartupTest {
e.printStackTrace();
}
CEF_CLIENT.dispose();
BROWSER.dispose();
JBCefApp.getInstance().getCefApp().dispose();
if (!PASSED) {