1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian 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 "base/file_path.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/values.h"
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/protocol/theme_specifics.pb.h"
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service.h"
12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/themes/theme_service_factory.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension_constants.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::Return;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ThemeUtilTest : public testing::Test {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28513209b27ff55e2841eac0e4120199c23acce758Ben Murdochscoped_refptr<Extension> MakeThemeExtension(const FilePath& extension_path,
29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                            const std::string& name,
30513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                            const std::string& update_url) {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DictionaryValue source;
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source.SetString(extension_manifest_keys::kName, name);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source.Set(extension_manifest_keys::kTheme, new DictionaryValue());
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source.SetString(extension_manifest_keys::kUpdateURL, update_url);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  source.SetString(extension_manifest_keys::kVersion, "0.0.0.0");
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string error;
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension = Extension::Create(
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      extension_path, Extension::INTERNAL, source,
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Extension::STRICT_ERROR_CHECKS, &error);
40513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_TRUE(extension);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ("", error);
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  return extension;
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, AreThemeSpecificsEqualHelper) {
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics a, b;
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Custom vs. non-custom.
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_use_custom_theme(true);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(AreThemeSpecificsEqualHelper(a, b, false));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(AreThemeSpecificsEqualHelper(a, b, true));
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Custom theme equality.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  b.set_use_custom_theme(true);
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_custom_theme_id("id");
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(AreThemeSpecificsEqualHelper(a, b, false));
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(AreThemeSpecificsEqualHelper(a, b, true));
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  b.set_custom_theme_id("id");
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_custom_theme_update_url("http://update.url");
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_custom_theme_name("name");
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Non-custom theme equality.
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_use_custom_theme(false);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  b.set_use_custom_theme(false);
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  a.set_use_system_theme_by_default(true);
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(AreThemeSpecificsEqualHelper(a, b, true));
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  b.set_use_system_theme_by_default(true);
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, false));
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(AreThemeSpecificsEqualHelper(a, b, true));
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass MockThemeService : public ThemeService {
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MOCK_METHOD0(SetNativeTheme, void());
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MOCK_METHOD0(UseDefaultTheme, void());
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MOCK_CONST_METHOD0(GetThemeID, std::string());
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, SetCurrentThemeDefaultTheme) {
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile profile;
104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MockThemeService* mock_theme_service = new MockThemeService;
105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ThemeServiceFactory::GetInstance()->ForceAssociationBetween(&profile,
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      mock_theme_service);
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_CALL(*mock_theme_service, UseDefaultTheme()).Times(1);
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetCurrentThemeFromThemeSpecifics(theme_specifics, &profile);
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, SetCurrentThemeSystemTheme) {
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_system_theme_by_default(true);
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile profile;
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MockThemeService* mock_theme_service = new MockThemeService;
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ThemeServiceFactory::GetInstance()->ForceAssociationBetween(&profile,
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      mock_theme_service);
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_CALL(*mock_theme_service, SetNativeTheme()).Times(1);
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetCurrentThemeFromThemeSpecifics(theme_specifics, &profile);
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// TODO(akalin): Make ExtensionService/ExtensionUpdater testable
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// enough to be able to write a unittest for SetCurrentTheme for a
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// custom theme.
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, GetThemeSpecificsHelperNoCustomTheme) {
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_custom_theme(true);
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_system_theme_by_default(true);
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_name("name");
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_id("id");
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_update_url("updateurl");
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetThemeSpecificsFromCurrentThemeHelper(NULL, false, false,
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          &theme_specifics);
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.has_use_custom_theme());
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.use_custom_theme());
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Should be preserved since we passed in false for
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is_system_theme_distinct_from_current_theme.
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.use_system_theme_by_default());
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_name());
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_id());
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_update_url());
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, GetThemeSpecificsHelperNoCustomThemeDistinct) {
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_custom_theme(true);
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_name("name");
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_id("id");
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_custom_theme_update_url("updateurl");
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GetThemeSpecificsFromCurrentThemeHelper(NULL, true, false,
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          &theme_specifics);
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.has_use_custom_theme());
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.use_custom_theme());
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Should be set since we passed in true for
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is_system_theme_distinct_from_current_theme.
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.has_use_system_theme_by_default());
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.use_system_theme_by_default());
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_name());
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_id());
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.has_custom_theme_update_url());
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN)
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("c:\\foo");
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_POSIX)
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst FilePath::CharType kExtensionFilePath[] = FILE_PATH_LITERAL("/oo");
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, GetThemeSpecificsHelperCustomTheme) {
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_custom_theme(false);
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_system_theme_by_default(true);
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath file_path(kExtensionFilePath);
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string kThemeName("name");
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string kThemeUpdateUrl("http://update.url/foo");
186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension(
187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      MakeThemeExtension(file_path, kThemeName, kThemeUpdateUrl));
188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  GetThemeSpecificsFromCurrentThemeHelper(extension.get(), false, false,
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          &theme_specifics);
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.use_custom_theme());
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.use_system_theme_by_default());
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(kThemeName, theme_specifics.custom_theme_name());
194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(extension->id(), theme_specifics.custom_theme_id());
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(kThemeUpdateUrl, theme_specifics.custom_theme_update_url());
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, GetThemeSpecificsHelperCustomThemeDistinct) {
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  theme_specifics.set_use_custom_theme(false);
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FilePath file_path(kExtensionFilePath);
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string kThemeName("name");
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string kThemeUpdateUrl("http://update.url/foo");
204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<Extension> extension(
205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      MakeThemeExtension(file_path, kThemeName, kThemeUpdateUrl));
206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  GetThemeSpecificsFromCurrentThemeHelper(extension.get(), true, false,
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          &theme_specifics);
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.use_custom_theme());
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(theme_specifics.has_use_system_theme_by_default());
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(theme_specifics.use_system_theme_by_default());
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(kThemeName, theme_specifics.custom_theme_name());
213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(extension->id(), theme_specifics.custom_theme_id());
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(kThemeUpdateUrl, theme_specifics.custom_theme_update_url());
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(ThemeUtilTest, SetCurrentThemeIfNecessaryDefaultThemeNotNecessary) {
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile profile;
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MockThemeService* mock_theme_service = new MockThemeService;
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ThemeServiceFactory::GetInstance()->ForceAssociationBetween(&profile,
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      mock_theme_service);
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_CALL(*mock_theme_service, GetThemeID()).WillRepeatedly(Return(
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      ThemeService::kDefaultThemeID));
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(akalin): Mock out call to GetPrefs() under TOOLKIT_USES_GTK.
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  sync_pb::ThemeSpecifics theme_specifics;
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SetCurrentThemeFromThemeSpecificsIfNecessary(theme_specifics,
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                               &profile);
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
236