OLD | NEW |
| (Empty) |
1 // Copyright 2016 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 * @fileoverview Tests for chrome://plugins | |
7 */ | |
8 | |
9 /** @const {string} Path to source root. */ | |
10 var ROOT_PATH = '../../../../'; | |
11 | |
12 /** | |
13 * Test fixture for testing async methods of cr.js. | |
14 * @constructor | |
15 * @extends testing.Test | |
16 */ | |
17 function PluginsTest() { | |
18 this.browserProxy = null; | |
19 this.setupFnResolver = new PromiseResolver(); | |
20 } | |
21 | |
22 PluginsTest.prototype = { | |
23 __proto__: testing.Test.prototype, | |
24 | |
25 /** @override */ | |
26 browsePreload: 'chrome://plugins', | |
27 | |
28 /** @override */ | |
29 isAsync: true, | |
30 | |
31 /** @override */ | |
32 runAccessibilityChecks: false, | |
33 | |
34 /** @override */ | |
35 extraLibraries: [ | |
36 ROOT_PATH + 'third_party/mocha/mocha.js', | |
37 ROOT_PATH + 'chrome/test/data/webui/mocha_adapter.js', | |
38 ROOT_PATH + 'ui/webui/resources/js/promise_resolver.js', | |
39 ROOT_PATH + 'ui/webui/resources/js/cr.js', | |
40 ROOT_PATH + 'ui/webui/resources/js/util.js', | |
41 ROOT_PATH + 'chrome/test/data/webui/settings/test_browser_proxy.js', | |
42 ], | |
43 | |
44 preLoad: function() { | |
45 /** | |
46 * A test browser proxy for the chrome://plugins page. | |
47 * | |
48 * @constructor | |
49 * @extends {TestBrowserProxyBase} | |
50 */ | |
51 var TestBrowserProxy = function() { | |
52 settings.TestBrowserProxy.call(this, [ | |
53 'getPluginsData', | |
54 'getShowDetails', | |
55 'saveShowDetailsToPrefs', | |
56 ]); | |
57 | |
58 this.bindingSet = null; | |
59 | |
60 /** | |
61 * The data to be returned by |getPluginsData_|. | |
62 * @private | |
63 */ | |
64 this.pluginsData_ = []; | |
65 }; | |
66 | |
67 TestBrowserProxy.prototype = { | |
68 __proto__: settings.TestBrowserProxy.prototype, | |
69 | |
70 getPluginsData: function() { | |
71 this.methodCalled('getPluginsData'); | |
72 return Promise.resolve({plugins: this.pluginsData_}); | |
73 }, | |
74 | |
75 setPluginsData: function(pluginsData) { | |
76 this.pluginsData_ = pluginsData; | |
77 }, | |
78 | |
79 getShowDetails: function() { | |
80 this.methodCalled('getShowDetails'); | |
81 return Promise.resolve({show_details: false}); | |
82 }, | |
83 | |
84 saveShowDetailsToPrefs: function(expanded) { | |
85 this.methodCalled('saveShowDetailsToPrefs', expanded); | |
86 }, | |
87 | |
88 setClientPage: function() { | |
89 // Nothing to do here. | |
90 }, | |
91 }; | |
92 | |
93 this.browserProxy = new TestBrowserProxy(); | |
94 | |
95 // A function that is called from chrome://plugins to allow this test to | |
96 // replace the real Mojo browser proxy with a fake one, before any other | |
97 // code runs. | |
98 window.setupFn = function() { | |
99 return importModules([ | |
100 'mojo/public/js/bindings', | |
101 'chrome/browser/ui/webui/plugins/plugins.mojom', | |
102 'content/public/renderer/frame_interfaces', | |
103 ]).then(function(modules) { | |
104 var bindings = modules[0]; | |
105 var pluginsMojom = modules[1]; | |
106 var frameInterfaces = modules[2]; | |
107 | |
108 this.browserProxy.bindingSet = new bindings.BindingSet( | |
109 pluginsMojom.PluginsPageHandler); | |
110 frameInterfaces.addInterfaceOverrideForTesting( | |
111 pluginsMojom.PluginsPageHandler.name, function(handle) { | |
112 this.browserProxy.bindingSet.addBinding(this.browserProxy, | |
113 handle); | |
114 }.bind(this)); | |
115 return this.setupFnResolver.promise; | |
116 }.bind(this)); | |
117 }.bind(this); | |
118 }, | |
119 }; | |
120 | |
121 TEST_F('PluginsTest', 'Plugins', function() { | |
122 var browserProxy = this.browserProxy; | |
123 var setupFnResolver = this.setupFnResolver; | |
124 | |
125 var fakePluginData = { | |
126 name: 'Group Name', | |
127 description: 'description', | |
128 version: 'version', | |
129 update_url: 'http://update/', | |
130 critical: true, | |
131 enabled_mode: 'enabledByUser', | |
132 id: 'plugin-name', | |
133 always_allowed: false, | |
134 plugin_files: [ | |
135 { | |
136 path: '/foo/bar/baz/MyPlugin.plugin', | |
137 name: 'MyPlugin', | |
138 version: '1.2.3', | |
139 description: 'My plugin', | |
140 type: 'BROWSER PLUGIN', | |
141 mime_types: [ | |
142 { | |
143 description: 'Foo Media', | |
144 file_extensions: ['pdf'], | |
145 mime_type: 'application/x-my-foo' | |
146 }, | |
147 { | |
148 description: 'Bar Stuff', | |
149 file_extensions: ['bar', 'baz'], | |
150 mime_type: 'application/my-bar' | |
151 }, | |
152 ], | |
153 enabled_mode: 'enabledByUser', | |
154 }, | |
155 ], | |
156 }; | |
157 | |
158 suite('PluginTest', function() { | |
159 var EXPECTED_PLUGINS = 2; | |
160 suiteSetup(function() { | |
161 browserProxy.setPluginsData([fakePluginData, fakePluginData]); | |
162 // Allow code being tested to proceed, now that fake data has been set up. | |
163 setupFnResolver.resolve(); | |
164 | |
165 return Promise.all([ | |
166 browserProxy.whenCalled('getPluginsData'), | |
167 browserProxy.whenCalled('getShowDetails'), | |
168 ]); | |
169 }); | |
170 | |
171 teardown(function() { browserProxy.reset(); }); | |
172 | |
173 test('PluginsUpdated', function() { | |
174 var plugins = document.querySelectorAll('.plugin'); | |
175 assertEquals(EXPECTED_PLUGINS, plugins.length); | |
176 | |
177 pageImpl.onPluginsUpdated([fakePluginData]); | |
178 plugins = document.querySelectorAll('.plugin'); | |
179 assertEquals(1, plugins.length); | |
180 }); | |
181 | |
182 /** | |
183 * Test that clicking on the +/- icons results in the expected calls to the | |
184 * browser. | |
185 */ | |
186 test('ToggleDetails', function() { | |
187 var collapseEl = document.querySelector('#collapse'); | |
188 var expandEl = document.querySelector('#expand'); | |
189 | |
190 var clickEvent = new MouseEvent('click', { | |
191 'view': window, 'bubbles': true, 'cancelable': true | |
192 }); | |
193 | |
194 assertEquals('none', collapseEl.style.display); | |
195 assertNotEquals('none', expandEl.style.display); | |
196 | |
197 expandEl.dispatchEvent(clickEvent); | |
198 return browserProxy.whenCalled('saveShowDetailsToPrefs').then( | |
199 function(expanded) { | |
200 // Booleans are converted to 0/1 by underlying Mojo layers. | |
201 assertTrue(Boolean(expanded)); | |
202 assertNotEquals('none', collapseEl.style.display); | |
203 assertEquals('none', expandEl.style.display); | |
204 | |
205 browserProxy.resetResolver('saveShowDetailsToPrefs'); | |
206 collapseEl.dispatchEvent(clickEvent); | |
207 return browserProxy.whenCalled('saveShowDetailsToPrefs'); | |
208 }).then(function(expanded) { | |
209 assertFalse(Boolean(expanded)); | |
210 }); | |
211 }); | |
212 }); | |
213 | |
214 // Run all registered tests. | |
215 mocha.run(); | |
216 }); | |
OLD | NEW |