OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "chrome/browser/sync/profile_sync_service_harness.h" | 6 #include "chrome/browser/sync/profile_sync_service_harness.h" |
7 #include "chrome/test/live_sync/live_extensions_sync_test.h" | 7 #include "chrome/test/live_sync/extensions_helper.h" |
| 8 #include "chrome/test/live_sync/live_sync_test.h" |
8 | 9 |
9 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 10 using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier; |
10 StartWithNoExtensions) { | 11 using extensions_helper::DisableExtension; |
| 12 using extensions_helper::EnableExtension; |
| 13 using extensions_helper::HasSameExtensionsAsVerifier; |
| 14 using extensions_helper::IncognitoDisableExtension; |
| 15 using extensions_helper::IncognitoEnableExtension; |
| 16 using extensions_helper::InstallExtension; |
| 17 using extensions_helper::InstallExtensionsPendingForSync; |
| 18 using extensions_helper::UninstallExtension; |
| 19 |
| 20 class TwoClientExtensionsSyncTest : public LiveSyncTest { |
| 21 public: |
| 22 TwoClientExtensionsSyncTest() : LiveSyncTest(TWO_CLIENT) {} |
| 23 |
| 24 virtual ~TwoClientExtensionsSyncTest() {} |
| 25 |
| 26 private: |
| 27 DISALLOW_COPY_AND_ASSIGN(TwoClientExtensionsSyncTest); |
| 28 }; |
| 29 |
| 30 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithNoExtensions) { |
11 ASSERT_TRUE(SetupSync()); | 31 ASSERT_TRUE(SetupSync()); |
12 | 32 |
13 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 33 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
14 } | 34 } |
15 | 35 |
16 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 36 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, StartWithSameExtensions) { |
17 StartWithSameExtensions) { | |
18 ASSERT_TRUE(SetupClients()); | 37 ASSERT_TRUE(SetupClients()); |
19 | 38 |
20 const int kNumExtensions = 5; | 39 const int kNumExtensions = 5; |
21 for (int i = 0; i < kNumExtensions; ++i) { | 40 for (int i = 0; i < kNumExtensions; ++i) { |
22 InstallExtension(GetProfile(0), i); | 41 InstallExtension(GetProfile(0), i); |
23 InstallExtension(GetProfile(1), i); | 42 InstallExtension(GetProfile(1), i); |
24 InstallExtension(verifier(), i); | 43 InstallExtension(verifier(), i); |
25 } | 44 } |
26 | 45 |
27 ASSERT_TRUE(SetupSync()); | 46 ASSERT_TRUE(SetupSync()); |
28 | 47 |
29 ASSERT_TRUE(AwaitQuiescence()); | 48 ASSERT_TRUE(AwaitQuiescence()); |
30 | 49 |
31 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 50 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
32 } | 51 } |
33 | 52 |
34 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 53 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, |
35 StartWithDifferentExtensions) { | 54 StartWithDifferentExtensions) { |
36 ASSERT_TRUE(SetupClients()); | 55 ASSERT_TRUE(SetupClients()); |
37 | 56 |
38 int i = 0; | 57 int i = 0; |
39 | 58 |
40 const int kNumCommonExtensions = 5; | 59 const int kNumCommonExtensions = 5; |
41 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { | 60 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { |
42 InstallExtension(GetProfile(0), i); | 61 InstallExtension(GetProfile(0), i); |
43 InstallExtension(GetProfile(1), i); | 62 InstallExtension(GetProfile(1), i); |
44 InstallExtension(verifier(), i); | 63 InstallExtension(verifier(), i); |
(...skipping 14 matching lines...) Expand all Loading... |
59 ASSERT_TRUE(SetupSync()); | 78 ASSERT_TRUE(SetupSync()); |
60 | 79 |
61 ASSERT_TRUE(AwaitQuiescence()); | 80 ASSERT_TRUE(AwaitQuiescence()); |
62 | 81 |
63 InstallExtensionsPendingForSync(GetProfile(0)); | 82 InstallExtensionsPendingForSync(GetProfile(0)); |
64 InstallExtensionsPendingForSync(GetProfile(1)); | 83 InstallExtensionsPendingForSync(GetProfile(1)); |
65 | 84 |
66 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 85 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
67 } | 86 } |
68 | 87 |
69 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 88 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, |
70 InstallDifferentExtensions) { | 89 InstallDifferentExtensions) { |
71 ASSERT_TRUE(SetupClients()); | 90 ASSERT_TRUE(SetupClients()); |
72 | 91 |
73 int i = 0; | 92 int i = 0; |
74 | 93 |
75 const int kNumCommonExtensions = 5; | 94 const int kNumCommonExtensions = 5; |
76 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { | 95 for (int j = 0; j < kNumCommonExtensions; ++i, ++j) { |
77 InstallExtension(GetProfile(0), i); | 96 InstallExtension(GetProfile(0), i); |
78 InstallExtension(GetProfile(1), i); | 97 InstallExtension(GetProfile(1), i); |
79 InstallExtension(verifier(), i); | 98 InstallExtension(verifier(), i); |
(...skipping 17 matching lines...) Expand all Loading... |
97 | 116 |
98 ASSERT_TRUE(AwaitQuiescence()); | 117 ASSERT_TRUE(AwaitQuiescence()); |
99 | 118 |
100 InstallExtensionsPendingForSync(GetProfile(0)); | 119 InstallExtensionsPendingForSync(GetProfile(0)); |
101 InstallExtensionsPendingForSync(GetProfile(1)); | 120 InstallExtensionsPendingForSync(GetProfile(1)); |
102 | 121 |
103 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 122 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
104 } | 123 } |
105 | 124 |
106 // TCM ID - 3637311. | 125 // TCM ID - 3637311. |
107 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, Add) { | 126 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Add) { |
108 ASSERT_TRUE(SetupSync()); | 127 ASSERT_TRUE(SetupSync()); |
109 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 128 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
110 | 129 |
111 InstallExtension(GetProfile(0), 0); | 130 InstallExtension(GetProfile(0), 0); |
112 InstallExtension(verifier(), 0); | 131 InstallExtension(verifier(), 0); |
113 ASSERT_TRUE(AwaitQuiescence()); | 132 ASSERT_TRUE(AwaitQuiescence()); |
114 | 133 |
115 InstallExtensionsPendingForSync(GetProfile(0)); | 134 InstallExtensionsPendingForSync(GetProfile(0)); |
116 InstallExtensionsPendingForSync(GetProfile(1)); | 135 InstallExtensionsPendingForSync(GetProfile(1)); |
117 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 136 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
118 } | 137 } |
119 | 138 |
120 // TCM ID - 3724281. | 139 // TCM ID - 3724281. |
121 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, Uninstall) { | 140 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Uninstall) { |
122 ASSERT_TRUE(SetupSync()); | 141 ASSERT_TRUE(SetupSync()); |
123 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 142 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
124 | 143 |
125 InstallExtension(GetProfile(0), 0); | 144 InstallExtension(GetProfile(0), 0); |
126 InstallExtension(verifier(), 0); | 145 InstallExtension(verifier(), 0); |
127 ASSERT_TRUE(AwaitQuiescence()); | 146 ASSERT_TRUE(AwaitQuiescence()); |
128 | 147 |
129 InstallExtensionsPendingForSync(GetProfile(0)); | 148 InstallExtensionsPendingForSync(GetProfile(0)); |
130 InstallExtensionsPendingForSync(GetProfile(1)); | 149 InstallExtensionsPendingForSync(GetProfile(1)); |
131 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 150 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
132 | 151 |
133 UninstallExtension(GetProfile(0), 0); | 152 UninstallExtension(GetProfile(0), 0); |
134 UninstallExtension(verifier(), 0); | 153 UninstallExtension(verifier(), 0); |
135 ASSERT_TRUE(AwaitQuiescence()); | 154 ASSERT_TRUE(AwaitQuiescence()); |
136 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 155 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
137 } | 156 } |
138 | 157 |
139 // TCM ID - 3635304. | 158 // TCM ID - 3635304. |
140 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, Merge) { | 159 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, Merge) { |
141 ASSERT_TRUE(SetupSync()); | 160 ASSERT_TRUE(SetupSync()); |
142 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 161 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
143 | 162 |
144 InstallExtension(GetProfile(0), 0); | 163 InstallExtension(GetProfile(0), 0); |
145 InstallExtension(GetProfile(1), 0); | 164 InstallExtension(GetProfile(1), 0); |
146 ASSERT_TRUE(AwaitQuiescence()); | 165 ASSERT_TRUE(AwaitQuiescence()); |
147 | 166 |
148 UninstallExtension(GetProfile(0), 0); | 167 UninstallExtension(GetProfile(0), 0); |
149 InstallExtension(GetProfile(0), 1); | 168 InstallExtension(GetProfile(0), 1); |
150 InstallExtension(verifier(), 1); | 169 InstallExtension(verifier(), 1); |
151 | 170 |
152 InstallExtension(GetProfile(0), 2); | 171 InstallExtension(GetProfile(0), 2); |
153 InstallExtension(GetProfile(1), 2); | 172 InstallExtension(GetProfile(1), 2); |
154 InstallExtension(verifier(), 2); | 173 InstallExtension(verifier(), 2); |
155 | 174 |
156 InstallExtension(GetProfile(1), 3); | 175 InstallExtension(GetProfile(1), 3); |
157 InstallExtension(verifier(), 3); | 176 InstallExtension(verifier(), 3); |
158 | 177 |
159 ASSERT_TRUE(AwaitQuiescence()); | 178 ASSERT_TRUE(AwaitQuiescence()); |
160 InstallExtensionsPendingForSync(GetProfile(0)); | 179 InstallExtensionsPendingForSync(GetProfile(0)); |
161 InstallExtensionsPendingForSync(GetProfile(1)); | 180 InstallExtensionsPendingForSync(GetProfile(1)); |
162 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 181 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
163 } | 182 } |
164 | 183 |
165 // TCM ID - 3605300. | 184 // TCM ID - 3605300. |
166 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 185 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, |
167 UpdateEnableDisableExtension) { | 186 UpdateEnableDisableExtension) { |
168 ASSERT_TRUE(SetupSync()); | 187 ASSERT_TRUE(SetupSync()); |
169 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 188 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
170 | 189 |
171 InstallExtension(GetProfile(0), 0); | 190 InstallExtension(GetProfile(0), 0); |
172 InstallExtension(GetProfile(1), 0); | 191 InstallExtension(GetProfile(1), 0); |
173 InstallExtension(verifier(), 0); | 192 InstallExtension(verifier(), 0); |
174 ASSERT_TRUE(AwaitQuiescence()); | 193 ASSERT_TRUE(AwaitQuiescence()); |
175 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 194 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
176 | 195 |
177 DisableExtension(GetProfile(0), 0); | 196 DisableExtension(GetProfile(0), 0); |
178 DisableExtension(verifier(), 0); | 197 DisableExtension(verifier(), 0); |
179 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); | 198 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); |
180 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); | 199 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); |
181 | 200 |
182 ASSERT_TRUE(AwaitQuiescence()); | 201 ASSERT_TRUE(AwaitQuiescence()); |
183 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 202 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
184 | 203 |
185 EnableExtension(GetProfile(1), 0); | 204 EnableExtension(GetProfile(1), 0); |
186 EnableExtension(verifier(), 0); | 205 EnableExtension(verifier(), 0); |
187 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); | 206 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); |
188 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); | 207 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); |
189 | 208 |
190 ASSERT_TRUE(AwaitQuiescence()); | 209 ASSERT_TRUE(AwaitQuiescence()); |
191 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 210 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
192 } | 211 } |
193 | 212 |
194 // TCM ID - 3728322. | 213 // TCM ID - 3728322. |
195 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, | 214 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, |
196 UpdateIncognitoEnableDisable) { | 215 UpdateIncognitoEnableDisable) { |
197 ASSERT_TRUE(SetupSync()); | 216 ASSERT_TRUE(SetupSync()); |
198 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 217 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
199 | 218 |
200 InstallExtension(GetProfile(0), 0); | 219 InstallExtension(GetProfile(0), 0); |
201 InstallExtension(GetProfile(1), 0); | 220 InstallExtension(GetProfile(1), 0); |
202 InstallExtension(verifier(), 0); | 221 InstallExtension(verifier(), 0); |
203 ASSERT_TRUE(AwaitQuiescence()); | 222 ASSERT_TRUE(AwaitQuiescence()); |
204 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 223 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
205 | 224 |
206 IncognitoEnableExtension(GetProfile(0), 0); | 225 IncognitoEnableExtension(GetProfile(0), 0); |
207 IncognitoEnableExtension(verifier(), 0); | 226 IncognitoEnableExtension(verifier(), 0); |
208 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); | 227 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); |
209 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); | 228 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); |
210 | 229 |
211 ASSERT_TRUE(AwaitQuiescence()); | 230 ASSERT_TRUE(AwaitQuiescence()); |
212 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 231 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
213 | 232 |
214 IncognitoDisableExtension(GetProfile(1), 0); | 233 IncognitoDisableExtension(GetProfile(1), 0); |
215 IncognitoDisableExtension(verifier(), 0); | 234 IncognitoDisableExtension(verifier(), 0); |
216 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); | 235 ASSERT_TRUE(HasSameExtensionsAsVerifier(1)); |
217 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); | 236 ASSERT_FALSE(HasSameExtensionsAsVerifier(0)); |
218 | 237 |
219 ASSERT_TRUE(AwaitQuiescence()); | 238 ASSERT_TRUE(AwaitQuiescence()); |
220 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 239 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
221 } | 240 } |
222 | 241 |
223 // TCM ID - 3732278. | 242 // TCM ID - 3732278. |
224 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, DisableExtensions) { | 243 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableExtensions) { |
225 ASSERT_TRUE(SetupSync()); | 244 ASSERT_TRUE(SetupSync()); |
226 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 245 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
227 | 246 |
228 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncable::EXTENSIONS)); | 247 ASSERT_TRUE(GetClient(1)->DisableSyncForDatatype(syncable::EXTENSIONS)); |
229 InstallExtension(GetProfile(0), 1); | 248 InstallExtension(GetProfile(0), 1); |
230 InstallExtension(verifier(), 1); | 249 InstallExtension(verifier(), 1); |
231 ASSERT_TRUE(AwaitQuiescence()); | 250 ASSERT_TRUE(AwaitQuiescence()); |
232 ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier()); | 251 ASSERT_FALSE(AllProfilesHaveSameExtensionsAsVerifier()); |
233 | 252 |
234 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncable::EXTENSIONS)); | 253 ASSERT_TRUE(GetClient(1)->EnableSyncForDatatype(syncable::EXTENSIONS)); |
235 ASSERT_TRUE(AwaitQuiescence()); | 254 ASSERT_TRUE(AwaitQuiescence()); |
236 InstallExtensionsPendingForSync(GetProfile(0)); | 255 InstallExtensionsPendingForSync(GetProfile(0)); |
237 InstallExtensionsPendingForSync(GetProfile(1)); | 256 InstallExtensionsPendingForSync(GetProfile(1)); |
238 InstallExtensionsPendingForSync(verifier()); | 257 InstallExtensionsPendingForSync(verifier()); |
239 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 258 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
240 } | 259 } |
241 | 260 |
242 // TCM ID - 3606290. | 261 // TCM ID - 3606290. |
243 IN_PROC_BROWSER_TEST_F(TwoClientLiveExtensionsSyncTest, DisableSync) { | 262 IN_PROC_BROWSER_TEST_F(TwoClientExtensionsSyncTest, DisableSync) { |
244 ASSERT_TRUE(SetupSync()); | 263 ASSERT_TRUE(SetupSync()); |
245 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 264 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
246 | 265 |
247 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); | 266 ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); |
248 InstallExtension(GetProfile(0), 0); | 267 InstallExtension(GetProfile(0), 0); |
249 InstallExtension(verifier(), 0); | 268 InstallExtension(verifier(), 0); |
250 ASSERT_TRUE( | 269 ASSERT_TRUE( |
251 GetClient(0)->AwaitSyncCycleCompletion("Installed an extension.")); | 270 GetClient(0)->AwaitSyncCycleCompletion("Installed an extension.")); |
252 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); | 271 ASSERT_TRUE(HasSameExtensionsAsVerifier(0)); |
253 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); | 272 ASSERT_FALSE(HasSameExtensionsAsVerifier(1)); |
254 | 273 |
255 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); | 274 ASSERT_TRUE(GetClient(1)->EnableSyncForAllDatatypes()); |
256 ASSERT_TRUE(AwaitQuiescence()); | 275 ASSERT_TRUE(AwaitQuiescence()); |
257 InstallExtensionsPendingForSync(GetProfile(0)); | 276 InstallExtensionsPendingForSync(GetProfile(0)); |
258 InstallExtensionsPendingForSync(GetProfile(1)); | 277 InstallExtensionsPendingForSync(GetProfile(1)); |
259 InstallExtensionsPendingForSync(verifier()); | 278 InstallExtensionsPendingForSync(verifier()); |
260 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); | 279 ASSERT_TRUE(AllProfilesHaveSameExtensionsAsVerifier()); |
261 } | 280 } |
262 | 281 |
263 // TODO(akalin): Add tests exercising: | 282 // TODO(akalin): Add tests exercising: |
264 // - Offline installation/uninstallation behavior | 283 // - Offline installation/uninstallation behavior |
OLD | NEW |