| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * This variable structure is here to document the structure that the template | 6 * This variable structure is here to document the structure that the template |
| 7 * expects to correctly populate the page. | 7 * expects to correctly populate the page. |
| 8 */ | 8 */ |
| 9 var pluginDataFormat = { | 9 var pluginDataFormat = { |
| 10 'plugins': [ | 10 'plugins': [ |
| 11 { | 11 { |
| 12 'name': 'Group Name', | 12 'name': 'Group Name', |
| 13 'description': 'description', | 13 'description': 'description', |
| 14 'version': 'version', | 14 'version': 'version', |
| 15 'update_url': 'http://update/', | 15 'update_url': 'http://update/', |
| 16 'critical': true, | 16 'critical': true, |
| 17 'enabled': true, | 17 'enabled': true, |
| 18 'plugin_files': [ | 18 'plugin_files': [ |
| 19 { | 19 { |
| 20 'path': '/blahblah/blahblah/MyCrappyPlugin.plugin', | 20 'path': '/blahblah/blahblah/MyCrappyPlugin.plugin', |
| 21 'name': 'MyCrappyPlugin', | 21 'name': 'MyCrappyPlugin', |
| 22 'version': '1.2.3', | 22 'version': '1.2.3', |
| 23 'description': 'My crappy plugin', | 23 'description': 'My crappy plugin', |
| 24 'mimeTypes': [ | 24 'mimeTypes': [ |
| 25 { 'description': 'Foo Media', | 25 { 'description': 'Foo Media', |
| 26 'fileExtensions': [ 'foo' ], | 26 'fileExtensions': ['foo'], |
| 27 'mimeType': 'application/x-my-foo' }, | 27 'mimeType': 'application/x-my-foo' }, |
| 28 { 'description': 'Bar Stuff', | 28 { 'description': 'Bar Stuff', |
| 29 'fileExtensions': [ 'bar','baz' ], | 29 'fileExtensions': ['bar', 'baz'], |
| 30 'mimeType': 'application/my-bar' } | 30 'mimeType': 'application/my-bar' } |
| 31 ], | 31 ], |
| 32 'enabledMode': 'enabledByUser' | 32 'enabledMode': 'enabledByUser' |
| 33 }, | 33 }, |
| 34 { | 34 { |
| 35 'path': '/tmp/MyFirst.plugin', | 35 'path': '/tmp/MyFirst.plugin', |
| 36 'name': 'MyFirstPlugin', | 36 'name': 'MyFirstPlugin', |
| 37 'version': '3.14r15926', | 37 'version': '3.14r15926', |
| 38 'description': 'My first plugin', | 38 'description': 'My first plugin', |
| 39 'mimeTypes': [ | 39 'mimeTypes': [ |
| 40 { 'description': 'New Guy Media', | 40 { 'description': 'New Guy Media', |
| 41 'fileExtensions': [ 'mfp' ], | 41 'fileExtensions': ['mfp'], |
| 42 'mimeType': 'application/x-my-first' } | 42 'mimeType': 'application/x-my-first' } |
| 43 ], | 43 ], |
| 44 'enabledMode': 'enabledByPolicy' | 44 'enabledMode': 'enabledByPolicy' |
| 45 }, | 45 }, |
| 46 { | 46 { |
| 47 'path': '/foobar/baz/YourGreatPlugin.plugin', | 47 'path': '/foobar/baz/YourGreatPlugin.plugin', |
| 48 'name': 'YourGreatPlugin', | 48 'name': 'YourGreatPlugin', |
| 49 'version': '4.5', | 49 'version': '4.5', |
| 50 'description': 'Your great plugin', | 50 'description': 'Your great plugin', |
| 51 'mimeTypes': [ | 51 'mimeTypes': [ |
| 52 { 'description': 'Baz Stuff', | 52 { 'description': 'Baz Stuff', |
| 53 'fileExtensions': [ 'baz' ], | 53 'fileExtensions': ['baz'], |
| 54 'mimeType': 'application/x-your-baz' } | 54 'mimeType': 'application/x-your-baz' } |
| 55 ], | 55 ], |
| 56 'enabledMode': 'disabledByUser' | 56 'enabledMode': 'disabledByUser' |
| 57 }, | 57 }, |
| 58 { | 58 { |
| 59 'path': '/foobiz/bar/HisGreatPlugin.plugin', | 59 'path': '/foobiz/bar/HisGreatPlugin.plugin', |
| 60 'name': 'HisGreatPlugin', | 60 'name': 'HisGreatPlugin', |
| 61 'version': '1.2', | 61 'version': '1.2', |
| 62 'description': 'His great plugin', | 62 'description': 'His great plugin', |
| 63 'mimeTypes': [ | 63 'mimeTypes': [ |
| 64 { 'description': 'More baz Stuff', | 64 { 'description': 'More baz Stuff', |
| 65 'fileExtensions': [ 'bor' ], | 65 'fileExtensions': ['bor'], |
| 66 'mimeType': 'application/x-his-bor' } | 66 'mimeType': 'application/x-his-bor' } |
| 67 ], | 67 ], |
| 68 'enabledMode': 'disabledByPolicy' | 68 'enabledMode': 'disabledByPolicy' |
| 69 } | 69 } |
| 70 ] | 70 ] |
| 71 } | 71 } |
| 72 ] | 72 ] |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 /** | 75 /** |
| 76 * Takes the |pluginsData| input argument which represents data about the | 76 * Takes the |pluginsData| input argument which represents data about the |
| 77 * currently installed/running plugins and populates the html jstemplate with | 77 * currently installed/running plugins and populates the html jstemplate with |
| 78 * that data. It expects an object structure like the above. | 78 * that data. It expects an object structure like the above. |
| 79 * @param {Object} pluginsData Detailed info about installed plugins | 79 * @param {Object} pluginsData Detailed info about installed plugins |
| 80 */ | 80 */ |
| 81 function renderTemplate(pluginsData) { | 81 function renderTemplate(pluginsData) { |
| 82 // This is the javascript code that processes the template: | 82 // This is the javascript code that processes the template: |
| 83 var input = new JsEvalContext(pluginsData); | 83 var input = new JsEvalContext(pluginsData); |
| 84 var output = document.getElementById('pluginTemplate'); | 84 var output = $('pluginTemplate'); |
| 85 jstProcess(input, output); | 85 jstProcess(input, output); |
| 86 } | 86 } |
| 87 | 87 |
| 88 /** | 88 /** |
| 89 * Asks the C++ PluginsDOMHandler to get details about the installed plugins and | 89 * Asks the C++ PluginsDOMHandler to get details about the installed plugins and |
| 90 * return detailed data about the configuration. The PluginsDOMHandler should | 90 * return detailed data about the configuration. The PluginsDOMHandler should |
| 91 * reply to returnPluginsData() (below). | 91 * reply to returnPluginsData() (below). |
| 92 */ | 92 */ |
| 93 function requestPluginsData() { | 93 function requestPluginsData() { |
| 94 chrome.send('requestPluginsData', []); | 94 chrome.send('requestPluginsData', []); |
| 95 chrome.send('getShowDetails', []); | 95 chrome.send('getShowDetails', []); |
| 96 } | 96 } |
| 97 | 97 |
| 98 function loadShowDetailsFromPrefs(show_details) { | 98 function loadShowDetailsFromPrefs(show_details) { |
| 99 tmiModeExpanded = show_details; | 99 tmiModeExpanded = show_details; |
| 100 document.getElementById('collapse').style.display = | 100 $('collapse').style.display = |
| 101 show_details ? 'inline' : 'none'; | 101 show_details ? 'inline' : 'none'; |
| 102 document.getElementById('expand').style.display = | 102 $('expand').style.display = |
| 103 show_details ? 'none' : 'inline'; | 103 show_details ? 'none' : 'inline'; |
| 104 | 104 |
| 105 document.body.className = show_details ? 'show-tmi-mode' : 'hide-tmi-mode'; | 105 document.body.className = show_details ? 'show-tmi-mode' : 'hide-tmi-mode'; |
| 106 } | 106 } |
| 107 | 107 |
| 108 /** | 108 /** |
| 109 * Called by the web_ui_ to re-populate the page with data representing the | 109 * Called by the web_ui_ to re-populate the page with data representing the |
| 110 * current state of installed plugins. | 110 * current state of installed plugins. |
| 111 */ | 111 */ |
| 112 function returnPluginsData(pluginsData){ | 112 function returnPluginsData(pluginsData) { |
| 113 var bodyContainer = document.getElementById('body-container'); | 113 var bodyContainer = $('body-container'); |
| 114 var body = document.body; | 114 var body = document.body; |
| 115 | 115 |
| 116 // Set all page content to be visible so we can measure heights. | 116 // Set all page content to be visible so we can measure heights. |
| 117 bodyContainer.style.visibility = 'hidden'; | 117 bodyContainer.style.visibility = 'hidden'; |
| 118 body.className = ''; | 118 body.className = ''; |
| 119 var slidables = document.getElementsByClassName('show-in-tmi-mode'); | 119 var slidables = document.getElementsByClassName('show-in-tmi-mode'); |
| 120 for (var i = 0; i < slidables.length; i++) | 120 for (var i = 0; i < slidables.length; i++) |
| 121 slidables[i].style.height = 'auto'; | 121 slidables[i].style.height = 'auto'; |
| 122 | 122 |
| 123 renderTemplate(pluginsData); | 123 renderTemplate(pluginsData); |
| 124 | 124 |
| 125 // Add handlers to dynamically created HTML elements. | 125 // Add handlers to dynamically created HTML elements. |
| 126 var links = document.getElementsByClassName('disable-plugin-link'); | 126 var links = document.getElementsByClassName('disable-plugin-link'); |
| 127 for (var i = 0; i < links.length; i++) { | 127 for (var i = 0; i < links.length; i++) { |
| 128 links[i].onclick = function () { | 128 links[i].onclick = function() { |
| 129 handleEnablePlugin(this, false, false); | 129 handleEnablePlugin(this, false, false); |
| 130 return false; | 130 return false; |
| 131 }; | 131 }; |
| 132 } | 132 } |
| 133 links = document.getElementsByClassName('enable-plugin-link'); | 133 links = document.getElementsByClassName('enable-plugin-link'); |
| 134 for (var i = 0; i < links.length; i++) { | 134 for (var i = 0; i < links.length; i++) { |
| 135 links[i].onclick = function () { | 135 links[i].onclick = function() { |
| 136 handleEnablePlugin(this, true, false); | 136 handleEnablePlugin(this, true, false); |
| 137 return false; | 137 return false; |
| 138 }; | 138 }; |
| 139 } | 139 } |
| 140 links = document.getElementsByClassName('disable-group-link'); | 140 links = document.getElementsByClassName('disable-group-link'); |
| 141 for (var i = 0; i < links.length; i++) { | 141 for (var i = 0; i < links.length; i++) { |
| 142 links[i].onclick = function () { | 142 links[i].onclick = function() { |
| 143 handleEnablePlugin(this, false, true); | 143 handleEnablePlugin(this, false, true); |
| 144 return false; | 144 return false; |
| 145 }; | 145 }; |
| 146 } | 146 } |
| 147 links = document.getElementsByClassName('enable-group-link'); | 147 links = document.getElementsByClassName('enable-group-link'); |
| 148 for (var i = 0; i < links.length; i++) { | 148 for (var i = 0; i < links.length; i++) { |
| 149 links[i].onclick = function () { | 149 links[i].onclick = function() { |
| 150 handleEnablePlugin(this, true, true); | 150 handleEnablePlugin(this, true, true); |
| 151 return false; | 151 return false; |
| 152 }; | 152 }; |
| 153 } | 153 } |
| 154 var checkboxes = document.getElementsByClassName('always-allow'); | 154 var checkboxes = document.getElementsByClassName('always-allow'); |
| 155 for (var i = 0; i < checkboxes.length; i++) { | 155 for (var i = 0; i < checkboxes.length; i++) { |
| 156 checkboxes[i].onclick = function () { | 156 checkboxes[i].onclick = function() { |
| 157 handleSetPluginAlwaysAllowed(this) | 157 handleSetPluginAlwaysAllowed(this); |
| 158 }; | 158 }; |
| 159 }; | 159 } |
| 160 |
| 161 // Disable some controls for Guest in ChromeOS. |
| 162 if (cr.isChromeOS) |
| 163 uiAccountTweaks.UIAccountTweaks.applyGuestModeVisibility(document); |
| 160 | 164 |
| 161 // Make sure the left column (with "Description:", "Location:", etc.) is the | 165 // Make sure the left column (with "Description:", "Location:", etc.) is the |
| 162 // same size for all plugins. | 166 // same size for all plugins. |
| 163 var labels = document.getElementsByClassName('plugin-details-label'); | 167 var labels = document.getElementsByClassName('plugin-details-label'); |
| 164 var maxLabelWidth = 0; | 168 var maxLabelWidth = 0; |
| 165 for (var i = 0; i < labels.length; i++) | 169 for (var i = 0; i < labels.length; i++) |
| 166 labels[i].style.width = 'auto'; | 170 labels[i].style.width = 'auto'; |
| 167 for (var i = 0; i < labels.length; i++) | 171 for (var i = 0; i < labels.length; i++) |
| 168 maxLabelWidth = Math.max(maxLabelWidth, labels[i].offsetWidth); | 172 maxLabelWidth = Math.max(maxLabelWidth, labels[i].offsetWidth); |
| 169 for (var i = 0; i < labels.length; i++) | 173 for (var i = 0; i < labels.length; i++) |
| 170 labels[i].style.width = maxLabelWidth + 'px'; | 174 labels[i].style.width = maxLabelWidth + 'px'; |
| 171 | 175 |
| 172 // Explicitly set the height for each element that wants to be "slid" in and | 176 // Explicitly set the height for each element that wants to be "slid" in and |
| 173 // out when the tmiModeExpanded is toggled. | 177 // out when the tmiModeExpanded is toggled. |
| 174 var slidables = document.getElementsByClassName('show-in-tmi-mode'); | 178 var slidables = document.getElementsByClassName('show-in-tmi-mode'); |
| 175 for (var i = 0; i < slidables.length; i++) | 179 for (var i = 0; i < slidables.length; i++) |
| 176 slidables[i].style.height = slidables[i].offsetHeight + 'px'; | 180 slidables[i].style.height = slidables[i].offsetHeight + 'px'; |
| 177 | 181 |
| 178 // Reset visibility of page based on the current tmi mode. | 182 // Reset visibility of page based on the current tmi mode. |
| 179 document.getElementById('collapse').style.display = | 183 $('collapse').style.display = |
| 180 tmiModeExpanded ? 'inline' : 'none'; | 184 tmiModeExpanded ? 'inline' : 'none'; |
| 181 document.getElementById('expand').style.display = | 185 $('expand').style.display = |
| 182 tmiModeExpanded ? 'none' : 'inline'; | 186 tmiModeExpanded ? 'none' : 'inline'; |
| 183 bodyContainer.style.visibility = 'visible'; | 187 bodyContainer.style.visibility = 'visible'; |
| 184 body.className = tmiModeExpanded ? | 188 body.className = tmiModeExpanded ? |
| 185 'show-tmi-mode-initial' : 'hide-tmi-mode-initial'; | 189 'show-tmi-mode-initial' : 'hide-tmi-mode-initial'; |
| 186 } | 190 } |
| 187 | 191 |
| 188 /** | 192 /** |
| 189 * Handles a 'enable' or 'disable' button getting clicked. | 193 * Handles a 'enable' or 'disable' button getting clicked. |
| 190 */ | 194 */ |
| 191 function handleEnablePlugin(node, enable, isGroup) { | 195 function handleEnablePlugin(node, enable, isGroup) { |
| 192 // Tell the C++ PluginsDOMHandler to enable/disable the plugin. | 196 // Tell the C++ PluginsDOMHandler to enable/disable the plugin. |
| 193 chrome.send('enablePlugin', [String(node.path), String(enable), | 197 chrome.send('enablePlugin', [String(node.path), String(enable), |
| 194 String(isGroup)]); | 198 String(isGroup)]); |
| 195 } | 199 } |
| 196 | 200 |
| 197 // Keeps track of whether details have been made visible (expanded) or not. | 201 // Keeps track of whether details have been made visible (expanded) or not. |
| 198 var tmiModeExpanded = false; | 202 var tmiModeExpanded = false; |
| 199 | 203 |
| 200 /* | 204 /* |
| 201 * Toggles visibility of details. | 205 * Toggles visibility of details. |
| 202 */ | 206 */ |
| 203 function toggleTmiMode() { | 207 function toggleTmiMode() { |
| 204 tmiModeExpanded = !tmiModeExpanded; | 208 tmiModeExpanded = !tmiModeExpanded; |
| 205 | 209 |
| 206 document.getElementById('collapse').style.display = | 210 $('collapse').style.display = |
| 207 tmiModeExpanded ? 'inline' : 'none'; | 211 tmiModeExpanded ? 'inline' : 'none'; |
| 208 document.getElementById('expand').style.display = | 212 $('expand').style.display = |
| 209 tmiModeExpanded ? 'none' : 'inline'; | 213 tmiModeExpanded ? 'none' : 'inline'; |
| 210 | 214 |
| 211 document.body.className = | 215 document.body.className = |
| 212 tmiModeExpanded ? 'show-tmi-mode' : 'hide-tmi-mode'; | 216 tmiModeExpanded ? 'show-tmi-mode' : 'hide-tmi-mode'; |
| 213 | 217 |
| 214 chrome.send('saveShowDetailsToPrefs', [String(tmiModeExpanded)]); | 218 chrome.send('saveShowDetailsToPrefs', [String(tmiModeExpanded)]); |
| 215 } | 219 } |
| 216 | 220 |
| 217 function handleSetPluginAlwaysAllowed(el) { | 221 function handleSetPluginAlwaysAllowed(el) { |
| 218 chrome.send('setPluginAlwaysAllowed', [el.identifier, el.checked]); | 222 chrome.send('setPluginAlwaysAllowed', [el.identifier, el.checked]); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 247 } | 251 } |
| 248 | 252 |
| 249 // Unfortunately, we don't have notifications for plugin (list) status changes | 253 // Unfortunately, we don't have notifications for plugin (list) status changes |
| 250 // (yet), so in the meanwhile just update regularly. | 254 // (yet), so in the meanwhile just update regularly. |
| 251 setInterval(requestPluginsData, 30000); | 255 setInterval(requestPluginsData, 30000); |
| 252 | 256 |
| 253 // Get data and have it displayed upon loading. | 257 // Get data and have it displayed upon loading. |
| 254 document.addEventListener('DOMContentLoaded', requestPluginsData); | 258 document.addEventListener('DOMContentLoaded', requestPluginsData); |
| 255 | 259 |
| 256 // Add handlers to static HTML elements. | 260 // Add handlers to static HTML elements. |
| 257 document.getElementById('collapse').onclick = toggleTmiMode; | 261 $('collapse').onclick = toggleTmiMode; |
| 258 document.getElementById('expand').onclick = toggleTmiMode; | 262 $('expand').onclick = toggleTmiMode; |
| 259 document.getElementById('details-link').onclick = toggleTmiMode; | 263 $('details-link').onclick = toggleTmiMode; |
| 260 | 264 |
| OLD | NEW |