Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Unified Diff: chrome/browser/resources/plugins.js

Issue 7086003: Apply content-security-policy to chrome://plugins page. This involves (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/plugins.html ('k') | chrome/browser/resources/shared/js/jstemplate_compiled.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/plugins.js
===================================================================
--- chrome/browser/resources/plugins.js (revision 0)
+++ chrome/browser/resources/plugins.js (revision 0)
@@ -0,0 +1,255 @@
+
+/**
+ * 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);
+
+ // Add handlers to dynamically created HTML elements.
+ var links = document.getElementsByClassName('disable-plugin-link');
+ for (var i = 0; i < links.length; ++i) {
+ links[i].onclick = function () {
+ handleEnablePlugin(this, false, false);
+ return false;
+ };
+ }
+ links = document.getElementsByClassName('enable-plugin-link');
+ for (var i = 0; i < links.length; ++i) {
+ links[i].onclick = function () {
+ handleEnablePlugin(this, true, false);
+ return false;
+ };
+ }
+ links = document.getElementsByClassName('disable-group-link');
+ for (var i = 0; i < links.length; ++i) {
+ links[i].onclick = function () {
+ handleEnablePlugin(this, false, true);
+ return false;
+ };
+ }
+ links = document.getElementsByClassName('enable-group-link');
+ for (var i = 0; i < links.length; ++i) {
+ links[i].onclick = function () {
+ handleEnablePlugin(this, true, true);
+ return false;
+ };
+ }
+
+ // 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);
+
+// Add handlers to static HTML elements.
+document.getElementById('collapse').onclick = toggleTmiMode;
+document.getElementById('expand').onclick = toggleTmiMode;
+document.getElementById('details-link').onclick = toggleTmiMode;
+
Property changes on: chrome/browser/resources/plugins.js
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/resources/plugins.html ('k') | chrome/browser/resources/shared/js/jstemplate_compiled.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698