java/org/cef/CefSettings.java (137 lines of code) (raw):

// Copyright (c) 2013 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. package org.cef; import java.util.HashMap; import java.util.Map; import java.util.Objects; /** * Initialization settings. Specify NULL or 0 to get the recommended default * values. Many of these and other settings can also configured using command- * line switches. */ public class CefSettings { /** * Log severity levels. */ public enum LogSeverity { /** * Default logging (currently INFO logging). */ LOGSEVERITY_DEFAULT, /** * Verbose logging. */ LOGSEVERITY_VERBOSE, /** * INFO logging. */ LOGSEVERITY_INFO, /** * WARNING logging. */ LOGSEVERITY_WARNING, /** * ERROR logging. */ LOGSEVERITY_ERROR, /** * FATAL logging. */ LOGSEVERITY_FATAL, /** * Completely disable logging. */ LOGSEVERITY_DISABLE } /** * 32-bit ARGB color value, not premultiplied. The color components are always * in a known order. Equivalent to the SkColor type. */ public class ColorType { private long color_value = 0; private ColorType() {} public ColorType(int alpha, int red, int green, int blue) { color_value = (alpha << 24) | (red << 16) | (green << 8) | (blue << 0); } public long getColor() { return color_value; } @Override public ColorType clone() { ColorType res = new ColorType(); res.color_value = this.color_value; return res; } } /** * The path to a separate executable that will be launched for sub-processes. * By default the browser process executable is used. See the comments on * CefExecuteProcess() for details. Also configurable using the * "browser-subprocess-path" command-line switch. */ public String browser_subprocess_path = null; /** * Set to true to enable windowless (off-screen) rendering support. Do not * enable this value if the application does not use windowless rendering as * it may reduce rendering performance on some systems. */ public boolean windowless_rendering_enabled = true; /** * Set to true to disable configuration of browser process features using * standard CEF and Chromium command-line arguments. Configuration can still * be specified using CEF data structures or via the * CefApp::OnBeforeCommandLineProcessing() method. */ public boolean command_line_args_disabled = false; /** * The location where cache data will be stored on disk. If empty an in-memory * cache will be used for some features and a temporary disk cache for others. * HTML5 databases such as localStorage will only persist across sessions if a * cache path is specified. */ public String cache_path = null; /** * To persist session cookies (cookies without an expiry date or validity * interval) by default when using the global cookie manager set this value to * true. Session cookies are generally intended to be transient and most Web * browsers do not persist them. A |cache_path| value must also be specified to * enable this feature. Also configurable using the "persist-session-cookies" * command-line switch. */ public boolean persist_session_cookies = false; /** * Value that will be returned as the User-Agent HTTP header. If empty the * default User-Agent string will be used. Also configurable using the * "user-agent" command-line switch. */ public String user_agent = null; /** * Value that will be inserted as the product portion of the default * User-Agent string. If empty the Chromium product version will be used. If * |userAgent| is specified this value will be ignored. Also configurable * using the "user_agent_product" command-line switch. */ public String user_agent_product = null; /** * The locale string that will be passed to Blink. If empty the default * locale of "en-US" will be used. This value is ignored on Linux where locale * is determined using environment variable parsing with the precedence order: * LANGUAGE, LC_ALL, LC_MESSAGES and LANG. Also configurable using the "lang" * command-line switch. */ public String locale = null; /** * The directory and file name to use for the debug log. If empty, the * default name of "debug.log" will be used and the file will be written * to the application directory. Also configurable using the "log-file" * command-line switch. */ public String log_file = null; /** * The log severity. Only messages of this severity level or higher will be * logged. Also configurable using the "log-severity" command-line switch with * a value of "verbose", "info", "warning", "error", "error-report" or * "disable". */ public LogSeverity log_severity = LogSeverity.LOGSEVERITY_DEFAULT; /** * Custom flags that will be used when initializing the V8 JavaScript engine. * The consequences of using custom flags may not be well tested. Also * configurable using the "js-flags" command-line switch. */ public String javascript_flags = null; /** * The fully qualified path for the resources directory. If this value is * empty the cef.pak and/or devtools_resources.pak files must be located in * the module directory on Windows/Linux or the app bundle Resources directory * on Mac OS X. Also configurable using the "resources-dir-path" command-line * switch. */ public String resources_dir_path = null; /** * The fully qualified path for the locales directory. If this value is empty * the locales directory must be located in the module directory. This value * is ignored on Mac OS X where pack files are always loaded from the app * bundle Resources directory. Also configurable using the "locales-dir-path" * command-line switch. */ public String locales_dir_path = null; /** * Set to a value between 1024 and 65535 to enable remote debugging on the * specified port. For example, if 8080 is specified the remote debugging URL * will be http: *localhost:8080. CEF can be remotely debugged from any CEF or * Chrome browser window. Also configurable using the "remote-debugging-port" * command-line switch. */ public int remote_debugging_port = 0; /** * The number of stack trace frames to capture for uncaught exceptions. * Specify a positive value to enable the CefV8ContextHandler:: * OnUncaughtException() callback. Specify 0 (default value) and * OnUncaughtException() will not be called. Also configurable using the * "uncaught-exception-stack-size" command-line switch. */ public int uncaught_exception_stack_size = 0; /** * Opaque background color used for accelerated content. By default the * background color will be white. Only the RGB compontents of the specified * value will be used. The alpha component must greater than 0 to enable use * of the background color but will be otherwise ignored. */ public ColorType background_color = null; /// // Comma delimited list of schemes supported by the associated // CefCookieManager. If |cookieable_schemes_exclude_defaults| is false (0) the // default schemes ("http", "https", "ws" and "wss") will also be supported. // Specifying a |cookieable_schemes_list| value and setting // |cookieable_schemes_exclude_defaults| to true (1) will disable all loading // and saving of cookies for this manager. Can be overridden // for individual CefRequestContext instances via the // CefRequestContextSettings.cookieable_schemes_list and // CefRequestContextSettings.cookieable_schemes_exclude_defaults values. /// public String cookieable_schemes_list = null; public boolean cookieable_schemes_exclude_defaults = false; public boolean no_sandbox = !Boolean.getBoolean("jcef.use_sandbox"); public CefSettings() {} @Override public CefSettings clone() { CefSettings tmp = new CefSettings(); tmp.browser_subprocess_path = browser_subprocess_path; tmp.windowless_rendering_enabled = windowless_rendering_enabled; tmp.command_line_args_disabled = command_line_args_disabled; tmp.cache_path = cache_path; tmp.persist_session_cookies = persist_session_cookies; tmp.user_agent = user_agent; tmp.user_agent_product = user_agent_product; tmp.locale = locale; tmp.log_file = log_file; tmp.log_severity = log_severity; tmp.javascript_flags = javascript_flags; tmp.resources_dir_path = resources_dir_path; tmp.locales_dir_path = locales_dir_path; tmp.remote_debugging_port = remote_debugging_port; tmp.uncaught_exception_stack_size = uncaught_exception_stack_size; if (background_color != null) tmp.background_color = background_color.clone(); tmp.cookieable_schemes_list = cookieable_schemes_list; tmp.cookieable_schemes_exclude_defaults = cookieable_schemes_exclude_defaults; tmp.no_sandbox = no_sandbox; return tmp; } public String getDescription() { StringBuilder sb = new StringBuilder(); sb.append("browser_subprocess_path=" + browser_subprocess_path + ", "); sb.append("windowless_rendering_enabled=" + windowless_rendering_enabled + ", "); sb.append("command_line_args_disabled=" + command_line_args_disabled + ", "); sb.append("cache_path=" + cache_path + ", "); sb.append("persist_session_cookies=" + persist_session_cookies + ", "); sb.append("user_agent=" + user_agent + ", "); sb.append("user_agent_product=" + user_agent_product + ", "); sb.append("locale=" + locale + ", "); sb.append("log_file=" + log_file + ", "); sb.append("log_severity=" + log_severity + ", "); sb.append("javascript_flags=" + javascript_flags + ", "); sb.append("resources_dir_path=" + resources_dir_path + ", "); sb.append("locales_dir_path=" + locales_dir_path + ", "); sb.append("remote_debugging_port=" + remote_debugging_port + ", "); sb.append("uncaught_exception_stack_size=" + uncaught_exception_stack_size + ", "); if (background_color != null) sb.append("background_color=" + background_color.clone() + ", "); sb.append("cookieable_schemes_list=" + cookieable_schemes_list + ", "); sb.append("cookieable_schemes_exclude_defaults=" + cookieable_schemes_exclude_defaults + ", "); sb.append("no_sandbox=" + no_sandbox); return sb.toString(); } private static void putNonEmpty(Map<String, String> result, String key, String value) { if (value != null && !value.isEmpty()) result.put(key, value); } public Map<String, String> toMap() { Map<String, String> result = new HashMap<>(); putNonEmpty(result, "browser_subprocess_path", browser_subprocess_path); putNonEmpty(result, "windowless_rendering_enabled", String.valueOf(windowless_rendering_enabled)); putNonEmpty(result, "command_line_args_disabled", String.valueOf(command_line_args_disabled)); putNonEmpty(result, "cache_path", cache_path); putNonEmpty(result, "persist_session_cookies", String.valueOf(persist_session_cookies)); putNonEmpty(result, "user_agent", user_agent); putNonEmpty(result, "user_agent_product", user_agent_product); putNonEmpty(result, "locale", locale); putNonEmpty(result, "log_file", log_file); putNonEmpty(result, "log_severity", String.valueOf(log_severity)); putNonEmpty(result, "javascript_flags", javascript_flags); putNonEmpty(result, "resources_dir_path", resources_dir_path); putNonEmpty(result, "locales_dir_path", locales_dir_path); putNonEmpty(result, "remote_debugging_port", String.valueOf(remote_debugging_port)); putNonEmpty(result, "uncaught_exception_stack_size", String.valueOf(uncaught_exception_stack_size)); if (background_color != null) putNonEmpty(result, "background_color", String.valueOf(background_color.getColor())); putNonEmpty(result, "cookieable_schemes_list", cookieable_schemes_list); putNonEmpty(result, "cookieable_schemes_exclude_defaults", String.valueOf(cookieable_schemes_exclude_defaults)); putNonEmpty(result, "no_sandbox", String.valueOf(no_sandbox)); return result; } // Returns true when all SIGNIFICANT fields are equal. public boolean isAlmostEqual(CefSettings other) { return Objects.equals(cache_path, other.cache_path) && Objects.equals(persist_session_cookies, other.persist_session_cookies) && Objects.equals(user_agent, other.user_agent) && Objects.equals(user_agent_product, other.user_agent_product) && Objects.equals(locale, other.locale) && Objects.equals(javascript_flags, other.javascript_flags) && Objects.equals(remote_debugging_port, other.remote_debugging_port) && Objects.equals(uncaught_exception_stack_size, other.uncaught_exception_stack_size) && Objects.equals(cookieable_schemes_list, other.cookieable_schemes_list) && Objects.equals(cookieable_schemes_exclude_defaults, other.cookieable_schemes_exclude_defaults); } }