mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
JBR-2287 [jcef] add CefBrowser wrapper to jtreg tests
(cherry picked from commit fa961d1769)
This commit is contained in:
100
test/jdk/jb/java/jcef/JBCefBrowser.java
Normal file
100
test/jdk/jb/java/jcef/JBCefBrowser.java
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user