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

Side by Side Diff: chrome/browser/resources/plugins.js

Issue 2630443002: Plugins: Remove chrome://plugins (Closed)
Patch Set: remove test Created 3 years, 11 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/resources/plugins.html ('k') | chrome/browser/ui/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 /**
6 * Takes the |pluginsData| input argument which represents data about the
7 * currently installed/running plugins and populates the html jstemplate with
8 * that data.
9 * @param {Object} pluginsData Detailed info about installed plugins. Same
10 * expected format as returnPluginsData().
11 */
12 function renderTemplate(pluginsData) {
13 // This is the javascript code that processes the template:
14 var input = new JsEvalContext(pluginsData);
15 var output = $('pluginTemplate');
16 jstProcess(input, output);
17 }
18
19 // Keeps track of whether details have been made visible (expanded) or not.
20 var tmiModeExpanded = false;
21
22 /**
23 * @param {boolean} showDetails
24 */
25 function loadShowDetailsFromPrefs(showDetails) {
26 tmiModeExpanded = showDetails;
27 // TODO(dpapad): Use setAttribute()/removeAttribute() with 'hidden' instead of
28 // style.display.
29 $('collapse').style.display = showDetails ? 'inline' : 'none';
30 $('expand').style.display = showDetails ? 'none' : 'inline';
31 document.body.className = showDetails ? 'show-in-tmi-mode' : 'hide-tmi-mode';
32 }
33
34 /**
35 * Called by the web_ui_ to re-populate the page with data representing the
36 * current state of installed plugins.
37 * @param {Object} pluginsData Detailed info about installed plugins. The
38 * template expects each plugin's format to match the following structure to
39 * correctly populate the page:
40 * {
41 * plugins: [
42 * {
43 * name: 'Group Name',
44 * description: 'description',
45 * version: 'version',
46 * update_url: 'http://update/',
47 * critical: true,
48 * enabled_mode: 'enabledByUser',
49 * id: 'plugin-name',
50 * always_allowed: false,
51 * plugin_files: [
52 * {
53 * path: '/foo/bar/baz/MyPlugin.plugin',
54 * name: 'MyPlugin',
55 * version: '1.2,3'
56 * description: 'My plugin',
57 * type: 'BROWSER PLUGIN',
58 * mime_types: [
59 * {
60 * description: 'Foo Media',
61 * file_extensions: ['pdf'],
62 * mime_type: 'application/x-my-foo'
63 * },
64 * {
65 * description: 'Bar Stuff',
66 * file_extensions: ['bar', 'baz'],
67 * mime_type: 'application/my-bar'
68 * }
69 * ],
70 * enabled_mode: 'enabledByUser',
71 * },
72 * {
73 * path: '/tmp/MyFirst.plugin',
74 * name: 'MyFirstPlugin',
75 * version: '3.14r15926',
76 * description: 'My first plugin',
77 * type: 'BROWSER PLUGIN',
78 * mime_types: [
79 * {
80 * description: 'New Media Type',
81 * file_extensions: ['mfp'],
82 * mime_type: 'application/x-my-first'
83 * },
84 * ],
85 * enabled_mode: 'disabledByUser',
86 * },
87 * ],
88 * },
89 * ],
90 * }
91 */
92 function returnPluginsData(pluginsData) {
93 var bodyContainer = $('body-container');
94 var body = document.body;
95
96 // Set all page content to be visible so we can measure heights.
97 bodyContainer.style.visibility = 'hidden';
98 body.className = '';
99 var slidables = document.getElementsByClassName('show-in-tmi-mode');
100 for (var i = 0; i < slidables.length; i++)
101 slidables[i].style.height = 'auto';
102
103 renderTemplate(pluginsData);
104
105 // Add handlers to dynamically created HTML elements.
106 var checkboxes = document.getElementsByClassName('always-allow');
107 for (var i = 0; i < checkboxes.length; i++) {
108 checkboxes[i].onclick = function() {
109 handleSetPluginAlwaysAllowed(this);
110 };
111 }
112
113 if (cr.isChromeOS) {
114 // Disable some controls for Guest in ChromeOS.
115 uiAccountTweaks.UIAccountTweaks.applyGuestSessionVisibility(document);
116 // Disable some controls for Public session in ChromeOS.
117 uiAccountTweaks.UIAccountTweaks.applyPublicSessionVisibility(document);
118 }
119
120 // Make sure the left column (with "Description:", "Location:", etc.) is the
121 // same size for all plugins.
122 var labels = document.getElementsByClassName('plugin-details-label');
123 var maxLabelWidth = 0;
124 for (var i = 0; i < labels.length; i++)
125 labels[i].style.width = 'auto';
126 for (var i = 0; i < labels.length; i++)
127 maxLabelWidth = Math.max(maxLabelWidth, labels[i].offsetWidth);
128 for (var i = 0; i < labels.length; i++)
129 labels[i].style.width = maxLabelWidth + 'px';
130
131 // Explicitly set the height for each element that wants to be "slid" in and
132 // out when the tmiModeExpanded is toggled.
133 var slidables = document.getElementsByClassName('show-in-tmi-mode');
134 for (var i = 0; i < slidables.length; i++)
135 slidables[i].style.height = slidables[i].offsetHeight + 'px';
136
137 // Reset visibility of page based on the current tmi mode.
138 $('collapse').style.display =
139 tmiModeExpanded ? 'inline' : 'none';
140 $('expand').style.display =
141 tmiModeExpanded ? 'none' : 'inline';
142 bodyContainer.style.visibility = 'visible';
143 body.className = tmiModeExpanded ?
144 'show-tmi-mode-initial' : 'hide-tmi-mode-initial';
145 }
146
147 /*
148 * Toggles visibility of details.
149 */
150 function toggleTmiMode() {
151 tmiModeExpanded = !tmiModeExpanded;
152
153 $('collapse').style.display =
154 tmiModeExpanded ? 'inline' : 'none';
155 $('expand').style.display =
156 tmiModeExpanded ? 'none' : 'inline';
157
158 document.body.className =
159 tmiModeExpanded ? 'show-tmi-mode' : 'hide-tmi-mode';
160
161 browserProxy.saveShowDetailsToPrefs(tmiModeExpanded);
162 }
163
164 function handleSetPluginAlwaysAllowed(el) {
165 browserProxy.setPluginAlwaysAllowed(el.identifier, el.checked);
166 }
167
168 /**
169 * @param {Object} plugin An object containing the information about a plugin.
170 * See returnPluginsData() for the format of this object.
171 * @return {boolean} Whether the plugin's version should be displayed.
172 */
173 function shouldDisplayPluginVersion(plugin) {
174 return !!plugin.version && plugin.version != '0';
175 }
176
177 /**
178 * @param {Object} plugin An object containing the information about a plugin.
179 * See returnPluginsData() for the format of this object.
180 * @return {boolean} Whether the plugin's description should be displayed.
181 */
182 function shouldDisplayPluginDescription(plugin) {
183 // Only display the description if it's not blank and if it's not just the
184 // name, version, or combination thereof.
185 return plugin.description &&
186 plugin.description != plugin.name &&
187 plugin.description != plugin.version &&
188 plugin.description != 'Version ' + plugin.version &&
189 plugin.description != plugin.name + ' ' + plugin.version;
190 }
191
192 /**
193 * @param {Object} plugin An object containing the information about a plugin.
194 * See returnPluginsData() for the format of this object.
195 * @return {boolean} Whether the plugin is enabled.
196 */
197 function isPluginEnabled(plugin) {
198 return plugin.enabled_mode == 'enabledByUser' ||
199 plugin.enabled_mode == 'enabledByPolicy';
200 }
201
202 /**
203 * @param {Object} plugin An object containing the information about a plugin.
204 * See returnPluginsData() for the format of this object.
205 * @return {boolean} Whether the plugin is fully trusted.
206 */
207 function isPluginTrusted(plugin) {
208 return plugin.trusted == true;
209 }
210
211 /**
212 * @param {Object} plugin An object containing the information about a plugin.
213 * See returnPluginsData() for the format of this object.
214 * @return {boolean} Whether the plugin is marked click to play by policy.
215 *
216 * This would normally be set by setting the policy DefaultPluginsSetting to 3.
217 */
218 function isPluginPolicyClickToPlay(plugin) {
219 return plugin.policy_click_to_play == true;
220 }
221
222 // NOTE: Need to keep a global reference to the |pageImpl| such that it is not
223 // garbage collected, which causes the pipe to close and future calls from C++
224 // to JS to get dropped. This also allows tests to make direct calls on it.
225 var pageImpl = null;
226 var browserProxy = null;
227
228 function initializeProxies() {
229 return importModules([
230 'mojo/public/js/bindings',
231 'chrome/browser/ui/webui/plugins/plugins.mojom',
232 'content/public/renderer/frame_interfaces',
233 ]).then(function(modules) {
234 var bindings = modules[0];
235 var pluginsMojom = modules[1];
236 var frameInterfaces = modules[2];
237
238 browserProxy = new pluginsMojom.PluginsPageHandlerPtr(
239 frameInterfaces.getInterface(pluginsMojom.PluginsPageHandler.name));
240
241 /** @constructor */
242 var PluginsPageImpl = function() {
243 this.binding = new bindings.Binding(pluginsMojom.PluginsPage, this);
244 };
245
246 PluginsPageImpl.prototype = {
247 /** @override */
248 onPluginsUpdated: function(plugins) {
249 returnPluginsData({plugins: plugins});
250 },
251 };
252 pageImpl = new PluginsPageImpl();
253 browserProxy.setClientPage(pageImpl.binding.createInterfacePtrAndBind());
254 });
255 }
256
257 /**
258 * Overriden by tests to give them a chance to setup a fake Mojo browser proxy
259 * before any other code executes.
260 * @return {!Promise} A promise firing once necessary setup has been completed.
261 */
262 var setupFn = setupFn || function() { return Promise.resolve(); };
263
264 function main() {
265 setupFn().then(function() {
266 // Add handlers to static HTML elements.
267 $('collapse').onclick = toggleTmiMode;
268 $('expand').onclick = toggleTmiMode;
269 $('details-link').onclick = toggleTmiMode;
270 return initializeProxies();
271 }).then(function() {
272 return browserProxy.getShowDetails();
273 }).then(function(response) {
274 // Set the |tmiModeExpanded| first otherwise the UI flickers when
275 // returnPlignsData executes.
276 loadShowDetailsFromPrefs(response.show_details);
277 return browserProxy.getPluginsData();
278 }).then(function(pluginsData) {
279 returnPluginsData(pluginsData);
280
281 // Unfortunately, we don't have notifications for plugin (list) status
282 // changes (yet), so in the meanwhile just update regularly.
283 setInterval(function() {
284 browserProxy.getPluginsData().then(returnPluginsData);
285 }, 30000);
286 });
287 }
288
289 document.addEventListener('DOMContentLoaded', main);
OLDNEW
« no previous file with comments | « chrome/browser/resources/plugins.html ('k') | chrome/browser/ui/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698