Commit 903d70ae authored by atwilson@chromium.org's avatar atwilson@chromium.org

Change ThemeService to handle uninstalled themes.

ThemeService now reverts to the default theme if the current theme is
unloaded.

BUG=161263


Review URL: https://chromiumcodereview.appspot.com/11434002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@170946 0039d316-1c4b-4281-b951-d872f2087c98
parent d1a56f05
......@@ -1162,6 +1162,16 @@ void ExtensionService::NotifyExtensionUnloaded(
content::Source<Profile>(profile_),
content::Details<UnloadedExtensionInfo>(&details));
#if defined(ENABLE_THEMES)
// If the current theme is being unloaded, tell ThemeService to revert back
// to the default theme.
if (reason != extension_misc::UNLOAD_REASON_UPDATE && extension->is_theme()) {
ThemeService* theme_service = ThemeServiceFactory::GetForProfile(profile_);
if (extension->id() == theme_service->GetThemeID())
theme_service->UseDefaultTheme();
}
#endif
for (content::RenderProcessHost::iterator i(
content::RenderProcessHost::AllHostsIterator());
!i.IsAtEnd(); i.Advance()) {
......
......@@ -5,9 +5,42 @@
#include "chrome/browser/themes/theme_service.h"
#include "base/json/json_reader.h"
#include "chrome/browser/extensions/extension_service_unittest.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
#include "chrome/test/base/testing_profile.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(ThemeServiceTest, AlignmentConversion) {
namespace {
class ThemeServiceTest : public ExtensionServiceTestBase {
public:
ThemeServiceTest() {}
virtual ~ThemeServiceTest() {}
scoped_refptr<extensions::Extension> MakeThemeExtension(FilePath path) {
DictionaryValue source;
source.SetString(extension_manifest_keys::kName, "theme");
source.Set(extension_manifest_keys::kTheme, new DictionaryValue());
source.SetString(extension_manifest_keys::kUpdateURL, "http://foo.com");
source.SetString(extension_manifest_keys::kVersion, "0.0.0.0");
std::string error;
scoped_refptr<extensions::Extension> extension =
extensions::Extension::Create(
path, extensions::Extension::EXTERNAL_PREF_DOWNLOAD,
source, extensions::Extension::NO_FLAGS, &error);
EXPECT_TRUE(extension);
EXPECT_EQ("", error);
return extension;
}
void SetUp() {
InitializeEmptyExtensionService();
}
};
TEST_F(ThemeServiceTest, AlignmentConversion) {
// Verify that we get out what we put in.
std::string top_left = "left top";
int alignment = ThemeService::StringToAlignment(top_left);
......@@ -33,7 +66,7 @@ TEST(ThemeServiceTest, AlignmentConversion) {
EXPECT_EQ("center center", ThemeService::AlignmentToString(alignment));
}
TEST(ThemeServiceTest, AlignmentConversionInput) {
TEST_F(ThemeServiceTest, AlignmentConversionInput) {
// Verify that we output in an expected format.
int alignment = ThemeService::StringToAlignment("bottom right");
EXPECT_EQ("right bottom", ThemeService::AlignmentToString(alignment));
......@@ -50,3 +83,49 @@ TEST(ThemeServiceTest, AlignmentConversionInput) {
alignment = ThemeService::StringToAlignment("new zealandtop");
EXPECT_EQ("center center", ThemeService::AlignmentToString(alignment));
}
// Installs then uninstalls a theme and makes sure that the ThemeService
// reverts to the default theme after the uninstall.
TEST_F(ThemeServiceTest, ThemeInstallUninstall) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
ThemeService* theme_service =
ThemeServiceFactory::GetForProfile(profile_.get());
theme_service->UseDefaultTheme();
scoped_refptr<extensions::Extension> extension =
MakeThemeExtension(temp_dir.path());
service_->AddExtension(extension);
// Let ThemeService finish creating the theme pack.
MessageLoop::current()->RunUntilIdle();
EXPECT_FALSE(theme_service->UsingDefaultTheme());
EXPECT_EQ(extension->id(), theme_service->GetThemeID());
// Now unload the extension, should revert to the default theme.
service_->UnloadExtension(extension->id(),
extension_misc::UNLOAD_REASON_UNINSTALL);
EXPECT_TRUE(theme_service->UsingDefaultTheme());
}
// Upgrades a theme and ensures that the ThemeService does not revert to the
// default theme.
TEST_F(ThemeServiceTest, ThemeUpgrade) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
ThemeService* theme_service =
ThemeServiceFactory::GetForProfile(profile_.get());
theme_service->UseDefaultTheme();
scoped_refptr<extensions::Extension> extension =
MakeThemeExtension(temp_dir.path());
service_->AddExtension(extension);
// Let ThemeService finish creating the theme pack.
MessageLoop::current()->RunUntilIdle();
EXPECT_FALSE(theme_service->UsingDefaultTheme());
EXPECT_EQ(extension->id(), theme_service->GetThemeID());
// Now unload the extension, should revert to the default theme.
service_->UnloadExtension(extension->id(),
extension_misc::UNLOAD_REASON_UPDATE);
EXPECT_FALSE(theme_service->UsingDefaultTheme());
}
}; // namespace
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment