mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Address JBR-2344 move JCEF settings to a shared class
GitOrigin-RevId: 78720ef47884820d2f248303b0781dcf41076a54
This commit is contained in:
committed by
intellij-monorepo-bot
parent
5a4b955ee1
commit
be5c89a22c
Generated
+3
-3
@@ -1,12 +1,12 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jcef" type="repository">
|
||||
<properties maven-id="org.jetbrains.intellij.deps.jcef:jcef:80.0.4-g74f7b0c-chromium-80.0.3987.122-2" />
|
||||
<properties maven-id="org.jetbrains.intellij.deps.jcef:jcef:80.0.4-g74f7b0c-chromium-80.0.3987.122-3" />
|
||||
<CLASSES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/jcef/jcef/80.0.4-g74f7b0c-chromium-80.0.3987.122-2/jcef-80.0.4-g74f7b0c-chromium-80.0.3987.122-2.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/jcef/jcef/80.0.4-g74f7b0c-chromium-80.0.3987.122-3/jcef-80.0.4-g74f7b0c-chromium-80.0.3987.122-3.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/jcef/jcef/80.0.4-g74f7b0c-chromium-80.0.3987.122-2/jcef-80.0.4-g74f7b0c-chromium-80.0.3987.122-2-sources.jar!/" />
|
||||
<root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/intellij/deps/jcef/jcef/80.0.4-g74f7b0c-chromium-80.0.3987.122-3/jcef-80.0.4-g74f7b0c-chromium-80.0.3987.122-3-sources.jar!/" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</component>
|
||||
@@ -5,11 +5,10 @@ import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.ui.scale.JBUIScale;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.jetbrains.cef.JCefAppConfig;
|
||||
import org.cef.CefApp;
|
||||
import org.cef.CefSettings;
|
||||
import org.cef.CefSettings.LogSeverity;
|
||||
@@ -25,8 +24,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -45,7 +42,7 @@ import static com.intellij.ui.jcef.JBCefHtmlStringSchemeHandler.HTML_STRING_SCHE
|
||||
* @author tav
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
public abstract class JBCefApp {
|
||||
public final class JBCefApp {
|
||||
private static final Logger LOG = Logger.getInstance(JBCefApp.class);
|
||||
|
||||
@NotNull private final CefApp myCefApp;
|
||||
@@ -60,19 +57,18 @@ public abstract class JBCefApp {
|
||||
private static final AtomicBoolean ourInitialized = new AtomicBoolean(false);
|
||||
private static final List<JBCefSchemeHandlerFactory> ourSchemeHandlerFactoryList = Collections.synchronizedList(new ArrayList<>());
|
||||
|
||||
private JBCefApp() {
|
||||
private JBCefApp(@NotNull JCefAppConfig config) {
|
||||
CefApp.startup(ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
//noinspection AbstractMethodCallInConstructor
|
||||
CefAppConfig config = getCefAppConfig();
|
||||
config.mySettings.windowless_rendering_enabled = false;
|
||||
config.mySettings.log_severity = getLogLevel();
|
||||
CefSettings settings = config.getCefSettings();
|
||||
settings.windowless_rendering_enabled = false;
|
||||
settings.log_severity = getLogLevel();
|
||||
Color bg = JBColor.background();
|
||||
config.mySettings.background_color = config.mySettings.new ColorType(bg.getAlpha(), bg.getRed(), bg.getGreen(), bg.getBlue());
|
||||
settings.background_color = settings.new ColorType(bg.getAlpha(), bg.getRed(), bg.getGreen(), bg.getBlue());
|
||||
if (ApplicationManager.getApplication().isInternal()) {
|
||||
config.mySettings.remote_debugging_port = Registry.intValue("ide.browser.jcef.debug.port");
|
||||
settings.remote_debugging_port = Registry.intValue("ide.browser.jcef.debug.port");
|
||||
}
|
||||
CefApp.addAppHandler(new MyCefAppHandler(config.myAppArgs));
|
||||
myCefApp = CefApp.getInstance(config.mySettings);
|
||||
CefApp.addAppHandler(new MyCefAppHandler(config.getAppArgs()));
|
||||
myCefApp = CefApp.getInstance(settings);
|
||||
Disposer.register(ApplicationManager.getApplication(), myDisposable);
|
||||
}
|
||||
|
||||
@@ -113,37 +109,25 @@ public abstract class JBCefApp {
|
||||
if (!isEnabled()) {
|
||||
throw new IllegalStateException("JCEF is disabled");
|
||||
}
|
||||
if (Holder.instance == null) {
|
||||
if (Holder.INSTANCE == null) {
|
||||
throw new IllegalStateException("JCEF is not available or failed to initialize");
|
||||
}
|
||||
return Holder.instance;
|
||||
return Holder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class Holder {
|
||||
static final JBCefApp instance = initInstance();
|
||||
}
|
||||
@Nullable static final JBCefApp INSTANCE;
|
||||
|
||||
@Nullable
|
||||
private static JBCefApp initInstance() {
|
||||
ourInitialized.set(true);
|
||||
try {
|
||||
if (SystemInfo.isMac) {
|
||||
return new JBCefAppMac();
|
||||
}
|
||||
else if (SystemInfo.isLinux) {
|
||||
return new JBCefAppLinux();
|
||||
}
|
||||
else if (SystemInfo.isWindows) {
|
||||
return new JBCefAppWindows();
|
||||
static {
|
||||
ourInitialized.set(true);
|
||||
JCefAppConfig config = null;
|
||||
try {
|
||||
config = JCefAppConfig.getInstance();
|
||||
} catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
INSTANCE = config != null ? new JBCefApp(config) : null;
|
||||
}
|
||||
catch (UnsatisfiedLinkError e) {
|
||||
LOG.warn(e.toString());
|
||||
}
|
||||
catch (Throwable e) {
|
||||
LOG.warn(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -156,86 +140,6 @@ public abstract class JBCefApp {
|
||||
return Registry.is("ide.browser.jcef.enabled");
|
||||
}
|
||||
|
||||
public static class CefAppConfig {
|
||||
public final @NotNull CefSettings mySettings;
|
||||
/**
|
||||
* {@link org.cef.handler.CefAppHandler} args.
|
||||
*/
|
||||
public final String @NotNull[] myAppArgs;
|
||||
|
||||
public CefAppConfig(@NotNull CefSettings settings, String @NotNull[] appArgs) {
|
||||
this.mySettings = settings;
|
||||
this.myAppArgs = appArgs;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected abstract CefAppConfig getCefAppConfig();
|
||||
|
||||
private static class JBCefAppMac extends JBCefApp {
|
||||
@NotNull
|
||||
@Override
|
||||
protected CefAppConfig getCefAppConfig() {
|
||||
String ALT_CEF_FRAMEWORK_DIR = System.getenv("ALT_CEF_FRAMEWORK_DIR");
|
||||
String ALT_CEF_HELPER_APP_DIR = System.getenv("ALT_CEF_HELPER_APP_DIR");
|
||||
if (ALT_CEF_FRAMEWORK_DIR == null || ALT_CEF_HELPER_APP_DIR == null) {
|
||||
String CONTENTS_PATH = System.getProperty("java.home") + "/..";
|
||||
if (ALT_CEF_FRAMEWORK_DIR == null) {
|
||||
ALT_CEF_FRAMEWORK_DIR = CONTENTS_PATH + "/Frameworks/Chromium Embedded Framework.framework";
|
||||
}
|
||||
if (ALT_CEF_HELPER_APP_DIR == null) {
|
||||
ALT_CEF_HELPER_APP_DIR = CONTENTS_PATH + "/Frameworks/jcef Helper.app";
|
||||
}
|
||||
}
|
||||
return new CefAppConfig(new CefSettings(), new String[] {
|
||||
"--framework-dir-path=" + normalize(ALT_CEF_FRAMEWORK_DIR),
|
||||
"--browser-subprocess-path=" + normalize(ALT_CEF_HELPER_APP_DIR + "/Contents/MacOS/jcef Helper"),
|
||||
"--main-bundle-path=" + normalize(ALT_CEF_HELPER_APP_DIR),
|
||||
"--disable-in-process-stack-traces",
|
||||
"--use-mock-keychain"
|
||||
});
|
||||
}
|
||||
|
||||
// CEF does not accept ".." in path
|
||||
private static String normalize(String path) {
|
||||
try {
|
||||
return new File(path).getCanonicalPath();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class JBCefAppWindows extends JBCefApp {
|
||||
@NotNull
|
||||
@Override
|
||||
protected CefAppConfig getCefAppConfig() {
|
||||
String JCEF_PATH = System.getProperty("java.home") + "/bin";
|
||||
CefSettings settings = new CefSettings();
|
||||
settings.resources_dir_path = JCEF_PATH;
|
||||
settings.locales_dir_path = JCEF_PATH + "/locales";
|
||||
settings.browser_subprocess_path = JCEF_PATH + "/jcef_helper";
|
||||
return new CefAppConfig(settings, ArrayUtil.EMPTY_STRING_ARRAY);
|
||||
}
|
||||
}
|
||||
|
||||
private static class JBCefAppLinux extends JBCefApp {
|
||||
@NotNull
|
||||
@Override
|
||||
protected CefAppConfig getCefAppConfig() {
|
||||
String JCEF_PATH = System.getProperty("java.home") + "/lib";
|
||||
CefSettings settings = new CefSettings();
|
||||
settings.resources_dir_path = JCEF_PATH;
|
||||
settings.locales_dir_path = JCEF_PATH + "/locales";
|
||||
settings.browser_subprocess_path = JCEF_PATH + "/jcef_helper";
|
||||
double scale = JBUIScale.sysScale();
|
||||
System.setProperty("jcef.forceDeviceScaleFactor", Double.toString(scale));
|
||||
return new CefAppConfig(settings, new String[] {
|
||||
"--force-device-scale-factor=" + scale
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JBCefClient createClient() {
|
||||
return new JBCefClient(myCefApp.createClient());
|
||||
|
||||
Reference in New Issue
Block a user