blob: 6d9b8bdf5c93f24ac926f3a48096fefbd7c6fe98 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2020 Equo
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Guillermo Zunino, Equo - initial implementation
********************************************************************************/
package org.eclipse.swt.internal.chromium;
import java.io.*;
import java.util.*;
import org.eclipse.swt.*;
import org.eclipse.swt.internal.*;
import org.eclipse.swt.internal.chromium.lib.*;
public class CEFFactory {
public static final int PID_BROWSER = 0;
public static final int PID_RENDERER = 1;
public static void create(String cefrustPath) {
if ("cocoa".equals(SWT.getPlatform())) {
// On MacOS pre-loading the required lib doesn't work, system ignores it.
return;
}
List<String> toLoad = new ArrayList<>();
// String cefrustPath = System.getProperty("cefswt.path", "");
String cefLibName = getCefLibName();
if ("win32".equals(SWT.getPlatform())) {
toLoad.add(cefrustPath + File.separator + "chrome_elf.dll");
}
toLoad.add(cefrustPath + File.separator + cefLibName);
for (String lib : toLoad) {
try {
Library.loadLibrary(lib, false);
} catch (UnsatisfiedLinkError e) {
if ("gtk".equals(SWT.getPlatform()) && e.getMessage().contains("libgconf")) {
try {
Library.loadLibrary(cefrustPath + "/libgconf-2.so.4", false);
} catch (UnsatisfiedLinkError e1) {
throw e;
}
Library.loadLibrary(lib, false);
return;
}
throw e;
}
}
}
public static String getCefLibName() {
if ("win32".equals(SWT.getPlatform())) {
return "libcef.dll";
} else if ("cocoa".equals(SWT.getPlatform())) {
return "Chromium Embedded Framework.framework/Chromium Embedded Framework";
} else {
return "libcef.so";
}
}
public static cef_app_t newApp() {
cef_app_t st = new cef_app_t();
st.base = setBase(st, cef_app_t.sizeof);
return st;
}
public static cef_browser_process_handler_t newBrowserProcessHandler() {
cef_browser_process_handler_t st = new cef_browser_process_handler_t();
st.base = setBase(st, cef_browser_process_handler_t.sizeof);
return st;
}
public static cef_client_t newClient() {
cef_client_t st = new cef_client_t();
st.base = setBase(st, cef_client_t.sizeof);
return st;
}
public static cef_focus_handler_t newFocusHandler() {
cef_focus_handler_t st = new cef_focus_handler_t();
st.base = setBase(st, cef_focus_handler_t.sizeof);
return st;
}
public static cef_life_span_handler_t newLifeSpanHandler() {
cef_life_span_handler_t st = new cef_life_span_handler_t();
st.base = setBase(st, cef_life_span_handler_t.sizeof);
return st;
}
public static cef_load_handler_t newLoadHandler() {
cef_load_handler_t st = new cef_load_handler_t();
st.base = setBase(st, cef_load_handler_t.sizeof);
return st;
}
public static cef_display_handler_t newDisplayHandler() {
cef_display_handler_t st = new cef_display_handler_t();
st.base = setBase(st, cef_display_handler_t.sizeof);
return st;
}
public static cef_request_handler_t newRequestHandler() {
cef_request_handler_t st = new cef_request_handler_t();
st.base = setBase(st, cef_request_handler_t.sizeof);
return st;
}
public static cef_jsdialog_handler_t newJsDialogHandler() {
cef_jsdialog_handler_t st = new cef_jsdialog_handler_t();
st.base = setBase(st, cef_jsdialog_handler_t.sizeof);
return st;
}
public static cef_context_menu_handler_t newContextMenuHandler() {
cef_context_menu_handler_t st = new cef_context_menu_handler_t();
st.base = setBase(st, cef_context_menu_handler_t.sizeof);
return st;
}
public static cef_string_visitor_t newStringVisitor() {
cef_string_visitor_t st = new cef_string_visitor_t();
st.base = setBase(st, cef_string_visitor_t.sizeof);
return st;
}
public static cef_cookie_visitor_t newCookieVisitor() {
cef_cookie_visitor_t st = new cef_cookie_visitor_t();
st.base = setBase(st, cef_cookie_visitor_t.sizeof);
return st;
}
private static cef_base_ref_counted_t setBase(Object st, int sizeof) {
// System.out.println("J:SIZEOF:" + st.getClass().getSimpleName() + ":" + sizeof);
org.eclipse.swt.internal.chromium.lib.cef_base_ref_counted_t base = new org.eclipse.swt.internal.chromium.lib.cef_base_ref_counted_t();
base.size = sizeof;
base.add_ref = 0;
base.has_one_ref = 0;
base.release = 0;
// base.name = st.getClass().getSimpleName();
return base;
}
public static enum ReturnType {
Double(0), Bool(1), Str(2), Null(3), Array(4), Error(5);
private int value;
private ReturnType(int value) {
this.value = value;
}
public int intValue() {
return value;
}
public static ReturnType from(String v) {
try {
int value = Integer.parseInt(v);
for (ReturnType rt : ReturnType.values()) {
if (rt.intValue() == value) {
return rt;
}
}
} catch (NumberFormatException e) {
}
throw new IllegalArgumentException(v);
}
}
}