two_client_themes_sync_test.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "chrome/browser/sync/profile_sync_service_harness.h"
7#include "chrome/browser/sync/test/integration/sync_test.h"
8#include "chrome/browser/sync/test/integration/themes_helper.h"
9
10using themes_helper::GetCustomTheme;
11using themes_helper::GetThemeID;
12using themes_helper::HasOrWillHaveCustomTheme;
13using themes_helper::ThemeIsPendingInstall;
14using themes_helper::UseCustomTheme;
15using themes_helper::UseDefaultTheme;
16using themes_helper::UseNativeTheme;
17using themes_helper::UsingCustomTheme;
18using themes_helper::UsingDefaultTheme;
19using themes_helper::UsingNativeTheme;
20
21class TwoClientThemesSyncTest : public SyncTest {
22 public:
23  TwoClientThemesSyncTest() : SyncTest(TWO_CLIENT) {}
24  virtual ~TwoClientThemesSyncTest() {}
25
26 private:
27  DISALLOW_COPY_AND_ASSIGN(TwoClientThemesSyncTest);
28};
29
30// TODO(akalin): Add tests for model association (i.e., tests that
31// start with SetupClients(), change the theme state, then call
32// SetupSync()).
33
34// TCM ID - 3667311.
35IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, CustomTheme) {
36  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
37
38  ASSERT_FALSE(UsingCustomTheme(GetProfile(0)));
39  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
40  ASSERT_FALSE(UsingCustomTheme(verifier()));
41
42  UseCustomTheme(GetProfile(0), 0);
43  UseCustomTheme(verifier(), 0);
44  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
45  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
46
47  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
48
49  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
50  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
51  // TODO(akalin): Add functions to simulate when a pending extension
52  // is installed as well as when a pending extension fails to
53  // install.
54  ASSERT_TRUE(ThemeIsPendingInstall(GetProfile(1), GetCustomTheme(0)));
55  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
56}
57
58// TCM ID - 3599303.
59// TODO(sync): Fails on Chrome OS. See http://crbug.com/84575.
60#if defined(OS_CHROMEOS)
61IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DISABLED_NativeTheme) {
62#else
63IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, NativeTheme) {
64#endif  // OS_CHROMEOS
65  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
66
67  UseCustomTheme(GetProfile(0), 0);
68  UseCustomTheme(GetProfile(1), 0);
69  UseCustomTheme(verifier(), 0);
70
71  ASSERT_TRUE(AwaitQuiescence());
72
73  UseNativeTheme(GetProfile(0));
74  UseNativeTheme(verifier());
75  ASSERT_TRUE(UsingNativeTheme(GetProfile(0)));
76  ASSERT_TRUE(UsingNativeTheme(verifier()));
77
78  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
79
80  ASSERT_TRUE(UsingNativeTheme(GetProfile(0)));
81  ASSERT_TRUE(UsingNativeTheme(GetProfile(1)));
82  ASSERT_TRUE(UsingNativeTheme(verifier()));
83}
84
85// TCM ID - 7247455.
86IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DefaultTheme) {
87  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
88
89  UseCustomTheme(GetProfile(0), 0);
90  UseCustomTheme(GetProfile(1), 0);
91  UseCustomTheme(verifier(), 0);
92
93  ASSERT_TRUE(AwaitQuiescence());
94
95  UseDefaultTheme(GetProfile(0));
96  UseDefaultTheme(verifier());
97  ASSERT_TRUE(UsingDefaultTheme(GetProfile(0)));
98  ASSERT_TRUE(UsingDefaultTheme(verifier()));
99
100  ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
101
102  ASSERT_TRUE(UsingDefaultTheme(GetProfile(0)));
103  ASSERT_TRUE(UsingDefaultTheme(GetProfile(1)));
104  ASSERT_TRUE(UsingDefaultTheme(verifier()));
105}
106
107// TCM ID - 7292065.
108// TODO(sync): Fails on Chrome OS. See http://crbug.com/84575.
109#if defined(OS_CHROMEOS)
110IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DISABLED_NativeDefaultRace) {
111#else
112IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, NativeDefaultRace) {
113#endif  // OS_CHROMEOS
114  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
115
116  UseNativeTheme(GetProfile(0));
117  UseDefaultTheme(GetProfile(1));
118  ASSERT_TRUE(UsingNativeTheme(GetProfile(0)));
119  ASSERT_TRUE(UsingDefaultTheme(GetProfile(1)));
120
121  ASSERT_TRUE(AwaitQuiescence());
122
123  // TODO(akalin): Add function that compares two profiles to see if
124  // they're at the same state.
125
126  ASSERT_EQ(UsingNativeTheme(GetProfile(0)),
127            UsingNativeTheme(GetProfile(1)));
128  ASSERT_EQ(UsingDefaultTheme(GetProfile(0)),
129            UsingDefaultTheme(GetProfile(1)));
130}
131
132// TCM ID - 7294077.
133// TODO(sync): Fails on Chrome OS. See http://crbug.com/84575.
134#if defined(OS_CHROMEOS)
135IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DISABLED_CustomNativeRace) {
136#else
137IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, CustomNativeRace) {
138#endif  // OS_CHROMEOS
139  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
140
141  UseCustomTheme(GetProfile(0), 0);
142  UseNativeTheme(GetProfile(1));
143  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
144  ASSERT_TRUE(UsingNativeTheme(GetProfile(1)));
145
146  ASSERT_TRUE(AwaitQuiescence());
147
148  // TODO(akalin): Add function to wait for pending extensions to be
149  // installed.
150
151  ASSERT_EQ(HasOrWillHaveCustomTheme(GetProfile(0), GetCustomTheme(0)),
152            HasOrWillHaveCustomTheme(GetProfile(1), GetCustomTheme(0)));
153}
154
155// TCM ID - 7307225.
156IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, CustomDefaultRace) {
157  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
158
159  UseCustomTheme(GetProfile(0), 0);
160  UseDefaultTheme(GetProfile(1));
161  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
162  ASSERT_TRUE(UsingDefaultTheme(GetProfile(1)));
163
164  ASSERT_TRUE(AwaitQuiescence());
165
166  ASSERT_EQ(HasOrWillHaveCustomTheme(GetProfile(0), GetCustomTheme(0)),
167            HasOrWillHaveCustomTheme(GetProfile(1), GetCustomTheme(0)));
168}
169
170// TCM ID - 7264758.
171IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, CustomCustomRace) {
172  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
173
174  // TODO(akalin): Generalize this to n clients.
175
176  UseCustomTheme(GetProfile(0), 0);
177  UseCustomTheme(GetProfile(1), 1);
178  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
179  ASSERT_EQ(GetCustomTheme(1), GetThemeID(GetProfile(1)));
180
181  ASSERT_TRUE(AwaitQuiescence());
182
183  bool using_theme_0 =
184      (GetThemeID(GetProfile(0)) == GetCustomTheme(0)) &&
185      HasOrWillHaveCustomTheme(GetProfile(1), GetCustomTheme(0));
186  bool using_theme_1 =
187      HasOrWillHaveCustomTheme(GetProfile(0), GetCustomTheme(1)) &&
188      (GetThemeID(GetProfile(1)) == GetCustomTheme(1));
189
190  // Equivalent to using_theme_0 xor using_theme_1.
191  ASSERT_NE(using_theme_0, using_theme_1);
192}
193
194// TCM ID - 3723272.
195IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DisableThemes) {
196  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
197
198  ASSERT_FALSE(UsingCustomTheme(GetProfile(0)));
199  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
200  ASSERT_FALSE(UsingCustomTheme(verifier()));
201
202  ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncer::THEMES));
203  UseCustomTheme(GetProfile(0), 0);
204  UseCustomTheme(verifier(), 0);
205  ASSERT_TRUE(GetClient(0)->AwaitFullSyncCompletion("Changed the theme."));
206
207  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
208  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
209  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
210
211  ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncer::THEMES));
212  ASSERT_TRUE(AwaitQuiescence());
213
214  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
215  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
216  ASSERT_TRUE(ThemeIsPendingInstall(GetProfile(1), GetCustomTheme(0)));
217  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
218}
219
220// TCM ID - 3687288.
221IN_PROC_BROWSER_TEST_F(TwoClientThemesSyncTest, DisableSync) {
222  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
223
224  ASSERT_FALSE(UsingCustomTheme(GetProfile(0)));
225  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
226  ASSERT_FALSE(UsingCustomTheme(verifier()));
227
228  ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes());
229  UseCustomTheme(GetProfile(0), 0);
230  UseCustomTheme(verifier(), 0);
231  ASSERT_TRUE(
232      GetClient(0)->AwaitFullSyncCompletion("Installed a custom theme."));
233
234  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
235  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
236  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
237
238  ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes());
239  ASSERT_TRUE(AwaitQuiescence());
240
241  ASSERT_EQ(GetCustomTheme(0), GetThemeID(GetProfile(0)));
242  ASSERT_EQ(GetCustomTheme(0), GetThemeID(verifier()));
243  ASSERT_FALSE(UsingCustomTheme(GetProfile(1)));
244  ASSERT_TRUE(ThemeIsPendingInstall(GetProfile(1), GetCustomTheme(0)));
245}
246