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..d5c3684e9f521ad67fc806c3a5f630556a71a95d 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,50 @@ TEST_F(BackgroundApplicationListModelTest, PushMessagingTest) { |
ASSERT_EQ(0U, model->size()); |
} |
+// Verifies that an ephemeral app 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); |
+ scoped_refptr<Extension> background = CreateExtension("background", true); |
+ |
+ // 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()); |
+ // An ephemeral app with the background permission should not trigger |
+ // background mode. |
+ AddEphemeralApp(background.get(), service); |
+ ASSERT_FALSE(IsBackgroundApp(*background.get())); |
+ ASSERT_EQ(3U, 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*/); |
Andrew T Wilson (Slow)
2014/07/23 13:34:32
Ideally, we'd also have a BackgroundModeManagerTes
|
+ ASSERT_TRUE(IsBackgroundApp(*ephemeral.get())); |
+ ASSERT_EQ(3U, service->extensions()->size()); |
+ ASSERT_EQ(2U, model->size()); |
+} |
// With minimal test logic, verifies behavior with dynamic permissions. |
TEST_F(BackgroundApplicationListModelTest, AddRemovePermissionsTest) { |