| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <map> | 5 #include <map> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 50 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" | 50 #include "chrome/browser/supervised_user/supervised_user_service_factory.h" |
| 51 #endif | 51 #endif |
| 52 | 52 |
| 53 using extensions::AppSorting; | 53 using extensions::AppSorting; |
| 54 using extensions::Extension; | 54 using extensions::Extension; |
| 55 using extensions::ExtensionPrefs; | 55 using extensions::ExtensionPrefs; |
| 56 using extensions::ExtensionSyncData; | 56 using extensions::ExtensionSyncData; |
| 57 using extensions::ExtensionSystem; | 57 using extensions::ExtensionSystem; |
| 58 using extensions::Manifest; | 58 using extensions::Manifest; |
| 59 using extensions::PermissionSet; | 59 using extensions::PermissionSet; |
| 60 using syncer::SyncChange; |
| 61 using syncer::SyncChangeList; |
| 62 |
| 63 namespace { |
| 60 | 64 |
| 61 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj"; | 65 const char good0[] = "behllobkkfkfnphdnhnkndlbkcpglgmj"; |
| 62 const char good2[] = "bjafgdebaacbbbecmhlhpofkepfkgcpa"; | 66 const char good2[] = "bjafgdebaacbbbecmhlhpofkepfkgcpa"; |
| 63 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; | 67 const char good_crx[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; |
| 64 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln"; | 68 const char page_action[] = "obcimlgaoabeegjmmpldobjndiealpln"; |
| 65 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; | 69 const char theme2_crx[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; |
| 66 | 70 |
| 71 SyncChangeList MakeSyncChangeList(const std::string& id, |
| 72 const sync_pb::EntitySpecifics& specifics, |
| 73 SyncChange::SyncChangeType change_type) { |
| 74 syncer::SyncData sync_data = |
| 75 syncer::SyncData::CreateLocalData(id, "Name", specifics); |
| 76 return SyncChangeList(1, SyncChange(FROM_HERE, change_type, sync_data)); |
| 77 } |
| 78 |
| 79 } // namespace |
| 80 |
| 67 class ExtensionServiceSyncTest | 81 class ExtensionServiceSyncTest |
| 68 : public extensions::ExtensionServiceTestWithInstall { | 82 : public extensions::ExtensionServiceTestWithInstall { |
| 69 public: | 83 public: |
| 70 void MockSyncStartFlare(bool* was_called, | 84 void MockSyncStartFlare(bool* was_called, |
| 71 syncer::ModelType* model_type_passed_in, | 85 syncer::ModelType* model_type_passed_in, |
| 72 syncer::ModelType model_type) { | 86 syncer::ModelType model_type) { |
| 73 *was_called = true; | 87 *was_called = true; |
| 74 *model_type_passed_in = model_type; | 88 *model_type_passed_in = model_type; |
| 75 } | 89 } |
| 76 | 90 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 | 170 |
| 157 EXPECT_TRUE(flare_was_called); | 171 EXPECT_TRUE(flare_was_called); |
| 158 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); | 172 EXPECT_EQ(syncer::EXTENSIONS, triggered_type); |
| 159 | 173 |
| 160 // Reset. | 174 // Reset. |
| 161 flare_was_called = false; | 175 flare_was_called = false; |
| 162 triggered_type = syncer::UNSPECIFIED; | 176 triggered_type = syncer::UNSPECIFIED; |
| 163 | 177 |
| 164 // Once sync starts, flare should no longer be invoked. | 178 // Once sync starts, flare should no longer be invoked. |
| 165 extension_sync_service()->MergeDataAndStartSyncing( | 179 extension_sync_service()->MergeDataAndStartSyncing( |
| 166 syncer::EXTENSIONS, | 180 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 167 syncer::SyncDataList(), | 181 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 168 scoped_ptr<syncer::SyncChangeProcessor>( | 182 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 169 new syncer::FakeSyncChangeProcessor), | |
| 170 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 171 path = data_dir().AppendASCII("page_action.crx"); | 183 path = data_dir().AppendASCII("page_action.crx"); |
| 172 InstallCRX(path, INSTALL_NEW); | 184 InstallCRX(path, INSTALL_NEW); |
| 173 EXPECT_FALSE(flare_was_called); | 185 EXPECT_FALSE(flare_was_called); |
| 174 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); | 186 ASSERT_EQ(syncer::UNSPECIFIED, triggered_type); |
| 175 } | 187 } |
| 176 | 188 |
| 177 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) { | 189 TEST_F(ExtensionServiceSyncTest, DisableExtensionFromSync) { |
| 178 // Start the extensions service with one external extension already installed. | 190 // Start the extensions service with one external extension already installed. |
| 179 base::FilePath source_install_dir = | 191 base::FilePath source_install_dir = |
| 180 data_dir().AppendASCII("good").AppendASCII("Extensions"); | 192 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 193 | 205 |
| 194 ASSERT_EQ(3u, loaded_.size()); | 206 ASSERT_EQ(3u, loaded_.size()); |
| 195 | 207 |
| 196 // We start enabled. | 208 // We start enabled. |
| 197 const Extension* extension = service()->GetExtensionById(good0, true); | 209 const Extension* extension = service()->GetExtensionById(good0, true); |
| 198 ASSERT_TRUE(extension); | 210 ASSERT_TRUE(extension); |
| 199 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 211 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
| 200 | 212 |
| 201 // Sync starts up. | 213 // Sync starts up. |
| 202 extension_sync_service()->MergeDataAndStartSyncing( | 214 extension_sync_service()->MergeDataAndStartSyncing( |
| 203 syncer::EXTENSIONS, | 215 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 204 syncer::SyncDataList(), | 216 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 205 make_scoped_ptr(new syncer::FakeSyncChangeProcessor), | 217 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 206 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 207 | 218 |
| 208 // Then sync data arrives telling us to disable |good0|. | 219 // Then sync data arrives telling us to disable |good0|. |
| 209 ExtensionSyncData disable_good_crx(*extension, false, | 220 ExtensionSyncData disable_good_crx(*extension, false, |
| 210 Extension::DISABLE_USER_ACTION, false, | 221 Extension::DISABLE_USER_ACTION, false, |
| 211 false, ExtensionSyncData::BOOLEAN_UNSET); | 222 false, ExtensionSyncData::BOOLEAN_UNSET); |
| 212 syncer::SyncChange sync_change(FROM_HERE, | 223 SyncChangeList list( |
| 213 syncer::SyncChange::ACTION_UPDATE, | 224 1, disable_good_crx.GetSyncChange(SyncChange::ACTION_UPDATE)); |
| 214 disable_good_crx.GetSyncData()); | |
| 215 syncer::SyncChangeList list(1, sync_change); | |
| 216 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 225 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 217 | 226 |
| 218 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); | 227 ASSERT_FALSE(service()->IsExtensionEnabled(good0)); |
| 219 } | 228 } |
| 220 | 229 |
| 221 TEST_F(ExtensionServiceSyncTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) { | 230 TEST_F(ExtensionServiceSyncTest, IgnoreSyncChangesWhenLocalStateIsMoreRecent) { |
| 222 // Start the extension service with three extensions already installed. | 231 // Start the extension service with three extensions already installed. |
| 223 base::FilePath source_install_dir = | 232 base::FilePath source_install_dir = |
| 224 data_dir().AppendASCII("good").AppendASCII("Extensions"); | 233 data_dir().AppendASCII("good").AppendASCII("Extensions"); |
| 225 base::FilePath pref_path = | 234 base::FilePath pref_path = |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 ExtensionSyncData::BOOLEAN_UNSET); | 271 ExtensionSyncData::BOOLEAN_UNSET); |
| 263 ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, | 272 ExtensionSyncData enable_good2(*extension2, true, Extension::DISABLE_NONE, |
| 264 false, false, | 273 false, false, |
| 265 ExtensionSyncData::BOOLEAN_UNSET); | 274 ExtensionSyncData::BOOLEAN_UNSET); |
| 266 syncer::SyncDataList sync_data; | 275 syncer::SyncDataList sync_data; |
| 267 sync_data.push_back(disable_good0.GetSyncData()); | 276 sync_data.push_back(disable_good0.GetSyncData()); |
| 268 sync_data.push_back(enable_good2.GetSyncData()); | 277 sync_data.push_back(enable_good2.GetSyncData()); |
| 269 extension_sync_service()->MergeDataAndStartSyncing( | 278 extension_sync_service()->MergeDataAndStartSyncing( |
| 270 syncer::EXTENSIONS, | 279 syncer::EXTENSIONS, |
| 271 sync_data, | 280 sync_data, |
| 272 make_scoped_ptr(new syncer::FakeSyncChangeProcessor), | 281 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 273 make_scoped_ptr(new syncer::SyncErrorFactoryMock)); | 282 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 274 | 283 |
| 275 // Both sync changes should be ignored, since the local state was changed | 284 // Both sync changes should be ignored, since the local state was changed |
| 276 // before sync started, and so the local state is considered more recent. | 285 // before sync started, and so the local state is considered more recent. |
| 277 EXPECT_TRUE(service()->IsExtensionEnabled(good0)); | 286 EXPECT_TRUE(service()->IsExtensionEnabled(good0)); |
| 278 EXPECT_FALSE(service()->IsExtensionEnabled(good2)); | 287 EXPECT_FALSE(service()->IsExtensionEnabled(good2)); |
| 279 } | 288 } |
| 280 | 289 |
| 281 TEST_F(ExtensionServiceSyncTest, DontSelfNotify) { | 290 TEST_F(ExtensionServiceSyncTest, DontSelfNotify) { |
| 282 // Start the extension service with three extensions already installed. | 291 // Start the extension service with three extensions already installed. |
| 283 base::FilePath source_install_dir = | 292 base::FilePath source_install_dir = |
| (...skipping 12 matching lines...) Expand all Loading... |
| 296 ASSERT_TRUE(service()->is_ready()); | 305 ASSERT_TRUE(service()->is_ready()); |
| 297 ASSERT_EQ(3u, loaded_.size()); | 306 ASSERT_EQ(3u, loaded_.size()); |
| 298 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); | 307 ASSERT_TRUE(service()->IsExtensionEnabled(good0)); |
| 299 | 308 |
| 300 syncer::FakeSyncChangeProcessor* processor = | 309 syncer::FakeSyncChangeProcessor* processor = |
| 301 new syncer::FakeSyncChangeProcessor; | 310 new syncer::FakeSyncChangeProcessor; |
| 302 extension_sync_service()->MergeDataAndStartSyncing( | 311 extension_sync_service()->MergeDataAndStartSyncing( |
| 303 syncer::EXTENSIONS, | 312 syncer::EXTENSIONS, |
| 304 syncer::SyncDataList(), | 313 syncer::SyncDataList(), |
| 305 make_scoped_ptr(processor), | 314 make_scoped_ptr(processor), |
| 306 make_scoped_ptr(new syncer::SyncErrorFactoryMock)); | 315 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 307 | 316 |
| 308 processor->changes().clear(); | 317 processor->changes().clear(); |
| 309 | 318 |
| 310 // Simulate various incoming sync changes, and make sure they don't result in | 319 // Simulate various incoming sync changes, and make sure they don't result in |
| 311 // any outgoing changes. | 320 // any outgoing changes. |
| 312 | 321 |
| 313 { | 322 { |
| 314 const Extension* extension = service()->GetExtensionById(good0, true); | 323 const Extension* extension = service()->GetExtensionById(good0, true); |
| 315 ASSERT_TRUE(extension); | 324 ASSERT_TRUE(extension); |
| 316 | 325 |
| 317 // Disable the extension. | 326 // Disable the extension. |
| 318 ExtensionSyncData data(*extension, false, Extension::DISABLE_USER_ACTION, | 327 ExtensionSyncData data(*extension, false, Extension::DISABLE_USER_ACTION, |
| 319 false, false, ExtensionSyncData::BOOLEAN_UNSET); | 328 false, false, ExtensionSyncData::BOOLEAN_UNSET); |
| 320 syncer::SyncChangeList list( | 329 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE)); |
| 321 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE)); | |
| 322 | 330 |
| 323 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 331 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 324 | 332 |
| 325 EXPECT_TRUE(processor->changes().empty()); | 333 EXPECT_TRUE(processor->changes().empty()); |
| 326 } | 334 } |
| 327 | 335 |
| 328 { | 336 { |
| 329 const Extension* extension = service()->GetExtensionById(good0, true); | 337 const Extension* extension = service()->GetExtensionById(good0, true); |
| 330 ASSERT_TRUE(extension); | 338 ASSERT_TRUE(extension); |
| 331 | 339 |
| 332 // Set incognito enabled to true. | 340 // Set incognito enabled to true. |
| 333 ExtensionSyncData data(*extension, false, Extension::DISABLE_NONE, true, | 341 ExtensionSyncData data(*extension, false, Extension::DISABLE_NONE, true, |
| 334 false, ExtensionSyncData::BOOLEAN_UNSET); | 342 false, ExtensionSyncData::BOOLEAN_UNSET); |
| 335 syncer::SyncChangeList list( | 343 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE)); |
| 336 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE)); | |
| 337 | 344 |
| 338 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 345 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 339 | 346 |
| 340 EXPECT_TRUE(processor->changes().empty()); | 347 EXPECT_TRUE(processor->changes().empty()); |
| 341 } | 348 } |
| 342 | 349 |
| 343 { | 350 { |
| 344 const Extension* extension = service()->GetExtensionById(good0, true); | 351 const Extension* extension = service()->GetExtensionById(good0, true); |
| 345 ASSERT_TRUE(extension); | 352 ASSERT_TRUE(extension); |
| 346 | 353 |
| 347 // Add another disable reason. | 354 // Add another disable reason. |
| 348 ExtensionSyncData data(*extension, false, | 355 ExtensionSyncData data(*extension, false, |
| 349 Extension::DISABLE_USER_ACTION | | 356 Extension::DISABLE_USER_ACTION | |
| 350 Extension::DISABLE_PERMISSIONS_INCREASE, | 357 Extension::DISABLE_PERMISSIONS_INCREASE, |
| 351 false, false, ExtensionSyncData::BOOLEAN_UNSET); | 358 false, false, ExtensionSyncData::BOOLEAN_UNSET); |
| 352 syncer::SyncChangeList list( | 359 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_UPDATE)); |
| 353 1, data.GetSyncChange(syncer::SyncChange::ACTION_UPDATE)); | |
| 354 | 360 |
| 355 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 361 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 356 | 362 |
| 357 EXPECT_TRUE(processor->changes().empty()); | 363 EXPECT_TRUE(processor->changes().empty()); |
| 358 } | 364 } |
| 359 | 365 |
| 360 { | 366 { |
| 361 const Extension* extension = service()->GetExtensionById(good0, true); | 367 const Extension* extension = service()->GetExtensionById(good0, true); |
| 362 ASSERT_TRUE(extension); | 368 ASSERT_TRUE(extension); |
| 363 | 369 |
| 364 // Uninstall the extension. | 370 // Uninstall the extension. |
| 365 ExtensionSyncData data(*extension, false, | 371 ExtensionSyncData data(*extension, false, |
| 366 Extension::DISABLE_USER_ACTION | | 372 Extension::DISABLE_USER_ACTION | |
| 367 Extension::DISABLE_PERMISSIONS_INCREASE, | 373 Extension::DISABLE_PERMISSIONS_INCREASE, |
| 368 false, false, ExtensionSyncData::BOOLEAN_UNSET); | 374 false, false, ExtensionSyncData::BOOLEAN_UNSET); |
| 369 syncer::SyncChangeList list( | 375 SyncChangeList list(1, data.GetSyncChange(SyncChange::ACTION_DELETE)); |
| 370 1, data.GetSyncChange(syncer::SyncChange::ACTION_DELETE)); | |
| 371 | 376 |
| 372 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 377 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 373 | 378 |
| 374 EXPECT_TRUE(processor->changes().empty()); | 379 EXPECT_TRUE(processor->changes().empty()); |
| 375 } | 380 } |
| 376 } | 381 } |
| 377 | 382 |
| 378 TEST_F(ExtensionServiceSyncTest, GetSyncData) { | 383 TEST_F(ExtensionServiceSyncTest, GetSyncData) { |
| 379 InitializeEmptyExtensionService(); | 384 InitializeEmptyExtensionService(); |
| 380 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 385 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 381 const Extension* extension = service()->GetInstalledExtension(good_crx); | 386 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 382 ASSERT_TRUE(extension); | 387 ASSERT_TRUE(extension); |
| 383 | 388 |
| 384 extension_sync_service()->MergeDataAndStartSyncing( | 389 extension_sync_service()->MergeDataAndStartSyncing( |
| 385 syncer::EXTENSIONS, | 390 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 386 syncer::SyncDataList(), | 391 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 387 scoped_ptr<syncer::SyncChangeProcessor>( | 392 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 388 new syncer::FakeSyncChangeProcessor), | |
| 389 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 390 | 393 |
| 391 syncer::SyncDataList list = | 394 syncer::SyncDataList list = |
| 392 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 395 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 393 ASSERT_EQ(list.size(), 1U); | 396 ASSERT_EQ(list.size(), 1U); |
| 394 scoped_ptr<ExtensionSyncData> data = | 397 scoped_ptr<ExtensionSyncData> data = |
| 395 ExtensionSyncData::CreateFromSyncData(list[0]); | 398 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 396 ASSERT_TRUE(data.get()); | 399 ASSERT_TRUE(data.get()); |
| 397 EXPECT_EQ(extension->id(), data->id()); | 400 EXPECT_EQ(extension->id(), data->id()); |
| 398 EXPECT_FALSE(data->uninstalled()); | 401 EXPECT_FALSE(data->uninstalled()); |
| 399 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); | 402 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); |
| 400 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), | 403 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
| 401 data->incognito_enabled()); | 404 data->incognito_enabled()); |
| 402 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 405 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 403 EXPECT_TRUE(data->version().Equals(*extension->version())); | 406 EXPECT_TRUE(data->version().Equals(*extension->version())); |
| 404 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 407 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
| 405 data->update_url()); | 408 data->update_url()); |
| 406 EXPECT_EQ(extension->name(), data->name()); | 409 EXPECT_EQ(extension->name(), data->name()); |
| 407 } | 410 } |
| 408 | 411 |
| 409 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) { | 412 TEST_F(ExtensionServiceSyncTest, GetSyncDataDisableReasons) { |
| 410 InitializeEmptyExtensionService(); | 413 InitializeEmptyExtensionService(); |
| 411 const Extension* extension = | 414 const Extension* extension = |
| 412 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 415 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 413 ASSERT_TRUE(extension); | 416 ASSERT_TRUE(extension); |
| 414 | 417 |
| 415 syncer::FakeSyncChangeProcessor processor; | |
| 416 extension_sync_service()->MergeDataAndStartSyncing( | 418 extension_sync_service()->MergeDataAndStartSyncing( |
| 417 syncer::EXTENSIONS, | 419 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 418 syncer::SyncDataList(), | 420 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 419 scoped_ptr<syncer::SyncChangeProcessor>( | 421 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 420 new syncer::FakeSyncChangeProcessor), | |
| 421 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 422 | 422 |
| 423 { | 423 { |
| 424 syncer::SyncDataList list = | 424 syncer::SyncDataList list = |
| 425 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 425 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 426 ASSERT_EQ(list.size(), 1U); | 426 ASSERT_EQ(list.size(), 1U); |
| 427 scoped_ptr<ExtensionSyncData> data = | 427 scoped_ptr<ExtensionSyncData> data = |
| 428 ExtensionSyncData::CreateFromSyncData(list[0]); | 428 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 429 ASSERT_TRUE(data.get()); | 429 ASSERT_TRUE(data.get()); |
| 430 EXPECT_TRUE(data->enabled()); | 430 EXPECT_TRUE(data->enabled()); |
| 431 EXPECT_TRUE(data->supports_disable_reasons()); | 431 EXPECT_TRUE(data->supports_disable_reasons()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 service()->EnableExtension(good_crx); | 480 service()->EnableExtension(good_crx); |
| 481 } | 481 } |
| 482 | 482 |
| 483 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) { | 483 TEST_F(ExtensionServiceSyncTest, GetSyncDataTerminated) { |
| 484 InitializeEmptyExtensionService(); | 484 InitializeEmptyExtensionService(); |
| 485 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 485 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 486 TerminateExtension(good_crx); | 486 TerminateExtension(good_crx); |
| 487 const Extension* extension = service()->GetInstalledExtension(good_crx); | 487 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 488 ASSERT_TRUE(extension); | 488 ASSERT_TRUE(extension); |
| 489 | 489 |
| 490 syncer::FakeSyncChangeProcessor processor; | |
| 491 extension_sync_service()->MergeDataAndStartSyncing( | 490 extension_sync_service()->MergeDataAndStartSyncing( |
| 492 syncer::EXTENSIONS, | 491 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 493 syncer::SyncDataList(), | 492 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 494 scoped_ptr<syncer::SyncChangeProcessor>( | 493 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 495 new syncer::FakeSyncChangeProcessor), | |
| 496 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 497 | 494 |
| 498 syncer::SyncDataList list = | 495 syncer::SyncDataList list = |
| 499 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 496 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 500 ASSERT_EQ(list.size(), 1U); | 497 ASSERT_EQ(list.size(), 1U); |
| 501 scoped_ptr<ExtensionSyncData> data = | 498 scoped_ptr<ExtensionSyncData> data = |
| 502 ExtensionSyncData::CreateFromSyncData(list[0]); | 499 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 503 ASSERT_TRUE(data.get()); | 500 ASSERT_TRUE(data.get()); |
| 504 EXPECT_EQ(extension->id(), data->id()); | 501 EXPECT_EQ(extension->id(), data->id()); |
| 505 EXPECT_FALSE(data->uninstalled()); | 502 EXPECT_FALSE(data->uninstalled()); |
| 506 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); | 503 EXPECT_EQ(service()->IsExtensionEnabled(good_crx), data->enabled()); |
| 507 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), | 504 EXPECT_EQ(extensions::util::IsIncognitoEnabled(good_crx, profile()), |
| 508 data->incognito_enabled()); | 505 data->incognito_enabled()); |
| 509 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); | 506 EXPECT_EQ(ExtensionSyncData::BOOLEAN_UNSET, data->all_urls_enabled()); |
| 510 EXPECT_TRUE(data->version().Equals(*extension->version())); | 507 EXPECT_TRUE(data->version().Equals(*extension->version())); |
| 511 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), | 508 EXPECT_EQ(extensions::ManifestURL::GetUpdateURL(extension), |
| 512 data->update_url()); | 509 data->update_url()); |
| 513 EXPECT_EQ(extension->name(), data->name()); | 510 EXPECT_EQ(extension->name(), data->name()); |
| 514 } | 511 } |
| 515 | 512 |
| 516 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) { | 513 TEST_F(ExtensionServiceSyncTest, GetSyncDataFilter) { |
| 517 InitializeEmptyExtensionService(); | 514 InitializeEmptyExtensionService(); |
| 518 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 515 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 519 const Extension* extension = service()->GetInstalledExtension(good_crx); | 516 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 520 ASSERT_TRUE(extension); | 517 ASSERT_TRUE(extension); |
| 521 | 518 |
| 522 syncer::FakeSyncChangeProcessor processor; | |
| 523 extension_sync_service()->MergeDataAndStartSyncing( | 519 extension_sync_service()->MergeDataAndStartSyncing( |
| 524 syncer::APPS, | 520 syncer::APPS, syncer::SyncDataList(), |
| 525 syncer::SyncDataList(), | 521 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 526 scoped_ptr<syncer::SyncChangeProcessor>( | 522 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 527 new syncer::FakeSyncChangeProcessor), | |
| 528 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 529 | 523 |
| 530 syncer::SyncDataList list = | 524 syncer::SyncDataList list = |
| 531 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 525 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 532 ASSERT_EQ(list.size(), 0U); | 526 ASSERT_EQ(list.size(), 0U); |
| 533 } | 527 } |
| 534 | 528 |
| 535 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) { | 529 TEST_F(ExtensionServiceSyncTest, GetSyncExtensionDataUserSettings) { |
| 536 InitializeEmptyExtensionService(); | 530 InitializeEmptyExtensionService(); |
| 537 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 531 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 538 const Extension* extension = service()->GetInstalledExtension(good_crx); | 532 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 539 ASSERT_TRUE(extension); | 533 ASSERT_TRUE(extension); |
| 540 | 534 |
| 541 syncer::FakeSyncChangeProcessor processor; | |
| 542 extension_sync_service()->MergeDataAndStartSyncing( | 535 extension_sync_service()->MergeDataAndStartSyncing( |
| 543 syncer::EXTENSIONS, | 536 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 544 syncer::SyncDataList(), | 537 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 545 scoped_ptr<syncer::SyncChangeProcessor>( | 538 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 546 new syncer::FakeSyncChangeProcessor), | |
| 547 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 548 | 539 |
| 549 { | 540 { |
| 550 syncer::SyncDataList list = | 541 syncer::SyncDataList list = |
| 551 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 542 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 552 ASSERT_EQ(list.size(), 1U); | 543 ASSERT_EQ(list.size(), 1U); |
| 553 scoped_ptr<ExtensionSyncData> data = | 544 scoped_ptr<ExtensionSyncData> data = |
| 554 ExtensionSyncData::CreateFromSyncData(list[0]); | 545 ExtensionSyncData::CreateFromSyncData(list[0]); |
| 555 ASSERT_TRUE(data.get()); | 546 ASSERT_TRUE(data.get()); |
| 556 EXPECT_TRUE(data->enabled()); | 547 EXPECT_TRUE(data->enabled()); |
| 557 EXPECT_FALSE(data->incognito_enabled()); | 548 EXPECT_FALSE(data->incognito_enabled()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 } | 593 } |
| 603 } | 594 } |
| 604 | 595 |
| 605 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) { | 596 TEST_F(ExtensionServiceSyncTest, SyncForUninstalledExternalExtension) { |
| 606 InitializeEmptyExtensionService(); | 597 InitializeEmptyExtensionService(); |
| 607 InstallCRXWithLocation( | 598 InstallCRXWithLocation( |
| 608 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); | 599 data_dir().AppendASCII("good.crx"), Manifest::EXTERNAL_PREF, INSTALL_NEW); |
| 609 const Extension* extension = service()->GetInstalledExtension(good_crx); | 600 const Extension* extension = service()->GetInstalledExtension(good_crx); |
| 610 ASSERT_TRUE(extension); | 601 ASSERT_TRUE(extension); |
| 611 | 602 |
| 612 syncer::FakeSyncChangeProcessor processor; | |
| 613 extension_sync_service()->MergeDataAndStartSyncing( | 603 extension_sync_service()->MergeDataAndStartSyncing( |
| 614 syncer::EXTENSIONS, | 604 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 615 syncer::SyncDataList(), | 605 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 616 scoped_ptr<syncer::SyncChangeProcessor>( | 606 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 617 new syncer::FakeSyncChangeProcessor), | |
| 618 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 619 | 607 |
| 620 UninstallExtension(good_crx, false); | 608 UninstallExtension(good_crx, false); |
| 621 EXPECT_TRUE( | 609 EXPECT_TRUE( |
| 622 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); | 610 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); |
| 623 | 611 |
| 624 sync_pb::EntitySpecifics specifics; | 612 sync_pb::EntitySpecifics specifics; |
| 625 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); | 613 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); |
| 626 sync_pb::ExtensionSpecifics* extension_specifics = | 614 sync_pb::ExtensionSpecifics* extension_specifics = |
| 627 app_specifics->mutable_extension(); | 615 app_specifics->mutable_extension(); |
| 628 extension_specifics->set_id(good_crx); | 616 extension_specifics->set_id(good_crx); |
| 629 extension_specifics->set_version("1.0"); | 617 extension_specifics->set_version("1.0"); |
| 630 extension_specifics->set_enabled(true); | 618 extension_specifics->set_enabled(true); |
| 631 | 619 |
| 632 syncer::SyncData sync_data = | 620 SyncChangeList list = |
| 633 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 621 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 634 syncer::SyncChange sync_change(FROM_HERE, | |
| 635 syncer::SyncChange::ACTION_UPDATE, | |
| 636 sync_data); | |
| 637 syncer::SyncChangeList list(1); | |
| 638 list[0] = sync_change; | |
| 639 | 622 |
| 640 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 623 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 641 EXPECT_TRUE( | 624 EXPECT_TRUE( |
| 642 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); | 625 ExtensionPrefs::Get(profile())->IsExternalExtensionUninstalled(good_crx)); |
| 643 } | 626 } |
| 644 | 627 |
| 645 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) { | 628 TEST_F(ExtensionServiceSyncTest, GetSyncAppDataUserSettings) { |
| 646 InitializeEmptyExtensionService(); | 629 InitializeEmptyExtensionService(); |
| 647 const Extension* app = | 630 const Extension* app = |
| 648 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); | 631 PackAndInstallCRX(data_dir().AppendASCII("app"), INSTALL_NEW); |
| 649 ASSERT_TRUE(app); | 632 ASSERT_TRUE(app); |
| 650 ASSERT_TRUE(app->is_app()); | 633 ASSERT_TRUE(app->is_app()); |
| 651 | 634 |
| 652 syncer::FakeSyncChangeProcessor processor; | |
| 653 extension_sync_service()->MergeDataAndStartSyncing( | 635 extension_sync_service()->MergeDataAndStartSyncing( |
| 654 syncer::APPS, | 636 syncer::APPS, syncer::SyncDataList(), |
| 655 syncer::SyncDataList(), | 637 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 656 scoped_ptr<syncer::SyncChangeProcessor>( | 638 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 657 new syncer::FakeSyncChangeProcessor), | |
| 658 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 659 | 639 |
| 660 syncer::StringOrdinal initial_ordinal = | 640 syncer::StringOrdinal initial_ordinal = |
| 661 syncer::StringOrdinal::CreateInitialOrdinal(); | 641 syncer::StringOrdinal::CreateInitialOrdinal(); |
| 662 { | 642 { |
| 663 syncer::SyncDataList list = | 643 syncer::SyncDataList list = |
| 664 extension_sync_service()->GetAllSyncData(syncer::APPS); | 644 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 665 ASSERT_EQ(list.size(), 1U); | 645 ASSERT_EQ(list.size(), 1U); |
| 666 | 646 |
| 667 scoped_ptr<ExtensionSyncData> app_sync_data = | 647 scoped_ptr<ExtensionSyncData> app_sync_data = |
| 668 ExtensionSyncData::CreateFromSyncData(list[0]); | 648 ExtensionSyncData::CreateFromSyncData(list[0]); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 const size_t kAppCount = 3; | 687 const size_t kAppCount = 3; |
| 708 const Extension* apps[kAppCount]; | 688 const Extension* apps[kAppCount]; |
| 709 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); | 689 apps[0] = PackAndInstallCRX(data_dir().AppendASCII("app1"), INSTALL_NEW); |
| 710 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); | 690 apps[1] = PackAndInstallCRX(data_dir().AppendASCII("app2"), INSTALL_NEW); |
| 711 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); | 691 apps[2] = PackAndInstallCRX(data_dir().AppendASCII("app4"), INSTALL_NEW); |
| 712 for (size_t i = 0; i < kAppCount; ++i) { | 692 for (size_t i = 0; i < kAppCount; ++i) { |
| 713 ASSERT_TRUE(apps[i]); | 693 ASSERT_TRUE(apps[i]); |
| 714 ASSERT_TRUE(apps[i]->is_app()); | 694 ASSERT_TRUE(apps[i]->is_app()); |
| 715 } | 695 } |
| 716 | 696 |
| 717 syncer::FakeSyncChangeProcessor processor; | |
| 718 extension_sync_service()->MergeDataAndStartSyncing( | 697 extension_sync_service()->MergeDataAndStartSyncing( |
| 719 syncer::APPS, | 698 syncer::APPS, syncer::SyncDataList(), |
| 720 syncer::SyncDataList(), | 699 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 721 scoped_ptr<syncer::SyncChangeProcessor>( | 700 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 722 new syncer::FakeSyncChangeProcessor), | |
| 723 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 724 | 701 |
| 725 ExtensionSystem::Get(service()->GetBrowserContext()) | 702 ExtensionSystem::Get(service()->GetBrowserContext()) |
| 726 ->app_sorting() | 703 ->app_sorting() |
| 727 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); | 704 ->OnExtensionMoved(apps[0]->id(), apps[1]->id(), apps[2]->id()); |
| 728 { | 705 { |
| 729 syncer::SyncDataList list = | 706 syncer::SyncDataList list = |
| 730 extension_sync_service()->GetAllSyncData(syncer::APPS); | 707 extension_sync_service()->GetAllSyncData(syncer::APPS); |
| 731 ASSERT_EQ(list.size(), 3U); | 708 ASSERT_EQ(list.size(), 3U); |
| 732 | 709 |
| 733 scoped_ptr<ExtensionSyncData> data[kAppCount]; | 710 scoped_ptr<ExtensionSyncData> data[kAppCount]; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 752 } | 729 } |
| 753 } | 730 } |
| 754 | 731 |
| 755 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) { | 732 TEST_F(ExtensionServiceSyncTest, GetSyncDataList) { |
| 756 InitializeEmptyExtensionService(); | 733 InitializeEmptyExtensionService(); |
| 757 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 734 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 758 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); | 735 InstallCRX(data_dir().AppendASCII("page_action.crx"), INSTALL_NEW); |
| 759 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); | 736 InstallCRX(data_dir().AppendASCII("theme.crx"), INSTALL_NEW); |
| 760 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); | 737 InstallCRX(data_dir().AppendASCII("theme2.crx"), INSTALL_NEW); |
| 761 | 738 |
| 762 syncer::FakeSyncChangeProcessor processor; | |
| 763 extension_sync_service()->MergeDataAndStartSyncing( | 739 extension_sync_service()->MergeDataAndStartSyncing( |
| 764 syncer::APPS, | 740 syncer::APPS, syncer::SyncDataList(), |
| 765 syncer::SyncDataList(), | 741 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 766 scoped_ptr<syncer::SyncChangeProcessor>( | 742 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 767 new syncer::FakeSyncChangeProcessor), | |
| 768 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 769 extension_sync_service()->MergeDataAndStartSyncing( | 743 extension_sync_service()->MergeDataAndStartSyncing( |
| 770 syncer::EXTENSIONS, | 744 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 771 syncer::SyncDataList(), | 745 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 772 scoped_ptr<syncer::SyncChangeProcessor>( | 746 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 773 new syncer::FakeSyncChangeProcessor), | |
| 774 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 775 | 747 |
| 776 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); | 748 service()->DisableExtension(page_action, Extension::DISABLE_USER_ACTION); |
| 777 TerminateExtension(theme2_crx); | 749 TerminateExtension(theme2_crx); |
| 778 | 750 |
| 779 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); | 751 EXPECT_EQ(0u, extension_sync_service()->GetAllSyncData(syncer::APPS).size()); |
| 780 EXPECT_EQ( | 752 EXPECT_EQ( |
| 781 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); | 753 2u, extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS).size()); |
| 782 } | 754 } |
| 783 | 755 |
| 784 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) { | 756 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataUninstall) { |
| 785 InitializeEmptyExtensionService(); | 757 InitializeEmptyExtensionService(); |
| 786 syncer::FakeSyncChangeProcessor processor; | |
| 787 extension_sync_service()->MergeDataAndStartSyncing( | 758 extension_sync_service()->MergeDataAndStartSyncing( |
| 788 syncer::EXTENSIONS, | 759 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 789 syncer::SyncDataList(), | 760 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 790 scoped_ptr<syncer::SyncChangeProcessor>( | 761 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 791 new syncer::FakeSyncChangeProcessor), | |
| 792 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 793 | 762 |
| 794 sync_pb::EntitySpecifics specifics; | 763 sync_pb::EntitySpecifics specifics; |
| 795 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 764 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 796 ext_specifics->set_id(good_crx); | 765 ext_specifics->set_id(good_crx); |
| 797 ext_specifics->set_version("1.0"); | 766 ext_specifics->set_version("1.0"); |
| 798 syncer::SyncData sync_data = | 767 |
| 799 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 768 SyncChangeList list = |
| 800 syncer::SyncChange sync_change(FROM_HERE, | 769 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE); |
| 801 syncer::SyncChange::ACTION_DELETE, | |
| 802 sync_data); | |
| 803 syncer::SyncChangeList list(1); | |
| 804 list[0] = sync_change; | |
| 805 | 770 |
| 806 // Should do nothing. | 771 // Should do nothing. |
| 807 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 772 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 808 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); | 773 EXPECT_FALSE(service()->GetExtensionById(good_crx, true)); |
| 809 | 774 |
| 810 // Install the extension. | 775 // Install the extension. |
| 811 base::FilePath extension_path = data_dir().AppendASCII("good.crx"); | 776 base::FilePath extension_path = data_dir().AppendASCII("good.crx"); |
| 812 InstallCRX(extension_path, INSTALL_NEW); | 777 InstallCRX(extension_path, INSTALL_NEW); |
| 813 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); | 778 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
| 814 | 779 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 832 sync_pb::EntitySpecifics specifics; | 797 sync_pb::EntitySpecifics specifics; |
| 833 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); | 798 sync_pb::AppSpecifics* app_specifics = specifics.mutable_app(); |
| 834 sync_pb::ExtensionSpecifics* extension_specifics = | 799 sync_pb::ExtensionSpecifics* extension_specifics = |
| 835 app_specifics->mutable_extension(); | 800 app_specifics->mutable_extension(); |
| 836 extension_specifics->set_id(good_crx); | 801 extension_specifics->set_id(good_crx); |
| 837 extension_specifics->set_version( | 802 extension_specifics->set_version( |
| 838 service()->GetInstalledExtension(good_crx)->version()->GetString()); | 803 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
| 839 | 804 |
| 840 { | 805 { |
| 841 extension_specifics->set_enabled(true); | 806 extension_specifics->set_enabled(true); |
| 842 syncer::SyncData sync_data = | 807 |
| 843 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 808 SyncChangeList list = |
| 844 syncer::SyncChange sync_change(FROM_HERE, | 809 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_DELETE); |
| 845 syncer::SyncChange::ACTION_DELETE, | |
| 846 sync_data); | |
| 847 syncer::SyncChangeList list(1); | |
| 848 list[0] = sync_change; | |
| 849 | 810 |
| 850 // Should do nothing | 811 // Should do nothing |
| 851 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 812 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 852 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); | 813 EXPECT_TRUE(service()->GetExtensionById(good_crx, true)); |
| 853 } | 814 } |
| 854 | 815 |
| 855 { | 816 { |
| 856 extension_specifics->set_enabled(false); | 817 extension_specifics->set_enabled(false); |
| 857 syncer::SyncData sync_data = | 818 |
| 858 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 819 SyncChangeList list = |
| 859 syncer::SyncChange sync_change(FROM_HERE, | 820 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 860 syncer::SyncChange::ACTION_UPDATE, | |
| 861 sync_data); | |
| 862 syncer::SyncChangeList list(1); | |
| 863 list[0] = sync_change; | |
| 864 | 821 |
| 865 // Should again do nothing. | 822 // Should again do nothing. |
| 866 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 823 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 867 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); | 824 EXPECT_TRUE(service()->GetExtensionById(good_crx, false)); |
| 868 } | 825 } |
| 869 } | 826 } |
| 870 | 827 |
| 871 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) { | 828 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataSettings) { |
| 872 InitializeEmptyExtensionService(); | 829 InitializeEmptyExtensionService(); |
| 873 syncer::FakeSyncChangeProcessor processor; | |
| 874 extension_sync_service()->MergeDataAndStartSyncing( | 830 extension_sync_service()->MergeDataAndStartSyncing( |
| 875 syncer::EXTENSIONS, | 831 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 876 syncer::SyncDataList(), | 832 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 877 scoped_ptr<syncer::SyncChangeProcessor>( | 833 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 878 new syncer::FakeSyncChangeProcessor), | |
| 879 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 880 | 834 |
| 881 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 835 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 882 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 836 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 883 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 837 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 884 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 838 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
| 885 good_crx, profile())); | 839 good_crx, profile())); |
| 886 const bool kDefaultAllowedScripting = | 840 const bool kDefaultAllowedScripting = |
| 887 extensions::util::DefaultAllowedScriptingOnAllUrls(); | 841 extensions::util::DefaultAllowedScriptingOnAllUrls(); |
| 888 EXPECT_EQ(kDefaultAllowedScripting, | 842 EXPECT_EQ(kDefaultAllowedScripting, |
| 889 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 843 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| 890 | 844 |
| 891 sync_pb::EntitySpecifics specifics; | 845 sync_pb::EntitySpecifics specifics; |
| 892 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 846 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 893 ext_specifics->set_id(good_crx); | 847 ext_specifics->set_id(good_crx); |
| 894 ext_specifics->set_version( | 848 ext_specifics->set_version( |
| 895 service()->GetInstalledExtension(good_crx)->version()->GetString()); | 849 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
| 896 ext_specifics->set_enabled(false); | 850 ext_specifics->set_enabled(false); |
| 897 | 851 |
| 898 { | 852 { |
| 899 syncer::SyncData sync_data = | 853 SyncChangeList list = |
| 900 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 854 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 901 syncer::SyncChange sync_change(FROM_HERE, | 855 |
| 902 syncer::SyncChange::ACTION_UPDATE, | |
| 903 sync_data); | |
| 904 syncer::SyncChangeList list(1); | |
| 905 list[0] = sync_change; | |
| 906 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 856 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 907 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 857 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 908 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 858 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 909 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 859 EXPECT_FALSE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
| 910 good_crx, profile())); | 860 good_crx, profile())); |
| 911 EXPECT_EQ(kDefaultAllowedScripting, | 861 EXPECT_EQ(kDefaultAllowedScripting, |
| 912 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 862 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| 913 } | 863 } |
| 914 | 864 |
| 915 { | 865 { |
| 916 ext_specifics->set_enabled(true); | 866 ext_specifics->set_enabled(true); |
| 917 ext_specifics->set_incognito_enabled(true); | 867 ext_specifics->set_incognito_enabled(true); |
| 918 syncer::SyncData sync_data = | 868 |
| 919 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 869 SyncChangeList list = |
| 920 syncer::SyncChange sync_change(FROM_HERE, | 870 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 921 syncer::SyncChange::ACTION_UPDATE, | 871 |
| 922 sync_data); | |
| 923 syncer::SyncChangeList list(1); | |
| 924 list[0] = sync_change; | |
| 925 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 872 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 926 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 873 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 927 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 874 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 928 } | 875 } |
| 929 | 876 |
| 930 { | 877 { |
| 931 ext_specifics->set_enabled(false); | 878 ext_specifics->set_enabled(false); |
| 932 ext_specifics->set_incognito_enabled(true); | 879 ext_specifics->set_incognito_enabled(true); |
| 933 syncer::SyncData sync_data = | 880 |
| 934 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 881 SyncChangeList list = |
| 935 syncer::SyncChange sync_change(FROM_HERE, | 882 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 936 syncer::SyncChange::ACTION_UPDATE, | 883 |
| 937 sync_data); | |
| 938 syncer::SyncChangeList list(1); | |
| 939 list[0] = sync_change; | |
| 940 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 884 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 941 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 885 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 942 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 886 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 943 } | 887 } |
| 944 | 888 |
| 945 { | 889 { |
| 946 ext_specifics->set_enabled(true); | 890 ext_specifics->set_enabled(true); |
| 947 ext_specifics->set_all_urls_enabled(!kDefaultAllowedScripting); | 891 ext_specifics->set_all_urls_enabled(!kDefaultAllowedScripting); |
| 948 syncer::SyncData sync_data = | 892 |
| 949 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 893 SyncChangeList list = |
| 950 syncer::SyncChange sync_change(FROM_HERE, | 894 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 951 syncer::SyncChange::ACTION_UPDATE, | 895 |
| 952 sync_data); | |
| 953 syncer::SyncChangeList list(1); | |
| 954 list[0] = sync_change; | |
| 955 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 896 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 956 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 897 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 957 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 898 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
| 958 good_crx, profile())); | 899 good_crx, profile())); |
| 959 EXPECT_EQ(!kDefaultAllowedScripting, | 900 EXPECT_EQ(!kDefaultAllowedScripting, |
| 960 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 901 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| 961 } | 902 } |
| 962 | 903 |
| 963 { | 904 { |
| 964 ext_specifics->set_all_urls_enabled(kDefaultAllowedScripting); | 905 ext_specifics->set_all_urls_enabled(kDefaultAllowedScripting); |
| 965 syncer::SyncData sync_data = | 906 |
| 966 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 907 SyncChangeList list = |
| 967 syncer::SyncChange sync_change(FROM_HERE, | 908 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 968 syncer::SyncChange::ACTION_UPDATE, | 909 |
| 969 sync_data); | |
| 970 syncer::SyncChangeList list(1); | |
| 971 list[0] = sync_change; | |
| 972 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 910 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 973 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 911 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 974 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( | 912 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls( |
| 975 good_crx, profile())); | 913 good_crx, profile())); |
| 976 EXPECT_EQ(kDefaultAllowedScripting, | 914 EXPECT_EQ(kDefaultAllowedScripting, |
| 977 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); | 915 extensions::util::AllowedScriptingOnAllUrls(good_crx, profile())); |
| 978 } | 916 } |
| 979 | 917 |
| 980 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 918 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 981 } | 919 } |
| 982 | 920 |
| 983 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) { | 921 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNewExtension) { |
| 984 InitializeEmptyExtensionService(); | 922 InitializeEmptyExtensionService(); |
| 985 syncer::FakeSyncChangeProcessor processor; | |
| 986 extension_sync_service()->MergeDataAndStartSyncing( | 923 extension_sync_service()->MergeDataAndStartSyncing( |
| 987 syncer::EXTENSIONS, | 924 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 988 syncer::SyncDataList(), | 925 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 989 scoped_ptr<syncer::SyncChangeProcessor>( | 926 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 990 new syncer::FakeSyncChangeProcessor), | |
| 991 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 992 | 927 |
| 993 const base::FilePath path = data_dir().AppendASCII("good.crx"); | 928 const base::FilePath path = data_dir().AppendASCII("good.crx"); |
| 994 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 929 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 995 | 930 |
| 996 struct TestCase { | 931 struct TestCase { |
| 997 const char* name; // For failure output only. | 932 const char* name; // For failure output only. |
| 998 bool sync_enabled; // The "enabled" flag coming in from Sync. | 933 bool sync_enabled; // The "enabled" flag coming in from Sync. |
| 999 // The disable reason(s) coming in from Sync, or -1 for "not set". | 934 // The disable reason(s) coming in from Sync, or -1 for "not set". |
| 1000 int sync_disable_reasons; | 935 int sync_disable_reasons; |
| 1001 // The disable reason(s) that should be set on the installed extension. | 936 // The disable reason(s) that should be set on the installed extension. |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1028 SCOPED_TRACE(test_case.name); | 963 SCOPED_TRACE(test_case.name); |
| 1029 | 964 |
| 1030 sync_pb::EntitySpecifics specifics; | 965 sync_pb::EntitySpecifics specifics; |
| 1031 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 966 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1032 ext_specifics->set_id(good_crx); | 967 ext_specifics->set_id(good_crx); |
| 1033 ext_specifics->set_version(base::Version("1").GetString()); | 968 ext_specifics->set_version(base::Version("1").GetString()); |
| 1034 ext_specifics->set_enabled(test_case.sync_enabled); | 969 ext_specifics->set_enabled(test_case.sync_enabled); |
| 1035 if (test_case.sync_disable_reasons != -1) | 970 if (test_case.sync_disable_reasons != -1) |
| 1036 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); | 971 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); |
| 1037 | 972 |
| 1038 syncer::SyncData sync_data = | 973 SyncChangeList list = |
| 1039 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 974 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1040 syncer::SyncChange sync_change(FROM_HERE, | 975 |
| 1041 syncer::SyncChange::ACTION_UPDATE, | |
| 1042 sync_data); | |
| 1043 syncer::SyncChangeList list(1, sync_change); | |
| 1044 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 976 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1045 | 977 |
| 1046 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 978 ASSERT_TRUE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1047 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED | 979 UpdateExtension(good_crx, path, test_case.sync_enabled ? ENABLED |
| 1048 : DISABLED); | 980 : DISABLED); |
| 1049 EXPECT_EQ(test_case.expect_disable_reasons, | 981 EXPECT_EQ(test_case.expect_disable_reasons, |
| 1050 prefs->GetDisableReasons(good_crx)); | 982 prefs->GetDisableReasons(good_crx)); |
| 1051 scoped_ptr<const PermissionSet> permissions = | 983 scoped_ptr<const PermissionSet> permissions = |
| 1052 prefs->GetGrantedPermissions(good_crx); | 984 prefs->GetGrantedPermissions(good_crx); |
| 1053 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty()); | 985 EXPECT_EQ(test_case.expect_permissions_granted, !permissions->IsEmpty()); |
| 1054 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 986 ASSERT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1055 | 987 |
| 1056 // Remove the extension again, so we can install it again for the next case. | 988 // Remove the extension again, so we can install it again for the next case. |
| 1057 UninstallExtension(good_crx, false, | 989 UninstallExtension(good_crx, false, |
| 1058 test_case.sync_enabled ? Extension::ENABLED | 990 test_case.sync_enabled ? Extension::ENABLED |
| 1059 : Extension::DISABLED); | 991 : Extension::DISABLED); |
| 1060 } | 992 } |
| 1061 } | 993 } |
| 1062 | 994 |
| 1063 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) { | 995 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataTerminatedExtension) { |
| 1064 InitializeExtensionServiceWithUpdater(); | 996 InitializeExtensionServiceWithUpdater(); |
| 1065 syncer::FakeSyncChangeProcessor processor; | |
| 1066 extension_sync_service()->MergeDataAndStartSyncing( | 997 extension_sync_service()->MergeDataAndStartSyncing( |
| 1067 syncer::EXTENSIONS, | 998 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1068 syncer::SyncDataList(), | 999 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1069 scoped_ptr<syncer::SyncChangeProcessor>( | 1000 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1070 new syncer::FakeSyncChangeProcessor), | |
| 1071 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1072 | 1001 |
| 1073 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 1002 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 1074 TerminateExtension(good_crx); | 1003 TerminateExtension(good_crx); |
| 1075 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 1004 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 1076 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1005 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1077 | 1006 |
| 1078 sync_pb::EntitySpecifics specifics; | 1007 sync_pb::EntitySpecifics specifics; |
| 1079 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1008 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1080 ext_specifics->set_id(good_crx); | 1009 ext_specifics->set_id(good_crx); |
| 1081 ext_specifics->set_version( | 1010 ext_specifics->set_version( |
| 1082 service()->GetInstalledExtension(good_crx)->version()->GetString()); | 1011 service()->GetInstalledExtension(good_crx)->version()->GetString()); |
| 1083 ext_specifics->set_enabled(false); | 1012 ext_specifics->set_enabled(false); |
| 1084 ext_specifics->set_incognito_enabled(true); | 1013 ext_specifics->set_incognito_enabled(true); |
| 1085 syncer::SyncData sync_data = | 1014 |
| 1086 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1015 SyncChangeList list = |
| 1087 syncer::SyncChange sync_change(FROM_HERE, | 1016 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1088 syncer::SyncChange::ACTION_UPDATE, | |
| 1089 sync_data); | |
| 1090 syncer::SyncChangeList list(1); | |
| 1091 list[0] = sync_change; | |
| 1092 | 1017 |
| 1093 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1018 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1094 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 1019 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 1095 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1020 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1096 | 1021 |
| 1097 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1022 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1098 } | 1023 } |
| 1099 | 1024 |
| 1100 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) { | 1025 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataVersionCheck) { |
| 1101 InitializeExtensionServiceWithUpdater(); | 1026 InitializeExtensionServiceWithUpdater(); |
| 1102 syncer::FakeSyncChangeProcessor processor; | |
| 1103 extension_sync_service()->MergeDataAndStartSyncing( | 1027 extension_sync_service()->MergeDataAndStartSyncing( |
| 1104 syncer::EXTENSIONS, | 1028 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1105 syncer::SyncDataList(), | 1029 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1106 scoped_ptr<syncer::SyncChangeProcessor>( | 1030 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1107 new syncer::FakeSyncChangeProcessor), | |
| 1108 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1109 | 1031 |
| 1110 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); | 1032 InstallCRX(data_dir().AppendASCII("good.crx"), INSTALL_NEW); |
| 1111 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 1033 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 1112 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1034 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1113 | 1035 |
| 1114 sync_pb::EntitySpecifics specifics; | 1036 sync_pb::EntitySpecifics specifics; |
| 1115 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1037 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1116 ext_specifics->set_id(good_crx); | 1038 ext_specifics->set_id(good_crx); |
| 1117 ext_specifics->set_enabled(true); | 1039 ext_specifics->set_enabled(true); |
| 1118 | 1040 |
| 1119 const base::Version installed_version = | 1041 const base::Version installed_version = |
| 1120 *service()->GetInstalledExtension(good_crx)->version(); | 1042 *service()->GetInstalledExtension(good_crx)->version(); |
| 1121 | 1043 |
| 1122 { | 1044 { |
| 1123 ext_specifics->set_version(installed_version.GetString()); | 1045 ext_specifics->set_version(installed_version.GetString()); |
| 1124 syncer::SyncData sync_data = | 1046 |
| 1125 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1047 SyncChangeList list = |
| 1126 syncer::SyncChange sync_change(FROM_HERE, | 1048 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1127 syncer::SyncChange::ACTION_UPDATE, | |
| 1128 sync_data); | |
| 1129 syncer::SyncChangeList list(1, sync_change); | |
| 1130 | 1049 |
| 1131 // Should do nothing if extension version == sync version. | 1050 // Should do nothing if extension version == sync version. |
| 1132 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1051 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1133 EXPECT_FALSE(service()->updater()->WillCheckSoon()); | 1052 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
| 1134 // Make sure the version we'll send back to sync didn't change. | 1053 // Make sure the version we'll send back to sync didn't change. |
| 1135 syncer::SyncDataList data = | 1054 syncer::SyncDataList data = |
| 1136 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1055 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1137 ASSERT_EQ(1u, data.size()); | 1056 ASSERT_EQ(1u, data.size()); |
| 1138 scoped_ptr<ExtensionSyncData> extension_data = | 1057 scoped_ptr<ExtensionSyncData> extension_data = |
| 1139 ExtensionSyncData::CreateFromSyncData(data[0]); | 1058 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1140 ASSERT_TRUE(extension_data); | 1059 ASSERT_TRUE(extension_data); |
| 1141 EXPECT_TRUE(installed_version.Equals(extension_data->version())); | 1060 EXPECT_TRUE(installed_version.Equals(extension_data->version())); |
| 1142 } | 1061 } |
| 1143 | 1062 |
| 1144 // Should do nothing if extension version > sync version. | 1063 // Should do nothing if extension version > sync version. |
| 1145 { | 1064 { |
| 1146 ext_specifics->set_version("0.0.0.0"); | 1065 ext_specifics->set_version("0.0.0.0"); |
| 1147 syncer::SyncData sync_data = | 1066 |
| 1148 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1067 SyncChangeList list = |
| 1149 syncer::SyncChange sync_change(FROM_HERE, | 1068 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1150 syncer::SyncChange::ACTION_UPDATE, | |
| 1151 sync_data); | |
| 1152 syncer::SyncChangeList list(1, sync_change); | |
| 1153 | 1069 |
| 1154 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1070 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1155 EXPECT_FALSE(service()->updater()->WillCheckSoon()); | 1071 EXPECT_FALSE(service()->updater()->WillCheckSoon()); |
| 1156 // Make sure the version we'll send back to sync didn't change. | 1072 // Make sure the version we'll send back to sync didn't change. |
| 1157 syncer::SyncDataList data = | 1073 syncer::SyncDataList data = |
| 1158 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1074 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1159 ASSERT_EQ(1u, data.size()); | 1075 ASSERT_EQ(1u, data.size()); |
| 1160 scoped_ptr<ExtensionSyncData> extension_data = | 1076 scoped_ptr<ExtensionSyncData> extension_data = |
| 1161 ExtensionSyncData::CreateFromSyncData(data[0]); | 1077 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1162 ASSERT_TRUE(extension_data); | 1078 ASSERT_TRUE(extension_data); |
| 1163 EXPECT_TRUE(installed_version.Equals(extension_data->version())); | 1079 EXPECT_TRUE(installed_version.Equals(extension_data->version())); |
| 1164 } | 1080 } |
| 1165 | 1081 |
| 1166 // Should kick off an update if extension version < sync version. | 1082 // Should kick off an update if extension version < sync version. |
| 1167 { | 1083 { |
| 1168 const base::Version new_version("9.9.9.9"); | 1084 const base::Version new_version("9.9.9.9"); |
| 1169 ext_specifics->set_version(new_version.GetString()); | 1085 ext_specifics->set_version(new_version.GetString()); |
| 1170 syncer::SyncData sync_data = | 1086 |
| 1171 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1087 SyncChangeList list = |
| 1172 syncer::SyncChange sync_change(FROM_HERE, | 1088 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1173 syncer::SyncChange::ACTION_UPDATE, | |
| 1174 sync_data); | |
| 1175 syncer::SyncChangeList list(1, sync_change); | |
| 1176 | 1089 |
| 1177 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1090 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1178 EXPECT_TRUE(service()->updater()->WillCheckSoon()); | 1091 EXPECT_TRUE(service()->updater()->WillCheckSoon()); |
| 1179 // Make sure that we'll send the NEW version back to sync, even though we | 1092 // Make sure that we'll send the NEW version back to sync, even though we |
| 1180 // haven't actually updated yet. This is to prevent the data in sync from | 1093 // haven't actually updated yet. This is to prevent the data in sync from |
| 1181 // flip-flopping back and forth until all clients are up to date. | 1094 // flip-flopping back and forth until all clients are up to date. |
| 1182 syncer::SyncDataList data = | 1095 syncer::SyncDataList data = |
| 1183 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); | 1096 extension_sync_service()->GetAllSyncData(syncer::EXTENSIONS); |
| 1184 ASSERT_EQ(1u, data.size()); | 1097 ASSERT_EQ(1u, data.size()); |
| 1185 scoped_ptr<ExtensionSyncData> extension_data = | 1098 scoped_ptr<ExtensionSyncData> extension_data = |
| 1186 ExtensionSyncData::CreateFromSyncData(data[0]); | 1099 ExtensionSyncData::CreateFromSyncData(data[0]); |
| 1187 ASSERT_TRUE(extension_data); | 1100 ASSERT_TRUE(extension_data); |
| 1188 EXPECT_TRUE(new_version.Equals(extension_data->version())); | 1101 EXPECT_TRUE(new_version.Equals(extension_data->version())); |
| 1189 } | 1102 } |
| 1190 | 1103 |
| 1191 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); | 1104 EXPECT_FALSE(service()->pending_extension_manager()->IsIdPending(good_crx)); |
| 1192 } | 1105 } |
| 1193 | 1106 |
| 1194 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) { | 1107 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataNotInstalled) { |
| 1195 InitializeExtensionServiceWithUpdater(); | 1108 InitializeExtensionServiceWithUpdater(); |
| 1196 syncer::FakeSyncChangeProcessor processor; | |
| 1197 extension_sync_service()->MergeDataAndStartSyncing( | 1109 extension_sync_service()->MergeDataAndStartSyncing( |
| 1198 syncer::EXTENSIONS, | 1110 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1199 syncer::SyncDataList(), | 1111 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1200 scoped_ptr<syncer::SyncChangeProcessor>( | 1112 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1201 new syncer::FakeSyncChangeProcessor), | |
| 1202 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1203 | 1113 |
| 1204 sync_pb::EntitySpecifics specifics; | 1114 sync_pb::EntitySpecifics specifics; |
| 1205 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1115 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1206 ext_specifics->set_id(good_crx); | 1116 ext_specifics->set_id(good_crx); |
| 1207 ext_specifics->set_enabled(false); | 1117 ext_specifics->set_enabled(false); |
| 1208 ext_specifics->set_incognito_enabled(true); | 1118 ext_specifics->set_incognito_enabled(true); |
| 1209 ext_specifics->set_update_url("http://www.google.com/"); | 1119 ext_specifics->set_update_url("http://www.google.com/"); |
| 1210 ext_specifics->set_version("1.2.3.4"); | 1120 ext_specifics->set_version("1.2.3.4"); |
| 1211 syncer::SyncData sync_data = | 1121 |
| 1212 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1122 SyncChangeList list = |
| 1213 syncer::SyncChange sync_change(FROM_HERE, | 1123 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1214 syncer::SyncChange::ACTION_UPDATE, | |
| 1215 sync_data); | |
| 1216 syncer::SyncChangeList list(1); | |
| 1217 list[0] = sync_change; | |
| 1218 | 1124 |
| 1219 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); | 1125 EXPECT_TRUE(service()->IsExtensionEnabled(good_crx)); |
| 1220 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1126 EXPECT_FALSE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1221 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1127 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1222 EXPECT_TRUE(service()->updater()->WillCheckSoon()); | 1128 EXPECT_TRUE(service()->updater()->WillCheckSoon()); |
| 1223 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); | 1129 EXPECT_FALSE(service()->IsExtensionEnabled(good_crx)); |
| 1224 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); | 1130 EXPECT_TRUE(extensions::util::IsIncognitoEnabled(good_crx, profile())); |
| 1225 | 1131 |
| 1226 const extensions::PendingExtensionInfo* info; | 1132 const extensions::PendingExtensionInfo* info; |
| 1227 EXPECT_TRUE( | 1133 EXPECT_TRUE( |
| 1228 (info = service()->pending_extension_manager()->GetById(good_crx))); | 1134 (info = service()->pending_extension_manager()->GetById(good_crx))); |
| 1229 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); | 1135 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); |
| 1230 EXPECT_TRUE(info->is_from_sync()); | 1136 EXPECT_TRUE(info->is_from_sync()); |
| 1231 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); | 1137 EXPECT_EQ(Manifest::INTERNAL, info->install_source()); |
| 1232 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. | 1138 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
| 1233 } | 1139 } |
| 1234 | 1140 |
| 1235 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) { | 1141 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataEnableDisable) { |
| 1236 InitializeEmptyExtensionService(); | 1142 InitializeEmptyExtensionService(); |
| 1237 extension_sync_service()->MergeDataAndStartSyncing( | 1143 extension_sync_service()->MergeDataAndStartSyncing( |
| 1238 syncer::EXTENSIONS, | 1144 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1239 syncer::SyncDataList(), | 1145 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1240 scoped_ptr<syncer::SyncChangeProcessor>( | 1146 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1241 new syncer::FakeSyncChangeProcessor), | |
| 1242 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1243 | 1147 |
| 1244 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); | 1148 const ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); |
| 1245 | 1149 |
| 1246 struct TestCase { | 1150 struct TestCase { |
| 1247 const char* name; // For failure output only. | 1151 const char* name; // For failure output only. |
| 1248 // Set of disable reasons before any Sync data comes in. If this is != 0, | 1152 // Set of disable reasons before any Sync data comes in. If this is != 0, |
| 1249 // the extension is disabled. | 1153 // the extension is disabled. |
| 1250 int previous_disable_reasons; | 1154 int previous_disable_reasons; |
| 1251 bool sync_enable; // The enabled flag coming in from Sync. | 1155 bool sync_enable; // The enabled flag coming in from Sync. |
| 1252 // The disable reason(s) coming in from Sync, or -1 for "not set". | 1156 // The disable reason(s) coming in from Sync, or -1 for "not set". |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1313 | 1217 |
| 1314 // Now a sync update comes in. | 1218 // Now a sync update comes in. |
| 1315 sync_pb::EntitySpecifics specifics; | 1219 sync_pb::EntitySpecifics specifics; |
| 1316 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1220 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1317 ext_specifics->set_id(id); | 1221 ext_specifics->set_id(id); |
| 1318 ext_specifics->set_enabled(test_case.sync_enable); | 1222 ext_specifics->set_enabled(test_case.sync_enable); |
| 1319 ext_specifics->set_version(version); | 1223 ext_specifics->set_version(version); |
| 1320 if (test_case.sync_disable_reasons != -1) | 1224 if (test_case.sync_disable_reasons != -1) |
| 1321 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); | 1225 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); |
| 1322 | 1226 |
| 1323 syncer::SyncData sync_data = | 1227 SyncChangeList list = |
| 1324 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1228 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1325 syncer::SyncChange sync_change(FROM_HERE, | 1229 |
| 1326 syncer::SyncChange::ACTION_UPDATE, | |
| 1327 sync_data); | |
| 1328 syncer::SyncChangeList list(1, sync_change); | |
| 1329 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1230 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1330 | 1231 |
| 1331 // Check expectations. | 1232 // Check expectations. |
| 1332 const bool expect_enabled = !test_case.expect_disable_reasons; | 1233 const bool expect_enabled = !test_case.expect_disable_reasons; |
| 1333 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); | 1234 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); |
| 1334 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); | 1235 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); |
| 1335 | 1236 |
| 1336 // Remove the extension again, so we can install it again for the next case. | 1237 // Remove the extension again, so we can install it again for the next case. |
| 1337 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED | 1238 UninstallExtension(id, false, expect_enabled ? Extension::ENABLED |
| 1338 : Extension::DISABLED); | 1239 : Extension::DISABLED); |
| 1339 } | 1240 } |
| 1340 } | 1241 } |
| 1341 | 1242 |
| 1342 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) { | 1243 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataDeferredEnable) { |
| 1343 InitializeEmptyExtensionService(); | 1244 InitializeEmptyExtensionService(); |
| 1344 extension_sync_service()->MergeDataAndStartSyncing( | 1245 extension_sync_service()->MergeDataAndStartSyncing( |
| 1345 syncer::EXTENSIONS, | 1246 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1346 syncer::SyncDataList(), | 1247 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1347 scoped_ptr<syncer::SyncChangeProcessor>( | 1248 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1348 new syncer::FakeSyncChangeProcessor), | |
| 1349 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1350 | 1249 |
| 1351 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); | 1250 base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); |
| 1352 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); | 1251 base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); |
| 1353 | 1252 |
| 1354 base::FilePath path = base_path.AppendASCII("v1"); | 1253 base::FilePath path = base_path.AppendASCII("v1"); |
| 1355 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); | 1254 const Extension* extension = PackAndInstallCRX(path, pem_path, INSTALL_NEW); |
| 1356 // The extension must now be installed and enabled. | 1255 // The extension must now be installed and enabled. |
| 1357 ASSERT_TRUE(extension); | 1256 ASSERT_TRUE(extension); |
| 1358 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id())); | 1257 ASSERT_TRUE(registry()->enabled_extensions().Contains(extension->id())); |
| 1359 | 1258 |
| 1360 // Save the id, as the extension object will be destroyed during updating. | 1259 // Save the id, as the extension object will be destroyed during updating. |
| 1361 std::string id = extension->id(); | 1260 std::string id = extension->id(); |
| 1362 | 1261 |
| 1363 // Update to a new version with increased permissions. | 1262 // Update to a new version with increased permissions. |
| 1364 path = base_path.AppendASCII("v2"); | 1263 path = base_path.AppendASCII("v2"); |
| 1365 PackCRXAndUpdateExtension(id, path, pem_path, DISABLED); | 1264 PackCRXAndUpdateExtension(id, path, pem_path, DISABLED); |
| 1366 | 1265 |
| 1367 // Now a sync update comes in, telling us to re-enable a *newer* version. | 1266 // Now a sync update comes in, telling us to re-enable a *newer* version. |
| 1368 sync_pb::EntitySpecifics specifics; | 1267 sync_pb::EntitySpecifics specifics; |
| 1369 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1268 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1370 ext_specifics->set_id(id); | 1269 ext_specifics->set_id(id); |
| 1371 ext_specifics->set_version("3"); | 1270 ext_specifics->set_version("3"); |
| 1372 ext_specifics->set_enabled(true); | 1271 ext_specifics->set_enabled(true); |
| 1373 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); | 1272 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); |
| 1374 | 1273 |
| 1375 syncer::SyncData sync_data = | 1274 SyncChangeList list = |
| 1376 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1275 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1377 syncer::SyncChange sync_change(FROM_HERE, | 1276 |
| 1378 syncer::SyncChange::ACTION_UPDATE, | |
| 1379 sync_data); | |
| 1380 syncer::SyncChangeList list(1, sync_change); | |
| 1381 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1277 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1382 | 1278 |
| 1383 // Since the version didn't match, the extension should still be disabled. | 1279 // Since the version didn't match, the extension should still be disabled. |
| 1384 EXPECT_TRUE(registry()->disabled_extensions().Contains(id)); | 1280 EXPECT_TRUE(registry()->disabled_extensions().Contains(id)); |
| 1385 | 1281 |
| 1386 // After we update to the matching version, the extension should get enabled. | 1282 // After we update to the matching version, the extension should get enabled. |
| 1387 path = base_path.AppendASCII("v3"); | 1283 path = base_path.AppendASCII("v3"); |
| 1388 PackCRXAndUpdateExtension(id, path, pem_path, ENABLED); | 1284 PackCRXAndUpdateExtension(id, path, pem_path, ENABLED); |
| 1389 } | 1285 } |
| 1390 | 1286 |
| 1391 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) { | 1287 TEST_F(ExtensionServiceSyncTest, ProcessSyncDataPermissionApproval) { |
| 1392 // This is the update URL specified in the test extension. Setting it here is | 1288 // This is the update URL specified in the test extension. Setting it here is |
| 1393 // necessary to make it considered syncable. | 1289 // necessary to make it considered syncable. |
| 1394 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1290 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 1395 switches::kAppsGalleryUpdateURL, | 1291 switches::kAppsGalleryUpdateURL, |
| 1396 "http://localhost/autoupdate/updates.xml"); | 1292 "http://localhost/autoupdate/updates.xml"); |
| 1397 | 1293 |
| 1398 InitializeEmptyExtensionService(); | 1294 InitializeEmptyExtensionService(); |
| 1399 extension_sync_service()->MergeDataAndStartSyncing( | 1295 extension_sync_service()->MergeDataAndStartSyncing( |
| 1400 syncer::EXTENSIONS, | 1296 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1401 syncer::SyncDataList(), | 1297 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1402 scoped_ptr<syncer::SyncChangeProcessor>( | 1298 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1403 new syncer::FakeSyncChangeProcessor), | |
| 1404 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1405 | 1299 |
| 1406 const base::FilePath base_path = | 1300 const base::FilePath base_path = |
| 1407 data_dir().AppendASCII("permissions_increase"); | 1301 data_dir().AppendASCII("permissions_increase"); |
| 1408 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); | 1302 const base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); |
| 1409 const base::FilePath path_v1 = base_path.AppendASCII("v1"); | 1303 const base::FilePath path_v1 = base_path.AppendASCII("v1"); |
| 1410 const base::FilePath path_v2 = base_path.AppendASCII("v2"); | 1304 const base::FilePath path_v2 = base_path.AppendASCII("v2"); |
| 1411 | 1305 |
| 1412 base::ScopedTempDir crx_dir; | 1306 base::ScopedTempDir crx_dir; |
| 1413 ASSERT_TRUE(crx_dir.CreateUniqueTempDir()); | 1307 ASSERT_TRUE(crx_dir.CreateUniqueTempDir()); |
| 1414 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx"); | 1308 const base::FilePath crx_path_v1 = crx_dir.path().AppendASCII("temp1.crx"); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1482 | 1376 |
| 1483 // Now a sync update comes in. | 1377 // Now a sync update comes in. |
| 1484 sync_pb::EntitySpecifics specifics; | 1378 sync_pb::EntitySpecifics specifics; |
| 1485 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1379 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1486 ext_specifics->set_id(id); | 1380 ext_specifics->set_id(id); |
| 1487 ext_specifics->set_enabled(true); | 1381 ext_specifics->set_enabled(true); |
| 1488 ext_specifics->set_version(test_case.sync_version); | 1382 ext_specifics->set_version(test_case.sync_version); |
| 1489 if (test_case.sync_disable_reasons != -1) | 1383 if (test_case.sync_disable_reasons != -1) |
| 1490 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); | 1384 ext_specifics->set_disable_reasons(test_case.sync_disable_reasons); |
| 1491 | 1385 |
| 1492 syncer::SyncData sync_data = | 1386 SyncChangeList list = |
| 1493 syncer::SyncData::CreateLocalData(good_crx, "Name", specifics); | 1387 MakeSyncChangeList(good_crx, specifics, SyncChange::ACTION_UPDATE); |
| 1494 syncer::SyncChange sync_change(FROM_HERE, | 1388 |
| 1495 syncer::SyncChange::ACTION_UPDATE, | |
| 1496 sync_data); | |
| 1497 syncer::SyncChangeList list(1, sync_change); | |
| 1498 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); | 1389 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1499 | 1390 |
| 1500 // Check expectations. | 1391 // Check expectations. |
| 1501 const bool expect_enabled = !test_case.expect_disable_reasons; | 1392 const bool expect_enabled = !test_case.expect_disable_reasons; |
| 1502 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); | 1393 EXPECT_EQ(expect_enabled, service()->IsExtensionEnabled(id)); |
| 1503 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); | 1394 EXPECT_EQ(test_case.expect_disable_reasons, prefs->GetDisableReasons(id)); |
| 1504 scoped_ptr<const PermissionSet> granted_permissions = | 1395 scoped_ptr<const PermissionSet> granted_permissions = |
| 1505 prefs->GetGrantedPermissions(id); | 1396 prefs->GetGrantedPermissions(id); |
| 1506 if (test_case.expect_permissions_granted) { | 1397 if (test_case.expect_permissions_granted) { |
| 1507 scoped_ptr<const PermissionSet> active_permissions = | 1398 scoped_ptr<const PermissionSet> active_permissions = |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1745 ext_specifics->set_enabled(true); | 1636 ext_specifics->set_enabled(true); |
| 1746 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); | 1637 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); |
| 1747 ext_specifics->set_installed_by_custodian(true); | 1638 ext_specifics->set_installed_by_custodian(true); |
| 1748 ext_specifics->set_version(version1); | 1639 ext_specifics->set_version(version1); |
| 1749 | 1640 |
| 1750 // Attempting to re-enable an old version should result in a permission | 1641 // Attempting to re-enable an old version should result in a permission |
| 1751 // request for the current version. | 1642 // request for the current version. |
| 1752 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1643 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1753 UpdateRequestId(id, version2), testing::_)); | 1644 UpdateRequestId(id, version2), testing::_)); |
| 1754 | 1645 |
| 1755 syncer::SyncData sync_data = | 1646 SyncChangeList list = |
| 1756 syncer::SyncData::CreateLocalData(id, "Name", specifics); | 1647 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE); |
| 1757 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, | 1648 |
| 1758 sync_data); | 1649 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1759 syncer::SyncChangeList change_list(1, sync_change); | |
| 1760 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); | |
| 1761 // The re-enable should be ignored, since the version doesn't match. | 1650 // The re-enable should be ignored, since the version doesn't match. |
| 1762 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); | 1651 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); |
| 1763 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( | 1652 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( |
| 1764 id, base::Version(version1))); | 1653 id, base::Version(version1))); |
| 1765 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( | 1654 EXPECT_FALSE(extension_sync_service()->HasPendingReenable( |
| 1766 id, base::Version(version2))); | 1655 id, base::Version(version2))); |
| 1767 } | 1656 } |
| 1768 | 1657 |
| 1769 TEST_F(ExtensionServiceTestSupervised, | 1658 TEST_F(ExtensionServiceTestSupervised, |
| 1770 UpdateWithPermissionIncreaseApprovalMatchingVersion) { | 1659 UpdateWithPermissionIncreaseApprovalMatchingVersion) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1787 // Simulate a custodian approval for re-enabling the extension coming in | 1676 // Simulate a custodian approval for re-enabling the extension coming in |
| 1788 // through Sync. | 1677 // through Sync. |
| 1789 sync_pb::EntitySpecifics specifics; | 1678 sync_pb::EntitySpecifics specifics; |
| 1790 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1679 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1791 ext_specifics->set_id(id); | 1680 ext_specifics->set_id(id); |
| 1792 ext_specifics->set_enabled(true); | 1681 ext_specifics->set_enabled(true); |
| 1793 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); | 1682 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); |
| 1794 ext_specifics->set_installed_by_custodian(true); | 1683 ext_specifics->set_installed_by_custodian(true); |
| 1795 ext_specifics->set_version(version2); | 1684 ext_specifics->set_version(version2); |
| 1796 | 1685 |
| 1797 syncer::SyncData sync_data = | 1686 SyncChangeList list = |
| 1798 syncer::SyncData::CreateLocalData(id, "Name", specifics); | 1687 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE); |
| 1799 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, | 1688 |
| 1800 sync_data); | 1689 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1801 syncer::SyncChangeList change_list(1, sync_change); | |
| 1802 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); | |
| 1803 // The extension should have gotten re-enabled. | 1690 // The extension should have gotten re-enabled. |
| 1804 EXPECT_TRUE(registry()->enabled_extensions().Contains(id)); | 1691 EXPECT_TRUE(registry()->enabled_extensions().Contains(id)); |
| 1805 } | 1692 } |
| 1806 | 1693 |
| 1807 TEST_F(ExtensionServiceTestSupervised, | 1694 TEST_F(ExtensionServiceTestSupervised, |
| 1808 UpdateWithPermissionIncreaseApprovalNewVersion) { | 1695 UpdateWithPermissionIncreaseApprovalNewVersion) { |
| 1809 InitNeedCustodianApprovalFieldTrial(true); | 1696 InitNeedCustodianApprovalFieldTrial(true); |
| 1810 | 1697 |
| 1811 InitServices(true /* profile_is_supervised */); | 1698 InitServices(true /* profile_is_supervised */); |
| 1812 | 1699 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1831 ext_specifics->set_enabled(true); | 1718 ext_specifics->set_enabled(true); |
| 1832 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); | 1719 ext_specifics->set_disable_reasons(Extension::DISABLE_NONE); |
| 1833 ext_specifics->set_installed_by_custodian(true); | 1720 ext_specifics->set_installed_by_custodian(true); |
| 1834 ext_specifics->set_version(version3); | 1721 ext_specifics->set_version(version3); |
| 1835 | 1722 |
| 1836 // This should *not* result in a new permission request. | 1723 // This should *not* result in a new permission request. |
| 1837 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( | 1724 EXPECT_CALL(*creator, CreateExtensionUpdateRequest( |
| 1838 UpdateRequestId(id, version3), testing::_)) | 1725 UpdateRequestId(id, version3), testing::_)) |
| 1839 .Times(0); | 1726 .Times(0); |
| 1840 | 1727 |
| 1841 syncer::SyncData sync_data = | 1728 SyncChangeList list = |
| 1842 syncer::SyncData::CreateLocalData(id, "Name", specifics); | 1729 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE); |
| 1843 syncer::SyncChange sync_change(FROM_HERE, syncer::SyncChange::ACTION_UPDATE, | 1730 |
| 1844 sync_data); | 1731 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1845 syncer::SyncChangeList change_list(1, sync_change); | |
| 1846 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); | |
| 1847 // The re-enable should be delayed until the extension is updated to the | 1732 // The re-enable should be delayed until the extension is updated to the |
| 1848 // matching version. | 1733 // matching version. |
| 1849 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); | 1734 EXPECT_FALSE(registry()->enabled_extensions().Contains(id)); |
| 1850 EXPECT_TRUE(extension_sync_service()->HasPendingReenable( | 1735 EXPECT_TRUE(extension_sync_service()->HasPendingReenable( |
| 1851 id, base::Version(version3))); | 1736 id, base::Version(version3))); |
| 1852 | 1737 |
| 1853 // Update to the matching version. Now the extension should get enabled. | 1738 // Update to the matching version. Now the extension should get enabled. |
| 1854 UpdatePermissionsTestExtension(id, version3, ENABLED); | 1739 UpdatePermissionsTestExtension(id, version3, ENABLED); |
| 1855 } | 1740 } |
| 1856 | 1741 |
| 1857 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) { | 1742 TEST_F(ExtensionServiceSyncTest, SyncUninstallByCustodianSkipsPolicy) { |
| 1858 InitializeEmptyExtensionService(); | 1743 InitializeEmptyExtensionService(); |
| 1859 extension_sync_service()->MergeDataAndStartSyncing( | 1744 extension_sync_service()->MergeDataAndStartSyncing( |
| 1860 syncer::EXTENSIONS, | 1745 syncer::EXTENSIONS, syncer::SyncDataList(), |
| 1861 syncer::SyncDataList(), | 1746 make_scoped_ptr(new syncer::FakeSyncChangeProcessor()), |
| 1862 scoped_ptr<syncer::SyncChangeProcessor>( | 1747 make_scoped_ptr(new syncer::SyncErrorFactoryMock())); |
| 1863 new syncer::FakeSyncChangeProcessor), | |
| 1864 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); | |
| 1865 | 1748 |
| 1866 // Install two extensions. | 1749 // Install two extensions. |
| 1867 base::FilePath path1 = data_dir().AppendASCII("good.crx"); | 1750 base::FilePath path1 = data_dir().AppendASCII("good.crx"); |
| 1868 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); | 1751 base::FilePath path2 = data_dir().AppendASCII("good2048.crx"); |
| 1869 const Extension* extensions[] = { | 1752 const Extension* extensions[] = { |
| 1870 InstallCRX(path1, INSTALL_NEW), | 1753 InstallCRX(path1, INSTALL_NEW), |
| 1871 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) | 1754 InstallCRX(path2, INSTALL_NEW, Extension::WAS_INSTALLED_BY_CUSTODIAN) |
| 1872 }; | 1755 }; |
| 1873 | 1756 |
| 1874 // Add a policy provider that will disallow any changes. | 1757 // Add a policy provider that will disallow any changes. |
| 1875 extensions::TestManagementPolicyProvider provider( | 1758 extensions::TestManagementPolicyProvider provider( |
| 1876 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); | 1759 extensions::TestManagementPolicyProvider::PROHIBIT_MODIFY_STATUS); |
| 1877 ExtensionSystem::Get( | 1760 ExtensionSystem::Get( |
| 1878 browser_context())->management_policy()->RegisterProvider(&provider); | 1761 browser_context())->management_policy()->RegisterProvider(&provider); |
| 1879 | 1762 |
| 1880 // Create a sync deletion for each extension. | 1763 // Create a sync deletion for each extension. |
| 1881 syncer::SyncChangeList change_list; | 1764 SyncChangeList list; |
| 1882 for (size_t i = 0; i < arraysize(extensions); i++) { | 1765 for (size_t i = 0; i < arraysize(extensions); i++) { |
| 1883 const std::string& id = extensions[i]->id(); | 1766 const std::string& id = extensions[i]->id(); |
| 1884 sync_pb::EntitySpecifics specifics; | 1767 sync_pb::EntitySpecifics specifics; |
| 1885 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1768 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1886 ext_specifics->set_id(id); | 1769 ext_specifics->set_id(id); |
| 1887 ext_specifics->set_version("1.0"); | 1770 ext_specifics->set_version("1.0"); |
| 1888 ext_specifics->set_installed_by_custodian( | 1771 ext_specifics->set_installed_by_custodian( |
| 1889 extensions[i]->was_installed_by_custodian()); | 1772 extensions[i]->was_installed_by_custodian()); |
| 1890 syncer::SyncData sync_data = | 1773 syncer::SyncData sync_data = |
| 1891 syncer::SyncData::CreateLocalData(id, "Name", specifics); | 1774 syncer::SyncData::CreateLocalData(id, "Name", specifics); |
| 1892 change_list.push_back(syncer::SyncChange(FROM_HERE, | 1775 list.push_back(SyncChange(FROM_HERE, SyncChange::ACTION_DELETE, sync_data)); |
| 1893 syncer::SyncChange::ACTION_DELETE, | |
| 1894 sync_data)); | |
| 1895 } | 1776 } |
| 1896 | 1777 |
| 1897 // Save the extension ids, as uninstalling destroys the Extension instance. | 1778 // Save the extension ids, as uninstalling destroys the Extension instance. |
| 1898 std::string extension_ids[] = { | 1779 std::string extension_ids[] = { |
| 1899 extensions[0]->id(), | 1780 extensions[0]->id(), |
| 1900 extensions[1]->id() | 1781 extensions[1]->id() |
| 1901 }; | 1782 }; |
| 1902 | 1783 |
| 1903 // Now apply the uninstallations. | 1784 // Now apply the uninstallations. |
| 1904 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); | 1785 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1905 | 1786 |
| 1906 // Uninstalling the extension without installed_by_custodian should have been | 1787 // Uninstalling the extension without installed_by_custodian should have been |
| 1907 // blocked by policy, so it should still be there. | 1788 // blocked by policy, so it should still be there. |
| 1908 EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_ids[0])); | 1789 EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_ids[0])); |
| 1909 | 1790 |
| 1910 // But installed_by_custodian should result in bypassing the policy check. | 1791 // But installed_by_custodian should result in bypassing the policy check. |
| 1911 EXPECT_FALSE( | 1792 EXPECT_FALSE( |
| 1912 registry()->GenerateInstalledExtensionsSet()->Contains(extension_ids[1])); | 1793 registry()->GenerateInstalledExtensionsSet()->Contains(extension_ids[1])); |
| 1913 } | 1794 } |
| 1914 | 1795 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1931 .Build(); | 1812 .Build(); |
| 1932 | 1813 |
| 1933 // Install and enable it. | 1814 // Install and enable it. |
| 1934 service()->AddExtension(extension.get()); | 1815 service()->AddExtension(extension.get()); |
| 1935 service()->GrantPermissionsAndEnableExtension(extension.get()); | 1816 service()->GrantPermissionsAndEnableExtension(extension.get()); |
| 1936 const std::string id = extension->id(); | 1817 const std::string id = extension->id(); |
| 1937 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); | 1818 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); |
| 1938 | 1819 |
| 1939 // Simulate a sync node coming in where the extension had all-hosts withheld. | 1820 // Simulate a sync node coming in where the extension had all-hosts withheld. |
| 1940 // This means that it should have all-hosts withheld on this machine, too. | 1821 // This means that it should have all-hosts withheld on this machine, too. |
| 1941 syncer::SyncChangeList change_list; | |
| 1942 sync_pb::EntitySpecifics specifics; | 1822 sync_pb::EntitySpecifics specifics; |
| 1943 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); | 1823 sync_pb::ExtensionSpecifics* ext_specifics = specifics.mutable_extension(); |
| 1944 ext_specifics->set_id(id); | 1824 ext_specifics->set_id(id); |
| 1945 ext_specifics->set_name(kName); | 1825 ext_specifics->set_name(kName); |
| 1946 ext_specifics->set_version("1.0"); | 1826 ext_specifics->set_version("1.0"); |
| 1947 ext_specifics->set_all_urls_enabled(false); | 1827 ext_specifics->set_all_urls_enabled(false); |
| 1948 ext_specifics->set_enabled(true); | 1828 ext_specifics->set_enabled(true); |
| 1949 syncer::SyncData sync_data = | |
| 1950 syncer::SyncData::CreateLocalData(id, "Name", specifics); | |
| 1951 change_list.push_back(syncer::SyncChange(FROM_HERE, | |
| 1952 syncer::SyncChange::ACTION_UPDATE, | |
| 1953 sync_data)); | |
| 1954 | 1829 |
| 1955 extension_sync_service()->ProcessSyncChanges(FROM_HERE, change_list); | 1830 SyncChangeList list = |
| 1831 MakeSyncChangeList(id, specifics, SyncChange::ACTION_UPDATE); |
| 1832 |
| 1833 extension_sync_service()->ProcessSyncChanges(FROM_HERE, list); |
| 1956 | 1834 |
| 1957 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); | 1835 EXPECT_TRUE(registry()->enabled_extensions().GetByID(id)); |
| 1958 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); | 1836 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); |
| 1959 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(id, profile())); | 1837 EXPECT_TRUE(extensions::util::HasSetAllowedScriptingOnAllUrls(id, profile())); |
| 1960 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); | 1838 EXPECT_FALSE(extensions::util::AllowedScriptingOnAllUrls(id, profile())); |
| 1961 } | 1839 } |
| 1962 | 1840 |
| 1963 #endif // defined(ENABLE_SUPERVISED_USERS) | 1841 #endif // defined(ENABLE_SUPERVISED_USERS) |
| OLD | NEW |