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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/json/json_file_value_serializer.h" | 7 #include "base/json/json_file_value_serializer.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 MessageLoopForUI message_loop_; | 129 MessageLoopForUI message_loop_; |
130 content::TestBrowserThread ui_thread_; | 130 content::TestBrowserThread ui_thread_; |
131 content::TestBrowserThread db_thread_; | 131 content::TestBrowserThread db_thread_; |
132 scoped_refptr<WebDataService> wds_; | 132 scoped_refptr<WebDataService> wds_; |
133 MockExtensionService extension_service_; | 133 MockExtensionService extension_service_; |
134 ExtensionSet extensions_; | 134 ExtensionSet extensions_; |
135 WebIntentsRegistry registry_; | 135 WebIntentsRegistry registry_; |
136 ScopedTempDir temp_dir_; | 136 ScopedTempDir temp_dir_; |
137 }; | 137 }; |
138 | 138 |
139 // Simple consumer for WebIntentsRegistry notifications. Stores result data and | 139 // Base consumer for WebIntentsRegistry results. |
140 // terminates UI thread when callback is invoked. | |
141 class TestConsumer { | 140 class TestConsumer { |
142 public: | 141 public: |
143 void OnIntentsQueryDone( | 142 // Wait for the UI message loop to terminate - happens when OnIntesQueryDone |
| 143 // is invoked. |
| 144 void WaitForData() { |
| 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 146 MessageLoop::current()->Run(); |
| 147 } |
| 148 }; |
| 149 |
| 150 // Consumer of service lists. Stores result data and |
| 151 // terminates UI thread when callback is invoked. |
| 152 class ServiceListConsumer : public TestConsumer { |
| 153 public: |
| 154 void Accept( |
144 const std::vector<webkit_glue::WebIntentServiceData>& services) { | 155 const std::vector<webkit_glue::WebIntentServiceData>& services) { |
145 services_ = services; | 156 services_ = services; |
146 | 157 |
147 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
148 MessageLoop::current()->Quit(); | 159 MessageLoop::current()->Quit(); |
149 } | 160 } |
150 | 161 |
151 bool ServicesContains(const webkit_glue::WebIntentServiceData& data) { | 162 bool ResultsContain(const webkit_glue::WebIntentServiceData& service) { |
152 for (size_t i = 0; i < services_.size(); ++i) { | 163 for (size_t i = 0; i < services_.size(); ++i) { |
153 if (services_[i] == data) | 164 if (services_[i] == service) |
154 return true; | 165 return true; |
155 } | 166 } |
156 return false; | 167 return false; |
157 } | 168 } |
158 | 169 |
159 void OnIntentsDefaultsQueryDone( | 170 // Result data from callback. |
160 const DefaultWebIntentService& default_service) { | 171 std::vector<webkit_glue::WebIntentServiceData> services_; |
161 default_ = default_service; | 172 }; |
| 173 |
| 174 // Consume or defaultservice lists. Stores result data and |
| 175 // terminates UI thread when callback is invoked. |
| 176 class DefaultServiceListConsumer : public TestConsumer { |
| 177 public: |
| 178 void Accept(const std::vector<DefaultWebIntentService>& services) { |
| 179 services_ = services; |
162 | 180 |
163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 181 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
164 MessageLoop::current()->Quit(); | 182 MessageLoop::current()->Quit(); |
165 } | 183 } |
166 | 184 |
167 // Wait for the UI message loop to terminate - happens when OnIntesQueryDone | 185 bool ResultsContain(const DefaultWebIntentService& service) { |
168 // is invoked. | 186 for (size_t i = 0; i < services_.size(); ++i) { |
169 void WaitForData() { | 187 if (services_[i] == service) |
170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 188 return true; |
171 MessageLoop::current()->Run(); | 189 } |
| 190 return false; |
172 } | 191 } |
173 | 192 |
174 // Result data from callback. | 193 // Result data from callback. |
175 std::vector<webkit_glue::WebIntentServiceData> services_; | 194 std::vector<DefaultWebIntentService> services_; |
| 195 }; |
| 196 |
| 197 // Consumer of a default service. Stores result data and |
| 198 // terminates UI thread when callback is invoked. |
| 199 class DefaultServiceConsumer : public TestConsumer { |
| 200 public: |
| 201 void Accept( |
| 202 const DefaultWebIntentService& default_service) { |
| 203 service_ = default_service; |
| 204 |
| 205 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 206 MessageLoop::current()->Quit(); |
| 207 } |
176 | 208 |
177 // Result default data from callback. | 209 // Result default data from callback. |
178 DefaultWebIntentService default_; | 210 DefaultWebIntentService service_; |
179 }; | 211 }; |
180 | 212 |
181 TEST_F(WebIntentsRegistryTest, BasicTests) { | 213 TEST_F(WebIntentsRegistryTest, BasicTests) { |
182 webkit_glue::WebIntentServiceData service; | 214 webkit_glue::WebIntentServiceData service; |
183 service.service_url = GURL("http://google.com"); | 215 service.service_url = GURL("http://google.com"); |
184 service.action = ASCIIToUTF16("share"); | 216 service.action = ASCIIToUTF16("share"); |
185 service.type = ASCIIToUTF16("image/*"); | 217 service.type = ASCIIToUTF16("image/*"); |
186 service.title = ASCIIToUTF16("Google's Sharing Service"); | 218 service.title = ASCIIToUTF16("Google's Sharing Service"); |
187 | 219 |
188 registry_.RegisterIntentService(service); | 220 registry_.RegisterIntentService(service); |
189 | 221 |
190 service.type = ASCIIToUTF16("video/*"); | 222 service.type = ASCIIToUTF16("video/*"); |
191 service.title = ASCIIToUTF16("Second Service"); | 223 service.title = ASCIIToUTF16("Second Service"); |
192 registry_.RegisterIntentService(service); | 224 registry_.RegisterIntentService(service); |
193 | 225 |
194 service.action = ASCIIToUTF16("search"); | 226 service.action = ASCIIToUTF16("search"); |
195 registry_.RegisterIntentService(service); | 227 registry_.RegisterIntentService(service); |
196 | 228 |
197 TestConsumer consumer; | 229 ServiceListConsumer consumer; |
198 registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"), | 230 registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"), |
199 base::Bind(&TestConsumer::OnIntentsQueryDone, | 231 base::Bind(&ServiceListConsumer::Accept, |
200 base::Unretained(&consumer))); | 232 base::Unretained(&consumer))); |
201 consumer.WaitForData(); | 233 consumer.WaitForData(); |
202 EXPECT_EQ(2U, consumer.services_.size()); | 234 EXPECT_EQ(2U, consumer.services_.size()); |
203 | 235 |
204 registry_.GetIntentServices(ASCIIToUTF16("search"), ASCIIToUTF16("*"), | 236 registry_.GetIntentServices(ASCIIToUTF16("search"), ASCIIToUTF16("*"), |
205 base::Bind(&TestConsumer::OnIntentsQueryDone, | 237 base::Bind(&ServiceListConsumer::Accept, |
206 base::Unretained(&consumer))); | 238 base::Unretained(&consumer))); |
207 consumer.WaitForData(); | 239 consumer.WaitForData(); |
208 EXPECT_EQ(1U, consumer.services_.size()); | 240 EXPECT_EQ(1U, consumer.services_.size()); |
209 | 241 |
210 service.action = ASCIIToUTF16("share"); | 242 service.action = ASCIIToUTF16("share"); |
211 service.type = ASCIIToUTF16("image/*"); | 243 service.type = ASCIIToUTF16("image/*"); |
212 registry_.UnregisterIntentService(service); | 244 registry_.UnregisterIntentService(service); |
213 | 245 |
214 registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"), | 246 registry_.GetIntentServices(ASCIIToUTF16("share"), ASCIIToUTF16("*"), |
215 base::Bind(&TestConsumer::OnIntentsQueryDone, | 247 base::Bind(&ServiceListConsumer::Accept, |
216 base::Unretained(&consumer))); | 248 base::Unretained(&consumer))); |
217 consumer.WaitForData(); | 249 consumer.WaitForData(); |
218 EXPECT_EQ(1U, consumer.services_.size()); | 250 EXPECT_EQ(1U, consumer.services_.size()); |
219 } | 251 } |
220 | 252 |
221 TEST_F(WebIntentsRegistryTest, GetIntentServicesForExtensionFilter) { | 253 TEST_F(WebIntentsRegistryTest, GetIntentServicesForExtensionFilter) { |
222 scoped_refptr<Extension> share_extension( | 254 scoped_refptr<Extension> share_extension( |
223 LoadAndExpectSuccess("intent_valid.json")); | 255 LoadAndExpectSuccess("intent_valid.json")); |
224 scoped_refptr<Extension> edit_extension( | 256 scoped_refptr<Extension> edit_extension( |
225 LoadAndExpectSuccess("intent_valid_2.json")); | 257 LoadAndExpectSuccess("intent_valid_2.json")); |
226 extensions_.Insert(share_extension); | 258 extensions_.Insert(share_extension); |
227 extensions_.Insert(edit_extension); | 259 extensions_.Insert(edit_extension); |
228 ASSERT_EQ(2U, extensions_.size()); | 260 ASSERT_EQ(2U, extensions_.size()); |
229 | 261 |
230 TestConsumer consumer; | 262 ServiceListConsumer consumer; |
231 registry_.GetIntentServicesForExtensionFilter( | 263 registry_.GetIntentServicesForExtensionFilter( |
232 ASCIIToUTF16("http://webintents.org/edit"), | 264 ASCIIToUTF16("http://webintents.org/edit"), |
233 ASCIIToUTF16("image/*"), | 265 ASCIIToUTF16("image/*"), |
234 edit_extension->id(), | 266 edit_extension->id(), |
235 base::Bind(&TestConsumer::OnIntentsQueryDone, | 267 base::Bind(&ServiceListConsumer::Accept, |
236 base::Unretained(&consumer))); | 268 base::Unretained(&consumer))); |
237 consumer.WaitForData(); | 269 consumer.WaitForData(); |
238 ASSERT_EQ(1U, consumer.services_.size()); | 270 ASSERT_EQ(1U, consumer.services_.size()); |
239 | 271 |
240 EXPECT_EQ(edit_extension->url().spec() + "services/edit", | 272 EXPECT_EQ(edit_extension->url().spec() + "services/edit", |
241 consumer.services_[0].service_url.spec()); | 273 consumer.services_[0].service_url.spec()); |
242 } | 274 } |
243 | 275 |
244 TEST_F(WebIntentsRegistryTest, GetAllIntents) { | 276 TEST_F(WebIntentsRegistryTest, GetAllIntents) { |
245 webkit_glue::WebIntentServiceData service; | 277 webkit_glue::WebIntentServiceData service; |
246 service.service_url = GURL("http://google.com"); | 278 service.service_url = GURL("http://google.com"); |
247 service.action = ASCIIToUTF16("share"); | 279 service.action = ASCIIToUTF16("share"); |
248 service.type = ASCIIToUTF16("image/*"); | 280 service.type = ASCIIToUTF16("image/*"); |
249 service.title = ASCIIToUTF16("Google's Sharing Service"); | 281 service.title = ASCIIToUTF16("Google's Sharing Service"); |
250 registry_.RegisterIntentService(service); | 282 registry_.RegisterIntentService(service); |
251 | 283 |
252 service.action = ASCIIToUTF16("search"); | 284 service.action = ASCIIToUTF16("search"); |
253 registry_.RegisterIntentService(service); | 285 registry_.RegisterIntentService(service); |
254 | 286 |
255 TestConsumer consumer; | 287 ServiceListConsumer consumer; |
256 registry_.GetAllIntentServices(base::Bind(&TestConsumer::OnIntentsQueryDone, | 288 registry_.GetAllIntentServices(base::Bind(&ServiceListConsumer::Accept, |
257 base::Unretained(&consumer))); | 289 base::Unretained(&consumer))); |
258 consumer.WaitForData(); | 290 consumer.WaitForData(); |
259 ASSERT_EQ(2U, consumer.services_.size()); | 291 ASSERT_EQ(2U, consumer.services_.size()); |
260 | 292 |
261 if (consumer.services_[0].action != ASCIIToUTF16("share")) | 293 if (consumer.services_[0].action != ASCIIToUTF16("share")) |
262 std::swap(consumer.services_[0],consumer.services_[1]); | 294 std::swap(consumer.services_[0],consumer.services_[1]); |
263 | 295 |
264 service.action = ASCIIToUTF16("share"); | 296 service.action = ASCIIToUTF16("share"); |
265 EXPECT_EQ(service, consumer.services_[0]); | 297 EXPECT_EQ(service, consumer.services_[0]); |
266 | 298 |
267 service.action = ASCIIToUTF16("search"); | 299 service.action = ASCIIToUTF16("search"); |
268 EXPECT_EQ(service, consumer.services_[1]); | 300 EXPECT_EQ(service, consumer.services_[1]); |
269 } | 301 } |
270 | 302 |
271 TEST_F(WebIntentsRegistryTest, GetExtensionIntents) { | 303 TEST_F(WebIntentsRegistryTest, GetExtensionIntents) { |
272 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); | 304 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
273 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); | 305 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
274 ASSERT_EQ(2U, extensions_.size()); | 306 ASSERT_EQ(2U, extensions_.size()); |
275 | 307 |
276 TestConsumer consumer; | 308 ServiceListConsumer consumer; |
277 registry_.GetAllIntentServices(base::Bind(&TestConsumer::OnIntentsQueryDone, | 309 registry_.GetAllIntentServices(base::Bind(&ServiceListConsumer::Accept, |
278 base::Unretained(&consumer))); | 310 base::Unretained(&consumer))); |
279 consumer.WaitForData(); | 311 consumer.WaitForData(); |
280 ASSERT_EQ(2U, consumer.services_.size()); | 312 ASSERT_EQ(2U, consumer.services_.size()); |
281 } | 313 } |
282 | 314 |
283 TEST_F(WebIntentsRegistryTest, GetSomeExtensionIntents) { | 315 TEST_F(WebIntentsRegistryTest, GetSomeExtensionIntents) { |
284 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); | 316 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
285 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); | 317 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
286 ASSERT_EQ(2U, extensions_.size()); | 318 ASSERT_EQ(2U, extensions_.size()); |
287 | 319 |
288 TestConsumer consumer; | 320 ServiceListConsumer consumer; |
289 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/edit"), | 321 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/edit"), |
290 ASCIIToUTF16("*"), | 322 ASCIIToUTF16("*"), |
291 base::Bind(&TestConsumer::OnIntentsQueryDone, | 323 base::Bind(&ServiceListConsumer::Accept, |
292 base::Unretained(&consumer))); | 324 base::Unretained(&consumer))); |
293 consumer.WaitForData(); | 325 consumer.WaitForData(); |
294 ASSERT_EQ(1U, consumer.services_.size()); | 326 ASSERT_EQ(1U, consumer.services_.size()); |
295 } | 327 } |
296 | 328 |
297 TEST_F(WebIntentsRegistryTest, GetIntentsFromMixedSources) { | 329 TEST_F(WebIntentsRegistryTest, GetIntentsFromMixedSources) { |
298 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); | 330 extensions_.Insert(LoadAndExpectSuccess("intent_valid.json")); |
299 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); | 331 extensions_.Insert(LoadAndExpectSuccess("intent_valid_2.json")); |
300 ASSERT_EQ(2U, extensions_.size()); | 332 ASSERT_EQ(2U, extensions_.size()); |
301 | 333 |
302 webkit_glue::WebIntentServiceData service; | 334 webkit_glue::WebIntentServiceData service; |
303 service.service_url = GURL("http://somewhere.com/intent/edit.html"); | 335 service.service_url = GURL("http://somewhere.com/intent/edit.html"); |
304 service.action = ASCIIToUTF16("http://webintents.org/edit"); | 336 service.action = ASCIIToUTF16("http://webintents.org/edit"); |
305 service.type = ASCIIToUTF16("image/*"); | 337 service.type = ASCIIToUTF16("image/*"); |
306 service.title = ASCIIToUTF16("Image Editing Service"); | 338 service.title = ASCIIToUTF16("Image Editing Service"); |
307 registry_.RegisterIntentService(service); | 339 registry_.RegisterIntentService(service); |
308 | 340 |
309 TestConsumer consumer; | 341 ServiceListConsumer consumer; |
310 registry_.GetIntentServices( | 342 registry_.GetIntentServices( |
311 ASCIIToUTF16("http://webintents.org/edit"), ASCIIToUTF16("*"), | 343 ASCIIToUTF16("http://webintents.org/edit"), ASCIIToUTF16("*"), |
312 base::Bind(&TestConsumer::OnIntentsQueryDone, | 344 base::Bind(&ServiceListConsumer::Accept, |
313 base::Unretained(&consumer))); | 345 base::Unretained(&consumer))); |
314 consumer.WaitForData(); | 346 consumer.WaitForData(); |
315 ASSERT_EQ(2U, consumer.services_.size()); | 347 ASSERT_EQ(2U, consumer.services_.size()); |
316 | 348 |
317 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 349 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
318 ASCIIToUTF16("*"), | 350 ASCIIToUTF16("*"), |
319 base::Bind(&TestConsumer::OnIntentsQueryDone, | 351 base::Bind(&ServiceListConsumer::Accept, |
320 base::Unretained(&consumer))); | 352 base::Unretained(&consumer))); |
321 consumer.WaitForData(); | 353 consumer.WaitForData(); |
322 ASSERT_EQ(1U, consumer.services_.size()); | 354 ASSERT_EQ(1U, consumer.services_.size()); |
323 } | 355 } |
324 | 356 |
325 TEST_F(WebIntentsRegistryTest, GetIntentsWithMimeAndLiteralMatching) { | 357 TEST_F(WebIntentsRegistryTest, GetIntentsWithMimeAndLiteralMatching) { |
326 WebIntentServiceData services[] = { | 358 WebIntentServiceData services[] = { |
327 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), | 359 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), |
328 ASCIIToUTF16("image/*"), | 360 ASCIIToUTF16("image/*"), |
329 string16(), | 361 string16(), |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 registry_.RegisterIntentService(services[5]); | 435 registry_.RegisterIntentService(services[5]); |
404 registry_.RegisterIntentService(services[6]); | 436 registry_.RegisterIntentService(services[6]); |
405 registry_.RegisterIntentService(services[7]); | 437 registry_.RegisterIntentService(services[7]); |
406 registry_.RegisterIntentService(services[8]); | 438 registry_.RegisterIntentService(services[8]); |
407 registry_.RegisterIntentService(services[9]); | 439 registry_.RegisterIntentService(services[9]); |
408 registry_.RegisterIntentService(services[10]); | 440 registry_.RegisterIntentService(services[10]); |
409 registry_.RegisterIntentService(services[11]); | 441 registry_.RegisterIntentService(services[11]); |
410 registry_.RegisterIntentService(services[12]); | 442 registry_.RegisterIntentService(services[12]); |
411 registry_.RegisterIntentService(services[13]); | 443 registry_.RegisterIntentService(services[13]); |
412 | 444 |
413 TestConsumer consumer; | 445 ServiceListConsumer consumer; |
414 | 446 |
415 // Test specific match on both sides. | 447 // Test specific match on both sides. |
416 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 448 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
417 ASCIIToUTF16("text/uri-list"), | 449 ASCIIToUTF16("text/uri-list"), |
418 base::Bind(&TestConsumer::OnIntentsQueryDone, | 450 base::Bind(&ServiceListConsumer::Accept, |
419 base::Unretained(&consumer))); | 451 base::Unretained(&consumer))); |
420 consumer.WaitForData(); | 452 consumer.WaitForData(); |
421 ASSERT_EQ(1U, consumer.services_.size()); | 453 ASSERT_EQ(1U, consumer.services_.size()); |
422 EXPECT_EQ(services[2], consumer.services_[0]); | 454 EXPECT_EQ(services[2], consumer.services_[0]); |
423 | 455 |
424 // Test specific query, wildcard registration. | 456 // Test specific query, wildcard registration. |
425 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 457 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
426 ASCIIToUTF16("image/png"), | 458 ASCIIToUTF16("image/png"), |
427 base::Bind(&TestConsumer::OnIntentsQueryDone, | 459 base::Bind(&ServiceListConsumer::Accept, |
428 base::Unretained(&consumer))); | 460 base::Unretained(&consumer))); |
429 consumer.WaitForData(); | 461 consumer.WaitForData(); |
430 ASSERT_EQ(1U, consumer.services_.size()); | 462 ASSERT_EQ(1U, consumer.services_.size()); |
431 EXPECT_EQ(services[0], consumer.services_[0]); | 463 EXPECT_EQ(services[0], consumer.services_[0]); |
432 | 464 |
433 // Test wildcard query, specific registration. | 465 // Test wildcard query, specific registration. |
434 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 466 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
435 ASCIIToUTF16("text/*"), | 467 ASCIIToUTF16("text/*"), |
436 base::Bind(&TestConsumer::OnIntentsQueryDone, | 468 base::Bind(&ServiceListConsumer::Accept, |
437 base::Unretained(&consumer))); | 469 base::Unretained(&consumer))); |
438 consumer.WaitForData(); | 470 consumer.WaitForData(); |
439 ASSERT_EQ(2U, consumer.services_.size()); | 471 ASSERT_EQ(2U, consumer.services_.size()); |
440 EXPECT_EQ(services[2], consumer.services_[0]); | 472 EXPECT_EQ(services[2], consumer.services_[0]); |
441 EXPECT_EQ(services[3], consumer.services_[1]); | 473 EXPECT_EQ(services[3], consumer.services_[1]); |
442 | 474 |
443 // Test wildcard query, wildcard registration. | 475 // Test wildcard query, wildcard registration. |
444 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 476 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
445 ASCIIToUTF16("image/*"), | 477 ASCIIToUTF16("image/*"), |
446 base::Bind(&TestConsumer::OnIntentsQueryDone, | 478 base::Bind(&ServiceListConsumer::Accept, |
447 base::Unretained(&consumer))); | 479 base::Unretained(&consumer))); |
448 consumer.WaitForData(); | 480 consumer.WaitForData(); |
449 ASSERT_EQ(2U, consumer.services_.size()); | 481 ASSERT_EQ(2U, consumer.services_.size()); |
450 EXPECT_EQ(services[0], consumer.services_[0]); | 482 EXPECT_EQ(services[0], consumer.services_[0]); |
451 EXPECT_EQ(services[1], consumer.services_[1]); | 483 EXPECT_EQ(services[1], consumer.services_[1]); |
452 | 484 |
453 // Test "catch-all" query. | 485 // Test "catch-all" query. |
454 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 486 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
455 ASCIIToUTF16("*"), | 487 ASCIIToUTF16("*"), |
456 base::Bind(&TestConsumer::OnIntentsQueryDone, | 488 base::Bind(&ServiceListConsumer::Accept, |
457 base::Unretained(&consumer))); | 489 base::Unretained(&consumer))); |
458 consumer.WaitForData(); | 490 consumer.WaitForData(); |
459 ASSERT_EQ(5U, consumer.services_.size()); | 491 ASSERT_EQ(5U, consumer.services_.size()); |
460 EXPECT_TRUE(consumer.ServicesContains(services[0])); | 492 EXPECT_TRUE(consumer.ResultsContain(services[0])); |
461 EXPECT_TRUE(consumer.ServicesContains(services[1])); | 493 EXPECT_TRUE(consumer.ResultsContain(services[1])); |
462 EXPECT_TRUE(consumer.ServicesContains(services[2])); | 494 EXPECT_TRUE(consumer.ResultsContain(services[2])); |
463 EXPECT_TRUE(consumer.ServicesContains(services[3])); | 495 EXPECT_TRUE(consumer.ResultsContain(services[3])); |
464 EXPECT_TRUE(consumer.ServicesContains(services[12])); | 496 EXPECT_TRUE(consumer.ResultsContain(services[12])); |
465 | 497 |
466 // Test retrieve string literal match. | 498 // Test retrieve string literal match. |
467 registry_.GetIntentServices( | 499 registry_.GetIntentServices( |
468 ASCIIToUTF16("http://webintents.org/share"), ASCIIToUTF16("elsewhere"), | 500 ASCIIToUTF16("http://webintents.org/share"), ASCIIToUTF16("elsewhere"), |
469 base::Bind(&TestConsumer::OnIntentsQueryDone, | 501 base::Bind(&ServiceListConsumer::Accept, |
470 base::Unretained(&consumer))); | 502 base::Unretained(&consumer))); |
471 consumer.WaitForData(); | 503 consumer.WaitForData(); |
472 ASSERT_EQ(1U, consumer.services_.size()); | 504 ASSERT_EQ(1U, consumer.services_.size()); |
473 EXPECT_EQ(services[4], consumer.services_[0]); | 505 EXPECT_EQ(services[4], consumer.services_[0]); |
474 | 506 |
475 // Test retrieve MIME-looking type but actually isn't | 507 // Test retrieve MIME-looking type but actually isn't |
476 // doesn't wildcard match. | 508 // doesn't wildcard match. |
477 registry_.GetIntentServices( | 509 registry_.GetIntentServices( |
478 ASCIIToUTF16("http://webintents.org/share"), | 510 ASCIIToUTF16("http://webintents.org/share"), |
479 ASCIIToUTF16("nota/mimetype"), | 511 ASCIIToUTF16("nota/mimetype"), |
480 base::Bind(&TestConsumer::OnIntentsQueryDone, | 512 base::Bind(&ServiceListConsumer::Accept, |
481 base::Unretained(&consumer))); | 513 base::Unretained(&consumer))); |
482 consumer.WaitForData(); | 514 consumer.WaitForData(); |
483 ASSERT_EQ(0U, consumer.services_.size()); | 515 ASSERT_EQ(0U, consumer.services_.size()); |
484 | 516 |
485 // Also a MIME-ish type that actually isn't. | 517 // Also a MIME-ish type that actually isn't. |
486 registry_.GetIntentServices( | 518 registry_.GetIntentServices( |
487 ASCIIToUTF16("http://webintents.org/share"), | 519 ASCIIToUTF16("http://webintents.org/share"), |
488 ASCIIToUTF16("x-/mimetype"), | 520 ASCIIToUTF16("x-/mimetype"), |
489 base::Bind(&TestConsumer::OnIntentsQueryDone, | 521 base::Bind(&ServiceListConsumer::Accept, |
490 base::Unretained(&consumer))); | 522 base::Unretained(&consumer))); |
491 consumer.WaitForData(); | 523 consumer.WaitForData(); |
492 ASSERT_EQ(0U, consumer.services_.size()); | 524 ASSERT_EQ(0U, consumer.services_.size()); |
493 | 525 |
494 // Extension MIME type will match wildcard. | 526 // Extension MIME type will match wildcard. |
495 registry_.GetIntentServices( | 527 registry_.GetIntentServices( |
496 ASCIIToUTF16("http://webintents.org/share"), | 528 ASCIIToUTF16("http://webintents.org/share"), |
497 ASCIIToUTF16("x-type/mimetype"), | 529 ASCIIToUTF16("x-type/mimetype"), |
498 base::Bind(&TestConsumer::OnIntentsQueryDone, | 530 base::Bind(&ServiceListConsumer::Accept, |
499 base::Unretained(&consumer))); | 531 base::Unretained(&consumer))); |
500 consumer.WaitForData(); | 532 consumer.WaitForData(); |
501 ASSERT_EQ(1U, consumer.services_.size()); | 533 ASSERT_EQ(1U, consumer.services_.size()); |
502 } | 534 } |
503 | 535 |
| 536 TEST_F(WebIntentsRegistryTest, TestGetAllDefaultIntentServices) { |
| 537 DefaultWebIntentService s0; |
| 538 s0.action = ASCIIToUTF16("share"); |
| 539 s0.type = ASCIIToUTF16("text/*"); |
| 540 // Values here are just dummies to test for preservation. |
| 541 s0.user_date = 1; |
| 542 s0.suppression = 4; |
| 543 s0.service_url = "service_url"; |
| 544 registry_.RegisterDefaultIntentService(s0); |
| 545 |
| 546 DefaultWebIntentService s1; |
| 547 s1.action = ASCIIToUTF16("pick"); |
| 548 s1.type = ASCIIToUTF16("image/*"); |
| 549 // Values here are just dummies to test for preservation. |
| 550 s1.user_date = 1; |
| 551 s1.suppression = 4; |
| 552 s1.service_url = "service_url"; |
| 553 registry_.RegisterDefaultIntentService(s1); |
| 554 |
| 555 DefaultWebIntentService s2; |
| 556 s2.action = ASCIIToUTF16("save"); |
| 557 s2.type = ASCIIToUTF16("application/*"); |
| 558 // Values here are just dummies to test for preservation. |
| 559 s2.user_date = 1; |
| 560 s2.suppression = 4; |
| 561 s2.service_url = "service_url"; |
| 562 registry_.RegisterDefaultIntentService(s2); |
| 563 |
| 564 DefaultServiceListConsumer consumer; |
| 565 |
| 566 // Test we can retrieve default entries by action. |
| 567 registry_.GetAllDefaultIntentServices( |
| 568 base::Bind(&DefaultServiceListConsumer::Accept, |
| 569 base::Unretained(&consumer))); |
| 570 |
| 571 consumer.WaitForData(); |
| 572 |
| 573 EXPECT_TRUE(consumer.ResultsContain(s0)); |
| 574 EXPECT_TRUE(consumer.ResultsContain(s1)); |
| 575 EXPECT_TRUE(consumer.ResultsContain(s2)); |
| 576 } |
| 577 |
504 TEST_F(WebIntentsRegistryTest, TestGetDefaults) { | 578 TEST_F(WebIntentsRegistryTest, TestGetDefaults) { |
505 DefaultWebIntentService default_service; | 579 DefaultWebIntentService default_service; |
506 default_service.action = ASCIIToUTF16("share"); | 580 default_service.action = ASCIIToUTF16("share"); |
507 default_service.type = ASCIIToUTF16("text/*"); | 581 default_service.type = ASCIIToUTF16("text/*"); |
508 // Values here are just dummies to test for preservation. | 582 // Values here are just dummies to test for preservation. |
509 default_service.user_date = 1; | 583 default_service.user_date = 1; |
510 default_service.suppression = 4; | 584 default_service.suppression = 4; |
511 default_service.service_url = "service_url"; | 585 default_service.service_url = "service_url"; |
512 registry_.RegisterDefaultIntentService(default_service); | 586 registry_.RegisterDefaultIntentService(default_service); |
513 | 587 |
514 TestConsumer consumer; | 588 DefaultServiceConsumer consumer; |
515 | 589 |
516 // Test we can retrieve default entries by action. | 590 // Test we can retrieve default entries by action. |
517 registry_.GetDefaultIntentService( | 591 registry_.GetDefaultIntentService( |
518 ASCIIToUTF16("share"), ASCIIToUTF16("text/plain"), | 592 ASCIIToUTF16("share"), ASCIIToUTF16("text/plain"), |
519 GURL("http://www.google.com/"), | 593 GURL("http://www.google.com/"), |
520 base::Bind(&TestConsumer::OnIntentsDefaultsQueryDone, | 594 base::Bind(&DefaultServiceConsumer::Accept, |
521 base::Unretained(&consumer))); | 595 base::Unretained(&consumer))); |
522 | 596 |
523 consumer.WaitForData(); | 597 consumer.WaitForData(); |
524 | 598 |
525 EXPECT_EQ("service_url", consumer.default_.service_url); | 599 EXPECT_EQ("service_url", consumer.service_.service_url); |
526 EXPECT_EQ(1, consumer.default_.user_date); | 600 EXPECT_EQ(1, consumer.service_.user_date); |
527 EXPECT_EQ(4, consumer.default_.suppression); | 601 EXPECT_EQ(4, consumer.service_.suppression); |
528 | 602 |
529 // Test that no action match means we don't retrieve any | 603 // Test that no action match means we don't retrieve any |
530 // default entries. | 604 // default entries. |
531 consumer.default_ = DefaultWebIntentService(); | 605 consumer.service_ = DefaultWebIntentService(); |
532 ASSERT_EQ("", consumer.default_.service_url); | 606 ASSERT_EQ("", consumer.service_.service_url); |
533 registry_.GetDefaultIntentService( | 607 registry_.GetDefaultIntentService( |
534 ASCIIToUTF16("no-share"), ASCIIToUTF16("text/plain"), | 608 ASCIIToUTF16("no-share"), ASCIIToUTF16("text/plain"), |
535 GURL("http://www.google.com/"), | 609 GURL("http://www.google.com/"), |
536 base::Bind(&TestConsumer::OnIntentsDefaultsQueryDone, | 610 base::Bind(&DefaultServiceConsumer::Accept, |
537 base::Unretained(&consumer))); | 611 base::Unretained(&consumer))); |
538 | 612 |
539 consumer.WaitForData(); | 613 consumer.WaitForData(); |
540 | 614 |
541 EXPECT_EQ("", consumer.default_.service_url); | 615 EXPECT_EQ("", consumer.service_.service_url); |
542 | 616 |
543 // Test that no type match means we don't retrieve any | 617 // Test that no type match means we don't retrieve any |
544 // default entries (they get filtered out). | 618 // default entries (they get filtered out). |
545 consumer.default_ = DefaultWebIntentService(); | 619 consumer.service_ = DefaultWebIntentService(); |
546 ASSERT_EQ("", consumer.default_.service_url); | 620 ASSERT_EQ("", consumer.service_.service_url); |
547 registry_.GetDefaultIntentService( | 621 registry_.GetDefaultIntentService( |
548 ASCIIToUTF16("share"), ASCIIToUTF16("image/plain"), | 622 ASCIIToUTF16("share"), ASCIIToUTF16("image/plain"), |
549 GURL("http://www.google.com/"), | 623 GURL("http://www.google.com/"), |
550 base::Bind(&TestConsumer::OnIntentsDefaultsQueryDone, | 624 base::Bind(&DefaultServiceConsumer::Accept, |
551 base::Unretained(&consumer))); | 625 base::Unretained(&consumer))); |
552 | 626 |
553 consumer.WaitForData(); | 627 consumer.WaitForData(); |
554 | 628 |
555 EXPECT_EQ("", consumer.default_.service_url); | 629 EXPECT_EQ("", consumer.service_.service_url); |
556 | 630 |
557 // Check that a string-literal type won't match. | 631 // Check that a string-literal type won't match. |
558 consumer.default_ = DefaultWebIntentService(); | 632 consumer.service_ = DefaultWebIntentService(); |
559 ASSERT_EQ("", consumer.default_.service_url); | 633 ASSERT_EQ("", consumer.service_.service_url); |
560 registry_.GetDefaultIntentService( | 634 registry_.GetDefaultIntentService( |
561 ASCIIToUTF16("share"), | 635 ASCIIToUTF16("share"), |
562 ASCIIToUTF16("literal"), | 636 ASCIIToUTF16("literal"), |
563 GURL("http://www.google.com/"), | 637 GURL("http://www.google.com/"), |
564 base::Bind(&TestConsumer::OnIntentsDefaultsQueryDone, | 638 base::Bind(&DefaultServiceConsumer::Accept, |
565 base::Unretained(&consumer))); | 639 base::Unretained(&consumer))); |
566 | 640 |
567 consumer.WaitForData(); | 641 consumer.WaitForData(); |
568 | 642 |
569 EXPECT_EQ("", consumer.default_.service_url); | 643 EXPECT_EQ("", consumer.service_.service_url); |
570 } | 644 } |
571 | 645 |
572 // Verify that collapsing equivalent intents works properly. | 646 // Verify that collapsing equivalent intents works properly. |
573 TEST_F(WebIntentsRegistryTest, CollapseIntents) { | 647 TEST_F(WebIntentsRegistryTest, CollapseIntents) { |
574 WebIntentsRegistry::IntentServiceList services; | 648 WebIntentsRegistry::IntentServiceList services; |
575 | 649 |
576 // Add two intents with identical |service_url|, |title|, and |action|. | 650 // Add two intents with identical |service_url|, |title|, and |action|. |
577 services.push_back( | 651 services.push_back( |
578 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), | 652 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), |
579 ASCIIToUTF16("image/png"), | 653 ASCIIToUTF16("image/png"), |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
644 ASCIIToUTF16("Image Sharing Service")), | 718 ASCIIToUTF16("Image Sharing Service")), |
645 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), | 719 WebIntentServiceData(ASCIIToUTF16("http://webintents.org/share"), |
646 ASCIIToUTF16("image/jpg"), | 720 ASCIIToUTF16("image/jpg"), |
647 string16(), | 721 string16(), |
648 GURL("http://somewhere.com/intent/share.html"), | 722 GURL("http://somewhere.com/intent/share.html"), |
649 ASCIIToUTF16("Image Sharing Service")) | 723 ASCIIToUTF16("Image Sharing Service")) |
650 }; | 724 }; |
651 registry_.RegisterIntentService(services[0]); | 725 registry_.RegisterIntentService(services[0]); |
652 registry_.RegisterIntentService(services[1]); | 726 registry_.RegisterIntentService(services[1]); |
653 | 727 |
654 TestConsumer consumer; | 728 ServiceListConsumer consumer; |
655 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), | 729 registry_.GetIntentServices(ASCIIToUTF16("http://webintents.org/share"), |
656 ASCIIToUTF16("image/*"), | 730 ASCIIToUTF16("image/*"), |
657 base::Bind(&TestConsumer::OnIntentsQueryDone, | 731 base::Bind(&ServiceListConsumer::Accept, |
658 base::Unretained(&consumer))); | 732 base::Unretained(&consumer))); |
659 | 733 |
660 consumer.WaitForData(); | 734 consumer.WaitForData(); |
661 ASSERT_EQ(1U, consumer.services_.size()); | 735 ASSERT_EQ(1U, consumer.services_.size()); |
662 EXPECT_EQ(ASCIIToUTF16("image/png,image/jpg"), consumer.services_[0].type); | 736 EXPECT_EQ(ASCIIToUTF16("image/png,image/jpg"), consumer.services_[0].type); |
663 } | 737 } |
OLD | NEW |