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

Side by Side Diff: chrome/renderer/extensions/event_unittest.cc

Issue 15841013: Make miscellaneous_bindings and event_bindings Required as needed. Previously (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | chrome/renderer/extensions/extension_helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "chrome/test/base/module_system_test.h" 5 #include "chrome/test/base/module_system_test.h"
6 6
7 #include "grit/renderer_resources.h" 7 #include "grit/renderer_resources.h"
8 8
9 namespace extensions { 9 namespace extensions {
10 namespace { 10 namespace {
11 11
12 class EventUnittest : public ModuleSystemTest { 12 class EventUnittest : public ModuleSystemTest {
13 virtual void SetUp() OVERRIDE { 13 virtual void SetUp() OVERRIDE {
14 ModuleSystemTest::SetUp(); 14 ModuleSystemTest::SetUp();
15 module_system_->RunString("chrome = {};", "setup-chrome"); 15 module_system_->RunString("chrome = {};", "setup-chrome");
16 16
17 RegisterModule("event", IDR_EVENT_BINDINGS_JS); 17 RegisterModule("event_bindings", IDR_EVENT_BINDINGS_JS);
18 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS); 18 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS);
19 RegisterModule("utils", IDR_UTILS_JS); 19 RegisterModule("utils", IDR_UTILS_JS);
20 RegisterModule("json_schema", IDR_JSON_SCHEMA_JS); 20 RegisterModule("json_schema", IDR_JSON_SCHEMA_JS);
21 RegisterModule("on_unload", IDR_ON_UNLOAD_JS);
21 22
22 // Mock out the native handler for event_bindings. These mocks will fail if 23 // Mock out the native handler for event_bindings. These mocks will fail if
23 // any invariants maintained by the real event_bindings are broken. 24 // any invariants maintained by the real event_bindings are broken.
24 OverrideNativeHandler("event_bindings", 25 OverrideNativeHandler("event_natives",
25 "var assert = requireNative('assert');" 26 "var assert = requireNative('assert');"
26 "var attachedListeners = exports.attachedListeners = {};" 27 "var attachedListeners = exports.attachedListeners = {};"
27 "var attachedFilteredListeners = " 28 "var attachedFilteredListeners = "
28 " exports.attachedFilteredListeners = {};" 29 " exports.attachedFilteredListeners = {};"
29 "var nextId = 0;" 30 "var nextId = 0;"
30 "var idToName = {};" 31 "var idToName = {};"
31 32
32 "exports.AttachEvent = function(eventName) {" 33 "exports.AttachEvent = function(eventName) {"
33 " assert.AssertFalse(!!attachedListeners[eventName]);" 34 " assert.AssertFalse(!!attachedListeners[eventName]);"
34 " attachedListeners[eventName] = 1;" 35 " attachedListeners[eventName] = 1;"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 }; 79 };
79 80
80 TEST_F(EventUnittest, TestNothing) { 81 TEST_F(EventUnittest, TestNothing) {
81 ExpectNoAssertionsMade(); 82 ExpectNoAssertionsMade();
82 } 83 }
83 84
84 TEST_F(EventUnittest, AddRemoveTwoListeners) { 85 TEST_F(EventUnittest, AddRemoveTwoListeners) {
85 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 86 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
86 RegisterModule("test", 87 RegisterModule("test",
87 "var assert = requireNative('assert');" 88 "var assert = requireNative('assert');"
88 "require('event');" 89 "var Event = require('event_bindings').Event;"
89 "var Event = requireNative('chrome').GetChrome().Event;" 90 "var eventNatives = requireNative('event_natives');"
90 "var eventBindings = requireNative('event_bindings');"
91 "var myEvent = new Event('named-event');" 91 "var myEvent = new Event('named-event');"
92 "var cb1 = function() {};" 92 "var cb1 = function() {};"
93 "var cb2 = function() {};" 93 "var cb2 = function() {};"
94 "myEvent.addListener(cb1);" 94 "myEvent.addListener(cb1);"
95 "myEvent.addListener(cb2);" 95 "myEvent.addListener(cb2);"
96 "myEvent.removeListener(cb1);" 96 "myEvent.removeListener(cb1);"
97 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" 97 "assert.AssertTrue(!!eventNatives.attachedListeners['named-event']);"
98 "myEvent.removeListener(cb2);" 98 "myEvent.removeListener(cb2);"
99 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); 99 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);");
100 module_system_->Require("test"); 100 module_system_->Require("test");
101 } 101 }
102 102
103 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) { 103 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) {
104 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 104 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
105 RegisterModule("test", 105 RegisterModule("test",
106 "var assert = requireNative('assert');" 106 "var assert = requireNative('assert');"
107 "require('event');" 107 "var Event = require('event_bindings').Event;"
108 "var Event = requireNative('chrome').GetChrome().Event;" 108 "var eventNatives = requireNative('event_natives');"
109 "var eventBindings = requireNative('event_bindings');" 109 "var onUnload = require('on_unload');"
110 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
111 "var myEvent = new Event('named-event');" 110 "var myEvent = new Event('named-event');"
112 "var cb1 = function() {};" 111 "var cb1 = function() {};"
113 "var cb2 = function() {};" 112 "var cb2 = function() {};"
114 "myEvent.addListener(cb1);" 113 "myEvent.addListener(cb1);"
115 "myEvent.addListener(cb2);" 114 "myEvent.addListener(cb2);"
116 "chromeHidden.dispatchOnUnload();" 115 "onUnload.dispatch();"
117 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); 116 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);");
118 module_system_->Require("test"); 117 module_system_->Require("test");
119 } 118 }
120 119
121 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) { 120 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) {
122 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 121 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
123 RegisterModule("test", 122 RegisterModule("test",
124 "var assert = requireNative('assert');" 123 "var assert = requireNative('assert');"
125 "require('event');" 124 "var Event = require('event_bindings').Event;"
126 "var Event = requireNative('chrome').GetChrome().Event;" 125 "var eventNatives = requireNative('event_natives');"
127 "var eventBindings = requireNative('event_bindings');" 126 "var onUnload = require('on_unload');"
128 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
129 "var myEvent = new Event('named-event');" 127 "var myEvent = new Event('named-event');"
130 "var cb1 = function() {};" 128 "var cb1 = function() {};"
131 "myEvent.addListener(cb1);" 129 "myEvent.addListener(cb1);"
132 "myEvent.addListener(cb1);" 130 "myEvent.addListener(cb1);"
133 "chromeHidden.dispatchOnUnload();" 131 "onUnload.dispatch();"
134 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); 132 "assert.AssertFalse(!!eventNatives.attachedListeners['named-event']);");
135 module_system_->Require("test"); 133 module_system_->Require("test");
136 } 134 }
137 135
138 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { 136 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) {
139 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 137 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
140 RegisterModule("test", 138 RegisterModule("test",
141 "require('event');" 139 "var Event = require('event_bindings').Event;"
142 "var Event = requireNative('chrome').GetChrome().Event;"
143 "var eventOpts = {supportsRules: true};" 140 "var eventOpts = {supportsRules: true};"
144 "var assert = requireNative('assert');" 141 "var assert = requireNative('assert');"
145 "var caught = false;" 142 "var caught = false;"
146 "try {" 143 "try {"
147 " var myEvent = new Event(undefined, undefined, eventOpts);" 144 " var myEvent = new Event(undefined, undefined, eventOpts);"
148 "} catch (e) {" 145 "} catch (e) {"
149 " caught = true;" 146 " caught = true;"
150 "}" 147 "}"
151 "assert.AssertTrue(caught);"); 148 "assert.AssertTrue(caught);");
152 module_system_->Require("test"); 149 module_system_->Require("test");
153 } 150 }
154 151
155 TEST_F(EventUnittest, NamedEventDispatch) { 152 TEST_F(EventUnittest, NamedEventDispatch) {
156 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 153 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
157 RegisterModule("test", 154 RegisterModule("test",
158 "require('event');" 155 "var Event = require('event_bindings').Event;"
159 "var Event = requireNative('chrome').GetChrome().Event;" 156 "var dispatchEvent = require('event_bindings').dispatchEvent;"
160 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
161 "var assert = requireNative('assert');" 157 "var assert = requireNative('assert');"
162 "var e = new Event('myevent');" 158 "var e = new Event('myevent');"
163 "var called = false;" 159 "var called = false;"
164 "e.addListener(function() { called = true; });" 160 "e.addListener(function() { called = true; });"
165 "chromeHidden.Event.dispatchEvent('myevent', []);" 161 "dispatchEvent('myevent', []);"
166 "assert.AssertTrue(called);"); 162 "assert.AssertTrue(called);");
167 module_system_->Require("test"); 163 module_system_->Require("test");
168 } 164 }
169 165
170 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) { 166 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) {
171 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 167 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
172 RegisterModule("test", 168 RegisterModule("test",
173 "require('event');" 169 "var Event = require('event_bindings').Event;"
174 "var Event = requireNative('chrome').GetChrome().Event;"
175 "var assert = requireNative('assert');" 170 "var assert = requireNative('assert');"
176 "var e = new Event('myevent');" 171 "var e = new Event('myevent');"
177 "var filter = [{" 172 "var filter = [{"
178 " url: {hostSuffix: 'google.com'}," 173 " url: {hostSuffix: 'google.com'},"
179 "}];" 174 "}];"
180 "var caught = false;" 175 "var caught = false;"
181 "try {" 176 "try {"
182 " e.addListener(function() {}, filter);" 177 " e.addListener(function() {}, filter);"
183 "} catch (e) {" 178 "} catch (e) {"
184 " caught = true;" 179 " caught = true;"
185 "}" 180 "}"
186 "assert.AssertTrue(caught);"); 181 "assert.AssertTrue(caught);");
187 module_system_->Require("test"); 182 module_system_->Require("test");
188 } 183 }
189 184
190 TEST_F(EventUnittest, FilteredEventsAttachment) { 185 TEST_F(EventUnittest, FilteredEventsAttachment) {
191 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 186 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
192 RegisterModule("test", 187 RegisterModule("test",
193 "require('event');" 188 "var Event = require('event_bindings').Event;"
194 "var Event = requireNative('chrome').GetChrome().Event;"
195 "var assert = requireNative('assert');" 189 "var assert = requireNative('assert');"
196 "var bindings = requireNative('event_bindings');" 190 "var bindings = requireNative('event_natives');"
197 "var eventOpts = {supportsListeners: true, supportsFilters: true};" 191 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
198 "var e = new Event('myevent', undefined, eventOpts);" 192 "var e = new Event('myevent', undefined, eventOpts);"
199 "var cb = function() {};" 193 "var cb = function() {};"
200 "var filters = {url: [{hostSuffix: 'google.com'}]};" 194 "var filters = {url: [{hostSuffix: 'google.com'}]};"
201 "e.addListener(cb, filters);" 195 "e.addListener(cb, filters);"
202 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" 196 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
203 "e.removeListener(cb);" 197 "e.removeListener(cb);"
204 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); 198 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
205 module_system_->Require("test"); 199 module_system_->Require("test");
206 } 200 }
207 201
208 TEST_F(EventUnittest, DetachFilteredEvent) { 202 TEST_F(EventUnittest, DetachFilteredEvent) {
209 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 203 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
210 RegisterModule("test", 204 RegisterModule("test",
211 "require('event');" 205 "var Event = require('event_bindings').Event;"
212 "var Event = requireNative('chrome').GetChrome().Event;"
213 "var assert = requireNative('assert');" 206 "var assert = requireNative('assert');"
214 "var bindings = requireNative('event_bindings');" 207 "var bindings = requireNative('event_natives');"
215 "var eventOpts = {supportsListeners: true, supportsFilters: true};" 208 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
216 "var e = new Event('myevent', undefined, eventOpts);" 209 "var e = new Event('myevent', undefined, eventOpts);"
217 "var cb1 = function() {};" 210 "var cb1 = function() {};"
218 "var cb2 = function() {};" 211 "var cb2 = function() {};"
219 "var filters = {url: [{hostSuffix: 'google.com'}]};" 212 "var filters = {url: [{hostSuffix: 'google.com'}]};"
220 "e.addListener(cb1, filters);" 213 "e.addListener(cb1, filters);"
221 "e.addListener(cb2, filters);" 214 "e.addListener(cb2, filters);"
222 "e.detach_();" 215 "e.detach_();"
223 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); 216 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
224 module_system_->Require("test"); 217 module_system_->Require("test");
225 } 218 }
226 219
227 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) { 220 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) {
228 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 221 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
229 RegisterModule("test", 222 RegisterModule("test",
230 "require('event');" 223 "var Event = require('event_bindings').Event;"
231 "var Event = requireNative('chrome').GetChrome().Event;"
232 "var assert = requireNative('assert');" 224 "var assert = requireNative('assert');"
233 "var bindings = requireNative('event_bindings');" 225 "var bindings = requireNative('event_natives');"
234 "var eventOpts = {supportsListeners: true, supportsFilters: true};" 226 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
235 "var e = new Event('myevent', undefined, eventOpts);" 227 "var e = new Event('myevent', undefined, eventOpts);"
236 "var cb = function() {};" 228 "var cb = function() {};"
237 "var filters = {url: [{hostSuffix: 'google.com'}]};" 229 "var filters = {url: [{hostSuffix: 'google.com'}]};"
238 "e.addListener(cb, filters);" 230 "e.addListener(cb, filters);"
239 "e.addListener(cb, filters);" 231 "e.addListener(cb, filters);"
240 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" 232 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
241 "e.removeListener(cb);" 233 "e.removeListener(cb);"
242 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));" 234 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
243 "e.removeListener(cb);" 235 "e.removeListener(cb);"
244 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));"); 236 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
245 module_system_->Require("test"); 237 module_system_->Require("test");
246 } 238 }
247 239
248 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) { 240 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) {
249 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 241 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
250 RegisterModule("test", 242 RegisterModule("test",
251 "require('event');" 243 "var Event = require('event_bindings').Event;"
252 "var Event = requireNative('chrome').GetChrome().Event;"
253 "var assert = requireNative('assert');" 244 "var assert = requireNative('assert');"
254 "var eventOpts = {supportsListeners: true, supportsFilters: true};" 245 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
255 "var e = new Event('myevent', undefined, eventOpts);" 246 "var e = new Event('myevent', undefined, eventOpts);"
256 "var cb = function() {};" 247 "var cb = function() {};"
257 "var filters = {url: {hostSuffix: 'google.com'}};" 248 "var filters = {url: {hostSuffix: 'google.com'}};"
258 "var caught = false;" 249 "var caught = false;"
259 "try {" 250 "try {"
260 " e.addListener(cb, filters);" 251 " e.addListener(cb, filters);"
261 "} catch (e) {" 252 "} catch (e) {"
262 " caught = true;" 253 " caught = true;"
263 "}" 254 "}"
264 "assert.AssertTrue(caught);"); 255 "assert.AssertTrue(caught);");
265 module_system_->Require("test"); 256 module_system_->Require("test");
266 } 257 }
267 258
268 TEST_F(EventUnittest, MaxListeners) { 259 TEST_F(EventUnittest, MaxListeners) {
269 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 260 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
270 RegisterModule("test", 261 RegisterModule("test",
271 "require('event');" 262 "var Event = require('event_bindings').Event;"
272 "var Event = requireNative('chrome').GetChrome().Event;"
273 "var assert = requireNative('assert');" 263 "var assert = requireNative('assert');"
274 "var eventOpts = {supportsListeners: true, maxListeners: 1};" 264 "var eventOpts = {supportsListeners: true, maxListeners: 1};"
275 "var e = new Event('myevent', undefined, eventOpts);" 265 "var e = new Event('myevent', undefined, eventOpts);"
276 "var cb = function() {};" 266 "var cb = function() {};"
277 "var caught = false;" 267 "var caught = false;"
278 "try {" 268 "try {"
279 " e.addListener(cb);" 269 " e.addListener(cb);"
280 "} catch (e) {" 270 "} catch (e) {"
281 " caught = true;" 271 " caught = true;"
282 "}" 272 "}"
283 "assert.AssertTrue(!caught);" 273 "assert.AssertTrue(!caught);"
284 "try {" 274 "try {"
285 " e.addListener(cb);" 275 " e.addListener(cb);"
286 "} catch (e) {" 276 "} catch (e) {"
287 " caught = true;" 277 " caught = true;"
288 "}" 278 "}"
289 "assert.AssertTrue(caught);"); 279 "assert.AssertTrue(caught);");
290 module_system_->Require("test"); 280 module_system_->Require("test");
291 } 281 }
292 282
293 } // namespace 283 } // namespace
294 } // namespace extensions 284 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | chrome/renderer/extensions/extension_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698