OLD | NEW |
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/chromeos/note_taking_helper.h" | 5 #include "chrome/browser/chromeos/note_taking_helper.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 apps = helper()->GetAvailableApps(profile()); | 356 apps = helper()->GetAvailableApps(profile()); |
357 ASSERT_EQ(2u, apps.size()); | 357 ASSERT_EQ(2u, apps.size()); |
358 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 358 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
359 false /* preferred */, | 359 false /* preferred */, |
360 NoteTakingLockScreenSupport::kNotSupported), | 360 NoteTakingLockScreenSupport::kNotSupported), |
361 GetAppString(apps[0])); | 361 GetAppString(apps[0])); |
362 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, | 362 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
363 kProdKeepAppName, false /* preferred */, | 363 kProdKeepAppName, false /* preferred */, |
364 NoteTakingLockScreenSupport::kNotSupported), | 364 NoteTakingLockScreenSupport::kNotSupported), |
365 GetAppString(apps[1])); | 365 GetAppString(apps[1])); |
| 366 EXPECT_FALSE(helper()->GetPreferredChromeAppInfo(profile())); |
366 | 367 |
367 // Now install a random extension and check that it's ignored. | 368 // Now install a random extension and check that it's ignored. |
368 const extensions::ExtensionId kOtherId = crx_file::id_util::GenerateId("a"); | 369 const extensions::ExtensionId kOtherId = crx_file::id_util::GenerateId("a"); |
369 const std::string kOtherName = "Some Other App"; | 370 const std::string kOtherName = "Some Other App"; |
370 scoped_refptr<const extensions::Extension> other_extension = | 371 scoped_refptr<const extensions::Extension> other_extension = |
371 CreateExtension(kOtherId, kOtherName); | 372 CreateExtension(kOtherId, kOtherName); |
372 InstallExtension(other_extension.get(), profile()); | 373 InstallExtension(other_extension.get(), profile()); |
373 apps = helper()->GetAvailableApps(profile()); | 374 apps = helper()->GetAvailableApps(profile()); |
374 ASSERT_EQ(2u, apps.size()); | 375 ASSERT_EQ(2u, apps.size()); |
375 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 376 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
376 false /* preferred */, | 377 false /* preferred */, |
377 NoteTakingLockScreenSupport::kNotSupported), | 378 NoteTakingLockScreenSupport::kNotSupported), |
378 GetAppString(apps[0])); | 379 GetAppString(apps[0])); |
379 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, | 380 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
380 kProdKeepAppName, false /* preferred */, | 381 kProdKeepAppName, false /* preferred */, |
381 NoteTakingLockScreenSupport::kNotSupported), | 382 NoteTakingLockScreenSupport::kNotSupported), |
382 GetAppString(apps[1])); | 383 GetAppString(apps[1])); |
| 384 EXPECT_FALSE(helper()->GetPreferredChromeAppInfo(profile())); |
383 | 385 |
384 // Mark the prod version as preferred. | 386 // Mark the prod version as preferred. |
385 helper()->SetPreferredApp(profile(), NoteTakingHelper::kProdKeepExtensionId); | 387 helper()->SetPreferredApp(profile(), NoteTakingHelper::kProdKeepExtensionId); |
386 apps = helper()->GetAvailableApps(profile()); | 388 apps = helper()->GetAvailableApps(profile()); |
387 ASSERT_EQ(2u, apps.size()); | 389 ASSERT_EQ(2u, apps.size()); |
388 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 390 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
389 false /* preferred */, | 391 false /* preferred */, |
390 NoteTakingLockScreenSupport::kNotSupported), | 392 NoteTakingLockScreenSupport::kNotSupported), |
391 GetAppString(apps[0])); | 393 GetAppString(apps[0])); |
392 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, | 394 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
393 kProdKeepAppName, true /* preferred */, | 395 kProdKeepAppName, true /* preferred */, |
394 NoteTakingLockScreenSupport::kNotSupported), | 396 NoteTakingLockScreenSupport::kNotSupported), |
395 GetAppString(apps[1])); | 397 GetAppString(apps[1])); |
| 398 |
| 399 std::unique_ptr<NoteTakingAppInfo> preferred_info = |
| 400 helper()->GetPreferredChromeAppInfo(profile()); |
| 401 ASSERT_TRUE(preferred_info); |
| 402 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
| 403 kProdKeepAppName, true /* preferred */, |
| 404 NoteTakingLockScreenSupport::kNotSupported), |
| 405 GetAppString(*preferred_info)); |
396 } | 406 } |
397 | 407 |
398 TEST_P(NoteTakingHelperTest, ListChromeAppsWithLockScreenNotesSupported) { | 408 TEST_P(NoteTakingHelperTest, ListChromeAppsWithLockScreenNotesSupported) { |
399 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); | 409 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); |
400 | 410 |
401 ASSERT_FALSE(helper()->IsAppAvailable(profile())); | 411 ASSERT_FALSE(helper()->IsAppAvailable(profile())); |
402 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); | 412 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); |
403 | 413 |
404 std::unique_ptr<base::Value> lock_disabled_action_handler = | 414 std::unique_ptr<base::Value> lock_disabled_action_handler = |
405 extensions::ListBuilder() | 415 extensions::ListBuilder() |
406 .Append(app_runtime::ToString(app_runtime::ACTION_TYPE_NEW_NOTE)) | 416 .Append(app_runtime::ToString(app_runtime::ACTION_TYPE_NEW_NOTE)) |
407 .Build(); | 417 .Build(); |
408 | 418 |
409 // Install Keep app that does not support lock screen note taking - it should | 419 // Install Keep app that does not support lock screen note taking - it should |
410 // be reported not to support lock screen note taking. | 420 // be reported not to support lock screen note taking. |
411 scoped_refptr<const extensions::Extension> prod_extension = CreateExtension( | 421 scoped_refptr<const extensions::Extension> prod_extension = CreateExtension( |
412 NoteTakingHelper::kProdKeepExtensionId, kProdKeepAppName, | 422 NoteTakingHelper::kProdKeepExtensionId, kProdKeepAppName, |
413 nullptr /* permissions */, std::move(lock_disabled_action_handler)); | 423 nullptr /* permissions */, std::move(lock_disabled_action_handler)); |
414 InstallExtension(prod_extension.get(), profile()); | 424 InstallExtension(prod_extension.get(), profile()); |
415 EXPECT_TRUE(helper()->IsAppAvailable(profile())); | 425 EXPECT_TRUE(helper()->IsAppAvailable(profile())); |
416 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); | 426 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); |
417 ASSERT_EQ(1u, apps.size()); | 427 ASSERT_EQ(1u, apps.size()); |
418 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, | 428 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
419 kProdKeepAppName, false /* preferred */, | 429 kProdKeepAppName, false /* preferred */, |
420 NoteTakingLockScreenSupport::kNotSupported), | 430 NoteTakingLockScreenSupport::kNotSupported), |
421 GetAppString(apps[0])); | 431 GetAppString(apps[0])); |
| 432 EXPECT_FALSE(helper()->GetPreferredChromeAppInfo(profile())); |
422 | 433 |
423 std::unique_ptr<base::Value> lock_enabled_action_handler = | 434 std::unique_ptr<base::Value> lock_enabled_action_handler = |
424 extensions::ListBuilder() | 435 extensions::ListBuilder() |
425 .Append(extensions::DictionaryBuilder() | 436 .Append(extensions::DictionaryBuilder() |
426 .Set("action", app_runtime::ToString( | 437 .Set("action", app_runtime::ToString( |
427 app_runtime::ACTION_TYPE_NEW_NOTE)) | 438 app_runtime::ACTION_TYPE_NEW_NOTE)) |
428 .SetBoolean("enabled_on_lock_screen", true) | 439 .SetBoolean("enabled_on_lock_screen", true) |
429 .Build()) | 440 .Build()) |
430 .Build(); | 441 .Build(); |
431 | 442 |
432 // Install additional Keep app - one that supports lock screen note taking. | 443 // Install additional Keep app - one that supports lock screen note taking. |
433 // This app should be reported to support note taking (given that | 444 // This app should be reported to support note taking (given that |
434 // enable-lock-screen-apps flag is set). | 445 // enable-lock-screen-apps flag is set). |
435 scoped_refptr<const extensions::Extension> dev_extension = | 446 scoped_refptr<const extensions::Extension> dev_extension = |
436 CreateExtension(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 447 CreateExtension(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
437 extensions::ListBuilder().Append("lockScreen").Build(), | 448 extensions::ListBuilder().Append("lockScreen").Build(), |
438 std::move(lock_enabled_action_handler)); | 449 std::move(lock_enabled_action_handler)); |
439 InstallExtension(dev_extension.get(), profile()); | 450 InstallExtension(dev_extension.get(), profile()); |
440 apps = helper()->GetAvailableApps(profile()); | 451 apps = helper()->GetAvailableApps(profile()); |
441 ASSERT_EQ(2u, apps.size()); | 452 ASSERT_EQ(2u, apps.size()); |
442 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 453 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
443 false /* preferred */, | 454 false /* preferred */, |
444 NoteTakingLockScreenSupport::kSupported), | 455 NoteTakingLockScreenSupport::kSupported), |
445 GetAppString(apps[0])); | 456 GetAppString(apps[0])); |
446 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, | 457 EXPECT_EQ(GetAppString(NoteTakingHelper::kProdKeepExtensionId, |
447 kProdKeepAppName, false /* preferred */, | 458 kProdKeepAppName, false /* preferred */, |
448 NoteTakingLockScreenSupport::kNotSupported), | 459 NoteTakingLockScreenSupport::kNotSupported), |
449 GetAppString(apps[1])); | 460 GetAppString(apps[1])); |
| 461 EXPECT_FALSE(helper()->GetPreferredChromeAppInfo(profile())); |
450 } | 462 } |
451 | 463 |
452 TEST_P(NoteTakingHelperTest, PreferredAppEnabledOnLockScreen) { | 464 TEST_P(NoteTakingHelperTest, PreferredAppEnabledOnLockScreen) { |
453 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); | 465 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); |
454 | 466 |
455 ASSERT_FALSE(helper()->IsAppAvailable(profile())); | 467 ASSERT_FALSE(helper()->IsAppAvailable(profile())); |
456 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); | 468 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); |
457 | 469 |
458 std::unique_ptr<base::Value> lock_enabled_action_handler = | 470 std::unique_ptr<base::Value> lock_enabled_action_handler = |
459 extensions::ListBuilder() | 471 extensions::ListBuilder() |
(...skipping 11 matching lines...) Expand all Loading... |
471 std::move(lock_enabled_action_handler)); | 483 std::move(lock_enabled_action_handler)); |
472 InstallExtension(dev_extension.get(), profile()); | 484 InstallExtension(dev_extension.get(), profile()); |
473 | 485 |
474 // Verify that the app is reported to support lock screen note taking. | 486 // Verify that the app is reported to support lock screen note taking. |
475 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); | 487 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); |
476 ASSERT_EQ(1u, apps.size()); | 488 ASSERT_EQ(1u, apps.size()); |
477 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 489 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
478 false /* preferred */, | 490 false /* preferred */, |
479 NoteTakingLockScreenSupport::kSupported), | 491 NoteTakingLockScreenSupport::kSupported), |
480 GetAppString(apps[0])); | 492 GetAppString(apps[0])); |
| 493 EXPECT_FALSE(helper()->GetPreferredChromeAppInfo(profile())); |
481 | 494 |
482 // When the lock screen note taking pref is set and the Keep app is set as the | 495 // When the lock screen note taking pref is set and the Keep app is set as the |
483 // preferred note taking app, the app should be reported as selected as lock | 496 // preferred note taking app, the app should be reported as selected as lock |
484 // screen note taking app. | 497 // screen note taking app. |
485 helper()->SetPreferredApp(profile(), NoteTakingHelper::kDevKeepExtensionId); | 498 helper()->SetPreferredApp(profile(), NoteTakingHelper::kDevKeepExtensionId); |
486 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen, | 499 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen, |
487 true); | 500 true); |
488 apps = helper()->GetAvailableApps(profile()); | 501 apps = helper()->GetAvailableApps(profile()); |
489 ASSERT_EQ(1u, apps.size()); | 502 ASSERT_EQ(1u, apps.size()); |
490 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 503 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
491 true /* preferred */, | 504 true /* preferred */, |
492 NoteTakingLockScreenSupport::kSelected), | 505 NoteTakingLockScreenSupport::kSelected), |
493 GetAppString(apps[0])); | 506 GetAppString(apps[0])); |
| 507 std::unique_ptr<NoteTakingAppInfo> preferred_info = |
| 508 helper()->GetPreferredChromeAppInfo(profile()); |
| 509 ASSERT_TRUE(preferred_info); |
| 510 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
| 511 true /* preferred */, |
| 512 NoteTakingLockScreenSupport::kSelected), |
| 513 GetAppString(*preferred_info)); |
494 | 514 |
495 // When lock screen note taking pref is reset, the app should not be reported | 515 // When lock screen note taking pref is reset, the app should not be reported |
496 // as selected on lock screen. | 516 // as selected on lock screen. |
497 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen, | 517 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen, |
498 false); | 518 false); |
499 apps = helper()->GetAvailableApps(profile()); | 519 apps = helper()->GetAvailableApps(profile()); |
500 ASSERT_EQ(1u, apps.size()); | 520 ASSERT_EQ(1u, apps.size()); |
501 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, | 521 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
502 true /* preferred */, | 522 true /* preferred */, |
503 NoteTakingLockScreenSupport::kSupported), | 523 NoteTakingLockScreenSupport::kSupported), |
504 GetAppString(apps[0])); | 524 GetAppString(apps[0])); |
| 525 preferred_info = helper()->GetPreferredChromeAppInfo(profile()); |
| 526 ASSERT_TRUE(preferred_info); |
| 527 EXPECT_EQ(GetAppString(NoteTakingHelper::kDevKeepExtensionId, kDevKeepAppName, |
| 528 true /* preferred */, |
| 529 NoteTakingLockScreenSupport::kSupported), |
| 530 GetAppString(*preferred_info)); |
505 } | 531 } |
506 | 532 |
507 TEST_P(NoteTakingHelperTest, PreferredAppWithNoLockScreenPermission) { | 533 TEST_P(NoteTakingHelperTest, PreferredAppWithNoLockScreenPermission) { |
508 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); | 534 Init(ENABLE_PALETTE | ENABLE_LOCK_SCREEN_APPS); |
509 | 535 |
510 ASSERT_FALSE(helper()->IsAppAvailable(profile())); | 536 ASSERT_FALSE(helper()->IsAppAvailable(profile())); |
511 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); | 537 ASSERT_TRUE(helper()->GetAvailableApps(profile()).empty()); |
512 | 538 |
513 std::unique_ptr<base::Value> lock_enabled_action_handler = | 539 std::unique_ptr<base::Value> lock_enabled_action_handler = |
514 extensions::ListBuilder() | 540 extensions::ListBuilder() |
(...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
920 EXPECT_TRUE(helper()->IsAppAvailable(profile())); | 946 EXPECT_TRUE(helper()->IsAppAvailable(profile())); |
921 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); | 947 std::vector<NoteTakingAppInfo> apps = helper()->GetAvailableApps(profile()); |
922 ASSERT_EQ(2u, apps.size()); | 948 ASSERT_EQ(2u, apps.size()); |
923 EXPECT_EQ(GetAppString(kPackage1, kName1, false /* preferred */, | 949 EXPECT_EQ(GetAppString(kPackage1, kName1, false /* preferred */, |
924 NoteTakingLockScreenSupport::kNotSupported), | 950 NoteTakingLockScreenSupport::kNotSupported), |
925 GetAppString(apps[0])); | 951 GetAppString(apps[0])); |
926 EXPECT_EQ(GetAppString(kPackage2, kName2, false /* preferred */, | 952 EXPECT_EQ(GetAppString(kPackage2, kName2, false /* preferred */, |
927 NoteTakingLockScreenSupport::kNotSupported), | 953 NoteTakingLockScreenSupport::kNotSupported), |
928 GetAppString(apps[1])); | 954 GetAppString(apps[1])); |
929 | 955 |
| 956 helper()->SetPreferredApp(profile(), kPackage1); |
| 957 |
| 958 apps = helper()->GetAvailableApps(profile()); |
| 959 ASSERT_EQ(2u, apps.size()); |
| 960 EXPECT_EQ(GetAppString(kPackage1, kName1, true /* preferred */, |
| 961 NoteTakingLockScreenSupport::kNotSupported), |
| 962 GetAppString(apps[0])); |
| 963 EXPECT_EQ(GetAppString(kPackage2, kName2, false /* preferred */, |
| 964 NoteTakingLockScreenSupport::kNotSupported), |
| 965 GetAppString(apps[1])); |
| 966 |
| 967 std::unique_ptr<NoteTakingAppInfo> preferred_info = |
| 968 helper()->GetPreferredChromeAppInfo(profile()); |
| 969 EXPECT_FALSE(preferred_info); |
| 970 |
930 // TODO(victorhsieh): Opt-out on Persistent ARC is special. Skip until | 971 // TODO(victorhsieh): Opt-out on Persistent ARC is special. Skip until |
931 // implemented. | 972 // implemented. |
932 if (arc::ShouldArcAlwaysStart()) | 973 if (arc::ShouldArcAlwaysStart()) |
933 return; | 974 return; |
934 // Disable Play Store and check that the apps are no longer returned. | 975 // Disable Play Store and check that the apps are no longer returned. |
935 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, false); | 976 profile()->GetPrefs()->SetBoolean(prefs::kArcEnabled, false); |
936 EXPECT_FALSE(helper()->play_store_enabled()); | 977 EXPECT_FALSE(helper()->play_store_enabled()); |
937 EXPECT_FALSE(helper()->android_apps_received()); | 978 EXPECT_FALSE(helper()->android_apps_received()); |
938 EXPECT_FALSE(helper()->IsAppAvailable(profile())); | 979 EXPECT_FALSE(helper()->IsAppAvailable(profile())); |
939 EXPECT_TRUE(helper()->GetAvailableApps(profile()).empty()); | 980 EXPECT_TRUE(helper()->GetAvailableApps(profile()).empty()); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 InitExtensionService(second_profile); | 1151 InitExtensionService(second_profile); |
1111 EXPECT_EQ(0, observer.num_updates()); | 1152 EXPECT_EQ(0, observer.num_updates()); |
1112 InstallExtension(keep_extension.get(), second_profile); | 1153 InstallExtension(keep_extension.get(), second_profile); |
1113 EXPECT_EQ(1, observer.num_updates()); | 1154 EXPECT_EQ(1, observer.num_updates()); |
1114 UninstallExtension(keep_extension.get(), second_profile); | 1155 UninstallExtension(keep_extension.get(), second_profile); |
1115 EXPECT_EQ(2, observer.num_updates()); | 1156 EXPECT_EQ(2, observer.num_updates()); |
1116 profile_manager_->DeleteTestingProfile(kSecondProfileName); | 1157 profile_manager_->DeleteTestingProfile(kSecondProfileName); |
1117 } | 1158 } |
1118 | 1159 |
1119 } // namespace chromeos | 1160 } // namespace chromeos |
OLD | NEW |