blob: feee0e041744ef7968be325ad422b2999ee1bdda [file] [log] [blame]
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_THEMES_HELPER_H_
#define CHROME_BROWSER_SYNC_TEST_INTEGRATION_THEMES_HELPER_H_
#include <string>
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "chrome/browser/sync/test/integration/status_change_checker.h"
#include "chrome/browser/sync/test/integration/sync_test.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
class Profile;
class ThemeService;
namespace themes_helper {
// Gets the unique ID of the custom theme with the given index.
std::string GetCustomTheme(int index) WARN_UNUSED_RESULT;
// Gets the ID of |profile|'s theme.
std::string GetThemeID(Profile* profile) WARN_UNUSED_RESULT;
// Returns true iff |profile| is using a custom theme.
bool UsingCustomTheme(Profile* profile) WARN_UNUSED_RESULT;
// Returns true iff |profile| is using the default theme.
bool UsingDefaultTheme(Profile* profile) WARN_UNUSED_RESULT;
// Returns true iff |profile| is using the system theme.
bool UsingSystemTheme(Profile* profile) WARN_UNUSED_RESULT;
// Returns true iff a theme with the given ID is pending install in
// |profile|.
bool ThemeIsPendingInstall(
Profile* profile, const std::string& id) WARN_UNUSED_RESULT;
// Sets |profile| to use the custom theme with the given index.
void UseCustomTheme(Profile* profile, int index);
// Sets |profile| to use the default theme.
void UseDefaultTheme(Profile* profile);
// Sets |profile| to use the system theme.
void UseSystemTheme(Profile* profile);
} // namespace themes_helper
// Waits until |profile| is using the system theme.
// Returns false in case of timeout.
// Waits until |profile| is using the default theme.
// Returns false in case of timeout.
// Helper to wait until a given condition is met, checking every time the
// current theme changes.
//
// The |exit_condition_| closure may be invoked zero or more times.
class ThemeConditionChecker : public StatusChangeChecker,
public content::NotificationObserver {
public:
ThemeConditionChecker(Profile* profile,
const std::string& debug_message_,
base::Callback<bool(ThemeService*)> exit_condition);
~ThemeConditionChecker() override;
// Implementation of StatusChangeChecker.
std::string GetDebugMessage() const override;
bool IsExitConditionSatisfied() override;
// Implementation of content::NotificationObserver.
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
private:
Profile* profile_;
const std::string debug_message_;
base::Callback<bool(ThemeService*)> exit_condition_;
content::NotificationRegistrar registrar_;
};
// Waits until |theme| is pending for install on |profile|.
// Returns false in case of timeout.
// Helper to wait until the specified theme is pending for install on the
// specified profile.
//
// The themes sync integration tests don't actually install any custom themes,
// but they do occasionally check that the ThemeService attempts to install
// synced themes.
class ThemePendingInstallChecker : public StatusChangeChecker,
public content::NotificationObserver {
public:
ThemePendingInstallChecker(Profile* profile, const std::string& theme);
~ThemePendingInstallChecker() override;
// Implementation of StatusChangeChecker.
std::string GetDebugMessage() const override;
bool IsExitConditionSatisfied() override;
// Implementation of content::NotificationObserver.
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
private:
Profile* profile_;
const std::string& theme_;
content::NotificationRegistrar registrar_;
};
class SystemThemeChecker : public ThemeConditionChecker {
public:
explicit SystemThemeChecker(Profile* profile);
};
class DefaultThemeChecker : public ThemeConditionChecker {
public:
explicit DefaultThemeChecker(Profile* profile);
};
#endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_THEMES_HELPER_H_