| <!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> |