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

Side by Side Diff: chrome/browser/installable/installable_manager_browsertest.cc

Issue 2778983005: Allow the app banner installability check to run on page load. (Closed)
Patch Set: Address comments Created 3 years, 8 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/installable/installable_manager.h" 5 #include "chrome/browser/installable/installable_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 params.minimum_badge_icon_size_in_px = 72; 54 params.minimum_badge_icon_size_in_px = 72;
55 params.fetch_valid_badge_icon = true; 55 params.fetch_valid_badge_icon = true;
56 return params; 56 return params;
57 } 57 }
58 58
59 } // anonymous namespace 59 } // anonymous namespace
60 60
61 class CallbackTester { 61 class CallbackTester {
62 public: 62 public:
63 explicit CallbackTester(base::Closure quit_closure) 63 explicit CallbackTester(base::Closure quit_closure)
64 : quit_closure_(quit_closure) { } 64 : quit_closure_(quit_closure) {}
65 65
66 void OnDidFinishInstallableCheck(const InstallableData& data) { 66 void OnDidFinishInstallableCheck(const InstallableData& data) {
67 error_code_ = data.error_code; 67 error_code_ = data.error_code;
68 manifest_url_ = data.manifest_url; 68 manifest_url_ = data.manifest_url;
69 manifest_ = data.manifest; 69 manifest_ = data.manifest;
70 primary_icon_url_ = data.primary_icon_url; 70 primary_icon_url_ = data.primary_icon_url;
71 if (data.primary_icon) 71 if (data.primary_icon)
72 primary_icon_.reset(new SkBitmap(*data.primary_icon)); 72 primary_icon_.reset(new SkBitmap(*data.primary_icon));
73 badge_icon_url_ = data.badge_icon_url; 73 badge_icon_url_ = data.badge_icon_url;
74 if (data.badge_icon) 74 if (data.badge_icon)
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 content::WebContents* web_contents = 193 content::WebContents* web_contents =
194 browser()->tab_strip_model()->GetActiveWebContents(); 194 browser()->tab_strip_model()->GetActiveWebContents();
195 InstallableManager::CreateForWebContents(web_contents); 195 InstallableManager::CreateForWebContents(web_contents);
196 InstallableManager* manager = 196 InstallableManager* manager =
197 InstallableManager::FromWebContents(web_contents); 197 InstallableManager::FromWebContents(web_contents);
198 CHECK(manager); 198 CHECK(manager);
199 199
200 return manager; 200 return manager;
201 } 201 }
202 202
203 InstallabilityCheckStatus GetStatus() { return GetManager()->page_status_; }
203 }; 204 };
204 205
205 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 206 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
206 ManagerBeginsInEmptyState) { 207 ManagerBeginsInEmptyState) {
207 // Ensure that the InstallableManager starts off with everything null. 208 // Ensure that the InstallableManager starts off with everything null.
208 InstallableManager* manager = GetManager(); 209 InstallableManager* manager = GetManager();
209 210
210 EXPECT_TRUE(manager->manifest().IsEmpty()); 211 EXPECT_TRUE(manager->manifest().IsEmpty());
211 EXPECT_TRUE(manager->manifest_url().is_empty()); 212 EXPECT_TRUE(manager->manifest_url().is_empty());
212 EXPECT_TRUE(manager->icons_.empty()); 213 EXPECT_TRUE(manager->icons_.empty());
(...skipping 17 matching lines...) Expand all
230 231
231 // If there is no manifest, everything should be empty. 232 // If there is no manifest, everything should be empty.
232 EXPECT_TRUE(tester->manifest().IsEmpty()); 233 EXPECT_TRUE(tester->manifest().IsEmpty());
233 EXPECT_TRUE(tester->manifest_url().is_empty()); 234 EXPECT_TRUE(tester->manifest_url().is_empty());
234 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 235 EXPECT_TRUE(tester->primary_icon_url().is_empty());
235 EXPECT_EQ(nullptr, tester->primary_icon()); 236 EXPECT_EQ(nullptr, tester->primary_icon());
236 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 237 EXPECT_TRUE(tester->badge_icon_url().is_empty());
237 EXPECT_EQ(nullptr, tester->badge_icon()); 238 EXPECT_EQ(nullptr, tester->badge_icon());
238 EXPECT_FALSE(tester->is_installable()); 239 EXPECT_FALSE(tester->is_installable());
239 EXPECT_EQ(NO_MANIFEST, tester->error_code()); 240 EXPECT_EQ(NO_MANIFEST, tester->error_code());
241 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
240 } 242 }
241 243
242 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifest404) { 244 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifest404) {
243 base::RunLoop run_loop; 245 base::RunLoop run_loop;
244 std::unique_ptr<CallbackTester> tester( 246 std::unique_ptr<CallbackTester> tester(
245 new CallbackTester(run_loop.QuitClosure())); 247 new CallbackTester(run_loop.QuitClosure()));
246 248
247 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 249 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
248 GetURLOfPageWithServiceWorkerAndManifest( 250 GetURLOfPageWithServiceWorkerAndManifest(
249 "/banners/manifest_missing.json")); 251 "/banners/manifest_missing.json"));
250 run_loop.Run(); 252 run_loop.Run();
251 253
252 // The installable manager should return a manifest URL even if it 404s. 254 // The installable manager should return a manifest URL even if it 404s.
253 // However, the check should fail with a ManifestEmpty error. 255 // However, the check should fail with a ManifestEmpty error.
254 EXPECT_TRUE(tester->manifest().IsEmpty()); 256 EXPECT_TRUE(tester->manifest().IsEmpty());
255 257
256 EXPECT_FALSE(tester->manifest_url().is_empty()); 258 EXPECT_FALSE(tester->manifest_url().is_empty());
257 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 259 EXPECT_TRUE(tester->primary_icon_url().is_empty());
258 EXPECT_EQ(nullptr, tester->primary_icon()); 260 EXPECT_EQ(nullptr, tester->primary_icon());
259 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 261 EXPECT_TRUE(tester->badge_icon_url().is_empty());
260 EXPECT_EQ(nullptr, tester->badge_icon()); 262 EXPECT_EQ(nullptr, tester->badge_icon());
261 EXPECT_FALSE(tester->is_installable()); 263 EXPECT_FALSE(tester->is_installable());
262 EXPECT_EQ(MANIFEST_EMPTY, tester->error_code()); 264 EXPECT_EQ(MANIFEST_EMPTY, tester->error_code());
265 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
263 } 266 }
264 267
265 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestOnly) { 268 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestOnly) {
266 // Verify that asking for just the manifest works as expected. 269 // Verify that asking for just the manifest works as expected.
267 base::RunLoop run_loop; 270 base::RunLoop run_loop;
268 std::unique_ptr<CallbackTester> tester( 271 std::unique_ptr<CallbackTester> tester(
269 new CallbackTester(run_loop.QuitClosure())); 272 new CallbackTester(run_loop.QuitClosure()));
270 273
271 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 274 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
272 "/banners/manifest_test_page.html"); 275 "/banners/manifest_test_page.html");
273 run_loop.Run(); 276 run_loop.Run();
274 277
275 EXPECT_FALSE(tester->manifest().IsEmpty()); 278 EXPECT_FALSE(tester->manifest().IsEmpty());
276 EXPECT_FALSE(tester->manifest_url().is_empty()); 279 EXPECT_FALSE(tester->manifest_url().is_empty());
277 280
278 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 281 EXPECT_TRUE(tester->primary_icon_url().is_empty());
279 EXPECT_EQ(nullptr, tester->primary_icon()); 282 EXPECT_EQ(nullptr, tester->primary_icon());
280 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 283 EXPECT_TRUE(tester->badge_icon_url().is_empty());
281 EXPECT_EQ(nullptr, tester->badge_icon()); 284 EXPECT_EQ(nullptr, tester->badge_icon());
282 EXPECT_FALSE(tester->is_installable()); 285 EXPECT_FALSE(tester->is_installable());
283 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 286 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
287 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
284 } 288 }
285 289
286 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 290 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
287 CheckInstallableParamsDefaultConstructor) { 291 CheckInstallableParamsDefaultConstructor) {
288 // Verify that using InstallableParams' default constructor is equivalent to 292 // Verify that using InstallableParams' default constructor is equivalent to
289 // just asking for the manifest alone. 293 // just asking for the manifest alone.
290 base::RunLoop run_loop; 294 base::RunLoop run_loop;
291 std::unique_ptr<CallbackTester> tester( 295 std::unique_ptr<CallbackTester> tester(
292 new CallbackTester(run_loop.QuitClosure())); 296 new CallbackTester(run_loop.QuitClosure()));
293 297
294 InstallableParams params; 298 InstallableParams params;
295 NavigateAndRunInstallableManager(tester.get(), params, 299 NavigateAndRunInstallableManager(tester.get(), params,
296 "/banners/manifest_test_page.html"); 300 "/banners/manifest_test_page.html");
297 run_loop.Run(); 301 run_loop.Run();
298 302
299 EXPECT_FALSE(tester->manifest().IsEmpty()); 303 EXPECT_FALSE(tester->manifest().IsEmpty());
300 EXPECT_FALSE(tester->manifest_url().is_empty()); 304 EXPECT_FALSE(tester->manifest_url().is_empty());
301 305
302 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 306 EXPECT_TRUE(tester->primary_icon_url().is_empty());
303 EXPECT_EQ(nullptr, tester->primary_icon()); 307 EXPECT_EQ(nullptr, tester->primary_icon());
304 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 308 EXPECT_TRUE(tester->badge_icon_url().is_empty());
305 EXPECT_EQ(nullptr, tester->badge_icon()); 309 EXPECT_EQ(nullptr, tester->badge_icon());
306 EXPECT_FALSE(tester->is_installable()); 310 EXPECT_FALSE(tester->is_installable());
307 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 311 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
312 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
308 } 313 }
309 314
310 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 315 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
311 CheckManifestWithOnlyRelatedApplications) { 316 CheckManifestWithOnlyRelatedApplications) {
312 // This page has a manifest with only related applications specified. Asking 317 // This page has a manifest with only related applications specified. Asking
313 // for just the manifest should succeed. 318 // for just the manifest should succeed.
314 { 319 {
315 base::RunLoop run_loop; 320 base::RunLoop run_loop;
316 std::unique_ptr<CallbackTester> tester( 321 std::unique_ptr<CallbackTester> tester(
317 new CallbackTester(run_loop.QuitClosure())); 322 new CallbackTester(run_loop.QuitClosure()));
318 323
319 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 324 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
320 "/banners/play_app_test_page.html"); 325 "/banners/play_app_test_page.html");
321 run_loop.Run(); 326 run_loop.Run();
322 327
323 EXPECT_FALSE(tester->manifest().IsEmpty()); 328 EXPECT_FALSE(tester->manifest().IsEmpty());
324 EXPECT_FALSE(tester->manifest_url().is_empty()); 329 EXPECT_FALSE(tester->manifest_url().is_empty());
325 EXPECT_TRUE(tester->manifest().prefer_related_applications); 330 EXPECT_TRUE(tester->manifest().prefer_related_applications);
326 331
327 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 332 EXPECT_TRUE(tester->primary_icon_url().is_empty());
328 EXPECT_EQ(nullptr, tester->primary_icon()); 333 EXPECT_EQ(nullptr, tester->primary_icon());
329 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 334 EXPECT_TRUE(tester->badge_icon_url().is_empty());
330 EXPECT_EQ(nullptr, tester->badge_icon()); 335 EXPECT_EQ(nullptr, tester->badge_icon());
331 EXPECT_FALSE(tester->is_installable()); 336 EXPECT_FALSE(tester->is_installable());
332 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 337 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
338 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
333 } 339 }
334 340
335 // Ask for a primary icon (but don't navigate). This should fail with 341 // Ask for a primary icon (but don't navigate). This should fail with
336 // NO_ACCEPTABLE_ICON. 342 // NO_ACCEPTABLE_ICON.
337 { 343 {
338 base::RunLoop run_loop; 344 base::RunLoop run_loop;
339 std::unique_ptr<CallbackTester> tester( 345 std::unique_ptr<CallbackTester> tester(
340 new CallbackTester(run_loop.QuitClosure())); 346 new CallbackTester(run_loop.QuitClosure()));
341 347
342 RunInstallableManager(tester.get(), GetPrimaryIconParams()); 348 RunInstallableManager(tester.get(), GetPrimaryIconParams());
343 run_loop.Run(); 349 run_loop.Run();
344 350
345 EXPECT_FALSE(tester->manifest().IsEmpty()); 351 EXPECT_FALSE(tester->manifest().IsEmpty());
346 EXPECT_FALSE(tester->manifest_url().is_empty()); 352 EXPECT_FALSE(tester->manifest_url().is_empty());
347 EXPECT_TRUE(tester->manifest().prefer_related_applications); 353 EXPECT_TRUE(tester->manifest().prefer_related_applications);
348 354
349 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 355 EXPECT_TRUE(tester->primary_icon_url().is_empty());
350 EXPECT_EQ(nullptr, tester->primary_icon()); 356 EXPECT_EQ(nullptr, tester->primary_icon());
351 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 357 EXPECT_TRUE(tester->badge_icon_url().is_empty());
352 EXPECT_EQ(nullptr, tester->badge_icon()); 358 EXPECT_EQ(nullptr, tester->badge_icon());
353 EXPECT_FALSE(tester->is_installable()); 359 EXPECT_FALSE(tester->is_installable());
354 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 360 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
361 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
355 } 362 }
356 363
357 // Ask for everything except badge icon. This should fail with 364 // Ask for everything except badge icon. This should fail with
358 // NO_ACCEPTABLE_ICON - the primary icon fetch has already failed, so that 365 // NO_ACCEPTABLE_ICON - the primary icon fetch has already failed, so that
359 // cached error stops the installable check from being performed. 366 // cached error stops the installable check from being performed.
360 { 367 {
361 base::RunLoop run_loop; 368 base::RunLoop run_loop;
362 std::unique_ptr<CallbackTester> tester( 369 std::unique_ptr<CallbackTester> tester(
363 new CallbackTester(run_loop.QuitClosure())); 370 new CallbackTester(run_loop.QuitClosure()));
364 371
365 RunInstallableManager(tester.get(), GetWebAppParams()); 372 RunInstallableManager(tester.get(), GetWebAppParams());
366 run_loop.Run(); 373 run_loop.Run();
367 374
368 EXPECT_FALSE(tester->manifest().IsEmpty()); 375 EXPECT_FALSE(tester->manifest().IsEmpty());
369 EXPECT_FALSE(tester->manifest_url().is_empty()); 376 EXPECT_FALSE(tester->manifest_url().is_empty());
370 EXPECT_TRUE(tester->manifest().prefer_related_applications); 377 EXPECT_TRUE(tester->manifest().prefer_related_applications);
371 378
372 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 379 EXPECT_TRUE(tester->primary_icon_url().is_empty());
373 EXPECT_EQ(nullptr, tester->primary_icon()); 380 EXPECT_EQ(nullptr, tester->primary_icon());
374 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 381 EXPECT_TRUE(tester->badge_icon_url().is_empty());
375 EXPECT_EQ(nullptr, tester->badge_icon()); 382 EXPECT_EQ(nullptr, tester->badge_icon());
376 EXPECT_FALSE(tester->is_installable()); 383 EXPECT_FALSE(tester->is_installable());
377 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 384 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
385 EXPECT_EQ(GetStatus(),
386 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
378 } 387 }
379 388
380 // Ask for a different size primary icon. This should fail with 389 // Ask for a different size primary icon. This should fail with
381 // START_URL_NOT_VALID since we won't have a cached icon error. 390 // START_URL_NOT_VALID since we won't have a cached icon error.
382 { 391 {
383 base::RunLoop run_loop; 392 base::RunLoop run_loop;
384 std::unique_ptr<CallbackTester> tester( 393 std::unique_ptr<CallbackTester> tester(
385 new CallbackTester(run_loop.QuitClosure())); 394 new CallbackTester(run_loop.QuitClosure()));
386 395
387 InstallableParams params = GetWebAppParams(); 396 InstallableParams params = GetWebAppParams();
388 params.ideal_primary_icon_size_in_px = 96; 397 params.ideal_primary_icon_size_in_px = 96;
389 params.minimum_primary_icon_size_in_px = 96; 398 params.minimum_primary_icon_size_in_px = 96;
390 RunInstallableManager(tester.get(), params); 399 RunInstallableManager(tester.get(), params);
391 run_loop.Run(); 400 run_loop.Run();
392 401
393 EXPECT_FALSE(tester->manifest().IsEmpty()); 402 EXPECT_FALSE(tester->manifest().IsEmpty());
394 EXPECT_FALSE(tester->manifest_url().is_empty()); 403 EXPECT_FALSE(tester->manifest_url().is_empty());
395 EXPECT_TRUE(tester->manifest().prefer_related_applications); 404 EXPECT_TRUE(tester->manifest().prefer_related_applications);
396 405
397 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 406 EXPECT_TRUE(tester->primary_icon_url().is_empty());
398 EXPECT_EQ(nullptr, tester->primary_icon()); 407 EXPECT_EQ(nullptr, tester->primary_icon());
399 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 408 EXPECT_TRUE(tester->badge_icon_url().is_empty());
400 EXPECT_EQ(nullptr, tester->badge_icon()); 409 EXPECT_EQ(nullptr, tester->badge_icon());
401 EXPECT_FALSE(tester->is_installable()); 410 EXPECT_FALSE(tester->is_installable());
402 EXPECT_EQ(START_URL_NOT_VALID, tester->error_code()); 411 EXPECT_EQ(START_URL_NOT_VALID, tester->error_code());
412 EXPECT_EQ(GetStatus(),
413 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
403 } 414 }
404 } 415 }
405 416
406 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestAndIcon) { 417 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestAndIcon) {
407 // Add to homescreen checks for manifest + primary icon. 418 // Add to homescreen checks for manifest + primary icon.
408 { 419 {
409 base::RunLoop run_loop; 420 base::RunLoop run_loop;
410 std::unique_ptr<CallbackTester> tester( 421 std::unique_ptr<CallbackTester> tester(
411 new CallbackTester(run_loop.QuitClosure())); 422 new CallbackTester(run_loop.QuitClosure()));
412 423
413 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(), 424 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(),
414 "/banners/manifest_test_page.html"); 425 "/banners/manifest_test_page.html");
415 run_loop.Run(); 426 run_loop.Run();
416 427
417 EXPECT_FALSE(tester->manifest().IsEmpty()); 428 EXPECT_FALSE(tester->manifest().IsEmpty());
418 EXPECT_FALSE(tester->manifest_url().is_empty()); 429 EXPECT_FALSE(tester->manifest_url().is_empty());
419 430
420 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 431 EXPECT_FALSE(tester->primary_icon_url().is_empty());
421 EXPECT_NE(nullptr, tester->primary_icon()); 432 EXPECT_NE(nullptr, tester->primary_icon());
422 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 433 EXPECT_TRUE(tester->badge_icon_url().is_empty());
423 EXPECT_EQ(nullptr, tester->badge_icon()); 434 EXPECT_EQ(nullptr, tester->badge_icon());
424 EXPECT_FALSE(tester->is_installable()); 435 EXPECT_FALSE(tester->is_installable());
425 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 436 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
437 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
426 } 438 }
427 439
428 // Add to homescreen checks for manifest + primary icon + badge icon. 440 // Add to homescreen checks for manifest + primary icon + badge icon.
429 { 441 {
430 base::RunLoop run_loop; 442 base::RunLoop run_loop;
431 std::unique_ptr<CallbackTester> tester( 443 std::unique_ptr<CallbackTester> tester(
432 new CallbackTester(run_loop.QuitClosure())); 444 new CallbackTester(run_loop.QuitClosure()));
433 445
434 RunInstallableManager(tester.get(), GetPrimaryIconAndBadgeIconParams()); 446 RunInstallableManager(tester.get(), GetPrimaryIconAndBadgeIconParams());
435 run_loop.Run(); 447 run_loop.Run();
436 448
437 EXPECT_FALSE(tester->manifest().IsEmpty()); 449 EXPECT_FALSE(tester->manifest().IsEmpty());
438 EXPECT_FALSE(tester->manifest_url().is_empty()); 450 EXPECT_FALSE(tester->manifest_url().is_empty());
439 451
440 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 452 EXPECT_FALSE(tester->primary_icon_url().is_empty());
441 EXPECT_NE(nullptr, tester->primary_icon()); 453 EXPECT_NE(nullptr, tester->primary_icon());
442 EXPECT_FALSE(tester->badge_icon_url().is_empty()); 454 EXPECT_FALSE(tester->badge_icon_url().is_empty());
443 EXPECT_NE(nullptr, tester->badge_icon()); 455 EXPECT_NE(nullptr, tester->badge_icon());
444 EXPECT_FALSE(tester->is_installable()); 456 EXPECT_FALSE(tester->is_installable());
445 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 457 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
458 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
446 } 459 }
447 460
448 // Request an oversized badge icon. This should fetch only the manifest and 461 // Request an oversized badge icon. This should fetch only the manifest and
449 // the primary icon, and return no errors. 462 // the primary icon, and return no errors.
450 { 463 {
451 base::RunLoop run_loop; 464 base::RunLoop run_loop;
452 std::unique_ptr<CallbackTester> tester( 465 std::unique_ptr<CallbackTester> tester(
453 new CallbackTester(run_loop.QuitClosure())); 466 new CallbackTester(run_loop.QuitClosure()));
454 467
455 InstallableParams params = GetPrimaryIconAndBadgeIconParams(); 468 InstallableParams params = GetPrimaryIconAndBadgeIconParams();
456 params.ideal_badge_icon_size_in_px = 2000; 469 params.ideal_badge_icon_size_in_px = 2000;
457 params.minimum_badge_icon_size_in_px = 2000; 470 params.minimum_badge_icon_size_in_px = 2000;
458 RunInstallableManager(tester.get(), params); 471 RunInstallableManager(tester.get(), params);
459 run_loop.Run(); 472 run_loop.Run();
460 473
461 EXPECT_FALSE(tester->manifest().IsEmpty()); 474 EXPECT_FALSE(tester->manifest().IsEmpty());
462 EXPECT_FALSE(tester->manifest_url().is_empty()); 475 EXPECT_FALSE(tester->manifest_url().is_empty());
463 476
464 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 477 EXPECT_FALSE(tester->primary_icon_url().is_empty());
465 EXPECT_NE(nullptr, tester->primary_icon()); 478 EXPECT_NE(nullptr, tester->primary_icon());
466 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 479 EXPECT_TRUE(tester->badge_icon_url().is_empty());
467 EXPECT_EQ(nullptr, tester->badge_icon()); 480 EXPECT_EQ(nullptr, tester->badge_icon());
468 EXPECT_FALSE(tester->is_installable()); 481 EXPECT_FALSE(tester->is_installable());
469 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 482 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
483 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
470 } 484 }
471 } 485 }
472 486
473 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebapp) { 487 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebapp) {
474 // Request everything except badge icon. 488 // Request everything except badge icon.
475 { 489 {
476 base::RunLoop run_loop; 490 base::RunLoop run_loop;
477 std::unique_ptr<CallbackTester> tester( 491 std::unique_ptr<CallbackTester> tester(
478 new CallbackTester(run_loop.QuitClosure())); 492 new CallbackTester(run_loop.QuitClosure()));
479 493
480 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 494 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
481 "/banners/manifest_test_page.html"); 495 "/banners/manifest_test_page.html");
482 run_loop.Run(); 496 run_loop.Run();
483 497
484 EXPECT_FALSE(tester->manifest().IsEmpty()); 498 EXPECT_FALSE(tester->manifest().IsEmpty());
485 EXPECT_FALSE(tester->manifest_url().is_empty()); 499 EXPECT_FALSE(tester->manifest_url().is_empty());
486 EXPECT_TRUE(tester->is_installable()); 500 EXPECT_TRUE(tester->is_installable());
487 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 501 EXPECT_FALSE(tester->primary_icon_url().is_empty());
488 EXPECT_NE(nullptr, tester->primary_icon()); 502 EXPECT_NE(nullptr, tester->primary_icon());
489 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 503 EXPECT_TRUE(tester->badge_icon_url().is_empty());
490 EXPECT_EQ(nullptr, tester->badge_icon()); 504 EXPECT_EQ(nullptr, tester->badge_icon());
491 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 505 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
506 EXPECT_EQ(GetStatus(),
507 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP);
492 508
493 // Verify that the returned state matches manager internal state. 509 // Verify that the returned state matches manager internal state.
494 InstallableManager* manager = GetManager(); 510 InstallableManager* manager = GetManager();
495 511
496 EXPECT_FALSE(manager->manifest().IsEmpty()); 512 EXPECT_FALSE(manager->manifest().IsEmpty());
497 EXPECT_FALSE(manager->manifest_url().is_empty()); 513 EXPECT_FALSE(manager->manifest_url().is_empty());
498 EXPECT_TRUE(manager->is_installable()); 514 EXPECT_TRUE(manager->is_installable());
499 EXPECT_EQ(1u, manager->icons_.size()); 515 EXPECT_EQ(1u, manager->icons_.size());
500 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); 516 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
501 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); 517 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
(...skipping 14 matching lines...) Expand all
516 run_loop.Run(); 532 run_loop.Run();
517 533
518 EXPECT_FALSE(tester->manifest().IsEmpty()); 534 EXPECT_FALSE(tester->manifest().IsEmpty());
519 EXPECT_FALSE(tester->manifest_url().is_empty()); 535 EXPECT_FALSE(tester->manifest_url().is_empty());
520 EXPECT_TRUE(tester->is_installable()); 536 EXPECT_TRUE(tester->is_installable());
521 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 537 EXPECT_FALSE(tester->primary_icon_url().is_empty());
522 EXPECT_NE(nullptr, tester->primary_icon()); 538 EXPECT_NE(nullptr, tester->primary_icon());
523 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 539 EXPECT_TRUE(tester->badge_icon_url().is_empty());
524 EXPECT_EQ(nullptr, tester->badge_icon()); 540 EXPECT_EQ(nullptr, tester->badge_icon());
525 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 541 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
542 EXPECT_EQ(GetStatus(),
543 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP);
526 544
527 // Verify that the returned state matches manager internal state. 545 // Verify that the returned state matches manager internal state.
528 InstallableManager* manager = GetManager(); 546 InstallableManager* manager = GetManager();
529 547
530 EXPECT_FALSE(manager->manifest().IsEmpty()); 548 EXPECT_FALSE(manager->manifest().IsEmpty());
531 EXPECT_FALSE(manager->manifest_url().is_empty()); 549 EXPECT_FALSE(manager->manifest_url().is_empty());
532 EXPECT_TRUE(manager->is_installable()); 550 EXPECT_TRUE(manager->is_installable());
533 EXPECT_EQ(1u, manager->icons_.size()); 551 EXPECT_EQ(1u, manager->icons_.size());
534 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty())); 552 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
535 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams))); 553 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
(...skipping 30 matching lines...) Expand all
566 // The installable manager should only retrieve items in the main frame; 584 // The installable manager should only retrieve items in the main frame;
567 // everything should be empty here. 585 // everything should be empty here.
568 EXPECT_TRUE(tester->manifest().IsEmpty()); 586 EXPECT_TRUE(tester->manifest().IsEmpty());
569 EXPECT_TRUE(tester->manifest_url().is_empty()); 587 EXPECT_TRUE(tester->manifest_url().is_empty());
570 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 588 EXPECT_TRUE(tester->primary_icon_url().is_empty());
571 EXPECT_EQ(nullptr, tester->primary_icon()); 589 EXPECT_EQ(nullptr, tester->primary_icon());
572 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 590 EXPECT_TRUE(tester->badge_icon_url().is_empty());
573 EXPECT_EQ(nullptr, tester->badge_icon()); 591 EXPECT_EQ(nullptr, tester->badge_icon());
574 EXPECT_FALSE(tester->is_installable()); 592 EXPECT_FALSE(tester->is_installable());
575 EXPECT_EQ(NO_MANIFEST, tester->error_code()); 593 EXPECT_EQ(NO_MANIFEST, tester->error_code());
594 EXPECT_EQ(GetStatus(),
595 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
576 } 596 }
577 597
578 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 598 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
579 CheckPageWithManifestAndNoServiceWorker) { 599 CheckPageWithManifestAndNoServiceWorker) {
580 // Just fetch the manifest. This should have no error. 600 // Just fetch the manifest. This should have no error.
581 { 601 {
582 base::RunLoop run_loop; 602 base::RunLoop run_loop;
583 std::unique_ptr<CallbackTester> tester( 603 std::unique_ptr<CallbackTester> tester(
584 new CallbackTester(run_loop.QuitClosure())); 604 new CallbackTester(run_loop.QuitClosure()));
585 605
586 NavigateAndRunInstallableManager( 606 NavigateAndRunInstallableManager(
587 tester.get(), GetManifestParams(), 607 tester.get(), GetManifestParams(),
588 "/banners/manifest_no_service_worker.html"); 608 "/banners/manifest_no_service_worker.html");
589 run_loop.Run(); 609 run_loop.Run();
590 610
591 EXPECT_FALSE(tester->manifest().IsEmpty()); 611 EXPECT_FALSE(tester->manifest().IsEmpty());
592 EXPECT_FALSE(tester->manifest_url().is_empty()); 612 EXPECT_FALSE(tester->manifest_url().is_empty());
593 613
594 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 614 EXPECT_TRUE(tester->primary_icon_url().is_empty());
595 EXPECT_EQ(nullptr, tester->primary_icon()); 615 EXPECT_EQ(nullptr, tester->primary_icon());
596 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 616 EXPECT_TRUE(tester->badge_icon_url().is_empty());
597 EXPECT_EQ(nullptr, tester->badge_icon()); 617 EXPECT_EQ(nullptr, tester->badge_icon());
598 EXPECT_FALSE(tester->is_installable()); 618 EXPECT_FALSE(tester->is_installable());
599 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 619 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
620 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
600 } 621 }
601 622
602 // Fetch the full criteria should fail. 623 // Fetch the full criteria should fail.
603 { 624 {
604 base::RunLoop run_loop; 625 base::RunLoop run_loop;
605 std::unique_ptr<CallbackTester> tester( 626 std::unique_ptr<CallbackTester> tester(
606 new CallbackTester(run_loop.QuitClosure())); 627 new CallbackTester(run_loop.QuitClosure()));
607 628
608 RunInstallableManager(tester.get(), GetWebAppParams()); 629 RunInstallableManager(tester.get(), GetWebAppParams());
609 run_loop.Run(); 630 run_loop.Run();
610 631
611 EXPECT_FALSE(tester->manifest().IsEmpty()); 632 EXPECT_FALSE(tester->manifest().IsEmpty());
612 EXPECT_FALSE(tester->manifest_url().is_empty()); 633 EXPECT_FALSE(tester->manifest_url().is_empty());
613 634
614 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 635 EXPECT_TRUE(tester->primary_icon_url().is_empty());
615 EXPECT_EQ(nullptr, tester->primary_icon()); 636 EXPECT_EQ(nullptr, tester->primary_icon());
616 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 637 EXPECT_TRUE(tester->badge_icon_url().is_empty());
617 EXPECT_EQ(nullptr, tester->badge_icon()); 638 EXPECT_EQ(nullptr, tester->badge_icon());
618 EXPECT_FALSE(tester->is_installable()); 639 EXPECT_FALSE(tester->is_installable());
619 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); 640 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code());
641 EXPECT_EQ(GetStatus(),
642 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
620 } 643 }
621 } 644 }
622 645
623 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 646 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
624 CheckPageWithNoServiceWorkerFetchHandler) { 647 CheckPageWithNoServiceWorkerFetchHandler) {
625 base::RunLoop run_loop; 648 base::RunLoop run_loop;
626 std::unique_ptr<CallbackTester> tester( 649 std::unique_ptr<CallbackTester> tester(
627 new CallbackTester(run_loop.QuitClosure())); 650 new CallbackTester(run_loop.QuitClosure()));
628 651
629 NavigateAndRunInstallableManager( 652 NavigateAndRunInstallableManager(
630 tester.get(), GetWebAppParams(), 653 tester.get(), GetWebAppParams(),
631 "/banners/no_sw_fetch_handler_test_page.html"); 654 "/banners/no_sw_fetch_handler_test_page.html");
632 655
633 RunInstallableManager(tester.get(), GetWebAppParams()); 656 RunInstallableManager(tester.get(), GetWebAppParams());
634 run_loop.Run(); 657 run_loop.Run();
635 658
636 EXPECT_FALSE(tester->manifest().IsEmpty()); 659 EXPECT_FALSE(tester->manifest().IsEmpty());
637 EXPECT_FALSE(tester->manifest_url().is_empty()); 660 EXPECT_FALSE(tester->manifest_url().is_empty());
638 661
639 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 662 EXPECT_TRUE(tester->primary_icon_url().is_empty());
640 EXPECT_EQ(nullptr, tester->primary_icon()); 663 EXPECT_EQ(nullptr, tester->primary_icon());
641 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 664 EXPECT_TRUE(tester->badge_icon_url().is_empty());
642 EXPECT_EQ(nullptr, tester->badge_icon()); 665 EXPECT_EQ(nullptr, tester->badge_icon());
643 EXPECT_FALSE(tester->is_installable()); 666 EXPECT_FALSE(tester->is_installable());
644 EXPECT_EQ(NOT_OFFLINE_CAPABLE, tester->error_code()); 667 EXPECT_EQ(NOT_OFFLINE_CAPABLE, tester->error_code());
668 EXPECT_EQ(GetStatus(),
669 InstallabilityCheckStatus::COMPLETE_NON_PROGRESSIVE_WEB_APP);
645 } 670 }
646 671
647 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckDataUrlIcon) { 672 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckDataUrlIcon) {
648 // Verify that InstallableManager can handle data URL icons. 673 // Verify that InstallableManager can handle data URL icons.
649 base::RunLoop run_loop; 674 base::RunLoop run_loop;
650 std::unique_ptr<CallbackTester> tester( 675 std::unique_ptr<CallbackTester> tester(
651 new CallbackTester(run_loop.QuitClosure())); 676 new CallbackTester(run_loop.QuitClosure()));
652 677
653 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 678 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
654 GetURLOfPageWithServiceWorkerAndManifest( 679 GetURLOfPageWithServiceWorkerAndManifest(
655 "/banners/manifest_data_url_icon.json")); 680 "/banners/manifest_data_url_icon.json"));
656 run_loop.Run(); 681 run_loop.Run();
657 682
658 EXPECT_FALSE(tester->manifest().IsEmpty()); 683 EXPECT_FALSE(tester->manifest().IsEmpty());
659 EXPECT_FALSE(tester->manifest_url().is_empty()); 684 EXPECT_FALSE(tester->manifest_url().is_empty());
660 685
661 EXPECT_FALSE(tester->primary_icon_url().is_empty()); 686 EXPECT_FALSE(tester->primary_icon_url().is_empty());
662 EXPECT_NE(nullptr, tester->primary_icon()); 687 EXPECT_NE(nullptr, tester->primary_icon());
663 EXPECT_EQ(144, tester->primary_icon()->width()); 688 EXPECT_EQ(144, tester->primary_icon()->width());
664 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 689 EXPECT_TRUE(tester->badge_icon_url().is_empty());
665 EXPECT_EQ(nullptr, tester->badge_icon()); 690 EXPECT_EQ(nullptr, tester->badge_icon());
666 EXPECT_TRUE(tester->is_installable()); 691 EXPECT_TRUE(tester->is_installable());
667 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 692 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
693 EXPECT_EQ(GetStatus(),
694 InstallabilityCheckStatus::COMPLETE_PROGRESSIVE_WEB_APP);
668 } 695 }
669 696
670 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 697 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
671 CheckManifestCorruptedIcon) { 698 CheckManifestCorruptedIcon) {
672 // Verify that the returned InstallableData::primary_icon is null if the web 699 // Verify that the returned InstallableData::primary_icon is null if the web
673 // manifest points to a corrupt primary icon. 700 // manifest points to a corrupt primary icon.
674 base::RunLoop run_loop; 701 base::RunLoop run_loop;
675 std::unique_ptr<CallbackTester> tester( 702 std::unique_ptr<CallbackTester> tester(
676 new CallbackTester(run_loop.QuitClosure())); 703 new CallbackTester(run_loop.QuitClosure()));
677 704
678 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(), 705 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(),
679 GetURLOfPageWithServiceWorkerAndManifest( 706 GetURLOfPageWithServiceWorkerAndManifest(
680 "/banners/manifest_bad_icon.json")); 707 "/banners/manifest_bad_icon.json"));
681 run_loop.Run(); 708 run_loop.Run();
682 709
683 EXPECT_FALSE(tester->manifest().IsEmpty()); 710 EXPECT_FALSE(tester->manifest().IsEmpty());
684 EXPECT_FALSE(tester->manifest_url().is_empty()); 711 EXPECT_FALSE(tester->manifest_url().is_empty());
685 EXPECT_TRUE(tester->primary_icon_url().is_empty()); 712 EXPECT_TRUE(tester->primary_icon_url().is_empty());
686 EXPECT_EQ(nullptr, tester->primary_icon()); 713 EXPECT_EQ(nullptr, tester->primary_icon());
687 EXPECT_TRUE(tester->badge_icon_url().is_empty()); 714 EXPECT_TRUE(tester->badge_icon_url().is_empty());
688 EXPECT_EQ(nullptr, tester->badge_icon()); 715 EXPECT_EQ(nullptr, tester->badge_icon());
689 EXPECT_FALSE(tester->is_installable()); 716 EXPECT_FALSE(tester->is_installable());
690 EXPECT_EQ(NO_ICON_AVAILABLE, tester->error_code()); 717 EXPECT_EQ(NO_ICON_AVAILABLE, tester->error_code());
718 EXPECT_EQ(GetStatus(), InstallabilityCheckStatus::NOT_STARTED);
691 } 719 }
692 720
693 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 721 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
694 CheckChangeInIconDimensions) { 722 CheckChangeInIconDimensions) {
695 // Verify that a follow-up request for a primary icon with a different size 723 // Verify that a follow-up request for a primary icon with a different size
696 // works. 724 // works.
697 { 725 {
698 base::RunLoop run_loop; 726 base::RunLoop run_loop;
699 std::unique_ptr<CallbackTester> tester( 727 std::unique_ptr<CallbackTester> tester(
700 new CallbackTester(run_loop.QuitClosure())); 728 new CallbackTester(run_loop.QuitClosure()));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 CheckNestedCallsToGetData) { 813 CheckNestedCallsToGetData) {
786 // Verify that we can call GetData while in a callback from GetData. 814 // Verify that we can call GetData while in a callback from GetData.
787 base::RunLoop run_loop; 815 base::RunLoop run_loop;
788 InstallableParams params = GetWebAppParams(); 816 InstallableParams params = GetWebAppParams();
789 std::unique_ptr<NestedCallbackTester> tester( 817 std::unique_ptr<NestedCallbackTester> tester(
790 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); 818 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure()));
791 819
792 tester->Run(); 820 tester->Run();
793 run_loop.Run(); 821 run_loop.Run();
794 } 822 }
OLDNEW
« no previous file with comments | « chrome/browser/installable/installable_manager.cc ('k') | chrome/browser/installable/installable_metrics.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698