| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/json_reader.h" | 10 #include "base/json_reader.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 NotificationService::AllSources()); | 124 NotificationService::AllSources()); |
| 125 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, | 125 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, |
| 126 NotificationService::AllSources()); | 126 NotificationService::AllSources()); |
| 127 registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, | 127 registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, |
| 128 NotificationService::AllSources()); | 128 NotificationService::AllSources()); |
| 129 registrar_.Add(this, NotificationType::THEME_INSTALLED, | 129 registrar_.Add(this, NotificationType::THEME_INSTALLED, |
| 130 NotificationService::AllSources()); | 130 NotificationService::AllSources()); |
| 131 | 131 |
| 132 profile_.reset(new TestingProfile()); | 132 profile_.reset(new TestingProfile()); |
| 133 service_ = new ExtensionsService(profile_.get(), &loop_, &loop_); | 133 service_ = new ExtensionsService(profile_.get(), &loop_, &loop_); |
| 134 service_->set_extensions_enabled(true); | 134 service_->SetExtensionsEnabled(true); |
| 135 service_->set_show_extensions_prompts(false); | 135 service_->set_show_extensions_prompts(false); |
| 136 | 136 |
| 137 // When we start up, we want to make sure there is no external provider, | 137 // When we start up, we want to make sure there is no external provider, |
| 138 // since the ExtensionService on Windows will use the Registry as a default | 138 // since the ExtensionService on Windows will use the Registry as a default |
| 139 // provider and if there is something already registered there then it will | 139 // provider and if there is something already registered there then it will |
| 140 // interfere with the tests. Those tests that need an external provider | 140 // interfere with the tests. Those tests that need an external provider |
| 141 // will register one specifically. | 141 // will register one specifically. |
| 142 service_->ClearProvidersForTesting(); | 142 service_->ClearProvidersForTesting(); |
| 143 | 143 |
| 144 total_successes_ = 0; | 144 total_successes_ = 0; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 case NotificationType::THEME_INSTALLED: | 184 case NotificationType::THEME_INSTALLED: |
| 185 installed_ = Details<Extension>(details).ptr(); | 185 installed_ = Details<Extension>(details).ptr(); |
| 186 break; | 186 break; |
| 187 | 187 |
| 188 default: | 188 default: |
| 189 DCHECK(false); | 189 DCHECK(false); |
| 190 } | 190 } |
| 191 } | 191 } |
| 192 | 192 |
| 193 void SetExtensionsEnabled(bool enabled) { | 193 void SetExtensionsEnabled(bool enabled) { |
| 194 service_->set_extensions_enabled(enabled); | 194 service_->SetExtensionsEnabled(enabled); |
| 195 } | 195 } |
| 196 | 196 |
| 197 void SetMockExternalProvider(Extension::Location location, | 197 void SetMockExternalProvider(Extension::Location location, |
| 198 ExternalExtensionProvider* provider) { | 198 ExternalExtensionProvider* provider) { |
| 199 service_->SetProviderForTesting(location, provider); | 199 service_->SetProviderForTesting(location, provider); |
| 200 } | 200 } |
| 201 | 201 |
| 202 protected: | 202 protected: |
| 203 void InstallExtension(const FilePath& path, | 203 void InstallExtension(const FilePath& path, |
| 204 bool should_succeed) { | 204 bool should_succeed) { |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 ValidatePrefKeyCount(pref_count); | 491 ValidatePrefKeyCount(pref_count); |
| 492 | 492 |
| 493 // TODO(erikkay): add more tests for many of the failure cases. | 493 // TODO(erikkay): add more tests for many of the failure cases. |
| 494 // TODO(erikkay): add tests for upgrade cases. | 494 // TODO(erikkay): add tests for upgrade cases. |
| 495 } | 495 } |
| 496 | 496 |
| 497 #if defined(OS_WIN) // TODO(port) | 497 #if defined(OS_WIN) // TODO(port) |
| 498 // Test Packaging and installing an extension. | 498 // Test Packaging and installing an extension. |
| 499 // TODO(rafaelw): add more tests for failure cases. | 499 // TODO(rafaelw): add more tests for failure cases. |
| 500 TEST_F(ExtensionsServiceTest, PackExtension) { | 500 TEST_F(ExtensionsServiceTest, PackExtension) { |
| 501 SetExtensionsEnabled(true); | |
| 502 | |
| 503 FilePath extensions_path; | 501 FilePath extensions_path; |
| 504 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 502 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 505 extensions_path = extensions_path.AppendASCII("extensions"); | 503 extensions_path = extensions_path.AppendASCII("extensions"); |
| 506 FilePath input_directory = extensions_path.AppendASCII("good") | 504 FilePath input_directory = extensions_path.AppendASCII("good") |
| 507 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj").AppendASCII("1.0.0.0"); | 505 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj").AppendASCII("1.0.0.0"); |
| 508 | 506 |
| 509 FilePath output_directory; | 507 FilePath output_directory; |
| 510 file_util::CreateNewTempDirectory(FILE_PATH_LITERAL("chrome_"), | 508 file_util::CreateNewTempDirectory(FILE_PATH_LITERAL("chrome_"), |
| 511 &output_directory); | 509 &output_directory); |
| 512 FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 510 FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 523 file_util::Delete(privkey_path, false); | 521 file_util::Delete(privkey_path, false); |
| 524 } | 522 } |
| 525 | 523 |
| 526 // Test Packaging and installing an extension using an openssl generated key. | 524 // Test Packaging and installing an extension using an openssl generated key. |
| 527 // The openssl is generated with the following: | 525 // The openssl is generated with the following: |
| 528 // > openssl genrsa -out privkey.pem 1024 | 526 // > openssl genrsa -out privkey.pem 1024 |
| 529 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem | 527 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem |
| 530 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a | 528 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a |
| 531 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. | 529 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. |
| 532 TEST_F(ExtensionsServiceTest, PackExtensionOpenSSLKey) { | 530 TEST_F(ExtensionsServiceTest, PackExtensionOpenSSLKey) { |
| 533 SetExtensionsEnabled(true); | |
| 534 | |
| 535 FilePath extensions_path; | 531 FilePath extensions_path; |
| 536 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 532 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 537 extensions_path = extensions_path.AppendASCII("extensions"); | 533 extensions_path = extensions_path.AppendASCII("extensions"); |
| 538 FilePath input_directory = extensions_path.AppendASCII("good") | 534 FilePath input_directory = extensions_path.AppendASCII("good") |
| 539 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj").AppendASCII("1.0.0.0"); | 535 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj").AppendASCII("1.0.0.0"); |
| 540 FilePath privkey_path(extensions_path.AppendASCII( | 536 FilePath privkey_path(extensions_path.AppendASCII( |
| 541 "openssl_privkey_asn1.pem")); | 537 "openssl_privkey_asn1.pem")); |
| 542 ASSERT_TRUE(file_util::PathExists(privkey_path)); | 538 ASSERT_TRUE(file_util::PathExists(privkey_path)); |
| 543 | 539 |
| 544 FilePath output_directory; | 540 FilePath output_directory; |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 797 EXPECT_EQ(loaded_[1]->location(), Extension::LOAD); | 793 EXPECT_EQ(loaded_[1]->location(), Extension::LOAD); |
| 798 | 794 |
| 799 // --load-extension doesn't add entries to prefs | 795 // --load-extension doesn't add entries to prefs |
| 800 ValidatePrefKeyCount(0); | 796 ValidatePrefKeyCount(0); |
| 801 } | 797 } |
| 802 | 798 |
| 803 // Tests the external installation feature | 799 // Tests the external installation feature |
| 804 #if defined(OS_WIN) | 800 #if defined(OS_WIN) |
| 805 | 801 |
| 806 TEST_F(ExtensionsServiceTest, ExternalInstallRegistry) { | 802 TEST_F(ExtensionsServiceTest, ExternalInstallRegistry) { |
| 803 // This should all work, even when normal extension installation is disabled. |
| 804 SetExtensionsEnabled(false); |
| 805 |
| 807 // Verify that starting with no providers loads no extensions. | 806 // Verify that starting with no providers loads no extensions. |
| 808 service_->Init(); | 807 service_->Init(); |
| 809 loop_.RunAllPending(); | 808 loop_.RunAllPending(); |
| 810 ASSERT_EQ(0u, loaded_.size()); | 809 ASSERT_EQ(0u, loaded_.size()); |
| 811 | 810 |
| 812 // Now add providers. Extension system takes ownership of the objects. | 811 // Now add providers. Extension system takes ownership of the objects. |
| 813 MockExtensionProvider* reg_provider = | 812 MockExtensionProvider* reg_provider = |
| 814 new MockExtensionProvider(Extension::EXTERNAL_REGISTRY); | 813 new MockExtensionProvider(Extension::EXTERNAL_REGISTRY); |
| 815 SetMockExternalProvider(Extension::EXTERNAL_REGISTRY, reg_provider); | 814 SetMockExternalProvider(Extension::EXTERNAL_REGISTRY, reg_provider); |
| 816 | 815 |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1006 | 1005 |
| 1007 ValidatePrefKeyCount(1); | 1006 ValidatePrefKeyCount(1); |
| 1008 ValidatePref(good_crx, L"state", Extension::KILLBIT); | 1007 ValidatePref(good_crx, L"state", Extension::KILLBIT); |
| 1009 ValidatePref(good_crx, L"location", Extension::EXTERNAL_PREF); | 1008 ValidatePref(good_crx, L"location", Extension::EXTERNAL_PREF); |
| 1010 | 1009 |
| 1011 // The extension should also be gone from disk. | 1010 // The extension should also be gone from disk. |
| 1012 FilePath extension_path = install_path.DirName(); | 1011 FilePath extension_path = install_path.DirName(); |
| 1013 extension_path = extension_path.AppendASCII(good_crx); | 1012 extension_path = extension_path.AppendASCII(good_crx); |
| 1014 EXPECT_FALSE(file_util::PathExists(extension_path)) << | 1013 EXPECT_FALSE(file_util::PathExists(extension_path)) << |
| 1015 extension_path.ToWStringHack(); | 1014 extension_path.ToWStringHack(); |
| 1015 |
| 1016 // This shouldn't work if extensions are disabled. |
| 1017 SetExtensionsEnabled(false); |
| 1018 |
| 1019 pref_provider->UpdateOrAddExtension(good_crx, "1.0", source_path); |
| 1020 service_->CheckForUpdates(); |
| 1021 loop_.RunAllPending(); |
| 1022 |
| 1023 ASSERT_EQ(0u, loaded_.size()); |
| 1024 ASSERT_EQ(1u, GetErrors().size()); |
| 1016 } | 1025 } |
| OLD | NEW |