| Index: chrome/browser/background/background_application_list_model_unittest.cc
|
| diff --git a/chrome/browser/background/background_application_list_model_unittest.cc b/chrome/browser/background/background_application_list_model_unittest.cc
|
| index a8c817942175bad9553120e77c7882b0c8544e9b..a9772a2d29393de6ceb4b411eb26d724b93ee2f2 100644
|
| --- a/chrome/browser/background/background_application_list_model_unittest.cc
|
| +++ b/chrome/browser/background/background_application_list_model_unittest.cc
|
| @@ -20,6 +20,7 @@
|
| #include "chrome/test/base/testing_profile.h"
|
| #include "content/public/browser/notification_registrar.h"
|
| #include "content/public/browser/notification_types.h"
|
| +#include "extensions/browser/extension_prefs.h"
|
| #include "extensions/browser/extension_system.h"
|
| #include "extensions/common/extension.h"
|
| #include "extensions/common/manifest_constants.h"
|
| @@ -155,6 +156,20 @@ void RemoveBackgroundPermission(ExtensionService* service,
|
| extensions::PermissionsUpdater(service->profile()).RemovePermissions(
|
| extension, extension->permissions_data()->active_permissions().get());
|
| }
|
| +
|
| +void AddEphemeralApp(const Extension* extension, ExtensionService* service) {
|
| + extensions::ExtensionPrefs* prefs =
|
| + extensions::ExtensionPrefs::Get(service->profile());
|
| + ASSERT_TRUE(prefs);
|
| + prefs->OnExtensionInstalled(extension,
|
| + extensions::Extension::ENABLED,
|
| + syncer::StringOrdinal(),
|
| + extensions::kInstallFlagIsEphemeral,
|
| + std::string());
|
| +
|
| + service->AddExtension(extension);
|
| +}
|
| +
|
| } // namespace
|
|
|
| // Crashes on Mac tryslaves.
|
| @@ -315,7 +330,44 @@ TEST_F(BackgroundApplicationListModelTest, PushMessagingTest) {
|
| ASSERT_EQ(0U, model->size());
|
| }
|
|
|
| +// Verifies that an ephemeral app with push messaging permissions cannot trigger
|
| +// background mode.
|
| +TEST_F(BackgroundApplicationListModelTest, EphemeralAppTest) {
|
| + InitializeAndLoadEmptyExtensionService();
|
| + ExtensionService* service = extensions::ExtensionSystem::Get(profile_.get())->
|
| + extension_service();
|
| + ASSERT_TRUE(service);
|
| + ASSERT_TRUE(service->is_ready());
|
| + ASSERT_TRUE(service->extensions());
|
| + ASSERT_TRUE(service->extensions()->is_empty());
|
| + scoped_ptr<BackgroundApplicationListModel> model(
|
| + new BackgroundApplicationListModel(profile_.get()));
|
| + ASSERT_EQ(0U, model->size());
|
| +
|
| + scoped_refptr<Extension> installed =
|
| + CreateExtensionBase("installed", false, PUSH_MESSAGING_PERMISSION);
|
| + scoped_refptr<Extension> ephemeral =
|
| + CreateExtensionBase("ephemeral", false, PUSH_MESSAGING_PERMISSION);
|
|
|
| + // Installed app with push messaging permissions can trigger background mode.
|
| + ASSERT_TRUE(IsBackgroundApp(*installed.get()));
|
| + service->AddExtension(installed.get());
|
| + ASSERT_EQ(1U, service->extensions()->size());
|
| + ASSERT_EQ(1U, model->size());
|
| + // An ephemeral app with push messaging permissions should not trigger
|
| + // background mode.
|
| + AddEphemeralApp(ephemeral.get(), service);
|
| + ASSERT_FALSE(IsBackgroundApp(*ephemeral.get()));
|
| + ASSERT_EQ(2U, service->extensions()->size());
|
| + ASSERT_EQ(1U, model->size());
|
| +
|
| + // If the ephemeral app becomes promoted to an installed app, it can now
|
| + // trigger background mode.
|
| + service->PromoteEphemeralApp(ephemeral.get(), false /*from sync*/);
|
| + ASSERT_TRUE(IsBackgroundApp(*ephemeral.get()));
|
| + ASSERT_EQ(2U, service->extensions()->size());
|
| + ASSERT_EQ(2U, model->size());
|
| +}
|
|
|
| // With minimal test logic, verifies behavior with dynamic permissions.
|
| TEST_F(BackgroundApplicationListModelTest, AddRemovePermissionsTest) {
|
|
|