blob: 1062f1eafeb386545bf016731e3348052fae3bfa [file] [log] [blame]
<!DOCTYPE HTML>
<html>
<head>
<title>Preferences Test</title>
<!-- When using the mode "code" it's important to specify charset utf-8 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<!-- jsoneditor project from https://github.com/josdejong/jsoneditor/
script hosting from http://cdnjs.com/libraries/jsoneditor -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/jsoneditor/4.2.1/jsoneditor.min.css" rel="stylesheet" type="text/css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsoneditor/4.2.1/jsoneditor.min.js"></script>
<script>
function setup() {
if (location.hostname == 'tests' || location.hostname == 'localhost')
return;
alert('This page can only be run from tests or localhost.');
// Disable all elements.
var elements = document.getElementById("form").elements;
for (var i = 0, element; element = elements[i++]; ) {
element.disabled = true;
}
}
</script>
</head>
<body bgcolor="white" onload="setup()">
<!-- Header -->
<div id="simple_links">
[ <b>Simple</b> ]
[ <a href="#" onClick="toggleView(); return false;">Advanced</a> ]
</div>
<div id="advanced_links" style="display:none">
[ <a href="#" onClick="toggleView(); return false;">Simple</a> ]
[ <b>Advanced</b> ]
</div>
<form id="form">
<!-- Simple view -->
<div id="simple">
<p>
This page supports display and configuration of a few sample preferences.
<table width="100%" style="border: 1px solid #97B0F8">
<tr>
<td>
<input type="checkbox" id="enable_spellchecking"/> Enable spell checking
</td>
</tr>
<tr>
<td>
<br/>
<input type="checkbox" id="allow_running_insecure_content"/> Allow running insecure content
</td>
</tr>
<tr>
<td>
<br/>
Proxy type:
<select id="proxy_type" onChange="proxyTypeChange()">
<option value="direct">Direct</option>
<option value="auto_detect">Auto-Detect</option>
<option value="pac_script">PAC Script</option>
<option value="fixed_servers">Fixed Servers</option>
<option value="system">System</option>
</select>
<input id="proxy_value" type="text" size="80" disabled/>
</td>
</tr>
</table>
<table border="0" width="100%">
<tr>
<td align="left">
<input type="button" value="Refresh" onClick="refreshSimple()"/>
</td>
<td align="right">
<input type="button" value="Apply Changes" onClick="applySimpleChanges()"/>
</td>
</tr>
</table>
</p>
</div>
<!-- Advanced view -->
<div id="advanced" style="display:none">
<p>
This page displays all preferences organized in a tree structure. Arbitrary changes are
allowed, however <b>changing preferences in arbitrary ways may result in crashes</b>. If you
experience a crash while setting preferences then run a Debug build of CEF/Chromium and watch
for DCHECKs in the Chromium code to figure out what went wrong.
</p>
<div id="jsoneditor" style="width: 100%; height: 100%;"></div>
<table border="0" width="100%">
<tr>
<td align="left">
<input type="button" value="Refresh" onClick="refreshEditor()"/>
<input type="checkbox" id="hide_defaults"/> Show modified preferences only
</td>
<td align="right">
<input type="button" value="Apply Changes" onClick="applyEditorChanges()"/>
</td>
</tr>
</table>
</div>
</form>
<script>
// Reference to the JSONEditor.
var editor = null;
// Preferences state information.
var preferences_state = null;
// Toggle between the simple and advanced views.
function toggleView() {
var simple = document.getElementById("simple");
var advanced = document.getElementById("advanced");
var simple_links = document.getElementById("simple_links");
var advanced_links = document.getElementById("advanced_links");
if (simple.style.display == "none") {
// Show the simple view.
simple.style.display = "";
simple_links.style.display = "";
advanced.style.display = "none";
advanced_links.style.display = "none";
// Refresh the simple view contents.
refreshSimple();
} else {
// Show the advanced view.
simple.style.display = "none";
simple_links.style.display = "none";
advanced.style.display = "";
advanced_links.style.display = "";
if (editor == null) {
// Create the editor.
editor = new JSONEditor(document.getElementById("jsoneditor"));
}
// Refesh the editor contents.
refreshEditor();
}
}
// Send a request to C++.
function sendRequest(request, onSuccessCallback) {
// Results in a call to the OnQuery method in preferences_test.cpp.
window.cefQuery({
request: JSON.stringify(request),
onSuccess: onSuccessCallback,
onFailure: function(error_code, error_message) {
alert(error_message + ' (' + error_code + ')');
}
});
}
// Get the preferences and execute |onSuccessCallback| with the resulting
// JSON object.
function getPreferences(include_defaults, onSuccessCallback) {
// Create the request object.
var request = {};
request.name = "preferences_get";
request.include_defaults = include_defaults;
// Send the request to C++.
sendRequest(
request,
function(response) {
onSuccessCallback(JSON.parse(response));
}
);
}
// Set the preferences.
function setPreferences(preferences) {
// Create the request object.
var request = {};
request.name = "preferences_set";
request.preferences = preferences;
// Send the request to C++.
sendRequest(
request,
function(response) {
// Show the informative response message.
alert(response);
}
);
}
// Get the global preference state.
function getPreferenceState() {
// Create the request object.
var request = {};
request.name = "preferences_state";
// Send the request to C++.
sendRequest(
request,
function(response) {
// Populate the global state object.
preferences_state = JSON.parse(response);
// Refresh the simple view contents.
refreshSimple();
}
);
}
// Refresh the editor view contents.
function refreshEditor() {
include_defaults = !document.getElementById("hide_defaults").checked;
getPreferences(include_defaults, function(response) {
// Set the JSON in the editor.
editor.set(response);
});
}
// Apply changes from the editor view.
function applyEditorChanges() {
setPreferences(editor.get());
}
// Refresh the simple view contents.
function refreshSimple() {
getPreferences(true, function(response) {
// Spellcheck settings.
if (preferences_state.spellcheck_disabled) {
// Cannot enable spell checking when disabled via the command-line.
document.getElementById("enable_spellchecking").checked = false;
document.getElementById("enable_spellchecking").disabled = true;
} else {
document.getElementById("enable_spellchecking").checked =
response.browser.enable_spellchecking;
}
// Web content settings.
if (preferences_state.allow_running_insecure_content) {
// Cannot disable running insecure content when enabled via the
// command-line.
document.getElementById("allow_running_insecure_content").checked =
true;
document.getElementById("allow_running_insecure_content").disabled =
true;
} else {
document.getElementById("allow_running_insecure_content").checked =
response.webkit.webprefs.allow_running_insecure_content;
}
// Proxy settings.
document.getElementById("proxy_type").value = response.proxy.mode;
// Some proxy modes have associated values.
if (response.proxy.mode == "pac_script")
proxy_value = response.proxy.pac_url;
else if (response.proxy.mode == "fixed_servers")
proxy_value = response.proxy.server;
else
proxy_value = null;
if (proxy_value != null)
document.getElementById("proxy_value").value = proxy_value;
document.getElementById("proxy_value").disabled = (proxy_value == null);
if (preferences_state.proxy_configured) {
// Cannot modify proxy settings that are configured via the command-
// line.
document.getElementById("proxy_type").disabled = true;
document.getElementById("proxy_value").disabled = true;
}
});
}
// Apply changes from the simple view.
function applySimpleChanges() {
has_preferences = false;
preferences = {};
// Spellcheck settings.
if (!preferences_state.spellcheck_disabled) {
has_preferences = true;
preferences.browser = {};
preferences.browser.enable_spellchecking =
document.getElementById("enable_spellchecking").checked;
}
// Web content settings.
if (!preferences_state.allow_running_insecure_content) {
has_preferences = true;
preferences.webkit = {};
preferences.webkit.webprefs = {};
preferences.webkit.webprefs.allow_running_insecure_content =
document.getElementById("allow_running_insecure_content").checked;
}
// Proxy settings.
if (!preferences_state.proxy_configured) {
has_preferences = true;
preferences.proxy = {};
preferences.proxy.mode = document.getElementById("proxy_type").value;
// Some proxy modes have associated values.
if (preferences.proxy.mode == "pac_script") {
preferences.proxy.pac_script =
document.getElementById("proxy_value").value;
} else if (preferences.proxy.mode == "fixed_servers") {
preferences.proxy.server =
document.getElementById("proxy_value").value;
}
}
if (has_preferences)
setPreferences(preferences);
}
// Called when the proxy type is changed.
function proxyTypeChange() {
proxy_type = document.getElementById("proxy_type").value;
document.getElementById("proxy_value").value = "";
// Only enable the value field for the proxy modes that require it.
document.getElementById("proxy_value").disabled =
(proxy_type != "pac_script" && proxy_type != "fixed_servers");
}
// Retrieve global preferences state.
getPreferenceState();
</script>
</body>
</html>