| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 #include "base/string_number_conversions.h" | 21 #include "base/string_number_conversions.h" |
| 22 #include "base/string_util.h" | 22 #include "base/string_util.h" |
| 23 #include "base/task.h" | 23 #include "base/task.h" |
| 24 #include "base/utf_string_conversions.h" | 24 #include "base/utf_string_conversions.h" |
| 25 #include "base/version.h" | 25 #include "base/version.h" |
| 26 #include "chrome/browser/extensions/crx_installer.h" | 26 #include "chrome/browser/extensions/crx_installer.h" |
| 27 #include "chrome/browser/extensions/extension_creator.h" | 27 #include "chrome/browser/extensions/extension_creator.h" |
| 28 #include "chrome/browser/extensions/extension_error_reporter.h" | 28 #include "chrome/browser/extensions/extension_error_reporter.h" |
| 29 #include "chrome/browser/extensions/extension_service.h" | 29 #include "chrome/browser/extensions/extension_service.h" |
| 30 #include "chrome/browser/extensions/extension_special_storage_policy.h" | 30 #include "chrome/browser/extensions/extension_special_storage_policy.h" |
| 31 #include "chrome/browser/extensions/extension_sync_data.h" |
| 32 #include "chrome/browser/extensions/extension_updater.h" |
| 31 #include "chrome/browser/extensions/external_extension_provider_impl.h" | 33 #include "chrome/browser/extensions/external_extension_provider_impl.h" |
| 32 #include "chrome/browser/extensions/external_extension_provider_interface.h" | 34 #include "chrome/browser/extensions/external_extension_provider_interface.h" |
| 33 #include "chrome/browser/extensions/external_pref_extension_loader.h" | 35 #include "chrome/browser/extensions/external_pref_extension_loader.h" |
| 34 #include "chrome/browser/extensions/pack_extension_job.cc" | 36 #include "chrome/browser/extensions/pack_extension_job.cc" |
| 37 #include "chrome/browser/extensions/pending_extension_info.h" |
| 38 #include "chrome/browser/extensions/pending_extension_manager.h" |
| 35 #include "chrome/browser/prefs/browser_prefs.h" | 39 #include "chrome/browser/prefs/browser_prefs.h" |
| 36 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 40 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
| 37 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 41 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 38 #include "chrome/common/chrome_paths.h" | 42 #include "chrome/common/chrome_paths.h" |
| 39 #include "chrome/common/chrome_switches.h" | 43 #include "chrome/common/chrome_switches.h" |
| 40 #include "chrome/common/extensions/extension.h" | 44 #include "chrome/common/extensions/extension.h" |
| 41 #include "chrome/common/extensions/extension_constants.h" | 45 #include "chrome/common/extensions/extension_constants.h" |
| 42 #include "chrome/common/extensions/extension_resource.h" | 46 #include "chrome/common/extensions/extension_resource.h" |
| 43 #include "chrome/common/extensions/url_pattern.h" | 47 #include "chrome/common/extensions/url_pattern.h" |
| 44 #include "chrome/common/json_value_serializer.h" | 48 #include "chrome/common/json_value_serializer.h" |
| (...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 ExtensionServiceTestBase::~ExtensionServiceTestBase() { | 392 ExtensionServiceTestBase::~ExtensionServiceTestBase() { |
| 389 // Drop our reference to ExtensionService and TestingProfile, so that they | 393 // Drop our reference to ExtensionService and TestingProfile, so that they |
| 390 // can be destroyed while BrowserThreads and MessageLoop are still around | 394 // can be destroyed while BrowserThreads and MessageLoop are still around |
| 391 // (they are used in the destruction process). | 395 // (they are used in the destruction process). |
| 392 service_ = NULL; | 396 service_ = NULL; |
| 393 profile_.reset(NULL); | 397 profile_.reset(NULL); |
| 394 MessageLoop::current()->RunAllPending(); | 398 MessageLoop::current()->RunAllPending(); |
| 395 } | 399 } |
| 396 | 400 |
| 397 void ExtensionServiceTestBase::InitializeExtensionService( | 401 void ExtensionServiceTestBase::InitializeExtensionService( |
| 398 const FilePath& pref_file, const FilePath& extensions_install_dir) { | 402 const FilePath& pref_file, const FilePath& extensions_install_dir, |
| 403 bool autoupdate_enabled) { |
| 399 ExtensionTestingProfile* profile = new ExtensionTestingProfile(); | 404 ExtensionTestingProfile* profile = new ExtensionTestingProfile(); |
| 400 // Create a PrefService that only contains user defined preference values. | 405 // Create a PrefService that only contains user defined preference values. |
| 401 PrefService* prefs = | 406 PrefService* prefs = |
| 402 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); | 407 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); |
| 403 Profile::RegisterUserPrefs(prefs); | 408 Profile::RegisterUserPrefs(prefs); |
| 404 browser::RegisterUserPrefs(prefs); | 409 browser::RegisterUserPrefs(prefs); |
| 405 profile->SetPrefService(prefs); | 410 profile->SetPrefService(prefs); |
| 406 | 411 |
| 407 profile_.reset(profile); | 412 profile_.reset(profile); |
| 408 | 413 |
| 409 service_ = profile->CreateExtensionService( | 414 service_ = profile->CreateExtensionService( |
| 410 CommandLine::ForCurrentProcess(), | 415 CommandLine::ForCurrentProcess(), |
| 411 extensions_install_dir); | 416 extensions_install_dir, |
| 417 autoupdate_enabled); |
| 412 service_->set_extensions_enabled(true); | 418 service_->set_extensions_enabled(true); |
| 413 service_->set_show_extensions_prompts(false); | 419 service_->set_show_extensions_prompts(false); |
| 414 profile->set_extensions_service(service_.get()); | 420 profile->set_extensions_service(service_.get()); |
| 415 | 421 |
| 416 // When we start up, we want to make sure there is no external provider, | 422 // When we start up, we want to make sure there is no external provider, |
| 417 // since the ExtensionService on Windows will use the Registry as a default | 423 // since the ExtensionService on Windows will use the Registry as a default |
| 418 // provider and if there is something already registered there then it will | 424 // provider and if there is something already registered there then it will |
| 419 // interfere with the tests. Those tests that need an external provider | 425 // interfere with the tests. Those tests that need an external provider |
| 420 // will register one specifically. | 426 // will register one specifically. |
| 421 service_->ClearProvidersForTesting(); | 427 service_->ClearProvidersForTesting(); |
| 422 | 428 |
| 423 total_successes_ = 0; | 429 total_successes_ = 0; |
| 424 } | 430 } |
| 425 | 431 |
| 426 void ExtensionServiceTestBase::InitializeInstalledExtensionService( | 432 void ExtensionServiceTestBase::InitializeInstalledExtensionService( |
| 427 const FilePath& prefs_file, const FilePath& source_install_dir) { | 433 const FilePath& prefs_file, const FilePath& source_install_dir) { |
| 428 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 434 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 429 FilePath path_ = temp_dir_.path(); | 435 FilePath path_ = temp_dir_.path(); |
| 430 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | 436 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); |
| 431 file_util::Delete(path_, true); | 437 file_util::Delete(path_, true); |
| 432 file_util::CreateDirectory(path_); | 438 file_util::CreateDirectory(path_); |
| 433 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences")); | 439 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences")); |
| 434 file_util::CopyFile(prefs_file, temp_prefs); | 440 file_util::CopyFile(prefs_file, temp_prefs); |
| 435 | 441 |
| 436 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); | 442 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); |
| 437 file_util::Delete(extensions_install_dir_, true); | 443 file_util::Delete(extensions_install_dir_, true); |
| 438 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); | 444 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); |
| 439 | 445 |
| 440 InitializeExtensionService(temp_prefs, extensions_install_dir_); | 446 InitializeExtensionService(temp_prefs, extensions_install_dir_, false); |
| 441 } | 447 } |
| 442 | 448 |
| 443 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { | 449 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { |
| 450 InitializeExtensionServiceHelper(false); |
| 451 } |
| 452 |
| 453 void ExtensionServiceTestBase::InitializeExtensionServiceWithUpdater() { |
| 454 InitializeExtensionServiceHelper(true); |
| 455 service_->updater()->Start(); |
| 456 } |
| 457 |
| 458 void ExtensionServiceTestBase::InitializeExtensionServiceHelper( |
| 459 bool autoupdate_enabled) { |
| 444 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 460 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 445 FilePath path_ = temp_dir_.path(); | 461 FilePath path_ = temp_dir_.path(); |
| 446 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | 462 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); |
| 447 file_util::Delete(path_, true); | 463 file_util::Delete(path_, true); |
| 448 file_util::CreateDirectory(path_); | 464 file_util::CreateDirectory(path_); |
| 449 FilePath prefs_filename = path_ | 465 FilePath prefs_filename = path_ |
| 450 .Append(FILE_PATH_LITERAL("TestPreferences")); | 466 .Append(FILE_PATH_LITERAL("TestPreferences")); |
| 451 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); | 467 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); |
| 452 file_util::Delete(extensions_install_dir_, true); | 468 file_util::Delete(extensions_install_dir_, true); |
| 453 file_util::CreateDirectory(extensions_install_dir_); | 469 file_util::CreateDirectory(extensions_install_dir_); |
| 454 | 470 |
| 455 InitializeExtensionService(prefs_filename, extensions_install_dir_); | 471 InitializeExtensionService(prefs_filename, extensions_install_dir_, |
| 472 autoupdate_enabled); |
| 456 } | 473 } |
| 457 | 474 |
| 458 // static | 475 // static |
| 459 void ExtensionServiceTestBase::SetUpTestCase() { | 476 void ExtensionServiceTestBase::SetUpTestCase() { |
| 460 ExtensionErrorReporter::Init(false); // no noisy errors | 477 ExtensionErrorReporter::Init(false); // no noisy errors |
| 461 } | 478 } |
| 462 | 479 |
| 463 void ExtensionServiceTestBase::SetUp() { | 480 void ExtensionServiceTestBase::SetUp() { |
| 464 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 481 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
| 465 } | 482 } |
| (...skipping 2786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3252 BrowserThread ui_thread(BrowserThread::UI, &loop); | 3269 BrowserThread ui_thread(BrowserThread::UI, &loop); |
| 3253 BrowserThread file_thread(BrowserThread::FILE, &loop); | 3270 BrowserThread file_thread(BrowserThread::FILE, &loop); |
| 3254 scoped_ptr<CommandLine> command_line; | 3271 scoped_ptr<CommandLine> command_line; |
| 3255 scoped_refptr<ExtensionService> service; | 3272 scoped_refptr<ExtensionService> service; |
| 3256 FilePath install_dir = profile->GetPath() | 3273 FilePath install_dir = profile->GetPath() |
| 3257 .AppendASCII(ExtensionService::kInstallDirectoryName); | 3274 .AppendASCII(ExtensionService::kInstallDirectoryName); |
| 3258 | 3275 |
| 3259 // By default, we are enabled. | 3276 // By default, we are enabled. |
| 3260 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3277 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
| 3261 service = profile->CreateExtensionService(command_line.get(), | 3278 service = profile->CreateExtensionService(command_line.get(), |
| 3262 install_dir); | 3279 install_dir, |
| 3280 false); |
| 3263 EXPECT_TRUE(service->extensions_enabled()); | 3281 EXPECT_TRUE(service->extensions_enabled()); |
| 3264 service->Init(); | 3282 service->Init(); |
| 3265 loop.RunAllPending(); | 3283 loop.RunAllPending(); |
| 3266 EXPECT_TRUE(recorder.ready()); | 3284 EXPECT_TRUE(recorder.ready()); |
| 3267 | 3285 |
| 3268 // If either the command line or pref is set, we are disabled. | 3286 // If either the command line or pref is set, we are disabled. |
| 3269 recorder.set_ready(false); | 3287 recorder.set_ready(false); |
| 3270 profile.reset(new TestingProfile()); | 3288 profile.reset(new TestingProfile()); |
| 3271 command_line->AppendSwitch(switches::kDisableExtensions); | 3289 command_line->AppendSwitch(switches::kDisableExtensions); |
| 3272 service = profile->CreateExtensionService(command_line.get(), | 3290 service = profile->CreateExtensionService(command_line.get(), |
| 3273 install_dir); | 3291 install_dir, |
| 3292 false); |
| 3274 EXPECT_FALSE(service->extensions_enabled()); | 3293 EXPECT_FALSE(service->extensions_enabled()); |
| 3275 service->Init(); | 3294 service->Init(); |
| 3276 loop.RunAllPending(); | 3295 loop.RunAllPending(); |
| 3277 EXPECT_TRUE(recorder.ready()); | 3296 EXPECT_TRUE(recorder.ready()); |
| 3278 | 3297 |
| 3279 recorder.set_ready(false); | 3298 recorder.set_ready(false); |
| 3280 profile.reset(new TestingProfile()); | 3299 profile.reset(new TestingProfile()); |
| 3281 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3300 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
| 3282 service = profile->CreateExtensionService(command_line.get(), | 3301 service = profile->CreateExtensionService(command_line.get(), |
| 3283 install_dir); | 3302 install_dir, |
| 3303 false); |
| 3284 EXPECT_FALSE(service->extensions_enabled()); | 3304 EXPECT_FALSE(service->extensions_enabled()); |
| 3285 service->Init(); | 3305 service->Init(); |
| 3286 loop.RunAllPending(); | 3306 loop.RunAllPending(); |
| 3287 EXPECT_TRUE(recorder.ready()); | 3307 EXPECT_TRUE(recorder.ready()); |
| 3288 | 3308 |
| 3289 recorder.set_ready(false); | 3309 recorder.set_ready(false); |
| 3290 profile.reset(new TestingProfile()); | 3310 profile.reset(new TestingProfile()); |
| 3291 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3311 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
| 3292 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3312 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
| 3293 service = profile->CreateExtensionService(command_line.get(), | 3313 service = profile->CreateExtensionService(command_line.get(), |
| 3294 install_dir); | 3314 install_dir, |
| 3315 false); |
| 3295 EXPECT_FALSE(service->extensions_enabled()); | 3316 EXPECT_FALSE(service->extensions_enabled()); |
| 3296 service->Init(); | 3317 service->Init(); |
| 3297 loop.RunAllPending(); | 3318 loop.RunAllPending(); |
| 3298 EXPECT_TRUE(recorder.ready()); | 3319 EXPECT_TRUE(recorder.ready()); |
| 3299 | 3320 |
| 3300 // Explicitly delete all the resources used in this test. | 3321 // Explicitly delete all the resources used in this test. |
| 3301 profile.reset(); | 3322 profile.reset(); |
| 3302 service = NULL; | 3323 service = NULL; |
| 3303 } | 3324 } |
| 3304 | 3325 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3396 ValidatePrefKeyCount(0); | 3417 ValidatePrefKeyCount(0); |
| 3397 | 3418 |
| 3398 // Reload all extensions, and make sure it comes back. | 3419 // Reload all extensions, and make sure it comes back. |
| 3399 std::string extension_id = service_->extensions()->at(0)->id(); | 3420 std::string extension_id = service_->extensions()->at(0)->id(); |
| 3400 loaded_.clear(); | 3421 loaded_.clear(); |
| 3401 service_->ReloadExtensions(); | 3422 service_->ReloadExtensions(); |
| 3402 ASSERT_EQ(1u, service_->extensions()->size()); | 3423 ASSERT_EQ(1u, service_->extensions()->size()); |
| 3403 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); | 3424 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); |
| 3404 } | 3425 } |
| 3405 | 3426 |
| 3427 TEST_F(ExtensionServiceTest, ProcessSyncDataUninstall) { |
| 3428 InitializeEmptyExtensionService(); |
| 3429 |
| 3430 ExtensionSyncData extension_sync_data; |
| 3431 extension_sync_data.id = good_crx; |
| 3432 extension_sync_data.uninstalled = true; |
| 3433 |
| 3434 // Should do nothing. |
| 3435 service_->ProcessSyncData(extension_sync_data); |
| 3436 |
| 3437 // Install the extension. |
| 3438 FilePath extension_path = data_dir_.AppendASCII("good.crx"); |
| 3439 InstallCrx(extension_path, true); |
| 3440 EXPECT_TRUE(service_->GetExtensionById(good_crx, true)); |
| 3441 |
| 3442 // Should uninstall the extension. |
| 3443 service_->ProcessSyncData(extension_sync_data); |
| 3444 EXPECT_FALSE(service_->GetExtensionById(good_crx, true)); |
| 3445 |
| 3446 // Should again do nothing. |
| 3447 service_->ProcessSyncData(extension_sync_data); |
| 3448 } |
| 3449 |
| 3450 |
| 3451 TEST_F(ExtensionServiceTest, ProcessSyncDataSettings) { |
| 3452 InitializeEmptyExtensionService(); |
| 3453 |
| 3454 FilePath extension_path = data_dir_.AppendASCII("good.crx"); |
| 3455 InstallCrx(extension_path, true); |
| 3456 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); |
| 3457 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx)); |
| 3458 |
| 3459 ExtensionSyncData extension_sync_data; |
| 3460 extension_sync_data.id = good_crx; |
| 3461 extension_sync_data.version = |
| 3462 *(service_->GetExtensionById(good_crx, true)->version()); |
| 3463 |
| 3464 extension_sync_data.enabled = false; |
| 3465 service_->ProcessSyncData(extension_sync_data); |
| 3466 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
| 3467 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx)); |
| 3468 |
| 3469 extension_sync_data.enabled = true; |
| 3470 extension_sync_data.incognito_enabled = true; |
| 3471 service_->ProcessSyncData(extension_sync_data); |
| 3472 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); |
| 3473 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx)); |
| 3474 |
| 3475 extension_sync_data.enabled = false; |
| 3476 extension_sync_data.incognito_enabled = true; |
| 3477 service_->ProcessSyncData(extension_sync_data); |
| 3478 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); |
| 3479 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx)); |
| 3480 |
| 3481 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); |
| 3482 } |
| 3483 |
| 3484 TEST_F(ExtensionServiceTest, ProcessSyncDataVersionCheck) { |
| 3485 InitializeExtensionServiceWithUpdater(); |
| 3486 |
| 3487 // Install the extension. |
| 3488 FilePath extension_path = data_dir_.AppendASCII("good.crx"); |
| 3489 InstallCrx(extension_path, true); |
| 3490 EXPECT_TRUE(service_->IsExtensionEnabled(good_crx)); |
| 3491 EXPECT_FALSE(service_->IsIncognitoEnabled(good_crx)); |
| 3492 |
| 3493 ExtensionSyncData extension_sync_data; |
| 3494 extension_sync_data.id = good_crx; |
| 3495 extension_sync_data.enabled = true; |
| 3496 extension_sync_data.version = |
| 3497 *(service_->GetExtensionById(good_crx, true)->version()); |
| 3498 |
| 3499 // Should do nothing if extension version == sync version. |
| 3500 service_->ProcessSyncData(extension_sync_data); |
| 3501 EXPECT_FALSE(service_->updater()->WillCheckSoon()); |
| 3502 |
| 3503 // Should do nothing if extension version > sync version (but see |
| 3504 // the TODO in ProcessSyncData). |
| 3505 { |
| 3506 scoped_ptr<Version> version(Version::GetVersionFromString("0.0.0.0")); |
| 3507 extension_sync_data.version = *version; |
| 3508 service_->ProcessSyncData(extension_sync_data); |
| 3509 EXPECT_FALSE(service_->updater()->WillCheckSoon()); |
| 3510 } |
| 3511 |
| 3512 // Should kick off an update if extension version < sync version. |
| 3513 { |
| 3514 scoped_ptr<Version> version(Version::GetVersionFromString("9.9.9.9")); |
| 3515 extension_sync_data.version = *version; |
| 3516 service_->ProcessSyncData(extension_sync_data); |
| 3517 EXPECT_TRUE(service_->updater()->WillCheckSoon()); |
| 3518 } |
| 3519 |
| 3520 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); |
| 3521 } |
| 3522 |
| 3523 TEST_F(ExtensionServiceTest, ProcessSyncDataNotInstalled) { |
| 3524 InitializeExtensionServiceWithUpdater(); |
| 3525 |
| 3526 ExtensionSyncData extension_sync_data; |
| 3527 extension_sync_data.id = good_crx; |
| 3528 extension_sync_data.update_url = GURL("http://www.google.com"); |
| 3529 extension_sync_data.enabled = true; |
| 3530 { |
| 3531 scoped_ptr<Version> version(Version::GetVersionFromString("1.2.3.4")); |
| 3532 extension_sync_data.version = *version; |
| 3533 } |
| 3534 |
| 3535 service_->ProcessSyncData(extension_sync_data); |
| 3536 EXPECT_TRUE(service_->updater()->WillCheckSoon()); |
| 3537 |
| 3538 PendingExtensionInfo info; |
| 3539 EXPECT_TRUE( |
| 3540 service_->pending_extension_manager()->GetById(good_crx, &info)); |
| 3541 EXPECT_EQ(extension_sync_data.update_url, info.update_url()); |
| 3542 EXPECT_TRUE(info.is_from_sync()); |
| 3543 EXPECT_TRUE(info.install_silently()); |
| 3544 EXPECT_EQ(extension_sync_data.enabled, info.enable_on_install()); |
| 3545 EXPECT_EQ(extension_sync_data.incognito_enabled, |
| 3546 info.enable_incognito_on_install()); |
| 3547 EXPECT_EQ(Extension::INTERNAL, info.install_source()); |
| 3548 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. |
| 3549 } |
| 3550 |
| 3406 // Test that when multiple sources try to install an extension, | 3551 // Test that when multiple sources try to install an extension, |
| 3407 // we consistently choose the right one. To make tests easy to read, | 3552 // we consistently choose the right one. To make tests easy to read, |
| 3408 // methods that fake requests to install crx files in several ways | 3553 // methods that fake requests to install crx files in several ways |
| 3409 // are provided. | 3554 // are provided. |
| 3410 class ExtensionSourcePriorityTest : public ExtensionServiceTest { | 3555 class ExtensionSourcePriorityTest : public ExtensionServiceTest { |
| 3411 public: | 3556 public: |
| 3412 void SetUp() { | 3557 void SetUp() { |
| 3413 // All tests use a single extension. Put the id and path in member vars | 3558 // All tests use a single extension. Put the id and path in member vars |
| 3414 // that all methods can read. | 3559 // that all methods can read. |
| 3415 crx_id_ = kGoodId; | 3560 crx_id_ = kGoodId; |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3573 ASSERT_FALSE(AddPendingSyncInstall()); | 3718 ASSERT_FALSE(AddPendingSyncInstall()); |
| 3574 | 3719 |
| 3575 // Wait for the external source to install. | 3720 // Wait for the external source to install. |
| 3576 WaitForCrxInstall(crx_path_, true); | 3721 WaitForCrxInstall(crx_path_, true); |
| 3577 ASSERT_TRUE(IsCrxInstalled()); | 3722 ASSERT_TRUE(IsCrxInstalled()); |
| 3578 | 3723 |
| 3579 // Now that the extension is installed, sync request should fail | 3724 // Now that the extension is installed, sync request should fail |
| 3580 // because the extension is already installed. | 3725 // because the extension is already installed. |
| 3581 ASSERT_FALSE(AddPendingSyncInstall()); | 3726 ASSERT_FALSE(AddPendingSyncInstall()); |
| 3582 } | 3727 } |
| OLD | NEW |