OLD | NEW |
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/browser/extensions/extension_event_router_forwarder.h" | 5 #include "chrome/browser/extensions/event_router_forwarder.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/system_monitor/system_monitor.h" | 9 #include "base/system_monitor/system_monitor.h" |
10 #include "base/test/thread_test_helper.h" | 10 #include "base/test/thread_test_helper.h" |
11 #include "chrome/browser/profiles/profile_manager.h" | 11 #include "chrome/browser/profiles/profile_manager.h" |
12 #include "chrome/test/base/testing_browser_process.h" | 12 #include "chrome/test/base/testing_browser_process.h" |
13 #include "chrome/test/base/testing_profile.h" | 13 #include "chrome/test/base/testing_profile.h" |
14 #include "chrome/test/base/testing_profile_manager.h" | 14 #include "chrome/test/base/testing_profile_manager.h" |
15 #include "content/public/test/test_browser_thread.h" | 15 #include "content/public/test/test_browser_thread.h" |
16 #include "googleurl/src/gurl.h" | 16 #include "googleurl/src/gurl.h" |
17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 | 19 |
20 using content::BrowserThread; | 20 using content::BrowserThread; |
21 | 21 |
| 22 namespace extensions { |
| 23 |
22 namespace { | 24 namespace { |
23 | 25 |
24 const char kEventName[] = "event_name"; | 26 const char kEventName[] = "event_name"; |
25 const char kEventArgs[] = "event_args"; | 27 const char kEventArgs[] = "event_args"; |
26 const char kExt[] = "extension"; | 28 const char kExt[] = "extension"; |
27 | 29 |
28 class MockExtensionEventRouterForwarder : public ExtensionEventRouterForwarder { | 30 class MockEventRouterForwarder : public EventRouterForwarder { |
29 public: | 31 public: |
30 MOCK_METHOD6(CallExtensionEventRouter, | 32 MOCK_METHOD6(CallEventRouter, |
31 void(Profile*, const std::string&, const std::string&, const std::string&, | 33 void(Profile*, const std::string&, const std::string&, const std::string&, |
32 Profile*, const GURL&)); | 34 Profile*, const GURL&)); |
33 | 35 |
34 protected: | 36 protected: |
35 virtual ~MockExtensionEventRouterForwarder() {} | 37 virtual ~MockEventRouterForwarder() {} |
36 }; | 38 }; |
37 | 39 |
38 } // namespace | 40 } // namespace |
39 | 41 |
40 class ExtensionEventRouterForwarderTest : public testing::Test { | 42 class EventRouterForwarderTest : public testing::Test { |
41 protected: | 43 protected: |
42 ExtensionEventRouterForwarderTest() | 44 EventRouterForwarderTest() |
43 : ui_thread_(BrowserThread::UI, &message_loop_), | 45 : ui_thread_(BrowserThread::UI, &message_loop_), |
44 io_thread_(BrowserThread::IO), | 46 io_thread_(BrowserThread::IO), |
45 profile_manager_( | 47 profile_manager_( |
46 static_cast<TestingBrowserProcess*>(g_browser_process)) { | 48 static_cast<TestingBrowserProcess*>(g_browser_process)) { |
47 #if defined(OS_MACOSX) | 49 #if defined(OS_MACOSX) |
48 base::SystemMonitor::AllocateSystemIOPorts(); | 50 base::SystemMonitor::AllocateSystemIOPorts(); |
49 #endif | 51 #endif |
50 dummy.reset(new base::SystemMonitor); | 52 dummy.reset(new base::SystemMonitor); |
51 } | 53 } |
52 | 54 |
(...skipping 17 matching lines...) Expand all Loading... |
70 MessageLoopForUI message_loop_; | 72 MessageLoopForUI message_loop_; |
71 content::TestBrowserThread ui_thread_; | 73 content::TestBrowserThread ui_thread_; |
72 content::TestBrowserThread io_thread_; | 74 content::TestBrowserThread io_thread_; |
73 TestingProfileManager profile_manager_; | 75 TestingProfileManager profile_manager_; |
74 scoped_ptr<base::SystemMonitor> dummy; | 76 scoped_ptr<base::SystemMonitor> dummy; |
75 // Profiles are weak pointers, owned by ProfileManager in |browser_process_|. | 77 // Profiles are weak pointers, owned by ProfileManager in |browser_process_|. |
76 TestingProfile* profile1_; | 78 TestingProfile* profile1_; |
77 TestingProfile* profile2_; | 79 TestingProfile* profile2_; |
78 }; | 80 }; |
79 | 81 |
80 TEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererUI) { | 82 TEST_F(EventRouterForwarderTest, BroadcastRendererUI) { |
81 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 83 scoped_refptr<MockEventRouterForwarder> event_router( |
82 new MockExtensionEventRouterForwarder); | 84 new MockEventRouterForwarder); |
83 GURL url; | 85 GURL url; |
84 EXPECT_CALL(*event_router, | 86 EXPECT_CALL(*event_router, |
85 CallExtensionEventRouter( | 87 CallEventRouter( |
86 profile1_, "", kEventName, kEventArgs, profile1_, url)); | 88 profile1_, "", kEventName, kEventArgs, profile1_, url)); |
87 EXPECT_CALL(*event_router, | 89 EXPECT_CALL(*event_router, |
88 CallExtensionEventRouter( | 90 CallEventRouter( |
89 profile2_, "", kEventName, kEventArgs, profile2_, url)); | 91 profile2_, "", kEventName, kEventArgs, profile2_, url)); |
90 event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url); | 92 event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url); |
91 } | 93 } |
92 | 94 |
93 TEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererUIIncognito) { | 95 TEST_F(EventRouterForwarderTest, BroadcastRendererUIIncognito) { |
94 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 96 scoped_refptr<MockEventRouterForwarder> event_router( |
95 new MockExtensionEventRouterForwarder); | 97 new MockEventRouterForwarder); |
96 using ::testing::_; | 98 using ::testing::_; |
97 GURL url; | 99 GURL url; |
98 Profile* incognito = CreateIncognitoProfile(profile1_); | 100 Profile* incognito = CreateIncognitoProfile(profile1_); |
99 EXPECT_CALL(*event_router, | 101 EXPECT_CALL(*event_router, |
100 CallExtensionEventRouter( | 102 CallEventRouter( |
101 profile1_, "", kEventName, kEventArgs, profile1_, url)); | 103 profile1_, "", kEventName, kEventArgs, profile1_, url)); |
102 EXPECT_CALL(*event_router, | 104 EXPECT_CALL(*event_router, |
103 CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0); | 105 CallEventRouter(incognito, _, _, _, _, _)).Times(0); |
104 EXPECT_CALL(*event_router, | 106 EXPECT_CALL(*event_router, |
105 CallExtensionEventRouter( | 107 CallEventRouter( |
106 profile2_, "", kEventName, kEventArgs, profile2_, url)); | 108 profile2_, "", kEventName, kEventArgs, profile2_, url)); |
107 event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url); | 109 event_router->BroadcastEventToRenderers(kEventName, kEventArgs, url); |
108 } | 110 } |
109 | 111 |
110 // This is the canonical test for passing control flow from the IO thread | 112 // This is the canonical test for passing control flow from the IO thread |
111 // to the UI thread. Repeating this for all public functions of | 113 // to the UI thread. Repeating this for all public functions of |
112 // ExtensionEventRouterForwarder would not increase coverage. | 114 // EventRouterForwarder would not increase coverage. |
113 TEST_F(ExtensionEventRouterForwarderTest, BroadcastRendererIO) { | 115 TEST_F(EventRouterForwarderTest, BroadcastRendererIO) { |
114 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 116 scoped_refptr<MockEventRouterForwarder> event_router( |
115 new MockExtensionEventRouterForwarder); | 117 new MockEventRouterForwarder); |
116 GURL url; | 118 GURL url; |
117 EXPECT_CALL(*event_router, | 119 EXPECT_CALL(*event_router, |
118 CallExtensionEventRouter( | 120 CallEventRouter( |
119 profile1_, "", kEventName, kEventArgs, profile1_, url)); | 121 profile1_, "", kEventName, kEventArgs, profile1_, url)); |
120 EXPECT_CALL(*event_router, | 122 EXPECT_CALL(*event_router, |
121 CallExtensionEventRouter( | 123 CallEventRouter( |
122 profile2_, "", kEventName, kEventArgs, profile2_, url)); | 124 profile2_, "", kEventName, kEventArgs, profile2_, url)); |
123 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 125 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
124 base::Bind( | 126 base::Bind( |
125 &MockExtensionEventRouterForwarder::BroadcastEventToRenderers, | 127 &MockEventRouterForwarder::BroadcastEventToRenderers, |
126 event_router.get(), | 128 event_router.get(), |
127 std::string(kEventName), std::string(kEventArgs), url)); | 129 std::string(kEventName), std::string(kEventArgs), url)); |
128 | 130 |
129 // Wait for IO thread's message loop to be processed | 131 // Wait for IO thread's message loop to be processed |
130 scoped_refptr<base::ThreadTestHelper> helper( | 132 scoped_refptr<base::ThreadTestHelper> helper( |
131 new base::ThreadTestHelper( | 133 new base::ThreadTestHelper( |
132 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))); | 134 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))); |
133 ASSERT_TRUE(helper->Run()); | 135 ASSERT_TRUE(helper->Run()); |
134 | 136 |
135 MessageLoop::current()->RunAllPending(); | 137 MessageLoop::current()->RunAllPending(); |
136 } | 138 } |
137 | 139 |
138 TEST_F(ExtensionEventRouterForwarderTest, UnicastRendererUIRestricted) { | 140 TEST_F(EventRouterForwarderTest, UnicastRendererUIRestricted) { |
139 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 141 scoped_refptr<MockEventRouterForwarder> event_router( |
140 new MockExtensionEventRouterForwarder); | 142 new MockEventRouterForwarder); |
141 using ::testing::_; | 143 using ::testing::_; |
142 GURL url; | 144 GURL url; |
143 EXPECT_CALL(*event_router, | 145 EXPECT_CALL(*event_router, |
144 CallExtensionEventRouter( | 146 CallEventRouter( |
145 profile1_, "", kEventName, kEventArgs, profile1_, url)); | 147 profile1_, "", kEventName, kEventArgs, profile1_, url)); |
146 EXPECT_CALL(*event_router, | 148 EXPECT_CALL(*event_router, |
147 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 149 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
148 event_router->DispatchEventToRenderers(kEventName, kEventArgs, | 150 event_router->DispatchEventToRenderers(kEventName, kEventArgs, |
149 profile1_, true, url); | 151 profile1_, true, url); |
150 } | 152 } |
151 | 153 |
152 TEST_F(ExtensionEventRouterForwarderTest, | 154 TEST_F(EventRouterForwarderTest, UnicastRendererUIRestrictedIncognito1) { |
153 UnicastRendererUIRestrictedIncognito1) { | 155 scoped_refptr<MockEventRouterForwarder> event_router( |
154 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 156 new MockEventRouterForwarder); |
155 new MockExtensionEventRouterForwarder); | |
156 Profile* incognito = CreateIncognitoProfile(profile1_); | 157 Profile* incognito = CreateIncognitoProfile(profile1_); |
157 using ::testing::_; | 158 using ::testing::_; |
158 GURL url; | 159 GURL url; |
159 EXPECT_CALL(*event_router, | 160 EXPECT_CALL(*event_router, |
160 CallExtensionEventRouter( | 161 CallEventRouter( |
161 profile1_, "", kEventName, kEventArgs, profile1_, url)); | 162 profile1_, "", kEventName, kEventArgs, profile1_, url)); |
162 EXPECT_CALL(*event_router, | 163 EXPECT_CALL(*event_router, |
163 CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0); | 164 CallEventRouter(incognito, _, _, _, _, _)).Times(0); |
164 EXPECT_CALL(*event_router, | 165 EXPECT_CALL(*event_router, |
165 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 166 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
166 event_router->DispatchEventToRenderers(kEventName, kEventArgs, | 167 event_router->DispatchEventToRenderers(kEventName, kEventArgs, |
167 profile1_, true, url); | 168 profile1_, true, url); |
168 } | 169 } |
169 | 170 |
170 TEST_F(ExtensionEventRouterForwarderTest, | 171 TEST_F(EventRouterForwarderTest, UnicastRendererUIRestrictedIncognito2) { |
171 UnicastRendererUIRestrictedIncognito2) { | 172 scoped_refptr<MockEventRouterForwarder> event_router( |
172 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 173 new MockEventRouterForwarder); |
173 new MockExtensionEventRouterForwarder); | |
174 Profile* incognito = CreateIncognitoProfile(profile1_); | 174 Profile* incognito = CreateIncognitoProfile(profile1_); |
175 using ::testing::_; | 175 using ::testing::_; |
176 GURL url; | 176 GURL url; |
177 EXPECT_CALL(*event_router, | 177 EXPECT_CALL(*event_router, |
178 CallExtensionEventRouter(profile1_, _, _, _, _, _)).Times(0); | 178 CallEventRouter(profile1_, _, _, _, _, _)).Times(0); |
179 EXPECT_CALL(*event_router, | 179 EXPECT_CALL(*event_router, |
180 CallExtensionEventRouter( | 180 CallEventRouter( |
181 incognito, "", kEventName, kEventArgs, incognito, url)); | 181 incognito, "", kEventName, kEventArgs, incognito, url)); |
182 EXPECT_CALL(*event_router, | 182 EXPECT_CALL(*event_router, |
183 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 183 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
184 event_router->DispatchEventToRenderers(kEventName, kEventArgs, | 184 event_router->DispatchEventToRenderers(kEventName, kEventArgs, |
185 incognito, true, url); | 185 incognito, true, url); |
186 } | 186 } |
187 | 187 |
188 TEST_F(ExtensionEventRouterForwarderTest, UnicastRendererUIUnrestricted) { | 188 TEST_F(EventRouterForwarderTest, UnicastRendererUIUnrestricted) { |
189 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 189 scoped_refptr<MockEventRouterForwarder> event_router( |
190 new MockExtensionEventRouterForwarder); | 190 new MockEventRouterForwarder); |
191 using ::testing::_; | 191 using ::testing::_; |
192 GURL url; | 192 GURL url; |
193 EXPECT_CALL(*event_router, | 193 EXPECT_CALL(*event_router, |
194 CallExtensionEventRouter( | 194 CallEventRouter( |
195 profile1_, "", kEventName, kEventArgs, NULL, url)); | 195 profile1_, "", kEventName, kEventArgs, NULL, url)); |
196 EXPECT_CALL(*event_router, | 196 EXPECT_CALL(*event_router, |
197 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 197 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
198 event_router->DispatchEventToRenderers(kEventName, kEventArgs, | 198 event_router->DispatchEventToRenderers(kEventName, kEventArgs, |
199 profile1_, false, url); | 199 profile1_, false, url); |
200 } | 200 } |
201 | 201 |
202 TEST_F(ExtensionEventRouterForwarderTest, | 202 TEST_F(EventRouterForwarderTest, UnicastRendererUIUnrestrictedIncognito) { |
203 UnicastRendererUIUnrestrictedIncognito) { | 203 scoped_refptr<MockEventRouterForwarder> event_router( |
204 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 204 new MockEventRouterForwarder); |
205 new MockExtensionEventRouterForwarder); | |
206 Profile* incognito = CreateIncognitoProfile(profile1_); | 205 Profile* incognito = CreateIncognitoProfile(profile1_); |
207 using ::testing::_; | 206 using ::testing::_; |
208 GURL url; | 207 GURL url; |
209 EXPECT_CALL(*event_router, | 208 EXPECT_CALL(*event_router, |
210 CallExtensionEventRouter( | 209 CallEventRouter( |
211 profile1_, "", kEventName, kEventArgs, NULL, url)); | 210 profile1_, "", kEventName, kEventArgs, NULL, url)); |
212 EXPECT_CALL(*event_router, | 211 EXPECT_CALL(*event_router, |
213 CallExtensionEventRouter(incognito, _, _, _, _, _)).Times(0); | 212 CallEventRouter(incognito, _, _, _, _, _)).Times(0); |
214 EXPECT_CALL(*event_router, | 213 EXPECT_CALL(*event_router, |
215 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 214 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
216 event_router->DispatchEventToRenderers(kEventName, kEventArgs, | 215 event_router->DispatchEventToRenderers(kEventName, kEventArgs, |
217 profile1_, false, url); | 216 profile1_, false, url); |
218 } | 217 } |
219 | 218 |
220 TEST_F(ExtensionEventRouterForwarderTest, BroadcastExtensionUI) { | 219 TEST_F(EventRouterForwarderTest, BroadcastExtensionUI) { |
221 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 220 scoped_refptr<MockEventRouterForwarder> event_router( |
222 new MockExtensionEventRouterForwarder); | 221 new MockEventRouterForwarder); |
223 GURL url; | 222 GURL url; |
224 EXPECT_CALL(*event_router, | 223 EXPECT_CALL(*event_router, |
225 CallExtensionEventRouter( | 224 CallEventRouter( |
226 profile1_, kExt, kEventName, kEventArgs, profile1_, url)); | 225 profile1_, kExt, kEventName, kEventArgs, profile1_, url)); |
227 EXPECT_CALL(*event_router, | 226 EXPECT_CALL(*event_router, |
228 CallExtensionEventRouter( | 227 CallEventRouter( |
229 profile2_, kExt, kEventName, kEventArgs, profile2_, url)); | 228 profile2_, kExt, kEventName, kEventArgs, profile2_, url)); |
230 event_router->BroadcastEventToExtension(kExt, kEventName, kEventArgs, url); | 229 event_router->BroadcastEventToExtension(kExt, kEventName, kEventArgs, url); |
231 } | 230 } |
232 | 231 |
233 TEST_F(ExtensionEventRouterForwarderTest, UnicastExtensionUIRestricted) { | 232 TEST_F(EventRouterForwarderTest, UnicastExtensionUIRestricted) { |
234 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 233 scoped_refptr<MockEventRouterForwarder> event_router( |
235 new MockExtensionEventRouterForwarder); | 234 new MockEventRouterForwarder); |
236 using ::testing::_; | 235 using ::testing::_; |
237 GURL url; | 236 GURL url; |
238 EXPECT_CALL(*event_router, | 237 EXPECT_CALL(*event_router, |
239 CallExtensionEventRouter( | 238 CallEventRouter( |
240 profile1_, kExt, kEventName, kEventArgs, profile1_, url)); | 239 profile1_, kExt, kEventName, kEventArgs, profile1_, url)); |
241 EXPECT_CALL(*event_router, | 240 EXPECT_CALL(*event_router, |
242 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 241 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
243 event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs, | 242 event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs, |
244 profile1_, true, url); | 243 profile1_, true, url); |
245 } | 244 } |
246 | 245 |
247 TEST_F(ExtensionEventRouterForwarderTest, UnicastExtensionUIUnrestricted) { | 246 TEST_F(EventRouterForwarderTest, UnicastExtensionUIUnrestricted) { |
248 scoped_refptr<MockExtensionEventRouterForwarder> event_router( | 247 scoped_refptr<MockEventRouterForwarder> event_router( |
249 new MockExtensionEventRouterForwarder); | 248 new MockEventRouterForwarder); |
250 using ::testing::_; | 249 using ::testing::_; |
251 GURL url; | 250 GURL url; |
252 EXPECT_CALL(*event_router, | 251 EXPECT_CALL(*event_router, |
253 CallExtensionEventRouter( | 252 CallEventRouter( |
254 profile1_, kExt, kEventName, kEventArgs, NULL, url)); | 253 profile1_, kExt, kEventName, kEventArgs, NULL, url)); |
255 EXPECT_CALL(*event_router, | 254 EXPECT_CALL(*event_router, |
256 CallExtensionEventRouter(profile2_, _, _, _, _, _)).Times(0); | 255 CallEventRouter(profile2_, _, _, _, _, _)).Times(0); |
257 event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs, | 256 event_router->DispatchEventToExtension(kExt, kEventName, kEventArgs, |
258 profile1_, false, url); | 257 profile1_, false, url); |
259 } | 258 } |
| 259 |
| 260 } // namespace extensions |
OLD | NEW |