diff options
Diffstat (limited to 'chrome/browser/extensions/apps_promo_unittest.cc')
-rw-r--r-- | chrome/browser/extensions/apps_promo_unittest.cc | 183 |
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 |