Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/string_util.h"
      6 #include "chrome/browser/extensions/extension_browsertest.h"
      7 #include "chrome/browser/extensions/extension_service.h"
      8 #include "chrome/browser/extensions/theme_installed_infobar_delegate.h"
      9 #include "chrome/browser/profiles/profile.h"
     10 #include "chrome/browser/ui/browser.h"
     11 #include "chrome/browser/themes/theme_service_factory.h"
     12 #include "chrome/test/ui_test_utils.h"
     13 #include "content/browser/tab_contents/tab_contents.h"
     14 
     15 namespace {
     16 
     17 }  // namespace
     18 
     19 class ExtensionInstallUIBrowserTest : public ExtensionBrowserTest {
     20  public:
     21   // Checks that a theme info bar is currently visible and issues an undo to
     22   // revert to the previous theme.
     23   void VerifyThemeInfoBarAndUndoInstall() {
     24     TabContents* tab_contents = browser()->GetSelectedTabContents();
     25     ASSERT_TRUE(tab_contents);
     26     ASSERT_EQ(1U, tab_contents->infobar_count());
     27     ConfirmInfoBarDelegate* delegate =
     28         tab_contents->GetInfoBarDelegateAt(0)->AsConfirmInfoBarDelegate();
     29     ASSERT_TRUE(delegate);
     30     delegate->Cancel();
     31     ASSERT_EQ(0U, tab_contents->infobar_count());
     32   }
     33 
     34   const Extension* GetTheme() const {
     35     return ThemeServiceFactory::GetThemeForProfile(browser()->profile());
     36   }
     37 };
     38 
     39 IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
     40                        TestThemeInstallUndoResetsToDefault) {
     41   // Install theme once and undo to verify we go back to default theme.
     42   FilePath theme_crx = PackExtension(test_data_dir_.AppendASCII("theme"));
     43   ASSERT_TRUE(InstallExtensionWithUI(theme_crx, 1));
     44   const Extension* theme = GetTheme();
     45   ASSERT_TRUE(theme);
     46   std::string theme_id = theme->id();
     47   VerifyThemeInfoBarAndUndoInstall();
     48   ASSERT_EQ(NULL, GetTheme());
     49 
     50   // Set the same theme twice and undo to verify we go back to default theme.
     51   // We set the |expected_change| to zero in these 'InstallExtensionWithUI'
     52   // calls since the theme has already been installed above and this is an
     53   // overinstall to set the active theme.
     54   ASSERT_TRUE(InstallExtensionWithUI(theme_crx, 0));
     55   theme = GetTheme();
     56   ASSERT_TRUE(theme);
     57   ASSERT_EQ(theme_id, theme->id());
     58   ASSERT_TRUE(InstallExtensionWithUI(theme_crx, 0));
     59   theme = GetTheme();
     60   ASSERT_TRUE(theme);
     61   ASSERT_EQ(theme_id, theme->id());
     62   VerifyThemeInfoBarAndUndoInstall();
     63   ASSERT_EQ(NULL, GetTheme());
     64 }
     65 
     66 IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
     67                        TestThemeInstallUndoResetsToPreviousTheme) {
     68   // Install first theme.
     69   FilePath theme_path = test_data_dir_.AppendASCII("theme");
     70   ASSERT_TRUE(InstallExtensionWithUI(theme_path, 1));
     71   const Extension* theme = GetTheme();
     72   ASSERT_TRUE(theme);
     73   std::string theme_id = theme->id();
     74 
     75   // Then install second theme.
     76   FilePath theme_path2 = test_data_dir_.AppendASCII("theme2");
     77   ASSERT_TRUE(InstallExtensionWithUI(theme_path2, 1));
     78   const Extension* theme2 = GetTheme();
     79   ASSERT_TRUE(theme2);
     80   EXPECT_FALSE(theme_id == theme2->id());
     81 
     82   // Undo second theme will revert to first theme.
     83   VerifyThemeInfoBarAndUndoInstall();
     84   EXPECT_EQ(theme, GetTheme());
     85 }
     86 
     87 IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
     88                        AppInstallConfirmation) {
     89   int num_tabs = browser()->tab_count();
     90 
     91   FilePath app_dir = test_data_dir_.AppendASCII("app");
     92   ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(app_dir, 1,
     93                                                 browser()->profile()));
     94 
     95   EXPECT_EQ(num_tabs + 1, browser()->tab_count());
     96   TabContents* tab_contents = browser()->GetSelectedTabContents();
     97   ASSERT_TRUE(tab_contents);
     98   EXPECT_TRUE(StartsWithASCII(tab_contents->GetURL().spec(),
     99                               "chrome://newtab/#app-id=",  // id changes
    100                               false));
    101 }
    102 
    103 IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
    104                        AppInstallConfirmation_Incognito) {
    105   Profile* incognito_profile = browser()->profile()->GetOffTheRecordProfile();
    106   Browser* incognito_browser = Browser::GetOrCreateTabbedBrowser(
    107       incognito_profile);
    108 
    109   int num_incognito_tabs = incognito_browser->tab_count();
    110   int num_normal_tabs = browser()->tab_count();
    111 
    112   FilePath app_dir = test_data_dir_.AppendASCII("app");
    113   ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(app_dir, 1,
    114                                                 incognito_profile));
    115 
    116   EXPECT_EQ(num_incognito_tabs, incognito_browser->tab_count());
    117   EXPECT_EQ(num_normal_tabs + 1, browser()->tab_count());
    118   TabContents* tab_contents = browser()->GetSelectedTabContents();
    119   ASSERT_TRUE(tab_contents);
    120   EXPECT_TRUE(StartsWithASCII(tab_contents->GetURL().spec(),
    121                               "chrome://newtab/#app-id=",  // id changes
    122                               false));
    123 }
    124