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

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

Issue 10661038: Revert 143896 - Filtered events. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 5 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
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 { 9 namespace {
10 10
11 class EventUnittest : public ModuleSystemTest { 11 class EventUnittest : public ModuleSystemTest {
12 virtual void SetUp() OVERRIDE { 12 virtual void SetUp() OVERRIDE {
13 ModuleSystemTest::SetUp(); 13 ModuleSystemTest::SetUp();
14 module_system_->RunString("chrome = {};", "setup-chrome"); 14 module_system_->RunString("chrome = {};", "setup-chrome");
15 15
16 RegisterModule("event", IDR_EVENT_BINDINGS_JS); 16 RegisterModule("event", IDR_EVENT_BINDINGS_JS);
17 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS); 17 RegisterModule("schemaUtils", IDR_SCHEMA_UTILS_JS);
18 RegisterModule("utils", IDR_UTILS_JS); 18 RegisterModule("utils", IDR_UTILS_JS);
19 19
20 // Mock out the native handler for event_bindings. These mocks will fail if 20 // Mock out the native handler for event_bindings. These mocks will fail if
21 // any invariants maintained by the real event_bindings are broken. 21 // any invariants maintained by the real event_bindings are broken.
22 OverrideNativeHandler("event_bindings", 22 OverrideNativeHandler("event_bindings",
23 "var assert = requireNative('assert');" 23 "var assert = requireNative('assert');"
24 "var attachedListeners = exports.attachedListeners = {};" 24 "var attachedListeners = exports.attachedListeners = {};"
25 "var attachedFilteredListeners = "
26 " exports.attachedFilteredListeners = {};"
27 "var nextId = 0;"
28 "var idToName = {};"
29
30 "exports.AttachEvent = function(eventName) {" 25 "exports.AttachEvent = function(eventName) {"
31 " assert.AssertFalse(!!attachedListeners[eventName]);" 26 " assert.AssertFalse(!!attachedListeners[eventName]);"
32 " attachedListeners[eventName] = 1;" 27 " attachedListeners[eventName] = 1;"
33 "};" 28 "};"
34
35 "exports.DetachEvent = function(eventName) {" 29 "exports.DetachEvent = function(eventName) {"
36 " assert.AssertTrue(!!attachedListeners[eventName]);" 30 " assert.AssertTrue(!!attachedListeners[eventName]);"
37 " delete attachedListeners[eventName];" 31 " delete attachedListeners[eventName];"
38 "};"
39
40 "exports.IsEventAttached = function(eventName) {"
41 " return !!attachedListeners[eventName];"
42 "};"
43
44 "exports.AttachFilteredEvent = function(name, filters) {"
45 " var id = nextId++;"
46 " idToName[id] = name;"
47 " attachedFilteredListeners[name] ="
48 " attachedFilteredListeners[name] || [];"
49 " attachedFilteredListeners[name][id] = filters;"
50 " return id;"
51 "};"
52
53 "exports.DetachFilteredEvent = function(id, manual) {"
54 " var i = attachedFilteredListeners[idToName[id]].indexOf(id);"
55 " attachedFilteredListeners[idToName[id]].splice(i, 1);"
56 "};"
57
58 "exports.HasFilteredListener = function(name) {"
59 " return attachedFilteredListeners[name].length;"
60 "};"); 32 "};");
61 OverrideNativeHandler("chrome_hidden", 33 OverrideNativeHandler("chrome_hidden",
62 "var chromeHidden = {};" 34 "var chromeHidden = {};"
63 "exports.GetChromeHidden = function() { return chromeHidden; };"); 35 "exports.GetChromeHidden = function() { return chromeHidden; };");
64 OverrideNativeHandler("sendRequest", 36 OverrideNativeHandler("sendRequest",
65 "exports.sendRequest = function() {};"); 37 "exports.sendRequest = function() {};");
66 OverrideNativeHandler("apiDefinitions", 38 OverrideNativeHandler("apiDefinitions",
67 "exports.GetExtensionAPIDefinition = function() {};"); 39 "exports.GetExtensionAPIDefinition = function() {};");
68 } 40 }
69 }; 41 };
(...skipping 13 matching lines...) Expand all
83 "var cb2 = function() {};" 55 "var cb2 = function() {};"
84 "myEvent.addListener(cb1);" 56 "myEvent.addListener(cb1);"
85 "myEvent.addListener(cb2);" 57 "myEvent.addListener(cb2);"
86 "myEvent.removeListener(cb1);" 58 "myEvent.removeListener(cb1);"
87 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);" 59 "assert.AssertTrue(!!eventBindings.attachedListeners['named-event']);"
88 "myEvent.removeListener(cb2);" 60 "myEvent.removeListener(cb2);"
89 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);"); 61 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);");
90 module_system_->Require("test"); 62 module_system_->Require("test");
91 } 63 }
92 64
93 TEST_F(EventUnittest, OnUnloadDetachesAllListeners) {
94 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
95 RegisterModule("test",
96 "var assert = requireNative('assert');"
97 "var event = require('event');"
98 "var eventBindings = requireNative('event_bindings');"
99 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
100 "var myEvent = new event.Event('named-event');"
101 "var cb1 = function() {};"
102 "var cb2 = function() {};"
103 "myEvent.addListener(cb1);"
104 "myEvent.addListener(cb2);"
105 "chromeHidden.dispatchOnUnload();"
106 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);");
107 module_system_->Require("test");
108 }
109
110 TEST_F(EventUnittest, OnUnloadDetachesAllListenersEvenDupes) {
111 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
112 RegisterModule("test",
113 "var assert = requireNative('assert');"
114 "var event = require('event');"
115 "var eventBindings = requireNative('event_bindings');"
116 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
117 "var myEvent = new event.Event('named-event');"
118 "var cb1 = function() {};"
119 "myEvent.addListener(cb1);"
120 "myEvent.addListener(cb1);"
121 "chromeHidden.dispatchOnUnload();"
122 "assert.AssertFalse(!!eventBindings.attachedListeners['named-event']);");
123 module_system_->Require("test");
124 }
125
126 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) { 65 TEST_F(EventUnittest, EventsThatSupportRulesMustHaveAName) {
127 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get()); 66 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
128 RegisterModule("test", 67 RegisterModule("test",
129 "var event = require('event');" 68 "var event = require('event');"
130 "var eventOpts = {supportsRules: true};" 69 "var eventOpts = {supportsRules: true};"
131 "var assert = requireNative('assert');" 70 "var assert = requireNative('assert');"
132 "var caught = false;" 71 "var caught = false;"
133 "try {" 72 "try {"
134 " var myEvent = new event.Event(undefined, undefined, eventOpts);" 73 " var myEvent = new event.Event(undefined, undefined, eventOpts);"
135 "} catch (e) {" 74 "} catch (e) {"
(...skipping 10 matching lines...) Expand all
146 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();" 85 "var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();"
147 "var assert = requireNative('assert');" 86 "var assert = requireNative('assert');"
148 "var e = new event.Event('myevent');" 87 "var e = new event.Event('myevent');"
149 "var called = false;" 88 "var called = false;"
150 "e.addListener(function() { called = true; });" 89 "e.addListener(function() { called = true; });"
151 "chromeHidden.Event.dispatch('myevent', []);" 90 "chromeHidden.Event.dispatch('myevent', []);"
152 "assert.AssertTrue(called);"); 91 "assert.AssertTrue(called);");
153 module_system_->Require("test"); 92 module_system_->Require("test");
154 } 93 }
155 94
156 TEST_F(EventUnittest, AddListenerWithFiltersThrowsErrorByDefault) {
157 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
158 RegisterModule("test",
159 "var event = require('event');"
160 "var assert = requireNative('assert');"
161 "var e = new event.Event('myevent');"
162 "var filter = [{"
163 " url: {hostSuffix: 'google.com'},"
164 "}];"
165 "var caught = false;"
166 "try {"
167 " e.addListener(function() {}, filter);"
168 "} catch (e) {"
169 " caught = true;"
170 "}"
171 "assert.AssertTrue(caught);");
172 module_system_->Require("test");
173 }
174
175 TEST_F(EventUnittest, FilteredEventsAttachment) {
176 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
177 RegisterModule("test",
178 "var event = require('event');"
179 "var assert = requireNative('assert');"
180 "var bindings = requireNative('event_bindings');"
181 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
182 "var e = new event.Event('myevent', undefined, eventOpts);"
183 "var cb = function() {};"
184 "var filters = {url: [{hostSuffix: 'google.com'}]};"
185 "e.addListener(cb, filters);"
186 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
187 "e.removeListener(cb);"
188 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
189 module_system_->Require("test");
190 }
191
192 TEST_F(EventUnittest, DetachFilteredEvent) {
193 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
194 RegisterModule("test",
195 "var event = require('event');"
196 "var assert = requireNative('assert');"
197 "var bindings = requireNative('event_bindings');"
198 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
199 "var e = new event.Event('myevent', undefined, eventOpts);"
200 "var cb1 = function() {};"
201 "var cb2 = function() {};"
202 "var filters = {url: [{hostSuffix: 'google.com'}]};"
203 "e.addListener(cb1, filters);"
204 "e.addListener(cb2, filters);"
205 "e.detach_();"
206 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
207 module_system_->Require("test");
208 }
209
210 TEST_F(EventUnittest, AttachAndRemoveSameFilteredEventListener) {
211 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
212 RegisterModule("test",
213 "var event = require('event');"
214 "var assert = requireNative('assert');"
215 "var bindings = requireNative('event_bindings');"
216 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
217 "var e = new event.Event('myevent', undefined, eventOpts);"
218 "var cb = function() {};"
219 "var filters = {url: [{hostSuffix: 'google.com'}]};"
220 "e.addListener(cb, filters);"
221 "e.addListener(cb, filters);"
222 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
223 "e.removeListener(cb);"
224 "assert.AssertTrue(bindings.HasFilteredListener('myevent'));"
225 "e.removeListener(cb);"
226 "assert.AssertFalse(bindings.HasFilteredListener('myevent'));");
227 module_system_->Require("test");
228 }
229
230 TEST_F(EventUnittest, AddingFilterWithUrlFieldNotAListThrowsException) {
231 ModuleSystem::NativesEnabledScope natives_enabled_scope(module_system_.get());
232 RegisterModule("test",
233 "var event = require('event');"
234 "var assert = requireNative('assert');"
235 "var eventOpts = {supportsListeners: true, supportsFilters: true};"
236 "var e = new event.Event('myevent', undefined, eventOpts);"
237 "var cb = function() {};"
238 "var filters = {url: {hostSuffix: 'google.com'}};"
239 "var caught = false;"
240 "try {"
241 " e.addListener(cb, filters);"
242 "} catch (e) {"
243 " caught = true;"
244 "}"
245 "assert.AssertTrue(caught);");
246 module_system_->Require("test");
247 }
248
249 } // namespace 95 } // namespace
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/event_bindings.cc ('k') | chrome/renderer/extensions/extension_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698