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

Side by Side Diff: chrome/browser/intents/web_intents_registry_unittest.cc

Issue 10838004: Support for loading all default intent services. Necessary to allow editing of defaults from settin… (Closed) Base URL: http://git.chromium.org/chromium/src.git@newreg
Patch Set: Respond to code review comments. Created 8 years, 4 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
« no previous file with comments | « chrome/browser/intents/web_intents_registry.cc ('k') | no next file » | 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 "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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/intents/web_intents_registry.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698