172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/theme_util.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/extension_install_ui.h"
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/extensions/extension_service.h"
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/extensions/extension_updater.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_USES_GTK)
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/gtk/gtk_theme_service.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/theme_specifics.pb.h"
19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h"
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service_factory.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst char kCurrentThemeClientTag[] = "current_theme";
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool IsSystemThemeDistinctFromDefaultTheme() {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_USES_GTK)
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return false;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool UseSystemTheme(Profile* profile) {
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_USES_GTK)
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return GtkThemeService::GetFrom(profile)->UseGtkTheme();
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return false;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool AreThemeSpecificsEqual(const sync_pb::ThemeSpecifics& a,
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const sync_pb::ThemeSpecifics& b) {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return AreThemeSpecificsEqualHelper(
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      a, b, IsSystemThemeDistinctFromDefaultTheme());
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool AreThemeSpecificsEqualHelper(
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const sync_pb::ThemeSpecifics& a,
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const sync_pb::ThemeSpecifics& b,
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool is_system_theme_distinct_from_default_theme) {
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (a.use_custom_theme() != b.use_custom_theme()) {
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (a.use_custom_theme()) {
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // We're using a custom theme, so simply compare IDs since those
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // are guaranteed unique.
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return a.custom_theme_id() == b.custom_theme_id();
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else if (is_system_theme_distinct_from_default_theme) {
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // We're not using a custom theme, but we care about system
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // vs. default.
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return a.use_system_theme_by_default() == b.use_system_theme_by_default();
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // We're not using a custom theme, and we don't care about system
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // vs. default.
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return true;
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace {
7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool IsTheme(const Extension& extension) {
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return extension.is_theme();
8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace
8521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetCurrentThemeFromThemeSpecifics(
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const sync_pb::ThemeSpecifics& theme_specifics,
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile) {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(profile);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (theme_specifics.use_custom_theme()) {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // TODO(akalin): Figure out what to do about third-party themes
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    // (i.e., those not on either Google gallery).
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    std::string id(theme_specifics.custom_theme_id());
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GURL update_url(theme_specifics.custom_theme_update_url());
95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    VLOG(1) << "Applying theme " << id << " with update_url " << update_url;
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ExtensionServiceInterface* extensions_service =
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        profile->GetExtensionService();
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    CHECK(extensions_service);
99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    const Extension* extension = extensions_service->GetExtensionById(id, true);
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (extension) {
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      if (!extension->is_theme()) {
102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        VLOG(1) << "Extension " << id << " is not a theme; aborting";
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        return;
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (!extensions_service->IsExtensionEnabled(id)) {
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        VLOG(1) << "Theme " << id << " is not enabled; aborting";
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        return;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // Get previous theme info before we set the new theme.
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      std::string previous_theme_id;
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      {
112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        const Extension* current_theme =
113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            ThemeServiceFactory::GetThemeForProfile(profile);
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        if (current_theme) {
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          DCHECK(current_theme->is_theme());
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          previous_theme_id = current_theme->id();
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        }
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      }
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool previous_use_system_theme = UseSystemTheme(profile);
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // An enabled theme extension with the given id was found, so
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // just set the current theme to it.
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ThemeServiceFactory::GetForProfile(profile)->SetTheme(extension);
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // Pretend the theme was just installed.
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ExtensionInstallUI::ShowThemeInfoBar(
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          previous_theme_id, previous_use_system_theme,
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          extension, profile);
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    } else {
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // No extension with this id exists -- we must install it; we do
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // so by adding it as a pending extension and then triggering an
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // auto-update cycle.
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // Themes don't need to install silently as they just pop up an
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // informational dialog after installation instead of a
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      // confirmation dialog.
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const bool kInstallSilently = false;
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const bool kEnableOnInstall = true;
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const bool kEnableIncognitoOnInstall = false;
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      extensions_service->pending_extension_manager()->AddFromSync(
13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen          id, update_url, &IsTheme,
1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          kInstallSilently, kEnableOnInstall, kEnableIncognitoOnInstall);
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      extensions_service->CheckForUpdatesSoon();
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    }
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else if (theme_specifics.use_system_theme_by_default()) {
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ThemeServiceFactory::GetForProfile(profile)->SetNativeTheme();
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    ThemeServiceFactory::GetForProfile(profile)->UseDefaultTheme();
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool UpdateThemeSpecificsOrSetCurrentThemeIfNecessary(
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile, sync_pb::ThemeSpecifics* theme_specifics) {
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!theme_specifics->use_custom_theme() &&
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      (ThemeServiceFactory::GetThemeForProfile(profile) ||
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen       (UseSystemTheme(profile) &&
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        IsSystemThemeDistinctFromDefaultTheme()))) {
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GetThemeSpecificsFromCurrentTheme(profile, theme_specifics);
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return true;
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetCurrentThemeFromThemeSpecificsIfNecessary(*theme_specifics, profile);
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GetThemeSpecificsFromCurrentTheme(
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    Profile* profile,
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sync_pb::ThemeSpecifics* theme_specifics) {
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(profile);
167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const Extension* current_theme =
168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ThemeServiceFactory::GetThemeForProfile(profile);
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (current_theme) {
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(current_theme->is_theme());
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetThemeSpecificsFromCurrentThemeHelper(
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      current_theme,
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      IsSystemThemeDistinctFromDefaultTheme(),
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      UseSystemTheme(profile),
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      theme_specifics);
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid GetThemeSpecificsFromCurrentThemeHelper(
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const Extension* current_theme,
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool is_system_theme_distinct_from_default_theme,
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bool use_system_theme_by_default,
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    sync_pb::ThemeSpecifics* theme_specifics) {
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool use_custom_theme = (current_theme != NULL);
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics->set_use_custom_theme(use_custom_theme);
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (is_system_theme_distinct_from_default_theme) {
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->set_use_system_theme_by_default(
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        use_system_theme_by_default);
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(!use_system_theme_by_default);
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (use_custom_theme) {
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(current_theme);
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(current_theme->is_theme());
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->set_custom_theme_name(current_theme->name());
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->set_custom_theme_id(current_theme->id());
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->set_custom_theme_update_url(
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        current_theme->update_url().spec());
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    DCHECK(!current_theme);
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->clear_custom_theme_name();
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->clear_custom_theme_id();
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    theme_specifics->clear_custom_theme_update_url();
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetCurrentThemeFromThemeSpecificsIfNecessary(
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const sync_pb::ThemeSpecifics& theme_specifics, Profile* profile) {
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(profile);
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics old_theme_specifics;
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetThemeSpecificsFromCurrentTheme(profile, &old_theme_specifics);
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!AreThemeSpecificsEqual(old_theme_specifics, theme_specifics)) {
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SetCurrentThemeFromThemeSpecifics(theme_specifics, profile);
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
218