summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/apps_promo_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/apps_promo_unittest.cc')
-rw-r--r--chrome/browser/extensions/apps_promo_unittest.cc183
1 files changed, 183 insertions, 0 deletions
diff --git a/chrome/browser/extensions/apps_promo_unittest.cc b/chrome/browser/extensions/apps_promo_unittest.cc
new file mode 100644
index 0000000..3816b78
--- /dev/null
+++ b/chrome/browser/extensions/apps_promo_unittest.cc
@@ -0,0 +1,183 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/logging.h"
+#include "chrome/browser/extensions/apps_promo.h"
+#include "chrome/browser/prefs/browser_prefs.h"
+#include "chrome/browser/ui/webui/shown_sections_handler.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/testing_browser_process.h"
+#include "chrome/test/testing_pref_service.h"
+#include "googleurl/src/gurl.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+const char kPromoId[] = "23123123";
+const char kPromoHeader[] = "Get great apps!";
+const char kPromoButton[] = "Click for apps!";
+const char kPromoLink[] = "http://apps.com";
+const char kPromoExpire[] = "No thanks.";
+
+} // namespace
+
+class ExtensionAppsPromo : public testing::Test {
+ public:
+ TestingPrefService* local_state() { return &local_state_; }
+ TestingPrefService* prefs() { return &prefs_; }
+ AppsPromo* apps_promo() { return apps_promo_; }
+
+ protected:
+ explicit ExtensionAppsPromo();
+ virtual ~ExtensionAppsPromo();
+
+ // testing::Test
+ virtual void SetUp();
+ virtual void TearDown();
+
+ private:
+ TestingPrefService local_state_;
+ TestingPrefService prefs_;
+ AppsPromo* apps_promo_;
+};
+
+ExtensionAppsPromo::ExtensionAppsPromo() :
+ apps_promo_(new AppsPromo(&prefs_)) {
+}
+
+ExtensionAppsPromo::~ExtensionAppsPromo() {
+ delete apps_promo_;
+}
+
+void ExtensionAppsPromo::SetUp() {
+ browser::RegisterLocalState(&local_state_);
+ browser::RegisterUserPrefs(&prefs_);
+
+ TestingBrowserProcess* testing_browser_process =
+ static_cast<TestingBrowserProcess*>(g_browser_process);
+ testing_browser_process->SetPrefService(&local_state_);
+}
+
+void ExtensionAppsPromo::TearDown() {
+ TestingBrowserProcess* testing_browser_process =
+ static_cast<TestingBrowserProcess*>(g_browser_process);
+ testing_browser_process->SetPrefService(NULL);
+}
+
+// TODO(dpolukhin): On Chrome OS all apps are installed via external extensions,
+// and the web store promo is never shown.
+#if !defined(OS_CHROMEOS)
+TEST_F(ExtensionAppsPromo, HappyPath) {
+ const ExtensionIdSet& default_app_ids = apps_promo()->old_default_apps();
+
+ EXPECT_GT(default_app_ids.size(), 0u);
+
+ // The promo counter should default to the max, since we only use the counter
+ // if they were installed from older versions of Chrome.
+ EXPECT_EQ(AppsPromo::kDefaultAppsCounterMax + 1,
+ apps_promo()->GetPromoCounter());
+
+ // The app launcher and promo should not be shown if there are no extensions
+ // installed and no promo is set.
+ ExtensionIdSet installed_ids;
+ bool promo_just_expired = false;
+ EXPECT_FALSE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_FALSE(apps_promo()->ShouldShowAppLauncher(installed_ids));
+ EXPECT_FALSE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+
+ // Once the promo is set, we show both the promo and app launcher.
+ AppsPromo::SetPromo(
+ kPromoId, kPromoHeader, kPromoButton, GURL(kPromoLink), kPromoExpire);
+
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_TRUE(apps_promo()->ShouldShowAppLauncher(installed_ids));
+ EXPECT_TRUE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+
+
+ // Now install an app and the promo should not be shown.
+ installed_ids.insert(*(default_app_ids.begin()));
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_TRUE(apps_promo()->ShouldShowAppLauncher(installed_ids));
+ EXPECT_FALSE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+
+ // Even if the user installs the exact set of default apps, we still don't
+ // show the promo.
+ installed_ids = default_app_ids;
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_TRUE(apps_promo()->ShouldShowAppLauncher(installed_ids));
+ EXPECT_FALSE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+
+ // If the user then uninstalls the apps, the app launcher should remain
+ // and the promo should return.
+ installed_ids.clear();
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_TRUE(apps_promo()->ShouldShowAppLauncher(installed_ids));
+ EXPECT_TRUE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+}
+
+// Tests get and set of promo content.
+TEST_F(ExtensionAppsPromo, PromoPrefs) {
+ // Store a promo....
+ AppsPromo::SetPromo(
+ kPromoId, kPromoHeader, kPromoButton, GURL(kPromoLink), kPromoExpire);
+
+ // ... then make sure AppsPromo can access it.
+ EXPECT_EQ(kPromoId, AppsPromo::GetPromoId());
+ EXPECT_EQ(kPromoHeader, AppsPromo::GetPromoHeaderText());
+ EXPECT_EQ(kPromoButton, AppsPromo::GetPromoButtonText());
+ EXPECT_EQ(GURL(kPromoLink), AppsPromo::GetPromoLink());
+ EXPECT_EQ(kPromoExpire, AppsPromo::GetPromoExpireText());
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+
+ AppsPromo::ClearPromo();
+ EXPECT_EQ("", AppsPromo::GetPromoId());
+ EXPECT_EQ("", AppsPromo::GetPromoHeaderText());
+ EXPECT_EQ("", AppsPromo::GetPromoButtonText());
+ EXPECT_EQ(GURL(""), AppsPromo::GetPromoLink());
+ EXPECT_EQ("", AppsPromo::GetPromoExpireText());
+ EXPECT_FALSE(AppsPromo::IsPromoSupportedForLocale());
+}
+
+// Tests that the apps section is maxmized when showing a promo for the first
+// time.
+TEST_F(ExtensionAppsPromo, UpdatePromoFocus) {
+ ExtensionIdSet installed_ids;
+
+ bool promo_just_expired = false;
+ EXPECT_FALSE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ EXPECT_FALSE(promo_just_expired);
+
+ // Set the promo content.
+ AppsPromo::SetPromo(
+ kPromoId, kPromoHeader, kPromoButton, GURL(kPromoLink), kPromoExpire);
+
+ // After asking if we should show the promo, the
+ EXPECT_TRUE(AppsPromo::IsPromoSupportedForLocale());
+ EXPECT_TRUE(apps_promo()->ShouldShowPromo(installed_ids,
+ &promo_just_expired));
+ apps_promo()->MaximizeAppsIfFirstView();
+
+ EXPECT_TRUE(
+ (ShownSectionsHandler::GetShownSections(prefs()) & APPS) != 0);
+ EXPECT_FALSE(
+ (ShownSectionsHandler::GetShownSections(prefs()) & THUMB) != 0);
+
+ apps_promo()->HidePromo();
+
+ EXPECT_TRUE((ShownSectionsHandler::GetShownSections(prefs()) &
+ (MENU_APPS | THUMB)) != 0);
+}
+#endif // OS_CHROMEOS