Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5012)

Unified Diff: chrome/browser/extensions/extension_install_ui_browsertest.cc

Issue 2799003002: Unpack theme data from extensions off of UI thread. (Closed)
Patch Set: fix gtk case Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_service_sync_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..8902bd59b7d1c71616b1fbd93f764a069070f684 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,29 @@ 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();
+ // If a theme was already installed, we're just swapping one for another, so
+ // no change in extension count.
+ EXPECT_EQ(num_before + (theme_exists ? 0 : 1), num_after);
+
const Extension* theme = GetTheme();
ASSERT_TRUE(theme);
ASSERT_EQ(theme->name(), expected_name);
@@ -67,6 +82,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 +101,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 +110,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 +133,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();
« no previous file with comments | « no previous file | chrome/browser/extensions/extension_service_sync_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698