Chromium Code Reviews| Index: chrome/browser/resources/plugins.html |
| =================================================================== |
| --- chrome/browser/resources/plugins.html (revision 86705) |
| +++ chrome/browser/resources/plugins.html (working copy) |
| @@ -2,6 +2,11 @@ |
| <html i18n-values="dir:textdirection;"> |
| <head> |
| <meta charset="utf-8"> |
| +<!-- X-WebKit-CSP is our development name for Content-Security-Policy. |
| + The 'unsafe-eval' is required for jstemplate_compiled.js. |
| + TODO(tsepez) rename when Content-security-policy is done. |
| +--> |
| +<meta http-equiv="X-WebKit-CSP" content="object-src 'none'; script-src chrome://resources 'self' 'unsafe-eval'"> |
|
Bernhard Bauer
2011/05/27 20:01:29
Why do we allow unsafe eval?
|
| <title i18n-content="pluginsTitle"></title> |
| <style> |
| body { |
| @@ -242,230 +247,7 @@ |
| button { |
| font-size: 104%; |
| } |
| - |
| </style> |
| -<script> |
| - |
| -/** |
| - * This variable structure is here to document the structure that the template |
| - * expects to correctly populate the page. |
| - */ |
| -var pluginDataFormat = { |
| - 'plugins': [ |
| - { |
| - 'name': 'Group Name', |
| - 'description': 'description', |
| - 'version': 'version', |
| - 'update_url': 'http://update/', |
| - 'critical': true, |
| - 'enabled': true, |
| - 'plugin_files': [ |
| - { |
| - 'path': '/blahblah/blahblah/MyCrappyPlugin.plugin', |
| - 'name': 'MyCrappyPlugin', |
| - 'version': '1.2.3', |
| - 'description': 'My crappy plugin', |
| - 'mimeTypes': [ |
| - { 'description': 'Foo Media', |
| - 'fileExtensions': [ 'foo' ], |
| - 'mimeType': 'application/x-my-foo' }, |
| - { 'description': 'Bar Stuff', |
| - 'fileExtensions': [ 'bar','baz' ], |
| - 'mimeType': 'application/my-bar' } |
| - ], |
| - 'enabledMode': 'enabledByUser' |
| - }, |
| - { |
| - 'path': '/tmp/MyFirst.plugin', |
| - 'name': 'MyFirstPlugin', |
| - 'version': '3.14r15926', |
| - 'description': 'My first plugin', |
| - 'mimeTypes': [ |
| - { 'description': 'New Guy Media', |
| - 'fileExtensions': [ 'mfp' ], |
| - 'mimeType': 'application/x-my-first' } |
| - ], |
| - 'enabledMode': 'enabledByPolicy' |
| - }, |
| - { |
| - 'path': '/foobar/baz/YourGreatPlugin.plugin', |
| - 'name': 'YourGreatPlugin', |
| - 'version': '4.5', |
| - 'description': 'Your great plugin', |
| - 'mimeTypes': [ |
| - { 'description': 'Baz Stuff', |
| - 'fileExtensions': [ 'baz' ], |
| - 'mimeType': 'application/x-your-baz' } |
| - ], |
| - 'enabledMode': 'disabledByUser' |
| - }, |
| - { |
| - 'path': '/foobiz/bar/HisGreatPlugin.plugin', |
| - 'name': 'HisGreatPlugin', |
| - 'version': '1.2', |
| - 'description': 'His great plugin', |
| - 'mimeTypes': [ |
| - { 'description': 'More baz Stuff', |
| - 'fileExtensions': [ 'bor' ], |
| - 'mimeType': 'application/x-his-bor' } |
| - ], |
| - 'enabledMode': 'disabledByPolicy' |
| - } |
| - ] |
| - } |
| - ] |
| -}; |
| - |
| -/** |
| - * Takes the |pluginsData| input argument which represents data about the |
| - * currently installed/running plugins and populates the html jstemplate with |
| - * that data. It expects an object structure like the above. |
| - * @param {Object} pluginsData Detailed info about installed plugins |
| - */ |
| -function renderTemplate(pluginsData) { |
| - // This is the javascript code that processes the template: |
| - var input = new JsEvalContext(pluginsData); |
| - var output = document.getElementById('pluginTemplate'); |
| - jstProcess(input, output); |
| -} |
| - |
| -/** |
| - * Asks the C++ PluginsDOMHandler to get details about the installed plugins and |
| - * return detailed data about the configuration. The PluginsDOMHandler should |
| - * reply to returnPluginsData() (below). |
| - */ |
| -function requestPluginsData() { |
| - chrome.send('requestPluginsData', []); |
| - chrome.send('getShowDetails', []); |
| -} |
| - |
| -function loadShowDetailsFromPrefs(show_details) { |
| - tmiModeExpanded = show_details; |
| - document.getElementById('collapse').style.display = |
| - show_details ? 'inline' : 'none'; |
| - document.getElementById('expand').style.display = |
| - show_details ? 'none' : 'inline'; |
| - |
| - document.body.className = |
| - show_details ? 'showTmiMode' : 'hideTmiMode'; |
| -} |
| - |
| -/** |
| - * Asks the C++ PluginsDOMHandler to show the terms of service (about:terms). |
| - */ |
| -function showTermsOfService() { |
| - chrome.send('showTermsOfService', []); |
| -} |
| - |
| -/** |
| - * Called by the web_ui_ to re-populate the page with data representing the |
| - * current state of installed plugins. |
| - */ |
| -function returnPluginsData(pluginsData){ |
| - var bodyContainer = document.getElementById('body-container'); |
| - var body = document.body; |
| - |
| - // Set all page content to be visible so we can measure heights. |
| - bodyContainer.style.visibility = 'hidden'; |
| - body.className = ''; |
| - var slidables = document.getElementsByClassName('showInTmiMode'); |
| - for (var i = 0; i < slidables.length; i++) |
| - slidables[i].style.height = 'auto'; |
| - |
| - renderTemplate(pluginsData); |
| - |
| - // Make sure the left column (with "Description:", "Location:", etc.) is the |
| - // same size for all plugins. |
| - var labels = document.getElementsByClassName('plugin-details-label'); |
| - var maxLabelWidth = 0; |
| - for (var i = 0; i < labels.length; i++) |
| - labels[i].style.width = 'auto'; |
| - for (var i = 0; i < labels.length; i++) |
| - maxLabelWidth = Math.max(maxLabelWidth, labels[i].offsetWidth); |
| - for (var i = 0; i < labels.length; i++) |
| - labels[i].style.width = maxLabelWidth + 'px'; |
| - |
| - // Explicitly set the height for each element that wants to be "slid" in and |
| - // out when the tmiModeExpanded is toggled. |
| - var slidables = document.getElementsByClassName('showInTmiMode'); |
| - for (var i = 0; i < slidables.length; i++) |
| - slidables[i].style.height = slidables[i].offsetHeight + 'px'; |
| - |
| - // Reset visibility of page based on the current tmi mode. |
| - document.getElementById('collapse').style.display = |
| - tmiModeExpanded ? 'inline' : 'none'; |
| - document.getElementById('expand').style.display = |
| - tmiModeExpanded ? 'none' : 'inline'; |
| - bodyContainer.style.visibility = 'visible'; |
| - body.className = tmiModeExpanded ? |
| - 'showTmiModeInitial' : 'hideTmiModeInitial'; |
| -} |
| - |
| -/** |
| - * Handles a 'enable' or 'disable' button getting clicked. |
| - */ |
| -function handleEnablePlugin(node, enable, isGroup) { |
| - // Tell the C++ PluginsDOMHandler to enable/disable the plugin. |
| - chrome.send('enablePlugin', [String(node.path), String(enable), |
| - String(isGroup)]); |
| -} |
| - |
| -// Keeps track of whether details have been made visible (expanded) or not. |
| -var tmiModeExpanded = false; |
| - |
| -/* |
| - * Toggles visibility of details. |
| - */ |
| -function toggleTmiMode() { |
| - tmiModeExpanded = !tmiModeExpanded; |
| - |
| - document.getElementById('collapse').style.display = |
| - tmiModeExpanded ? 'inline' : 'none'; |
| - document.getElementById('expand').style.display = |
| - tmiModeExpanded ? 'none' : 'inline'; |
| - |
| - document.body.className = |
| - tmiModeExpanded ? 'showTmiMode' : 'hideTmiMode'; |
| - |
| - chrome.send('saveShowDetailsToPrefs', [String(tmiModeExpanded)]); |
| -} |
| - |
| -/** |
| - * Determines whether a plugin's version should be displayed. |
| - */ |
| -function shouldDisplayPluginVersion(plugin) { |
| - return !!plugin.version && plugin.version != '0'; |
| -} |
| - |
| -/** |
| - * Determines whether a plugin's description should be displayed. |
| - */ |
| -function shouldDisplayPluginDescription(plugin) { |
| - // Only display the description if it's not blank and if it's not just the |
| - // name, version, or combination thereof. |
| - return plugin.description && |
| - plugin.description != plugin.name && |
| - plugin.description != plugin.version && |
| - plugin.description != 'Version ' + plugin.version && |
| - plugin.description != plugin.name + ' ' + plugin.version; |
| -} |
| - |
| -/** |
| - * Determines whether a plugin is enabled or not. |
| - */ |
| -function isPluginEnabled(plugin) { |
| - return plugin.enabledMode == 'enabledByUser' || |
| - plugin.enabledMode == 'enabledByPolicy'; |
| -} |
| - |
| -// Unfortunately, we don't have notifications for plugin (list) status changes |
| -// (yet), so in the meanwhile just update regularly. |
| -setInterval(requestPluginsData, 30000); |
| - |
| -// Get data and have it displayed upon loading. |
| -document.addEventListener('DOMContentLoaded', requestPluginsData); |
| - |
| -</script> |
| </head> |
| <body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize"> |
| <div id="body-container" style="visibility:hidden"> |
| @@ -487,15 +269,14 @@ |
| jscontent="plugins.length"></span>)</span> |
| </td> |
| <td width="18"> |
| - <img id="collapse" class="tmi-mode-image" |
| - style="display:none" onclick="toggleTmiMode();" |
| + <img id="collapse" class="tmi-mode-image" style="display:none" |
| src="shared/images/minus.png"> |
| <img id="expand" class="tmi-mode-image" |
| - onclick="toggleTmiMode();" src="shared/images/plus.png"> |
| + src="shared/images/plus.png"> |
| </td> |
| <td> |
| <div class="tmi-mode-link"> |
| - <a onclick="toggleTmiMode();" style="cursor: default" |
| + <a id="details-link" style="cursor: default" |
| i18n-content="pluginsDetailsModeLink">DETAILS</a> |
| </div> |
| </td> |
| @@ -578,17 +359,17 @@ |
| i18n-content="pluginEnabledByPolicy">(ENABLED_BY_POLICY)</span> |
| <span> |
| <a |
| + class="disable-plugin-link" |
| jsvalues=".path:path" |
| jsdisplay="enabledMode == 'enabledByUser'" |
| - onclick="handleEnablePlugin(this, false, false)" |
| - href="javascript:void(0);" |
| + href="#" |
| i18n-content="disable" |
| >DISABLE</a> |
| <a |
| + class="enable-plugin-link" |
| jsvalues=".path:path" |
| jsdisplay="enabledMode == 'disabledByUser'" |
| - onclick="handleEnablePlugin(this, true, false)" |
| - href="javascript:void(0);" |
| + href="#" |
| i18n-content="enable" |
| >ENABLE</a> |
| <span |
| @@ -635,17 +416,17 @@ |
| <div class="plugin-actions"> |
| <span> |
| <a |
| + class="disable-group-link" |
| jsvalues=".path:name" |
| jsdisplay="enabledMode == 'enabledByUser'" |
| - onclick="handleEnablePlugin(this, false, true)" |
| - href="javascript:void(0);" |
| + href="#" |
| i18n-content="disable" |
| >DISABLE</a> |
| <a |
| + class="enable-group-link" |
| jsvalues=".path:name" |
| jsdisplay="enabledMode == 'disabledByUser'" |
| - onclick="handleEnablePlugin(this, true, true)" |
| - href="javascript:void(0);" |
| + href="#" |
| i18n-content="enable" |
| >ENABLE</a> |
| <span |
| @@ -666,5 +447,10 @@ |
| </div> |
| </div> |
| </div> |
| +<script src="chrome://plugins/plugins.js"></script> |
| +<script src="chrome://plugins/strings.js"></script> |
| +<script src="chrome://resources/js/i18n_template.js"></script> |
| +<script src="chrome://resources/js/i18n_process.js"></script> |
| +<script src="chrome://resources/js/jstemplate_compiled.js"></script> |
| </body> |
| </html> |