1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
// 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 "chrome/browser/sync/test/integration/themes_helper.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/sync/test/integration/sync_datatype_helper.h"
#include "chrome/browser/sync/test/integration/sync_extension_helper.h"
#include "chrome/browser/themes/theme_service.h"
#include "chrome/browser/themes/theme_service_factory.h"
#include "components/crx_file/id_util.h"
#include "content/public/browser/notification_source.h"
#include "extensions/common/manifest.h"
using sync_datatype_helper::test;
namespace {
// Make a name to pass to an extension helper.
std::string MakeName(int index) {
return "faketheme" + base::IntToString(index);
}
ThemeService* GetThemeService(Profile* profile) {
return ThemeServiceFactory::GetForProfile(profile);
}
} // namespace
namespace themes_helper {
std::string GetCustomTheme(int index) {
return crx_file::id_util::GenerateId(MakeName(index));
}
std::string GetThemeID(Profile* profile) {
return GetThemeService(profile)->GetThemeID();
}
bool UsingCustomTheme(Profile* profile) {
return GetThemeID(profile) != ThemeService::kDefaultThemeID;
}
bool UsingDefaultTheme(Profile* profile) {
return GetThemeService(profile)->UsingDefaultTheme();
}
bool UsingSystemTheme(Profile* profile) {
return GetThemeService(profile)->UsingSystemTheme();
}
bool ThemeIsPendingInstall(Profile* profile, const std::string& id) {
return SyncExtensionHelper::GetInstance()->
IsExtensionPendingInstallForSync(profile, id);
}
void UseCustomTheme(Profile* profile, int index) {
SyncExtensionHelper::GetInstance()->InstallExtension(
profile, MakeName(index), extensions::Manifest::TYPE_THEME);
}
void UseDefaultTheme(Profile* profile) {
GetThemeService(profile)->UseDefaultTheme();
}
void UseSystemTheme(Profile* profile) {
GetThemeService(profile)->UseSystemTheme();
}
// Helper function to let us bind this functionality into a base::Callback.
bool UsingSystemThemeFunc(ThemeService* theme_service) {
return theme_service->UsingSystemTheme();
}
// Helper function to let us bind this functionality into a base::Callback.
bool UsingDefaultThemeFunc(ThemeService* theme_service) {
return theme_service->UsingDefaultTheme();
}
} // namespace themes_helper
ThemePendingInstallChecker::ThemePendingInstallChecker(Profile* profile,
const std::string& theme)
: profile_(profile), theme_(theme) {
// We'll check to see if the condition is met whenever the extension system
// tries to contact the web store.
registrar_.Add(this, extensions::NOTIFICATION_EXTENSION_UPDATING_STARTED,
content::Source<Profile>(profile_));
}
ThemePendingInstallChecker::~ThemePendingInstallChecker() {
}
std::string ThemePendingInstallChecker::GetDebugMessage() const {
return base::StringPrintf("Waiting for pending theme to be '%s'",
theme_.c_str());
}
bool ThemePendingInstallChecker::IsExitConditionSatisfied() {
return themes_helper::ThemeIsPendingInstall(profile_, theme_);
}
void ThemePendingInstallChecker::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK_EQ(extensions::NOTIFICATION_EXTENSION_UPDATING_STARTED, type);
CheckExitCondition();
}
ThemeConditionChecker::ThemeConditionChecker(
Profile* profile,
const std::string& debug_message,
base::Callback<bool(ThemeService*)> exit_condition)
: profile_(profile),
debug_message_(debug_message),
exit_condition_(exit_condition) {
registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED,
content::Source<ThemeService>(GetThemeService(profile_)));
}
ThemeConditionChecker::~ThemeConditionChecker() {
}
std::string ThemeConditionChecker::GetDebugMessage() const {
return debug_message_;
}
bool ThemeConditionChecker::IsExitConditionSatisfied() {
return exit_condition_.Run(GetThemeService(profile_));
}
void ThemeConditionChecker::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK_EQ(chrome::NOTIFICATION_BROWSER_THEME_CHANGED, type);
CheckExitCondition();
}
SystemThemeChecker::SystemThemeChecker(Profile* profile)
: ThemeConditionChecker(profile,
"Waiting until profile is using system theme",
base::Bind(&themes_helper::UsingSystemThemeFunc)) {}
DefaultThemeChecker::DefaultThemeChecker(Profile* profile)
: ThemeConditionChecker(profile,
"Waiting until profile is using default theme",
base::Bind(&themes_helper::UsingDefaultThemeFunc)) {
}
|