Chromium Code Reviews| Index: chrome/browser/extensions/extension_install_ui_browsertest.cc |
| diff --git a/chrome/browser/extensions/extension_install_ui_browsertest.cc b/chrome/browser/extensions/extension_install_ui_browsertest.cc |
| index 3941ca782ea604ad1fbe02e622b3099418c94f81..d2d49a9dc2cda008bd9da3e6d066c041fba8fb9d 100644 |
| --- a/chrome/browser/extensions/extension_install_ui_browsertest.cc |
| +++ b/chrome/browser/extensions/extension_install_ui_browsertest.cc |
| @@ -26,6 +26,7 @@ |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/test/browser_test_utils.h" |
| #include "extensions/browser/app_sorting.h" |
| +#include "extensions/browser/extension_registry.h" |
| #include "extensions/common/constants.h" |
| using content::WebContents; |
| @@ -34,6 +35,9 @@ using extensions::Extension; |
| class ExtensionInstallUIBrowserTest : public ExtensionBrowserTest { |
| public: |
| + ExtensionInstallUIBrowserTest() {} |
| + ~ExtensionInstallUIBrowserTest() override {} |
| + |
| // Checks that a theme info bar is currently visible and issues an undo to |
| // revert to the previous theme. |
| void VerifyThemeInfoBarAndUndoInstall() { |
| @@ -47,18 +51,27 @@ class ExtensionInstallUIBrowserTest : public ExtensionBrowserTest { |
| infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); |
| ASSERT_TRUE(delegate); |
| delegate->Cancel(); |
| + WaitForThemeChange(); |
| ASSERT_EQ(0U, infobar_service->infobar_count()); |
| } |
| // Install the given theme from the data dir and verify expected name. |
| void InstallThemeAndVerify(const char* theme_name, |
| const std::string& expected_name) { |
| - // If there is already a theme installed, the current theme should be |
| - // disabled and the new one installed + enabled. |
| - int expected_change = GetTheme() ? 0 : 1; |
| const base::FilePath theme_path = test_data_dir_.AppendASCII(theme_name); |
| - ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_path, expected_change, |
| - browser())); |
| + const bool theme_exists = GetTheme(); |
| + // Themes install asynchronously so we must check the number of enabled |
| + // extensions after theme install completes. |
| + size_t num_before = extensions::ExtensionRegistry::Get(profile()) |
| + ->enabled_extensions() |
| + .size(); |
| + ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_path, 1, browser())); |
| + WaitForThemeChange(); |
| + size_t num_after = extensions::ExtensionRegistry::Get(profile()) |
| + ->enabled_extensions() |
| + .size(); |
| + EXPECT_EQ(num_before + (theme_exists ? 0 : 1), num_after); |
|
Devlin
2017/06/01 00:28:09
Adding a comment explaining the (theme_exists ? 0
Evan Stade
2017/06/01 17:43:02
Done.
|
| + |
| const Extension* theme = GetTheme(); |
| ASSERT_TRUE(theme); |
| ASSERT_EQ(theme->name(), expected_name); |
| @@ -67,6 +80,17 @@ class ExtensionInstallUIBrowserTest : public ExtensionBrowserTest { |
| const Extension* GetTheme() const { |
| return ThemeServiceFactory::GetThemeForProfile(browser()->profile()); |
| } |
| + |
| + void WaitForThemeChange() { |
| + content::WindowedNotificationObserver theme_change_observer( |
| + chrome::NOTIFICATION_BROWSER_THEME_CHANGED, |
| + content::Source<ThemeService>( |
| + ThemeServiceFactory::GetForProfile(browser()->profile()))); |
| + theme_change_observer.Wait(); |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionInstallUIBrowserTest); |
| }; |
| // Fails on Linux and Windows (http://crbug.com/580907). |
| @@ -75,6 +99,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest, |
| // Install theme once and undo to verify we go back to default theme. |
| base::FilePath theme_crx = PackExtension(test_data_dir_.AppendASCII("theme")); |
| ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 1, browser())); |
| + WaitForThemeChange(); |
| const Extension* theme = GetTheme(); |
| ASSERT_TRUE(theme); |
| std::string theme_id = theme->id(); |
| @@ -83,10 +108,12 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest, |
| // Set the same theme twice and undo to verify we go back to default theme. |
| ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 0, browser())); |
| + WaitForThemeChange(); |
| theme = GetTheme(); |
| ASSERT_TRUE(theme); |
| ASSERT_EQ(theme_id, theme->id()); |
| ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 0, browser())); |
| + WaitForThemeChange(); |
| theme = GetTheme(); |
| ASSERT_TRUE(theme); |
| ASSERT_EQ(theme_id, theme->id()); |
| @@ -104,7 +131,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest, |
| // Then install second theme. |
| InstallThemeAndVerify("theme2", "snowflake theme"); |
| const Extension* theme2 = GetTheme(); |
| - EXPECT_FALSE(theme_id == theme2->id()); |
| + EXPECT_NE(theme_id, theme2->id()); |
| // Undo second theme will revert to first theme. |
| VerifyThemeInfoBarAndUndoInstall(); |