| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/extensions_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
| 13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
| 14 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
| 15 #include "base/path_service.h" | 15 #include "base/path_service.h" |
| 16 #include "base/scoped_ptr.h" | 16 #include "base/scoped_ptr.h" |
| 17 #include "base/stl_util-inl.h" | 17 #include "base/stl_util-inl.h" |
| 18 #include "base/string16.h" | 18 #include "base/string16.h" |
| 19 #include "base/string_number_conversions.h" | 19 #include "base/string_number_conversions.h" |
| 20 #include "base/string_util.h" | 20 #include "base/string_util.h" |
| 21 #include "base/task.h" | 21 #include "base/task.h" |
| 22 #include "base/utf_string_conversions.h" | 22 #include "base/utf_string_conversions.h" |
| 23 #include "base/version.h" | 23 #include "base/version.h" |
| 24 #include "chrome/browser/appcache/chrome_appcache_service.h" | 24 #include "chrome/browser/appcache/chrome_appcache_service.h" |
| 25 #include "chrome/browser/browser_thread.h" | 25 #include "chrome/browser/browser_thread.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/extensions_service.h" | 29 #include "chrome/browser/extensions/extension_service.h" |
| 30 #include "chrome/browser/extensions/external_extension_provider.h" | 30 #include "chrome/browser/extensions/external_extension_provider.h" |
| 31 #include "chrome/browser/extensions/external_pref_extension_provider.h" | 31 #include "chrome/browser/extensions/external_pref_extension_provider.h" |
| 32 #include "chrome/browser/extensions/pack_extension_job.cc" | 32 #include "chrome/browser/extensions/pack_extension_job.cc" |
| 33 #include "chrome/browser/file_system/browser_file_system_helper.h" | 33 #include "chrome/browser/file_system/browser_file_system_helper.h" |
| 34 #include "chrome/browser/in_process_webkit/dom_storage_context.h" | 34 #include "chrome/browser/in_process_webkit/dom_storage_context.h" |
| 35 #include "chrome/browser/in_process_webkit/webkit_context.h" | 35 #include "chrome/browser/in_process_webkit/webkit_context.h" |
| 36 #include "chrome/browser/prefs/browser_prefs.h" | 36 #include "chrome/browser/prefs/browser_prefs.h" |
| 37 #include "chrome/browser/prefs/pref_service_mock_builder.h" | 37 #include "chrome/browser/prefs/pref_service_mock_builder.h" |
| 38 #include "chrome/browser/prefs/scoped_pref_update.h" | 38 #include "chrome/browser/prefs/scoped_pref_update.h" |
| 39 #include "chrome/common/chrome_paths.h" | 39 #include "chrome/common/chrome_paths.h" |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 scoped_ptr<DictionaryValue> prefs_; | 291 scoped_ptr<DictionaryValue> prefs_; |
| 292 | 292 |
| 293 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); | 293 DISALLOW_COPY_AND_ASSIGN(MockProviderVisitor); |
| 294 }; | 294 }; |
| 295 | 295 |
| 296 class ExtensionTestingProfile : public TestingProfile { | 296 class ExtensionTestingProfile : public TestingProfile { |
| 297 public: | 297 public: |
| 298 ExtensionTestingProfile() : service_(NULL) { | 298 ExtensionTestingProfile() : service_(NULL) { |
| 299 } | 299 } |
| 300 | 300 |
| 301 void set_extensions_service(ExtensionsService* service) { | 301 void set_extensions_service(ExtensionService* service) { |
| 302 service_ = service; | 302 service_ = service; |
| 303 } | 303 } |
| 304 virtual ExtensionsService* GetExtensionsService() { return service_; } | 304 virtual ExtensionService* GetExtensionService() { return service_; } |
| 305 | 305 |
| 306 virtual ChromeAppCacheService* GetAppCacheService() { | 306 virtual ChromeAppCacheService* GetAppCacheService() { |
| 307 if (!appcache_service_) { | 307 if (!appcache_service_) { |
| 308 appcache_service_ = new ChromeAppCacheService; | 308 appcache_service_ = new ChromeAppCacheService; |
| 309 BrowserThread::PostTask( | 309 BrowserThread::PostTask( |
| 310 BrowserThread::IO, FROM_HERE, | 310 BrowserThread::IO, FROM_HERE, |
| 311 NewRunnableMethod(appcache_service_.get(), | 311 NewRunnableMethod(appcache_service_.get(), |
| 312 &ChromeAppCacheService::InitializeOnIOThread, | 312 &ChromeAppCacheService::InitializeOnIOThread, |
| 313 GetPath(), IsOffTheRecord(), | 313 GetPath(), IsOffTheRecord(), |
| 314 make_scoped_refptr(GetHostContentSettingsMap()))); | 314 make_scoped_refptr(GetHostContentSettingsMap()))); |
| 315 } | 315 } |
| 316 return appcache_service_; | 316 return appcache_service_; |
| 317 } | 317 } |
| 318 | 318 |
| 319 virtual fileapi::SandboxedFileSystemContext* GetFileSystemContext() { | 319 virtual fileapi::SandboxedFileSystemContext* GetFileSystemContext() { |
| 320 if (!file_system_context_) | 320 if (!file_system_context_) |
| 321 file_system_context_ = CreateFileSystemContext( | 321 file_system_context_ = CreateFileSystemContext( |
| 322 GetPath(), IsOffTheRecord()); | 322 GetPath(), IsOffTheRecord()); |
| 323 return file_system_context_; | 323 return file_system_context_; |
| 324 } | 324 } |
| 325 | 325 |
| 326 private: | 326 private: |
| 327 ExtensionsService* service_; | 327 ExtensionService* service_; |
| 328 scoped_refptr<ChromeAppCacheService> appcache_service_; | 328 scoped_refptr<ChromeAppCacheService> appcache_service_; |
| 329 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; | 329 scoped_refptr<fileapi::SandboxedFileSystemContext> file_system_context_; |
| 330 }; | 330 }; |
| 331 | 331 |
| 332 // Our message loop may be used in tests which require it to be an IO loop. | 332 // Our message loop may be used in tests which require it to be an IO loop. |
| 333 ExtensionsServiceTestBase::ExtensionsServiceTestBase() | 333 ExtensionServiceTestBase::ExtensionServiceTestBase() |
| 334 : total_successes_(0), | 334 : total_successes_(0), |
| 335 loop_(MessageLoop::TYPE_IO), | 335 loop_(MessageLoop::TYPE_IO), |
| 336 ui_thread_(BrowserThread::UI, &loop_), | 336 ui_thread_(BrowserThread::UI, &loop_), |
| 337 db_thread_(BrowserThread::DB, &loop_), | 337 db_thread_(BrowserThread::DB, &loop_), |
| 338 webkit_thread_(BrowserThread::WEBKIT, &loop_), | 338 webkit_thread_(BrowserThread::WEBKIT, &loop_), |
| 339 file_thread_(BrowserThread::FILE, &loop_), | 339 file_thread_(BrowserThread::FILE, &loop_), |
| 340 io_thread_(BrowserThread::IO, &loop_) { | 340 io_thread_(BrowserThread::IO, &loop_) { |
| 341 } | 341 } |
| 342 | 342 |
| 343 ExtensionsServiceTestBase::~ExtensionsServiceTestBase() { | 343 ExtensionServiceTestBase::~ExtensionServiceTestBase() { |
| 344 // Drop our reference to ExtensionsService and TestingProfile, so that they | 344 // Drop our reference to ExtensionService and TestingProfile, so that they |
| 345 // can be destroyed while BrowserThreads and MessageLoop are still around | 345 // can be destroyed while BrowserThreads and MessageLoop are still around |
| 346 // (they are used in the destruction process). | 346 // (they are used in the destruction process). |
| 347 service_ = NULL; | 347 service_ = NULL; |
| 348 profile_.reset(NULL); | 348 profile_.reset(NULL); |
| 349 MessageLoop::current()->RunAllPending(); | 349 MessageLoop::current()->RunAllPending(); |
| 350 } | 350 } |
| 351 | 351 |
| 352 void ExtensionsServiceTestBase::InitializeExtensionsService( | 352 void ExtensionServiceTestBase::InitializeExtensionService( |
| 353 const FilePath& pref_file, const FilePath& extensions_install_dir) { | 353 const FilePath& pref_file, const FilePath& extensions_install_dir) { |
| 354 ExtensionTestingProfile* profile = new ExtensionTestingProfile(); | 354 ExtensionTestingProfile* profile = new ExtensionTestingProfile(); |
| 355 // Create a PrefService that only contains user defined preference values. | 355 // Create a PrefService that only contains user defined preference values. |
| 356 PrefService* prefs = | 356 PrefService* prefs = |
| 357 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); | 357 PrefServiceMockBuilder().WithUserFilePrefs(pref_file).Create(); |
| 358 Profile::RegisterUserPrefs(prefs); | 358 Profile::RegisterUserPrefs(prefs); |
| 359 browser::RegisterUserPrefs(prefs); | 359 browser::RegisterUserPrefs(prefs); |
| 360 profile->SetPrefService(prefs); | 360 profile->SetPrefService(prefs); |
| 361 | 361 |
| 362 profile_.reset(profile); | 362 profile_.reset(profile); |
| 363 | 363 |
| 364 service_ = profile->CreateExtensionsService( | 364 service_ = profile->CreateExtensionService( |
| 365 CommandLine::ForCurrentProcess(), | 365 CommandLine::ForCurrentProcess(), |
| 366 extensions_install_dir); | 366 extensions_install_dir); |
| 367 service_->set_extensions_enabled(true); | 367 service_->set_extensions_enabled(true); |
| 368 service_->set_show_extensions_prompts(false); | 368 service_->set_show_extensions_prompts(false); |
| 369 profile->set_extensions_service(service_.get()); | 369 profile->set_extensions_service(service_.get()); |
| 370 | 370 |
| 371 // When we start up, we want to make sure there is no external provider, | 371 // When we start up, we want to make sure there is no external provider, |
| 372 // since the ExtensionService on Windows will use the Registry as a default | 372 // since the ExtensionService on Windows will use the Registry as a default |
| 373 // provider and if there is something already registered there then it will | 373 // provider and if there is something already registered there then it will |
| 374 // interfere with the tests. Those tests that need an external provider | 374 // interfere with the tests. Those tests that need an external provider |
| 375 // will register one specifically. | 375 // will register one specifically. |
| 376 service_->ClearProvidersForTesting(); | 376 service_->ClearProvidersForTesting(); |
| 377 | 377 |
| 378 total_successes_ = 0; | 378 total_successes_ = 0; |
| 379 } | 379 } |
| 380 | 380 |
| 381 void ExtensionsServiceTestBase::InitializeInstalledExtensionsService( | 381 void ExtensionServiceTestBase::InitializeInstalledExtensionService( |
| 382 const FilePath& prefs_file, const FilePath& source_install_dir) { | 382 const FilePath& prefs_file, const FilePath& source_install_dir) { |
| 383 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 383 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 384 FilePath path_ = temp_dir_.path(); | 384 FilePath path_ = temp_dir_.path(); |
| 385 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | 385 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); |
| 386 file_util::Delete(path_, true); | 386 file_util::Delete(path_, true); |
| 387 file_util::CreateDirectory(path_); | 387 file_util::CreateDirectory(path_); |
| 388 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences")); | 388 FilePath temp_prefs = path_.Append(FILE_PATH_LITERAL("Preferences")); |
| 389 file_util::CopyFile(prefs_file, temp_prefs); | 389 file_util::CopyFile(prefs_file, temp_prefs); |
| 390 | 390 |
| 391 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); | 391 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); |
| 392 file_util::Delete(extensions_install_dir_, true); | 392 file_util::Delete(extensions_install_dir_, true); |
| 393 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); | 393 file_util::CopyDirectory(source_install_dir, extensions_install_dir_, true); |
| 394 | 394 |
| 395 InitializeExtensionsService(temp_prefs, extensions_install_dir_); | 395 InitializeExtensionService(temp_prefs, extensions_install_dir_); |
| 396 } | 396 } |
| 397 | 397 |
| 398 void ExtensionsServiceTestBase::InitializeEmptyExtensionsService() { | 398 void ExtensionServiceTestBase::InitializeEmptyExtensionService() { |
| 399 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 399 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 400 FilePath path_ = temp_dir_.path(); | 400 FilePath path_ = temp_dir_.path(); |
| 401 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); | 401 path_ = path_.Append(FILE_PATH_LITERAL("TestingExtensionsPath")); |
| 402 file_util::Delete(path_, true); | 402 file_util::Delete(path_, true); |
| 403 file_util::CreateDirectory(path_); | 403 file_util::CreateDirectory(path_); |
| 404 FilePath prefs_filename = path_ | 404 FilePath prefs_filename = path_ |
| 405 .Append(FILE_PATH_LITERAL("TestPreferences")); | 405 .Append(FILE_PATH_LITERAL("TestPreferences")); |
| 406 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); | 406 extensions_install_dir_ = path_.Append(FILE_PATH_LITERAL("Extensions")); |
| 407 file_util::Delete(extensions_install_dir_, true); | 407 file_util::Delete(extensions_install_dir_, true); |
| 408 file_util::CreateDirectory(extensions_install_dir_); | 408 file_util::CreateDirectory(extensions_install_dir_); |
| 409 | 409 |
| 410 InitializeExtensionsService(prefs_filename, extensions_install_dir_); | 410 InitializeExtensionService(prefs_filename, extensions_install_dir_); |
| 411 } | 411 } |
| 412 | 412 |
| 413 // static | 413 // static |
| 414 void ExtensionsServiceTestBase::SetUpTestCase() { | 414 void ExtensionServiceTestBase::SetUpTestCase() { |
| 415 ExtensionErrorReporter::Init(false); // no noisy errors | 415 ExtensionErrorReporter::Init(false); // no noisy errors |
| 416 } | 416 } |
| 417 | 417 |
| 418 void ExtensionsServiceTestBase::SetUp() { | 418 void ExtensionServiceTestBase::SetUp() { |
| 419 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 419 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
| 420 } | 420 } |
| 421 | 421 |
| 422 class ExtensionsServiceTest | 422 class ExtensionServiceTest |
| 423 : public ExtensionsServiceTestBase, public NotificationObserver { | 423 : public ExtensionServiceTestBase, public NotificationObserver { |
| 424 public: | 424 public: |
| 425 ExtensionsServiceTest() : installed_(NULL) { | 425 ExtensionServiceTest() : installed_(NULL) { |
| 426 registrar_.Add(this, NotificationType::EXTENSION_LOADED, | 426 registrar_.Add(this, NotificationType::EXTENSION_LOADED, |
| 427 NotificationService::AllSources()); | 427 NotificationService::AllSources()); |
| 428 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, | 428 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, |
| 429 NotificationService::AllSources()); | 429 NotificationService::AllSources()); |
| 430 registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, | 430 registrar_.Add(this, NotificationType::EXTENSION_INSTALLED, |
| 431 NotificationService::AllSources()); | 431 NotificationService::AllSources()); |
| 432 registrar_.Add(this, NotificationType::THEME_INSTALLED, | 432 registrar_.Add(this, NotificationType::THEME_INSTALLED, |
| 433 NotificationService::AllSources()); | 433 NotificationService::AllSources()); |
| 434 } | 434 } |
| 435 | 435 |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 EXPECT_EQ(expected_private_key_path_.value(), private_key_path.value()); | 809 EXPECT_EQ(expected_private_key_path_.value(), private_key_path.value()); |
| 810 ASSERT_TRUE(file_util::PathExists(private_key_path)); | 810 ASSERT_TRUE(file_util::PathExists(private_key_path)); |
| 811 } | 811 } |
| 812 | 812 |
| 813 // The tests are designed so that we never expect to see a packing error. | 813 // The tests are designed so that we never expect to see a packing error. |
| 814 void PackExtensionTestClient::OnPackFailure(const std::string& error_message) { | 814 void PackExtensionTestClient::OnPackFailure(const std::string& error_message) { |
| 815 FAIL() << "Packing should not fail."; | 815 FAIL() << "Packing should not fail."; |
| 816 } | 816 } |
| 817 | 817 |
| 818 // Test loading good extensions from the profile directory. | 818 // Test loading good extensions from the profile directory. |
| 819 TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) { | 819 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectorySuccess) { |
| 820 // Initialize the test dir with a good Preferences/extensions. | 820 // Initialize the test dir with a good Preferences/extensions. |
| 821 FilePath source_install_dir; | 821 FilePath source_install_dir; |
| 822 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 822 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 823 source_install_dir = source_install_dir | 823 source_install_dir = source_install_dir |
| 824 .AppendASCII("extensions") | 824 .AppendASCII("extensions") |
| 825 .AppendASCII("good") | 825 .AppendASCII("good") |
| 826 .AppendASCII("Extensions"); | 826 .AppendASCII("Extensions"); |
| 827 FilePath pref_path = source_install_dir | 827 FilePath pref_path = source_install_dir |
| 828 .DirName() | 828 .DirName() |
| 829 .AppendASCII("Preferences"); | 829 .AppendASCII("Preferences"); |
| 830 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 830 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 831 | 831 |
| 832 service_->Init(); | 832 service_->Init(); |
| 833 | 833 |
| 834 // On Chrome OS, we disallow extensions with plugins. "good1" has plugins, | 834 // On Chrome OS, we disallow extensions with plugins. "good1" has plugins, |
| 835 // so we need to edit it out here. | 835 // so we need to edit it out here. |
| 836 uint32 expected_num_extensions = 3u; | 836 uint32 expected_num_extensions = 3u; |
| 837 #if defined(OS_CHROMEOS) | 837 #if defined(OS_CHROMEOS) |
| 838 --expected_num_extensions; | 838 --expected_num_extensions; |
| 839 #endif | 839 #endif |
| 840 ASSERT_EQ(expected_num_extensions, loaded_.size()); | 840 ASSERT_EQ(expected_num_extensions, loaded_.size()); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 913 | 913 |
| 914 int index = expected_num_extensions - 1; | 914 int index = expected_num_extensions - 1; |
| 915 EXPECT_EQ(std::string(good2), loaded_[index]->id()); | 915 EXPECT_EQ(std::string(good2), loaded_[index]->id()); |
| 916 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); | 916 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); |
| 917 EXPECT_EQ(std::string(""), loaded_[index]->description()); | 917 EXPECT_EQ(std::string(""), loaded_[index]->description()); |
| 918 EXPECT_EQ(0u, loaded_[index]->content_scripts().size()); | 918 EXPECT_EQ(0u, loaded_[index]->content_scripts().size()); |
| 919 EXPECT_EQ(Extension::INTERNAL, loaded_[index]->location()); | 919 EXPECT_EQ(Extension::INTERNAL, loaded_[index]->location()); |
| 920 }; | 920 }; |
| 921 | 921 |
| 922 // Test loading bad extensions from the profile directory. | 922 // Test loading bad extensions from the profile directory. |
| 923 TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectoryFail) { | 923 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { |
| 924 // Initialize the test dir with a bad Preferences/extensions. | 924 // Initialize the test dir with a bad Preferences/extensions. |
| 925 FilePath source_install_dir; | 925 FilePath source_install_dir; |
| 926 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 926 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 927 source_install_dir = source_install_dir | 927 source_install_dir = source_install_dir |
| 928 .AppendASCII("extensions") | 928 .AppendASCII("extensions") |
| 929 .AppendASCII("bad") | 929 .AppendASCII("bad") |
| 930 .AppendASCII("Extensions"); | 930 .AppendASCII("Extensions"); |
| 931 FilePath pref_path = source_install_dir | 931 FilePath pref_path = source_install_dir |
| 932 .DirName() | 932 .DirName() |
| 933 .AppendASCII("Preferences"); | 933 .AppendASCII("Preferences"); |
| 934 | 934 |
| 935 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 935 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 936 | 936 |
| 937 service_->Init(); | 937 service_->Init(); |
| 938 loop_.RunAllPending(); | 938 loop_.RunAllPending(); |
| 939 | 939 |
| 940 ASSERT_EQ(4u, GetErrors().size()); | 940 ASSERT_EQ(4u, GetErrors().size()); |
| 941 ASSERT_EQ(0u, loaded_.size()); | 941 ASSERT_EQ(0u, loaded_.size()); |
| 942 | 942 |
| 943 EXPECT_TRUE(MatchPattern(GetErrors()[0], | 943 EXPECT_TRUE(MatchPattern(GetErrors()[0], |
| 944 std::string("Could not load extension from '*'. ") + | 944 std::string("Could not load extension from '*'. ") + |
| 945 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[0]; | 945 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[0]; |
| 946 | 946 |
| 947 EXPECT_TRUE(MatchPattern(GetErrors()[1], | 947 EXPECT_TRUE(MatchPattern(GetErrors()[1], |
| 948 std::string("Could not load extension from '*'. ") + | 948 std::string("Could not load extension from '*'. ") + |
| 949 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[1]; | 949 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[1]; |
| 950 | 950 |
| 951 EXPECT_TRUE(MatchPattern(GetErrors()[2], | 951 EXPECT_TRUE(MatchPattern(GetErrors()[2], |
| 952 std::string("Could not load extension from '*'. ") + | 952 std::string("Could not load extension from '*'. ") + |
| 953 extension_manifest_errors::kMissingFile)) << GetErrors()[2]; | 953 extension_manifest_errors::kMissingFile)) << GetErrors()[2]; |
| 954 | 954 |
| 955 EXPECT_TRUE(MatchPattern(GetErrors()[3], | 955 EXPECT_TRUE(MatchPattern(GetErrors()[3], |
| 956 std::string("Could not load extension from '*'. ") + | 956 std::string("Could not load extension from '*'. ") + |
| 957 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[3]; | 957 extension_manifest_errors::kManifestUnreadable)) << GetErrors()[3]; |
| 958 }; | 958 }; |
| 959 | 959 |
| 960 // Test that partially deleted extensions are cleaned up during startup | 960 // Test that partially deleted extensions are cleaned up during startup |
| 961 // Test loading bad extensions from the profile directory. | 961 // Test loading bad extensions from the profile directory. |
| 962 TEST_F(ExtensionsServiceTest, CleanupOnStartup) { | 962 TEST_F(ExtensionServiceTest, CleanupOnStartup) { |
| 963 FilePath source_install_dir; | 963 FilePath source_install_dir; |
| 964 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 964 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 965 source_install_dir = source_install_dir | 965 source_install_dir = source_install_dir |
| 966 .AppendASCII("extensions") | 966 .AppendASCII("extensions") |
| 967 .AppendASCII("good") | 967 .AppendASCII("good") |
| 968 .AppendASCII("Extensions"); | 968 .AppendASCII("Extensions"); |
| 969 FilePath pref_path = source_install_dir | 969 FilePath pref_path = source_install_dir |
| 970 .DirName() | 970 .DirName() |
| 971 .AppendASCII("Preferences"); | 971 .AppendASCII("Preferences"); |
| 972 | 972 |
| 973 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 973 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 974 | 974 |
| 975 // Simulate that one of them got partially deleted by clearing its pref. | 975 // Simulate that one of them got partially deleted by clearing its pref. |
| 976 DictionaryValue* dict = | 976 DictionaryValue* dict = |
| 977 profile_->GetPrefs()->GetMutableDictionary("extensions.settings"); | 977 profile_->GetPrefs()->GetMutableDictionary("extensions.settings"); |
| 978 ASSERT_TRUE(dict != NULL); | 978 ASSERT_TRUE(dict != NULL); |
| 979 dict->Remove("behllobkkfkfnphdnhnkndlbkcpglgmj", NULL); | 979 dict->Remove("behllobkkfkfnphdnhnkndlbkcpglgmj", NULL); |
| 980 | 980 |
| 981 service_->Init(); | 981 service_->Init(); |
| 982 loop_.RunAllPending(); | 982 loop_.RunAllPending(); |
| 983 | 983 |
| 984 file_util::FileEnumerator dirs(extensions_install_dir_, false, | 984 file_util::FileEnumerator dirs(extensions_install_dir_, false, |
| 985 file_util::FileEnumerator::DIRECTORIES); | 985 file_util::FileEnumerator::DIRECTORIES); |
| 986 size_t count = 0; | 986 size_t count = 0; |
| 987 while (!dirs.Next().empty()) | 987 while (!dirs.Next().empty()) |
| 988 count++; | 988 count++; |
| 989 | 989 |
| 990 // We should have only gotten two extensions now. | 990 // We should have only gotten two extensions now. |
| 991 EXPECT_EQ(2u, count); | 991 EXPECT_EQ(2u, count); |
| 992 | 992 |
| 993 // And extension1 dir should now be toast. | 993 // And extension1 dir should now be toast. |
| 994 FilePath extension_dir = extensions_install_dir_ | 994 FilePath extension_dir = extensions_install_dir_ |
| 995 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj"); | 995 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj"); |
| 996 ASSERT_FALSE(file_util::PathExists(extension_dir)); | 996 ASSERT_FALSE(file_util::PathExists(extension_dir)); |
| 997 } | 997 } |
| 998 | 998 |
| 999 // Test installing extensions. This test tries to install few extensions using | 999 // Test installing extensions. This test tries to install few extensions using |
| 1000 // crx files. If you need to change those crx files, feel free to repackage | 1000 // crx files. If you need to change those crx files, feel free to repackage |
| 1001 // them, throw away the key used and change the id's above. | 1001 // them, throw away the key used and change the id's above. |
| 1002 TEST_F(ExtensionsServiceTest, InstallExtension) { | 1002 TEST_F(ExtensionServiceTest, InstallExtension) { |
| 1003 InitializeEmptyExtensionsService(); | 1003 InitializeEmptyExtensionService(); |
| 1004 | 1004 |
| 1005 FilePath extensions_path; | 1005 FilePath extensions_path; |
| 1006 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1006 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1007 extensions_path = extensions_path.AppendASCII("extensions"); | 1007 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1008 | 1008 |
| 1009 // Extensions not enabled. | 1009 // Extensions not enabled. |
| 1010 set_extensions_enabled(false); | 1010 set_extensions_enabled(false); |
| 1011 FilePath path = extensions_path.AppendASCII("good.crx"); | 1011 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1012 InstallExtension(path, false); | 1012 InstallExtension(path, false); |
| 1013 set_extensions_enabled(true); | 1013 set_extensions_enabled(true); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1052 // We did not used to handle this correctly for installation. | 1052 // We did not used to handle this correctly for installation. |
| 1053 path = extensions_path.AppendASCII("bad_underscore.crx"); | 1053 path = extensions_path.AppendASCII("bad_underscore.crx"); |
| 1054 InstallExtension(path, false); | 1054 InstallExtension(path, false); |
| 1055 ValidatePrefKeyCount(pref_count); | 1055 ValidatePrefKeyCount(pref_count); |
| 1056 | 1056 |
| 1057 // TODO(erikkay): add more tests for many of the failure cases. | 1057 // TODO(erikkay): add more tests for many of the failure cases. |
| 1058 // TODO(erikkay): add tests for upgrade cases. | 1058 // TODO(erikkay): add tests for upgrade cases. |
| 1059 } | 1059 } |
| 1060 | 1060 |
| 1061 // Test the handling of killed extensions. | 1061 // Test the handling of killed extensions. |
| 1062 TEST_F(ExtensionsServiceTest, KilledExtensions) { | 1062 TEST_F(ExtensionServiceTest, KilledExtensions) { |
| 1063 InitializeEmptyExtensionsService(); | 1063 InitializeEmptyExtensionService(); |
| 1064 | 1064 |
| 1065 FilePath extensions_path; | 1065 FilePath extensions_path; |
| 1066 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1066 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1067 extensions_path = extensions_path.AppendASCII("extensions"); | 1067 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1068 FilePath path = extensions_path.AppendASCII("good.crx"); | 1068 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1069 set_extensions_enabled(true); | 1069 set_extensions_enabled(true); |
| 1070 | 1070 |
| 1071 // Install an external extension. | 1071 // Install an external extension. |
| 1072 service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0", | 1072 service_->OnExternalExtensionFileFound(good_crx, "1.0.0.0", |
| 1073 path, Extension::EXTERNAL_PREF); | 1073 path, Extension::EXTERNAL_PREF); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1098 service_->AddPendingExtensionFromExternalUpdateUrl( | 1098 service_->AddPendingExtensionFromExternalUpdateUrl( |
| 1099 good_crx, | 1099 good_crx, |
| 1100 GURL("http:://fake.update/url"), | 1100 GURL("http:://fake.update/url"), |
| 1101 Extension::EXTERNAL_PREF_DOWNLOAD); | 1101 Extension::EXTERNAL_PREF_DOWNLOAD); |
| 1102 const PendingExtensionMap& pending_extensions = | 1102 const PendingExtensionMap& pending_extensions = |
| 1103 service_->pending_extensions(); | 1103 service_->pending_extensions(); |
| 1104 ASSERT_TRUE(pending_extensions.find(good_crx) == pending_extensions.end()); | 1104 ASSERT_TRUE(pending_extensions.find(good_crx) == pending_extensions.end()); |
| 1105 } | 1105 } |
| 1106 | 1106 |
| 1107 // Install a user script (they get converted automatically to an extension) | 1107 // Install a user script (they get converted automatically to an extension) |
| 1108 TEST_F(ExtensionsServiceTest, InstallUserScript) { | 1108 TEST_F(ExtensionServiceTest, InstallUserScript) { |
| 1109 // The details of script conversion are tested elsewhere, this just tests | 1109 // The details of script conversion are tested elsewhere, this just tests |
| 1110 // integration with ExtensionsService. | 1110 // integration with ExtensionService. |
| 1111 InitializeEmptyExtensionsService(); | 1111 InitializeEmptyExtensionService(); |
| 1112 | 1112 |
| 1113 FilePath path; | 1113 FilePath path; |
| 1114 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 1114 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 1115 path = path.AppendASCII("extensions") | 1115 path = path.AppendASCII("extensions") |
| 1116 .AppendASCII("user_script_basic.user.js"); | 1116 .AppendASCII("user_script_basic.user.js"); |
| 1117 | 1117 |
| 1118 ASSERT_TRUE(file_util::PathExists(path)); | 1118 ASSERT_TRUE(file_util::PathExists(path)); |
| 1119 scoped_refptr<CrxInstaller> installer( | 1119 scoped_refptr<CrxInstaller> installer( |
| 1120 new CrxInstaller(service_, NULL)); // silent install | 1120 new CrxInstaller(service_, NULL)); // silent install |
| 1121 installer->InstallUserScript( | 1121 installer->InstallUserScript( |
| 1122 path, | 1122 path, |
| 1123 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); | 1123 GURL("http://www.aaronboodman.com/scripts/user_script_basic.user.js")); |
| 1124 | 1124 |
| 1125 loop_.RunAllPending(); | 1125 loop_.RunAllPending(); |
| 1126 std::vector<std::string> errors = GetErrors(); | 1126 std::vector<std::string> errors = GetErrors(); |
| 1127 EXPECT_TRUE(installed_) << "Nothing was installed."; | 1127 EXPECT_TRUE(installed_) << "Nothing was installed."; |
| 1128 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; | 1128 ASSERT_EQ(1u, loaded_.size()) << "Nothing was loaded."; |
| 1129 EXPECT_EQ(0u, errors.size()) << "There were errors: " | 1129 EXPECT_EQ(0u, errors.size()) << "There were errors: " |
| 1130 << JoinString(errors, ','); | 1130 << JoinString(errors, ','); |
| 1131 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)) << | 1131 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)) << |
| 1132 path.value(); | 1132 path.value(); |
| 1133 | 1133 |
| 1134 installed_ = NULL; | 1134 installed_ = NULL; |
| 1135 loaded_.clear(); | 1135 loaded_.clear(); |
| 1136 ExtensionErrorReporter::GetInstance()->ClearErrors(); | 1136 ExtensionErrorReporter::GetInstance()->ClearErrors(); |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 // This tests that the granted permissions preferences are correctly set when | 1139 // This tests that the granted permissions preferences are correctly set when |
| 1140 // installing an extension. | 1140 // installing an extension. |
| 1141 TEST_F(ExtensionsServiceTest, GrantedPermissions) { | 1141 TEST_F(ExtensionServiceTest, GrantedPermissions) { |
| 1142 InitializeEmptyExtensionsService(); | 1142 InitializeEmptyExtensionService(); |
| 1143 FilePath path; | 1143 FilePath path; |
| 1144 FilePath pem_path; | 1144 FilePath pem_path; |
| 1145 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 1145 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 1146 path = path.AppendASCII("extensions") | 1146 path = path.AppendASCII("extensions") |
| 1147 .AppendASCII("permissions"); | 1147 .AppendASCII("permissions"); |
| 1148 | 1148 |
| 1149 pem_path = path.AppendASCII("unknown.pem"); | 1149 pem_path = path.AppendASCII("unknown.pem"); |
| 1150 path = path.AppendASCII("unknown"); | 1150 path = path.AppendASCII("unknown"); |
| 1151 | 1151 |
| 1152 ASSERT_TRUE(file_util::PathExists(pem_path)); | 1152 ASSERT_TRUE(file_util::PathExists(pem_path)); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1190 | 1190 |
| 1191 EXPECT_EQ(expected_api_perms, known_api_perms); | 1191 EXPECT_EQ(expected_api_perms, known_api_perms); |
| 1192 EXPECT_FALSE(full_access); | 1192 EXPECT_FALSE(full_access); |
| 1193 AssertEqualExtents(&expected_host_perms, &known_host_perms); | 1193 AssertEqualExtents(&expected_host_perms, &known_host_perms); |
| 1194 } | 1194 } |
| 1195 | 1195 |
| 1196 #if !defined(OS_CHROMEOS) | 1196 #if !defined(OS_CHROMEOS) |
| 1197 // Tests that the granted permissions full_access bit gets set correctly when | 1197 // Tests that the granted permissions full_access bit gets set correctly when |
| 1198 // an extension contains an NPAPI plugin. Don't run this test on Chrome OS | 1198 // an extension contains an NPAPI plugin. Don't run this test on Chrome OS |
| 1199 // since they don't support plugins. | 1199 // since they don't support plugins. |
| 1200 TEST_F(ExtensionsServiceTest, GrantedFullAccessPermissions) { | 1200 TEST_F(ExtensionServiceTest, GrantedFullAccessPermissions) { |
| 1201 InitializeEmptyExtensionsService(); | 1201 InitializeEmptyExtensionService(); |
| 1202 | 1202 |
| 1203 FilePath path; | 1203 FilePath path; |
| 1204 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 1204 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 1205 path = path.AppendASCII("extensions") | 1205 path = path.AppendASCII("extensions") |
| 1206 .AppendASCII("good") | 1206 .AppendASCII("good") |
| 1207 .AppendASCII("Extensions") | 1207 .AppendASCII("Extensions") |
| 1208 .AppendASCII(good1) | 1208 .AppendASCII(good1) |
| 1209 .AppendASCII("2"); | 1209 .AppendASCII("2"); |
| 1210 | 1210 |
| 1211 ASSERT_TRUE(file_util::PathExists(path)); | 1211 ASSERT_TRUE(file_util::PathExists(path)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1226 | 1226 |
| 1227 EXPECT_TRUE(full_access); | 1227 EXPECT_TRUE(full_access); |
| 1228 EXPECT_TRUE(api_permissions.empty()); | 1228 EXPECT_TRUE(api_permissions.empty()); |
| 1229 EXPECT_TRUE(host_permissions.is_empty()); | 1229 EXPECT_TRUE(host_permissions.is_empty()); |
| 1230 } | 1230 } |
| 1231 #endif | 1231 #endif |
| 1232 | 1232 |
| 1233 // Tests that the extension is disabled when permissions are missing from | 1233 // Tests that the extension is disabled when permissions are missing from |
| 1234 // the extension's granted permissions preferences. (This simulates updating | 1234 // the extension's granted permissions preferences. (This simulates updating |
| 1235 // the browser to a version which recognizes more permissions). | 1235 // the browser to a version which recognizes more permissions). |
| 1236 TEST_F(ExtensionsServiceTest, GrantedAPIAndHostPermissions) { | 1236 TEST_F(ExtensionServiceTest, GrantedAPIAndHostPermissions) { |
| 1237 InitializeEmptyExtensionsService(); | 1237 InitializeEmptyExtensionService(); |
| 1238 | 1238 |
| 1239 FilePath path; | 1239 FilePath path; |
| 1240 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 1240 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 1241 path = path.AppendASCII("extensions") | 1241 path = path.AppendASCII("extensions") |
| 1242 .AppendASCII("permissions") | 1242 .AppendASCII("permissions") |
| 1243 .AppendASCII("unknown"); | 1243 .AppendASCII("unknown"); |
| 1244 | 1244 |
| 1245 ASSERT_TRUE(file_util::PathExists(path)); | 1245 ASSERT_TRUE(file_util::PathExists(path)); |
| 1246 | 1246 |
| 1247 PackAndInstallExtension(path, true); | 1247 PackAndInstallExtension(path, true); |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1356 ¤t_full_access, | 1356 ¤t_full_access, |
| 1357 ¤t_api_permissions, | 1357 ¤t_api_permissions, |
| 1358 ¤t_host_permissions)); | 1358 ¤t_host_permissions)); |
| 1359 | 1359 |
| 1360 ASSERT_FALSE(current_full_access); | 1360 ASSERT_FALSE(current_full_access); |
| 1361 ASSERT_EQ(expected_api_permissions, current_api_permissions); | 1361 ASSERT_EQ(expected_api_permissions, current_api_permissions); |
| 1362 AssertEqualExtents(&expected_host_permissions, ¤t_host_permissions); | 1362 AssertEqualExtents(&expected_host_permissions, ¤t_host_permissions); |
| 1363 } | 1363 } |
| 1364 | 1364 |
| 1365 // Test Packaging and installing an extension. | 1365 // Test Packaging and installing an extension. |
| 1366 TEST_F(ExtensionsServiceTest, PackExtension) { | 1366 TEST_F(ExtensionServiceTest, PackExtension) { |
| 1367 InitializeEmptyExtensionsService(); | 1367 InitializeEmptyExtensionService(); |
| 1368 FilePath extensions_path; | 1368 FilePath extensions_path; |
| 1369 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1369 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1370 extensions_path = extensions_path.AppendASCII("extensions"); | 1370 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1371 FilePath input_directory = extensions_path | 1371 FilePath input_directory = extensions_path |
| 1372 .AppendASCII("good") | 1372 .AppendASCII("good") |
| 1373 .AppendASCII("Extensions") | 1373 .AppendASCII("Extensions") |
| 1374 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 1374 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 1375 .AppendASCII("1.0.0.0"); | 1375 .AppendASCII("1.0.0.0"); |
| 1376 | 1376 |
| 1377 ScopedTempDir temp_dir; | 1377 ScopedTempDir temp_dir; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1404 std::string invalid_manifest_content = "I am not a manifest."; | 1404 std::string invalid_manifest_content = "I am not a manifest."; |
| 1405 ASSERT_TRUE(file_util::WriteFile( | 1405 ASSERT_TRUE(file_util::WriteFile( |
| 1406 temp_dir2.path().Append(Extension::kManifestFilename), | 1406 temp_dir2.path().Append(Extension::kManifestFilename), |
| 1407 invalid_manifest_content.c_str(), invalid_manifest_content.size())); | 1407 invalid_manifest_content.c_str(), invalid_manifest_content.size())); |
| 1408 creator.reset(new ExtensionCreator()); | 1408 creator.reset(new ExtensionCreator()); |
| 1409 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, | 1409 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, |
| 1410 FilePath())); | 1410 FilePath())); |
| 1411 } | 1411 } |
| 1412 | 1412 |
| 1413 // Test Packaging and installing an extension whose name contains punctuation. | 1413 // Test Packaging and installing an extension whose name contains punctuation. |
| 1414 TEST_F(ExtensionsServiceTest, PackPunctuatedExtension) { | 1414 TEST_F(ExtensionServiceTest, PackPunctuatedExtension) { |
| 1415 InitializeEmptyExtensionsService(); | 1415 InitializeEmptyExtensionService(); |
| 1416 FilePath extensions_path; | 1416 FilePath extensions_path; |
| 1417 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1417 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1418 extensions_path = extensions_path.AppendASCII("extensions"); | 1418 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1419 FilePath input_directory = extensions_path | 1419 FilePath input_directory = extensions_path |
| 1420 .AppendASCII("good") | 1420 .AppendASCII("good") |
| 1421 .AppendASCII("Extensions") | 1421 .AppendASCII("Extensions") |
| 1422 .AppendASCII(good0) | 1422 .AppendASCII(good0) |
| 1423 .AppendASCII("1.0.0.0"); | 1423 .AppendASCII("1.0.0.0"); |
| 1424 | 1424 |
| 1425 ScopedTempDir temp_dir; | 1425 ScopedTempDir temp_dir; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1483 InstallExtension(expected_crx_path, true); | 1483 InstallExtension(expected_crx_path, true); |
| 1484 } | 1484 } |
| 1485 } | 1485 } |
| 1486 | 1486 |
| 1487 // Test Packaging and installing an extension using an openssl generated key. | 1487 // Test Packaging and installing an extension using an openssl generated key. |
| 1488 // The openssl is generated with the following: | 1488 // The openssl is generated with the following: |
| 1489 // > openssl genrsa -out privkey.pem 1024 | 1489 // > openssl genrsa -out privkey.pem 1024 |
| 1490 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem | 1490 // > openssl pkcs8 -topk8 -nocrypt -in privkey.pem -out privkey_asn1.pem |
| 1491 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a | 1491 // The privkey.pem is a PrivateKey, and the pcks8 -topk8 creates a |
| 1492 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. | 1492 // PrivateKeyInfo ASN.1 structure, we our RSAPrivateKey expects. |
| 1493 TEST_F(ExtensionsServiceTest, PackExtensionOpenSSLKey) { | 1493 TEST_F(ExtensionServiceTest, PackExtensionOpenSSLKey) { |
| 1494 InitializeEmptyExtensionsService(); | 1494 InitializeEmptyExtensionService(); |
| 1495 FilePath extensions_path; | 1495 FilePath extensions_path; |
| 1496 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1496 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1497 extensions_path = extensions_path.AppendASCII("extensions"); | 1497 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1498 FilePath input_directory = extensions_path | 1498 FilePath input_directory = extensions_path |
| 1499 .AppendASCII("good") | 1499 .AppendASCII("good") |
| 1500 .AppendASCII("Extensions") | 1500 .AppendASCII("Extensions") |
| 1501 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 1501 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 1502 .AppendASCII("1.0.0.0"); | 1502 .AppendASCII("1.0.0.0"); |
| 1503 FilePath privkey_path(extensions_path.AppendASCII( | 1503 FilePath privkey_path(extensions_path.AppendASCII( |
| 1504 "openssl_privkey_asn1.pem")); | 1504 "openssl_privkey_asn1.pem")); |
| 1505 ASSERT_TRUE(file_util::PathExists(privkey_path)); | 1505 ASSERT_TRUE(file_util::PathExists(privkey_path)); |
| 1506 | 1506 |
| 1507 ScopedTempDir temp_dir; | 1507 ScopedTempDir temp_dir; |
| 1508 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 1508 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 1509 FilePath output_directory = temp_dir.path(); | 1509 FilePath output_directory = temp_dir.path(); |
| 1510 | 1510 |
| 1511 FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 1511 FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
| 1512 | 1512 |
| 1513 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 1513 scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
| 1514 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, | 1514 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, |
| 1515 FilePath())); | 1515 FilePath())); |
| 1516 | 1516 |
| 1517 InstallExtension(crx_path, true); | 1517 InstallExtension(crx_path, true); |
| 1518 } | 1518 } |
| 1519 | 1519 |
| 1520 TEST_F(ExtensionsServiceTest, InstallTheme) { | 1520 TEST_F(ExtensionServiceTest, InstallTheme) { |
| 1521 InitializeEmptyExtensionsService(); | 1521 InitializeEmptyExtensionService(); |
| 1522 FilePath extensions_path; | 1522 FilePath extensions_path; |
| 1523 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1523 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1524 extensions_path = extensions_path.AppendASCII("extensions"); | 1524 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1525 | 1525 |
| 1526 // A theme. | 1526 // A theme. |
| 1527 FilePath path = extensions_path.AppendASCII("theme.crx"); | 1527 FilePath path = extensions_path.AppendASCII("theme.crx"); |
| 1528 InstallExtension(path, true); | 1528 InstallExtension(path, true); |
| 1529 int pref_count = 0; | 1529 int pref_count = 0; |
| 1530 ValidatePrefKeyCount(++pref_count); | 1530 ValidatePrefKeyCount(++pref_count); |
| 1531 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); | 1531 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1546 path = extensions_path.AppendASCII("theme_with_extension.crx"); | 1546 path = extensions_path.AppendASCII("theme_with_extension.crx"); |
| 1547 InstallExtension(path, false); | 1547 InstallExtension(path, false); |
| 1548 ValidatePrefKeyCount(pref_count); | 1548 ValidatePrefKeyCount(pref_count); |
| 1549 | 1549 |
| 1550 // A theme with image resources missing (misspelt path). | 1550 // A theme with image resources missing (misspelt path). |
| 1551 path = extensions_path.AppendASCII("theme_missing_image.crx"); | 1551 path = extensions_path.AppendASCII("theme_missing_image.crx"); |
| 1552 InstallExtension(path, false); | 1552 InstallExtension(path, false); |
| 1553 ValidatePrefKeyCount(pref_count); | 1553 ValidatePrefKeyCount(pref_count); |
| 1554 } | 1554 } |
| 1555 | 1555 |
| 1556 TEST_F(ExtensionsServiceTest, LoadLocalizedTheme) { | 1556 TEST_F(ExtensionServiceTest, LoadLocalizedTheme) { |
| 1557 // Load. | 1557 // Load. |
| 1558 InitializeEmptyExtensionsService(); | 1558 InitializeEmptyExtensionService(); |
| 1559 FilePath extension_path; | 1559 FilePath extension_path; |
| 1560 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extension_path)); | 1560 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extension_path)); |
| 1561 extension_path = extension_path | 1561 extension_path = extension_path |
| 1562 .AppendASCII("extensions") | 1562 .AppendASCII("extensions") |
| 1563 .AppendASCII("theme_i18n"); | 1563 .AppendASCII("theme_i18n"); |
| 1564 | 1564 |
| 1565 service_->LoadExtension(extension_path); | 1565 service_->LoadExtension(extension_path); |
| 1566 loop_.RunAllPending(); | 1566 loop_.RunAllPending(); |
| 1567 EXPECT_EQ(0u, GetErrors().size()); | 1567 EXPECT_EQ(0u, GetErrors().size()); |
| 1568 ASSERT_EQ(1u, loaded_.size()); | 1568 ASSERT_EQ(1u, loaded_.size()); |
| 1569 EXPECT_EQ(1u, service_->extensions()->size()); | 1569 EXPECT_EQ(1u, service_->extensions()->size()); |
| 1570 EXPECT_EQ("name", service_->extensions()->at(0)->name()); | 1570 EXPECT_EQ("name", service_->extensions()->at(0)->name()); |
| 1571 EXPECT_EQ("description", service_->extensions()->at(0)->description()); | 1571 EXPECT_EQ("description", service_->extensions()->at(0)->description()); |
| 1572 } | 1572 } |
| 1573 | 1573 |
| 1574 TEST_F(ExtensionsServiceTest, InstallLocalizedTheme) { | 1574 TEST_F(ExtensionServiceTest, InstallLocalizedTheme) { |
| 1575 InitializeEmptyExtensionsService(); | 1575 InitializeEmptyExtensionService(); |
| 1576 FilePath theme_path; | 1576 FilePath theme_path; |
| 1577 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &theme_path)); | 1577 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &theme_path)); |
| 1578 theme_path = theme_path | 1578 theme_path = theme_path |
| 1579 .AppendASCII("extensions") | 1579 .AppendASCII("extensions") |
| 1580 .AppendASCII("theme_i18n"); | 1580 .AppendASCII("theme_i18n"); |
| 1581 | 1581 |
| 1582 PackAndInstallExtension(theme_path, true); | 1582 PackAndInstallExtension(theme_path, true); |
| 1583 | 1583 |
| 1584 EXPECT_EQ(0u, GetErrors().size()); | 1584 EXPECT_EQ(0u, GetErrors().size()); |
| 1585 EXPECT_EQ(1u, service_->extensions()->size()); | 1585 EXPECT_EQ(1u, service_->extensions()->size()); |
| 1586 EXPECT_EQ("name", service_->extensions()->at(0)->name()); | 1586 EXPECT_EQ("name", service_->extensions()->at(0)->name()); |
| 1587 EXPECT_EQ("description", service_->extensions()->at(0)->description()); | 1587 EXPECT_EQ("description", service_->extensions()->at(0)->description()); |
| 1588 } | 1588 } |
| 1589 | 1589 |
| 1590 TEST_F(ExtensionsServiceTest, InstallApps) { | 1590 TEST_F(ExtensionServiceTest, InstallApps) { |
| 1591 InitializeEmptyExtensionsService(); | 1591 InitializeEmptyExtensionService(); |
| 1592 FilePath extensions_path; | 1592 FilePath extensions_path; |
| 1593 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1593 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1594 extensions_path = extensions_path.AppendASCII("extensions"); | 1594 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1595 | 1595 |
| 1596 // An empty app. | 1596 // An empty app. |
| 1597 PackAndInstallExtension(extensions_path.AppendASCII("app1"), true); | 1597 PackAndInstallExtension(extensions_path.AppendASCII("app1"), true); |
| 1598 int pref_count = 0; | 1598 int pref_count = 0; |
| 1599 ValidatePrefKeyCount(++pref_count); | 1599 ValidatePrefKeyCount(++pref_count); |
| 1600 ASSERT_EQ(1u, service_->extensions()->size()); | 1600 ASSERT_EQ(1u, service_->extensions()->size()); |
| 1601 std::string id = service_->extensions()->at(0)->id(); | 1601 std::string id = service_->extensions()->at(0)->id(); |
| 1602 ValidateIntegerPref(id, "state", Extension::ENABLED); | 1602 ValidateIntegerPref(id, "state", Extension::ENABLED); |
| 1603 ValidateIntegerPref(id, "location", Extension::INTERNAL); | 1603 ValidateIntegerPref(id, "location", Extension::INTERNAL); |
| 1604 | 1604 |
| 1605 // Another app with non-overlapping extent. Should succeed. | 1605 // Another app with non-overlapping extent. Should succeed. |
| 1606 PackAndInstallExtension(extensions_path.AppendASCII("app2"), true); | 1606 PackAndInstallExtension(extensions_path.AppendASCII("app2"), true); |
| 1607 ValidatePrefKeyCount(++pref_count); | 1607 ValidatePrefKeyCount(++pref_count); |
| 1608 | 1608 |
| 1609 // A third app whose extent overlaps the first. Should fail. | 1609 // A third app whose extent overlaps the first. Should fail. |
| 1610 PackAndInstallExtension(extensions_path.AppendASCII("app3"), false); | 1610 PackAndInstallExtension(extensions_path.AppendASCII("app3"), false); |
| 1611 ValidatePrefKeyCount(pref_count); | 1611 ValidatePrefKeyCount(pref_count); |
| 1612 } | 1612 } |
| 1613 | 1613 |
| 1614 TEST_F(ExtensionsServiceTest, InstallAppsWithUnlimtedStorage) { | 1614 TEST_F(ExtensionServiceTest, InstallAppsWithUnlimtedStorage) { |
| 1615 InitializeEmptyExtensionsService(); | 1615 InitializeEmptyExtensionService(); |
| 1616 EXPECT_TRUE(service_->extensions()->empty()); | 1616 EXPECT_TRUE(service_->extensions()->empty()); |
| 1617 EXPECT_TRUE(service_->unlimited_storage_map_.empty()); | 1617 EXPECT_TRUE(service_->unlimited_storage_map_.empty()); |
| 1618 | 1618 |
| 1619 FilePath extensions_path; | 1619 FilePath extensions_path; |
| 1620 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1620 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1621 extensions_path = extensions_path.AppendASCII("extensions"); | 1621 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1622 int pref_count = 0; | 1622 int pref_count = 0; |
| 1623 ChromeAppCacheService* appcache_service = profile_->GetAppCacheService(); | 1623 ChromeAppCacheService* appcache_service = profile_->GetAppCacheService(); |
| 1624 | 1624 |
| 1625 // Install app1 with unlimited storage. | 1625 // Install app1 with unlimited storage. |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1664 | 1664 |
| 1665 // Uninstall the other, unlimited storage should be revoked. | 1665 // Uninstall the other, unlimited storage should be revoked. |
| 1666 service_->UninstallExtension(id2, false); | 1666 service_->UninstallExtension(id2, false); |
| 1667 loop_.RunAllPending(); | 1667 loop_.RunAllPending(); |
| 1668 EXPECT_EQ(0u, service_->extensions()->size()); | 1668 EXPECT_EQ(0u, service_->extensions()->size()); |
| 1669 EXPECT_EQ(-1L, | 1669 EXPECT_EQ(-1L, |
| 1670 appcache_service->storage()->GetOriginQuotaInMemory(origin2)); | 1670 appcache_service->storage()->GetOriginQuotaInMemory(origin2)); |
| 1671 EXPECT_TRUE(service_->unlimited_storage_map_.empty()); | 1671 EXPECT_TRUE(service_->unlimited_storage_map_.empty()); |
| 1672 } | 1672 } |
| 1673 | 1673 |
| 1674 TEST_F(ExtensionsServiceTest, InstallAppsAndCheckStorageProtection) { | 1674 TEST_F(ExtensionServiceTest, InstallAppsAndCheckStorageProtection) { |
| 1675 InitializeEmptyExtensionsService(); | 1675 InitializeEmptyExtensionService(); |
| 1676 EXPECT_TRUE(service_->extensions()->empty()); | 1676 EXPECT_TRUE(service_->extensions()->empty()); |
| 1677 EXPECT_TRUE(service_->protected_storage_map_.empty()); | 1677 EXPECT_TRUE(service_->protected_storage_map_.empty()); |
| 1678 | 1678 |
| 1679 FilePath extensions_path; | 1679 FilePath extensions_path; |
| 1680 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1680 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1681 extensions_path = extensions_path.AppendASCII("extensions"); | 1681 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1682 int pref_count = 0; | 1682 int pref_count = 0; |
| 1683 | 1683 |
| 1684 PackAndInstallExtension(extensions_path.AppendASCII("app1"), true); | 1684 PackAndInstallExtension(extensions_path.AppendASCII("app1"), true); |
| 1685 ValidatePrefKeyCount(++pref_count); | 1685 ValidatePrefKeyCount(++pref_count); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1708 EXPECT_FALSE(service_->protected_storage_map_.empty()); | 1708 EXPECT_FALSE(service_->protected_storage_map_.empty()); |
| 1709 | 1709 |
| 1710 service_->UninstallExtension(id2, false); | 1710 service_->UninstallExtension(id2, false); |
| 1711 loop_.RunAllPending(); | 1711 loop_.RunAllPending(); |
| 1712 | 1712 |
| 1713 EXPECT_TRUE(service_->extensions()->empty()); | 1713 EXPECT_TRUE(service_->extensions()->empty()); |
| 1714 EXPECT_TRUE(service_->protected_storage_map_.empty()); | 1714 EXPECT_TRUE(service_->protected_storage_map_.empty()); |
| 1715 } | 1715 } |
| 1716 | 1716 |
| 1717 // Test that when an extension version is reinstalled, nothing happens. | 1717 // Test that when an extension version is reinstalled, nothing happens. |
| 1718 TEST_F(ExtensionsServiceTest, Reinstall) { | 1718 TEST_F(ExtensionServiceTest, Reinstall) { |
| 1719 InitializeEmptyExtensionsService(); | 1719 InitializeEmptyExtensionService(); |
| 1720 FilePath extensions_path; | 1720 FilePath extensions_path; |
| 1721 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1721 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1722 extensions_path = extensions_path.AppendASCII("extensions"); | 1722 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1723 | 1723 |
| 1724 // A simple extension that should install without error. | 1724 // A simple extension that should install without error. |
| 1725 FilePath path = extensions_path.AppendASCII("good.crx"); | 1725 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1726 service_->InstallExtension(path); | 1726 service_->InstallExtension(path); |
| 1727 loop_.RunAllPending(); | 1727 loop_.RunAllPending(); |
| 1728 | 1728 |
| 1729 ASSERT_TRUE(installed_); | 1729 ASSERT_TRUE(installed_); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1743 | 1743 |
| 1744 ASSERT_TRUE(installed_); | 1744 ASSERT_TRUE(installed_); |
| 1745 ASSERT_EQ(1u, loaded_.size()); | 1745 ASSERT_EQ(1u, loaded_.size()); |
| 1746 ASSERT_EQ(0u, GetErrors().size()); | 1746 ASSERT_EQ(0u, GetErrors().size()); |
| 1747 ValidatePrefKeyCount(1); | 1747 ValidatePrefKeyCount(1); |
| 1748 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 1748 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
| 1749 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 1749 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); |
| 1750 } | 1750 } |
| 1751 | 1751 |
| 1752 // Test upgrading a signed extension. | 1752 // Test upgrading a signed extension. |
| 1753 TEST_F(ExtensionsServiceTest, UpgradeSignedGood) { | 1753 TEST_F(ExtensionServiceTest, UpgradeSignedGood) { |
| 1754 InitializeEmptyExtensionsService(); | 1754 InitializeEmptyExtensionService(); |
| 1755 FilePath extensions_path; | 1755 FilePath extensions_path; |
| 1756 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1756 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1757 extensions_path = extensions_path.AppendASCII("extensions"); | 1757 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1758 | 1758 |
| 1759 FilePath path = extensions_path.AppendASCII("good.crx"); | 1759 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1760 service_->InstallExtension(path); | 1760 service_->InstallExtension(path); |
| 1761 loop_.RunAllPending(); | 1761 loop_.RunAllPending(); |
| 1762 | 1762 |
| 1763 ASSERT_TRUE(installed_); | 1763 ASSERT_TRUE(installed_); |
| 1764 ASSERT_EQ(1u, loaded_.size()); | 1764 ASSERT_EQ(1u, loaded_.size()); |
| 1765 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); | 1765 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); |
| 1766 ASSERT_EQ(0u, GetErrors().size()); | 1766 ASSERT_EQ(0u, GetErrors().size()); |
| 1767 | 1767 |
| 1768 // Upgrade to version 2.0 | 1768 // Upgrade to version 2.0 |
| 1769 path = extensions_path.AppendASCII("good2.crx"); | 1769 path = extensions_path.AppendASCII("good2.crx"); |
| 1770 service_->InstallExtension(path); | 1770 service_->InstallExtension(path); |
| 1771 loop_.RunAllPending(); | 1771 loop_.RunAllPending(); |
| 1772 | 1772 |
| 1773 ASSERT_TRUE(installed_); | 1773 ASSERT_TRUE(installed_); |
| 1774 ASSERT_EQ(1u, loaded_.size()); | 1774 ASSERT_EQ(1u, loaded_.size()); |
| 1775 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 1775 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
| 1776 ASSERT_EQ(0u, GetErrors().size()); | 1776 ASSERT_EQ(0u, GetErrors().size()); |
| 1777 } | 1777 } |
| 1778 | 1778 |
| 1779 // Test upgrading a signed extension with a bad signature. | 1779 // Test upgrading a signed extension with a bad signature. |
| 1780 TEST_F(ExtensionsServiceTest, UpgradeSignedBad) { | 1780 TEST_F(ExtensionServiceTest, UpgradeSignedBad) { |
| 1781 InitializeEmptyExtensionsService(); | 1781 InitializeEmptyExtensionService(); |
| 1782 FilePath extensions_path; | 1782 FilePath extensions_path; |
| 1783 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1783 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1784 extensions_path = extensions_path.AppendASCII("extensions"); | 1784 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1785 | 1785 |
| 1786 FilePath path = extensions_path.AppendASCII("good.crx"); | 1786 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1787 service_->InstallExtension(path); | 1787 service_->InstallExtension(path); |
| 1788 loop_.RunAllPending(); | 1788 loop_.RunAllPending(); |
| 1789 | 1789 |
| 1790 ASSERT_TRUE(installed_); | 1790 ASSERT_TRUE(installed_); |
| 1791 ASSERT_EQ(1u, loaded_.size()); | 1791 ASSERT_EQ(1u, loaded_.size()); |
| 1792 ASSERT_EQ(0u, GetErrors().size()); | 1792 ASSERT_EQ(0u, GetErrors().size()); |
| 1793 installed_ = NULL; | 1793 installed_ = NULL; |
| 1794 | 1794 |
| 1795 // Try upgrading with a bad signature. This should fail during the unpack, | 1795 // Try upgrading with a bad signature. This should fail during the unpack, |
| 1796 // because the key will not match the signature. | 1796 // because the key will not match the signature. |
| 1797 path = extensions_path.AppendASCII("good2_bad_signature.crx"); | 1797 path = extensions_path.AppendASCII("good2_bad_signature.crx"); |
| 1798 service_->InstallExtension(path); | 1798 service_->InstallExtension(path); |
| 1799 loop_.RunAllPending(); | 1799 loop_.RunAllPending(); |
| 1800 | 1800 |
| 1801 ASSERT_FALSE(installed_); | 1801 ASSERT_FALSE(installed_); |
| 1802 ASSERT_EQ(1u, loaded_.size()); | 1802 ASSERT_EQ(1u, loaded_.size()); |
| 1803 ASSERT_EQ(1u, GetErrors().size()); | 1803 ASSERT_EQ(1u, GetErrors().size()); |
| 1804 } | 1804 } |
| 1805 | 1805 |
| 1806 // Test a normal update via the UpdateExtension API | 1806 // Test a normal update via the UpdateExtension API |
| 1807 TEST_F(ExtensionsServiceTest, UpdateExtension) { | 1807 TEST_F(ExtensionServiceTest, UpdateExtension) { |
| 1808 InitializeEmptyExtensionsService(); | 1808 InitializeEmptyExtensionService(); |
| 1809 FilePath extensions_path; | 1809 FilePath extensions_path; |
| 1810 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1810 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1811 extensions_path = extensions_path.AppendASCII("extensions"); | 1811 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1812 | 1812 |
| 1813 FilePath path = extensions_path.AppendASCII("good.crx"); | 1813 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1814 | 1814 |
| 1815 InstallExtension(path, true); | 1815 InstallExtension(path, true); |
| 1816 const Extension* good = service_->extensions()->at(0); | 1816 const Extension* good = service_->extensions()->at(0); |
| 1817 ASSERT_EQ("1.0.0.0", good->VersionString()); | 1817 ASSERT_EQ("1.0.0.0", good->VersionString()); |
| 1818 ASSERT_EQ(good_crx, good->id()); | 1818 ASSERT_EQ(good_crx, good->id()); |
| 1819 | 1819 |
| 1820 path = extensions_path.AppendASCII("good2.crx"); | 1820 path = extensions_path.AppendASCII("good2.crx"); |
| 1821 UpdateExtension(good_crx, path, ENABLED); | 1821 UpdateExtension(good_crx, path, ENABLED); |
| 1822 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); | 1822 ASSERT_EQ("1.0.0.1", loaded_[0]->version()->GetString()); |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 // Test updating a not-already-installed extension - this should fail | 1825 // Test updating a not-already-installed extension - this should fail |
| 1826 TEST_F(ExtensionsServiceTest, UpdateNotInstalledExtension) { | 1826 TEST_F(ExtensionServiceTest, UpdateNotInstalledExtension) { |
| 1827 InitializeEmptyExtensionsService(); | 1827 InitializeEmptyExtensionService(); |
| 1828 FilePath extensions_path; | 1828 FilePath extensions_path; |
| 1829 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1829 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1830 extensions_path = extensions_path.AppendASCII("extensions"); | 1830 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1831 | 1831 |
| 1832 FilePath path = extensions_path.AppendASCII("good.crx"); | 1832 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1833 UpdateExtension(good_crx, path, UPDATED); | 1833 UpdateExtension(good_crx, path, UPDATED); |
| 1834 loop_.RunAllPending(); | 1834 loop_.RunAllPending(); |
| 1835 | 1835 |
| 1836 ASSERT_EQ(0u, service_->extensions()->size()); | 1836 ASSERT_EQ(0u, service_->extensions()->size()); |
| 1837 ASSERT_FALSE(installed_); | 1837 ASSERT_FALSE(installed_); |
| 1838 ASSERT_EQ(0u, loaded_.size()); | 1838 ASSERT_EQ(0u, loaded_.size()); |
| 1839 } | 1839 } |
| 1840 | 1840 |
| 1841 // Makes sure you can't downgrade an extension via UpdateExtension | 1841 // Makes sure you can't downgrade an extension via UpdateExtension |
| 1842 TEST_F(ExtensionsServiceTest, UpdateWillNotDowngrade) { | 1842 TEST_F(ExtensionServiceTest, UpdateWillNotDowngrade) { |
| 1843 InitializeEmptyExtensionsService(); | 1843 InitializeEmptyExtensionService(); |
| 1844 FilePath extensions_path; | 1844 FilePath extensions_path; |
| 1845 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1845 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1846 extensions_path = extensions_path.AppendASCII("extensions"); | 1846 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1847 | 1847 |
| 1848 FilePath path = extensions_path.AppendASCII("good2.crx"); | 1848 FilePath path = extensions_path.AppendASCII("good2.crx"); |
| 1849 | 1849 |
| 1850 InstallExtension(path, true); | 1850 InstallExtension(path, true); |
| 1851 const Extension* good = service_->extensions()->at(0); | 1851 const Extension* good = service_->extensions()->at(0); |
| 1852 ASSERT_EQ("1.0.0.1", good->VersionString()); | 1852 ASSERT_EQ("1.0.0.1", good->VersionString()); |
| 1853 ASSERT_EQ(good_crx, good->id()); | 1853 ASSERT_EQ(good_crx, good->id()); |
| 1854 | 1854 |
| 1855 // Change path from good2.crx -> good.crx | 1855 // Change path from good2.crx -> good.crx |
| 1856 path = extensions_path.AppendASCII("good.crx"); | 1856 path = extensions_path.AppendASCII("good.crx"); |
| 1857 UpdateExtension(good_crx, path, FAILED); | 1857 UpdateExtension(good_crx, path, FAILED); |
| 1858 ASSERT_EQ("1.0.0.1", service_->extensions()->at(0)->VersionString()); | 1858 ASSERT_EQ("1.0.0.1", service_->extensions()->at(0)->VersionString()); |
| 1859 } | 1859 } |
| 1860 | 1860 |
| 1861 // Make sure calling update with an identical version does nothing | 1861 // Make sure calling update with an identical version does nothing |
| 1862 TEST_F(ExtensionsServiceTest, UpdateToSameVersionIsNoop) { | 1862 TEST_F(ExtensionServiceTest, UpdateToSameVersionIsNoop) { |
| 1863 InitializeEmptyExtensionsService(); | 1863 InitializeEmptyExtensionService(); |
| 1864 FilePath extensions_path; | 1864 FilePath extensions_path; |
| 1865 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1865 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1866 extensions_path = extensions_path.AppendASCII("extensions"); | 1866 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1867 | 1867 |
| 1868 FilePath path = extensions_path.AppendASCII("good.crx"); | 1868 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1869 | 1869 |
| 1870 InstallExtension(path, true); | 1870 InstallExtension(path, true); |
| 1871 const Extension* good = service_->extensions()->at(0); | 1871 const Extension* good = service_->extensions()->at(0); |
| 1872 ASSERT_EQ(good_crx, good->id()); | 1872 ASSERT_EQ(good_crx, good->id()); |
| 1873 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 1873 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
| 1874 } | 1874 } |
| 1875 | 1875 |
| 1876 // Tests that updating an extension does not clobber old state. | 1876 // Tests that updating an extension does not clobber old state. |
| 1877 TEST_F(ExtensionsServiceTest, UpdateExtensionPreservesState) { | 1877 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesState) { |
| 1878 InitializeEmptyExtensionsService(); | 1878 InitializeEmptyExtensionService(); |
| 1879 FilePath extensions_path; | 1879 FilePath extensions_path; |
| 1880 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1880 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1881 extensions_path = extensions_path.AppendASCII("extensions"); | 1881 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1882 | 1882 |
| 1883 FilePath path = extensions_path.AppendASCII("good.crx"); | 1883 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1884 | 1884 |
| 1885 InstallExtension(path, true); | 1885 InstallExtension(path, true); |
| 1886 const Extension* good = service_->extensions()->at(0); | 1886 const Extension* good = service_->extensions()->at(0); |
| 1887 ASSERT_EQ("1.0.0.0", good->VersionString()); | 1887 ASSERT_EQ("1.0.0.0", good->VersionString()); |
| 1888 ASSERT_EQ(good_crx, good->id()); | 1888 ASSERT_EQ(good_crx, good->id()); |
| 1889 | 1889 |
| 1890 // Disable it and allow it to run in incognito. These settings should carry | 1890 // Disable it and allow it to run in incognito. These settings should carry |
| 1891 // over to the updated version. | 1891 // over to the updated version. |
| 1892 service_->DisableExtension(good->id()); | 1892 service_->DisableExtension(good->id()); |
| 1893 service_->SetIsIncognitoEnabled(good, true); | 1893 service_->SetIsIncognitoEnabled(good, true); |
| 1894 | 1894 |
| 1895 path = extensions_path.AppendASCII("good2.crx"); | 1895 path = extensions_path.AppendASCII("good2.crx"); |
| 1896 UpdateExtension(good_crx, path, INSTALLED); | 1896 UpdateExtension(good_crx, path, INSTALLED); |
| 1897 ASSERT_EQ(1u, service_->disabled_extensions()->size()); | 1897 ASSERT_EQ(1u, service_->disabled_extensions()->size()); |
| 1898 const Extension* good2 = service_->disabled_extensions()->at(0); | 1898 const Extension* good2 = service_->disabled_extensions()->at(0); |
| 1899 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); | 1899 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); |
| 1900 EXPECT_TRUE(service_->IsIncognitoEnabled(good2)); | 1900 EXPECT_TRUE(service_->IsIncognitoEnabled(good2)); |
| 1901 } | 1901 } |
| 1902 | 1902 |
| 1903 // Tests that updating preserves extension location. | 1903 // Tests that updating preserves extension location. |
| 1904 TEST_F(ExtensionsServiceTest, UpdateExtensionPreservesLocation) { | 1904 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { |
| 1905 InitializeEmptyExtensionsService(); | 1905 InitializeEmptyExtensionService(); |
| 1906 FilePath extensions_path; | 1906 FilePath extensions_path; |
| 1907 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 1907 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 1908 extensions_path = extensions_path.AppendASCII("extensions"); | 1908 extensions_path = extensions_path.AppendASCII("extensions"); |
| 1909 | 1909 |
| 1910 FilePath path = extensions_path.AppendASCII("good.crx"); | 1910 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 1911 | 1911 |
| 1912 InstallExtension(path, true); | 1912 InstallExtension(path, true); |
| 1913 const Extension* good = service_->extensions()->at(0); | 1913 const Extension* good = service_->extensions()->at(0); |
| 1914 | 1914 |
| 1915 ASSERT_EQ("1.0.0.0", good->VersionString()); | 1915 ASSERT_EQ("1.0.0.0", good->VersionString()); |
| 1916 ASSERT_EQ(good_crx, good->id()); | 1916 ASSERT_EQ(good_crx, good->id()); |
| 1917 | 1917 |
| 1918 // Simulate non-internal location. | 1918 // Simulate non-internal location. |
| 1919 const_cast<Extension*>(good)->location_ = Extension::EXTERNAL_PREF; | 1919 const_cast<Extension*>(good)->location_ = Extension::EXTERNAL_PREF; |
| 1920 | 1920 |
| 1921 path = extensions_path.AppendASCII("good2.crx"); | 1921 path = extensions_path.AppendASCII("good2.crx"); |
| 1922 UpdateExtension(good_crx, path, ENABLED); | 1922 UpdateExtension(good_crx, path, ENABLED); |
| 1923 const Extension* good2 = service_->extensions()->at(0); | 1923 const Extension* good2 = service_->extensions()->at(0); |
| 1924 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); | 1924 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); |
| 1925 EXPECT_EQ(good2->location(), Extension::EXTERNAL_PREF); | 1925 EXPECT_EQ(good2->location(), Extension::EXTERNAL_PREF); |
| 1926 } | 1926 } |
| 1927 | 1927 |
| 1928 // Makes sure that LOAD extension types can downgrade. | 1928 // Makes sure that LOAD extension types can downgrade. |
| 1929 TEST_F(ExtensionsServiceTest, LoadExtensionsCanDowngrade) { | 1929 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { |
| 1930 InitializeEmptyExtensionsService(); | 1930 InitializeEmptyExtensionService(); |
| 1931 | 1931 |
| 1932 ScopedTempDir temp; | 1932 ScopedTempDir temp; |
| 1933 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 1933 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
| 1934 | 1934 |
| 1935 // We'll write the extension manifest dynamically to a temporary path | 1935 // We'll write the extension manifest dynamically to a temporary path |
| 1936 // to make it easier to change the version number. | 1936 // to make it easier to change the version number. |
| 1937 FilePath extension_path = temp.path(); | 1937 FilePath extension_path = temp.path(); |
| 1938 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename); | 1938 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename); |
| 1939 ASSERT_FALSE(file_util::PathExists(manifest_path)); | 1939 ASSERT_FALSE(file_util::PathExists(manifest_path)); |
| 1940 | 1940 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1964 loop_.RunAllPending(); | 1964 loop_.RunAllPending(); |
| 1965 | 1965 |
| 1966 EXPECT_EQ(0u, GetErrors().size()); | 1966 EXPECT_EQ(0u, GetErrors().size()); |
| 1967 ASSERT_EQ(1u, loaded_.size()); | 1967 ASSERT_EQ(1u, loaded_.size()); |
| 1968 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); | 1968 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); |
| 1969 EXPECT_EQ(1u, service_->extensions()->size()); | 1969 EXPECT_EQ(1u, service_->extensions()->size()); |
| 1970 EXPECT_EQ("1.0", loaded_[0]->VersionString()); | 1970 EXPECT_EQ("1.0", loaded_[0]->VersionString()); |
| 1971 } | 1971 } |
| 1972 | 1972 |
| 1973 // Test adding a pending extension. | 1973 // Test adding a pending extension. |
| 1974 TEST_F(ExtensionsServiceTest, AddPendingExtension) { | 1974 TEST_F(ExtensionServiceTest, AddPendingExtension) { |
| 1975 InitializeEmptyExtensionsService(); | 1975 InitializeEmptyExtensionService(); |
| 1976 | 1976 |
| 1977 const std::string kFakeId("fake-id"); | 1977 const std::string kFakeId("fake-id"); |
| 1978 const GURL kFakeUpdateURL("http:://fake.update/url"); | 1978 const GURL kFakeUpdateURL("http:://fake.update/url"); |
| 1979 const PendingExtensionInfo::ExpectedCrxType kFakeExpectedCrxType = | 1979 const PendingExtensionInfo::ExpectedCrxType kFakeExpectedCrxType = |
| 1980 PendingExtensionInfo::EXTENSION; | 1980 PendingExtensionInfo::EXTENSION; |
| 1981 const bool kFakeInstallSilently(true); | 1981 const bool kFakeInstallSilently(true); |
| 1982 const Extension::State kFakeInitialState(Extension::ENABLED); | 1982 const Extension::State kFakeInitialState(Extension::ENABLED); |
| 1983 const bool kFakeInitialIncognitoEnabled(false); | 1983 const bool kFakeInitialIncognitoEnabled(false); |
| 1984 | 1984 |
| 1985 service_->AddPendingExtensionFromSync( | 1985 service_->AddPendingExtensionFromSync( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2000 PendingExtensionInfo::THEME; | 2000 PendingExtensionInfo::THEME; |
| 2001 const PendingExtensionInfo::ExpectedCrxType kCrxTypeExtension = | 2001 const PendingExtensionInfo::ExpectedCrxType kCrxTypeExtension = |
| 2002 PendingExtensionInfo::EXTENSION; | 2002 PendingExtensionInfo::EXTENSION; |
| 2003 const bool kGoodIsFromSync = true; | 2003 const bool kGoodIsFromSync = true; |
| 2004 const bool kGoodInstallSilently = true; | 2004 const bool kGoodInstallSilently = true; |
| 2005 const Extension::State kGoodInitialState = Extension::DISABLED; | 2005 const Extension::State kGoodInitialState = Extension::DISABLED; |
| 2006 const bool kGoodInitialIncognitoEnabled = true; | 2006 const bool kGoodInitialIncognitoEnabled = true; |
| 2007 } // namespace | 2007 } // namespace |
| 2008 | 2008 |
| 2009 // Test updating a pending extension. | 2009 // Test updating a pending extension. |
| 2010 TEST_F(ExtensionsServiceTest, UpdatePendingExtension) { | 2010 TEST_F(ExtensionServiceTest, UpdatePendingExtension) { |
| 2011 InitializeEmptyExtensionsService(); | 2011 InitializeEmptyExtensionService(); |
| 2012 service_->AddPendingExtensionFromSync( | 2012 service_->AddPendingExtensionFromSync( |
| 2013 kGoodId, GURL(kGoodUpdateURL), kCrxTypeExtension, | 2013 kGoodId, GURL(kGoodUpdateURL), kCrxTypeExtension, |
| 2014 kGoodInstallSilently, kGoodInitialState, | 2014 kGoodInstallSilently, kGoodInitialState, |
| 2015 kGoodInitialIncognitoEnabled); | 2015 kGoodInitialIncognitoEnabled); |
| 2016 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2016 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2017 | 2017 |
| 2018 FilePath extensions_path; | 2018 FilePath extensions_path; |
| 2019 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2019 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2020 extensions_path = extensions_path.AppendASCII("extensions"); | 2020 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2021 FilePath path = extensions_path.AppendASCII("good.crx"); | 2021 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2022 UpdateExtension(kGoodId, path, INSTALLED); | 2022 UpdateExtension(kGoodId, path, INSTALLED); |
| 2023 | 2023 |
| 2024 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2024 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2025 | 2025 |
| 2026 const Extension* extension = service_->GetExtensionById(kGoodId, true); | 2026 const Extension* extension = service_->GetExtensionById(kGoodId, true); |
| 2027 ASSERT_TRUE(extension); | 2027 ASSERT_TRUE(extension); |
| 2028 | 2028 |
| 2029 bool enabled = service_->GetExtensionById(kGoodId, false); | 2029 bool enabled = service_->GetExtensionById(kGoodId, false); |
| 2030 EXPECT_EQ(kGoodInitialState == Extension::ENABLED, enabled); | 2030 EXPECT_EQ(kGoodInitialState == Extension::ENABLED, enabled); |
| 2031 EXPECT_EQ(kGoodInitialState, | 2031 EXPECT_EQ(kGoodInitialState, |
| 2032 service_->extension_prefs()->GetExtensionState(extension->id())); | 2032 service_->extension_prefs()->GetExtensionState(extension->id())); |
| 2033 EXPECT_EQ(kGoodInitialIncognitoEnabled, | 2033 EXPECT_EQ(kGoodInitialIncognitoEnabled, |
| 2034 service_->IsIncognitoEnabled(extension)); | 2034 service_->IsIncognitoEnabled(extension)); |
| 2035 } | 2035 } |
| 2036 | 2036 |
| 2037 // Test updating a pending theme. | 2037 // Test updating a pending theme. |
| 2038 TEST_F(ExtensionsServiceTest, UpdatePendingTheme) { | 2038 TEST_F(ExtensionServiceTest, UpdatePendingTheme) { |
| 2039 InitializeEmptyExtensionsService(); | 2039 InitializeEmptyExtensionService(); |
| 2040 service_->AddPendingExtensionFromSync( | 2040 service_->AddPendingExtensionFromSync( |
| 2041 theme_crx, GURL(), PendingExtensionInfo::THEME, | 2041 theme_crx, GURL(), PendingExtensionInfo::THEME, |
| 2042 false, Extension::ENABLED, false); | 2042 false, Extension::ENABLED, false); |
| 2043 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2043 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2044 | 2044 |
| 2045 FilePath extensions_path; | 2045 FilePath extensions_path; |
| 2046 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2046 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2047 extensions_path = extensions_path.AppendASCII("extensions"); | 2047 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2048 FilePath path = extensions_path.AppendASCII("theme.crx"); | 2048 FilePath path = extensions_path.AppendASCII("theme.crx"); |
| 2049 UpdateExtension(theme_crx, path, ENABLED); | 2049 UpdateExtension(theme_crx, path, ENABLED); |
| 2050 | 2050 |
| 2051 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2051 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2052 | 2052 |
| 2053 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2053 const Extension* extension = service_->GetExtensionById(theme_crx, true); |
| 2054 ASSERT_TRUE(extension); | 2054 ASSERT_TRUE(extension); |
| 2055 | 2055 |
| 2056 EXPECT_EQ(Extension::ENABLED, | 2056 EXPECT_EQ(Extension::ENABLED, |
| 2057 service_->extension_prefs()->GetExtensionState(extension->id())); | 2057 service_->extension_prefs()->GetExtensionState(extension->id())); |
| 2058 EXPECT_FALSE(service_->IsIncognitoEnabled(extension)); | 2058 EXPECT_FALSE(service_->IsIncognitoEnabled(extension)); |
| 2059 } | 2059 } |
| 2060 | 2060 |
| 2061 // Test updating a pending CRX as if the source is an external extension | 2061 // Test updating a pending CRX as if the source is an external extension |
| 2062 // with an update URL. In this case we don't know if the CRX is a theme | 2062 // with an update URL. In this case we don't know if the CRX is a theme |
| 2063 // or not. | 2063 // or not. |
| 2064 TEST_F(ExtensionsServiceTest, UpdatePendingExternalCrx) { | 2064 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrx) { |
| 2065 InitializeEmptyExtensionsService(); | 2065 InitializeEmptyExtensionService(); |
| 2066 service_->AddPendingExtensionFromExternalUpdateUrl( | 2066 service_->AddPendingExtensionFromExternalUpdateUrl( |
| 2067 theme_crx, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); | 2067 theme_crx, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); |
| 2068 | 2068 |
| 2069 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2069 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2070 | 2070 |
| 2071 FilePath extensions_path; | 2071 FilePath extensions_path; |
| 2072 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2072 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2073 extensions_path = extensions_path.AppendASCII("extensions"); | 2073 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2074 FilePath path = extensions_path.AppendASCII("theme.crx"); | 2074 FilePath path = extensions_path.AppendASCII("theme.crx"); |
| 2075 UpdateExtension(theme_crx, path, ENABLED); | 2075 UpdateExtension(theme_crx, path, ENABLED); |
| 2076 | 2076 |
| 2077 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2077 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2078 | 2078 |
| 2079 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2079 const Extension* extension = service_->GetExtensionById(theme_crx, true); |
| 2080 ASSERT_TRUE(extension); | 2080 ASSERT_TRUE(extension); |
| 2081 | 2081 |
| 2082 EXPECT_EQ(Extension::ENABLED, | 2082 EXPECT_EQ(Extension::ENABLED, |
| 2083 service_->extension_prefs()->GetExtensionState(extension->id())); | 2083 service_->extension_prefs()->GetExtensionState(extension->id())); |
| 2084 EXPECT_FALSE(service_->IsIncognitoEnabled(extension)); | 2084 EXPECT_FALSE(service_->IsIncognitoEnabled(extension)); |
| 2085 } | 2085 } |
| 2086 | 2086 |
| 2087 // Test updating a pending CRX as if the source is an external extension | 2087 // Test updating a pending CRX as if the source is an external extension |
| 2088 // with an update URL. The external update should overwrite a sync update, | 2088 // with an update URL. The external update should overwrite a sync update, |
| 2089 // but a sync update should not overwrite a non-sync update. | 2089 // but a sync update should not overwrite a non-sync update. |
| 2090 TEST_F(ExtensionsServiceTest, UpdatePendingExternalCrxWinsOverSync) { | 2090 TEST_F(ExtensionServiceTest, UpdatePendingExternalCrxWinsOverSync) { |
| 2091 InitializeEmptyExtensionsService(); | 2091 InitializeEmptyExtensionService(); |
| 2092 | 2092 |
| 2093 // Add a crx to be installed from the update mechanism. | 2093 // Add a crx to be installed from the update mechanism. |
| 2094 service_->AddPendingExtensionFromSync( | 2094 service_->AddPendingExtensionFromSync( |
| 2095 kGoodId, GURL(kGoodUpdateURL), kCrxTypeExtension, | 2095 kGoodId, GURL(kGoodUpdateURL), kCrxTypeExtension, |
| 2096 kGoodInstallSilently, kGoodInitialState, | 2096 kGoodInstallSilently, kGoodInitialState, |
| 2097 kGoodInitialIncognitoEnabled); | 2097 kGoodInitialIncognitoEnabled); |
| 2098 | 2098 |
| 2099 // Check that there is a pending crx, with is_from_sync set to true. | 2099 // Check that there is a pending crx, with is_from_sync set to true. |
| 2100 PendingExtensionMap::const_iterator it; | 2100 PendingExtensionMap::const_iterator it; |
| 2101 it = service_->pending_extensions().find(kGoodId); | 2101 it = service_->pending_extensions().find(kGoodId); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2118 kGoodInitialIncognitoEnabled); | 2118 kGoodInitialIncognitoEnabled); |
| 2119 | 2119 |
| 2120 // Check that the external, non-sync update was not overridden. | 2120 // Check that the external, non-sync update was not overridden. |
| 2121 it = service_->pending_extensions().find(kGoodId); | 2121 it = service_->pending_extensions().find(kGoodId); |
| 2122 ASSERT_TRUE(it != service_->pending_extensions().end()); | 2122 ASSERT_TRUE(it != service_->pending_extensions().end()); |
| 2123 EXPECT_FALSE(it->second.is_from_sync); | 2123 EXPECT_FALSE(it->second.is_from_sync); |
| 2124 } | 2124 } |
| 2125 | 2125 |
| 2126 // Updating a theme should fail if the updater is explicitly told that | 2126 // Updating a theme should fail if the updater is explicitly told that |
| 2127 // the CRX is not a theme. | 2127 // the CRX is not a theme. |
| 2128 TEST_F(ExtensionsServiceTest, UpdatePendingCrxThemeMismatch) { | 2128 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { |
| 2129 InitializeEmptyExtensionsService(); | 2129 InitializeEmptyExtensionService(); |
| 2130 service_->AddPendingExtensionFromSync( | 2130 service_->AddPendingExtensionFromSync( |
| 2131 theme_crx, GURL(), | 2131 theme_crx, GURL(), |
| 2132 PendingExtensionInfo::EXTENSION, | 2132 PendingExtensionInfo::EXTENSION, |
| 2133 true, Extension::ENABLED, false); | 2133 true, Extension::ENABLED, false); |
| 2134 | 2134 |
| 2135 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2135 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2136 | 2136 |
| 2137 FilePath extensions_path; | 2137 FilePath extensions_path; |
| 2138 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2138 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2139 extensions_path = extensions_path.AppendASCII("extensions"); | 2139 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2140 FilePath path = extensions_path.AppendASCII("theme.crx"); | 2140 FilePath path = extensions_path.AppendASCII("theme.crx"); |
| 2141 UpdateExtension(theme_crx, path, FAILED_SILENTLY); | 2141 UpdateExtension(theme_crx, path, FAILED_SILENTLY); |
| 2142 | 2142 |
| 2143 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); | 2143 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), theme_crx)); |
| 2144 | 2144 |
| 2145 const Extension* extension = service_->GetExtensionById(theme_crx, true); | 2145 const Extension* extension = service_->GetExtensionById(theme_crx, true); |
| 2146 ASSERT_FALSE(extension); | 2146 ASSERT_FALSE(extension); |
| 2147 } | 2147 } |
| 2148 | 2148 |
| 2149 // TODO(akalin): Test updating a pending extension non-silently once | 2149 // TODO(akalin): Test updating a pending extension non-silently once |
| 2150 // we can mock out ExtensionInstallUI and inject our version into | 2150 // we can mock out ExtensionInstallUI and inject our version into |
| 2151 // UpdateExtension(). | 2151 // UpdateExtension(). |
| 2152 | 2152 |
| 2153 // Test updating a pending extension with wrong is_theme. | 2153 // Test updating a pending extension with wrong is_theme. |
| 2154 TEST_F(ExtensionsServiceTest, UpdatePendingExtensionWrongIsTheme) { | 2154 TEST_F(ExtensionServiceTest, UpdatePendingExtensionWrongIsTheme) { |
| 2155 InitializeEmptyExtensionsService(); | 2155 InitializeEmptyExtensionService(); |
| 2156 // Add pending extension with a flipped is_theme. | 2156 // Add pending extension with a flipped is_theme. |
| 2157 service_->AddPendingExtensionFromSync( | 2157 service_->AddPendingExtensionFromSync( |
| 2158 kGoodId, GURL(kGoodUpdateURL), | 2158 kGoodId, GURL(kGoodUpdateURL), |
| 2159 kCrxTypeTheme, kGoodInstallSilently, kGoodInitialState, | 2159 kCrxTypeTheme, kGoodInstallSilently, kGoodInitialState, |
| 2160 kGoodInitialIncognitoEnabled); | 2160 kGoodInitialIncognitoEnabled); |
| 2161 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2161 EXPECT_TRUE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2162 | 2162 |
| 2163 FilePath extensions_path; | 2163 FilePath extensions_path; |
| 2164 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2164 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2165 extensions_path = extensions_path.AppendASCII("extensions"); | 2165 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2166 FilePath path = extensions_path.AppendASCII("good.crx"); | 2166 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2167 UpdateExtension(kGoodId, path, UPDATED); | 2167 UpdateExtension(kGoodId, path, UPDATED); |
| 2168 | 2168 |
| 2169 // TODO(akalin): Figure out how to check that the extensions | 2169 // TODO(akalin): Figure out how to check that the extensions |
| 2170 // directory is cleaned up properly in OnExtensionInstalled(). | 2170 // directory is cleaned up properly in OnExtensionInstalled(). |
| 2171 | 2171 |
| 2172 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2172 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2173 } | 2173 } |
| 2174 | 2174 |
| 2175 // TODO(akalin): Figure out how to test that installs of pending | 2175 // TODO(akalin): Figure out how to test that installs of pending |
| 2176 // unsyncable extensions are blocked. | 2176 // unsyncable extensions are blocked. |
| 2177 | 2177 |
| 2178 // Test updating a pending extension for one that is not pending. | 2178 // Test updating a pending extension for one that is not pending. |
| 2179 TEST_F(ExtensionsServiceTest, UpdatePendingExtensionNotPending) { | 2179 TEST_F(ExtensionServiceTest, UpdatePendingExtensionNotPending) { |
| 2180 InitializeEmptyExtensionsService(); | 2180 InitializeEmptyExtensionService(); |
| 2181 | 2181 |
| 2182 FilePath extensions_path; | 2182 FilePath extensions_path; |
| 2183 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2183 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2184 extensions_path = extensions_path.AppendASCII("extensions"); | 2184 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2185 FilePath path = extensions_path.AppendASCII("good.crx"); | 2185 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2186 UpdateExtension(kGoodId, path, UPDATED); | 2186 UpdateExtension(kGoodId, path, UPDATED); |
| 2187 | 2187 |
| 2188 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2188 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2189 } | 2189 } |
| 2190 | 2190 |
| 2191 // Test updating a pending extension for one that is already | 2191 // Test updating a pending extension for one that is already |
| 2192 // installed. | 2192 // installed. |
| 2193 TEST_F(ExtensionsServiceTest, UpdatePendingExtensionAlreadyInstalled) { | 2193 TEST_F(ExtensionServiceTest, UpdatePendingExtensionAlreadyInstalled) { |
| 2194 InitializeEmptyExtensionsService(); | 2194 InitializeEmptyExtensionService(); |
| 2195 | 2195 |
| 2196 FilePath extensions_path; | 2196 FilePath extensions_path; |
| 2197 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2197 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2198 extensions_path = extensions_path.AppendASCII("extensions"); | 2198 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2199 FilePath path = extensions_path.AppendASCII("good.crx"); | 2199 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2200 InstallExtension(path, true); | 2200 InstallExtension(path, true); |
| 2201 ASSERT_EQ(1u, service_->extensions()->size()); | 2201 ASSERT_EQ(1u, service_->extensions()->size()); |
| 2202 const Extension* good = service_->extensions()->at(0); | 2202 const Extension* good = service_->extensions()->at(0); |
| 2203 | 2203 |
| 2204 EXPECT_FALSE(good->is_theme()); | 2204 EXPECT_FALSE(good->is_theme()); |
| 2205 | 2205 |
| 2206 // Use AddPendingExtensionInternal() as AddPendingExtension() would | 2206 // Use AddPendingExtensionInternal() as AddPendingExtension() would |
| 2207 // balk. | 2207 // balk. |
| 2208 service_->AddPendingExtensionInternal( | 2208 service_->AddPendingExtensionInternal( |
| 2209 good->id(), good->update_url(), | 2209 good->id(), good->update_url(), |
| 2210 PendingExtensionInfo::EXTENSION, | 2210 PendingExtensionInfo::EXTENSION, |
| 2211 kGoodIsFromSync, kGoodInstallSilently, kGoodInitialState, | 2211 kGoodIsFromSync, kGoodInstallSilently, kGoodInitialState, |
| 2212 kGoodInitialIncognitoEnabled, Extension::INTERNAL); | 2212 kGoodInitialIncognitoEnabled, Extension::INTERNAL); |
| 2213 UpdateExtension(good->id(), path, INSTALLED); | 2213 UpdateExtension(good->id(), path, INSTALLED); |
| 2214 | 2214 |
| 2215 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); | 2215 EXPECT_FALSE(ContainsKey(service_->pending_extensions(), kGoodId)); |
| 2216 } | 2216 } |
| 2217 | 2217 |
| 2218 // Test pref settings for blacklist and unblacklist extensions. | 2218 // Test pref settings for blacklist and unblacklist extensions. |
| 2219 TEST_F(ExtensionsServiceTest, SetUnsetBlacklistInPrefs) { | 2219 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { |
| 2220 InitializeEmptyExtensionsService(); | 2220 InitializeEmptyExtensionService(); |
| 2221 std::vector<std::string> blacklist; | 2221 std::vector<std::string> blacklist; |
| 2222 blacklist.push_back(good0); | 2222 blacklist.push_back(good0); |
| 2223 blacklist.push_back("invalid_id"); // an invalid id | 2223 blacklist.push_back("invalid_id"); // an invalid id |
| 2224 blacklist.push_back(good1); | 2224 blacklist.push_back(good1); |
| 2225 service_->UpdateExtensionBlacklist(blacklist); | 2225 service_->UpdateExtensionBlacklist(blacklist); |
| 2226 // Make sure pref is updated | 2226 // Make sure pref is updated |
| 2227 loop_.RunAllPending(); | 2227 loop_.RunAllPending(); |
| 2228 | 2228 |
| 2229 // blacklist is set for good0,1,2 | 2229 // blacklist is set for good0,1,2 |
| 2230 ValidateBooleanPref(good0, "blacklist", true); | 2230 ValidateBooleanPref(good0, "blacklist", true); |
| 2231 ValidateBooleanPref(good1, "blacklist", true); | 2231 ValidateBooleanPref(good1, "blacklist", true); |
| 2232 // invalid_id should not be inserted to pref. | 2232 // invalid_id should not be inserted to pref. |
| 2233 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); | 2233 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); |
| 2234 | 2234 |
| 2235 // remove good1, add good2 | 2235 // remove good1, add good2 |
| 2236 blacklist.pop_back(); | 2236 blacklist.pop_back(); |
| 2237 blacklist.push_back(good2); | 2237 blacklist.push_back(good2); |
| 2238 | 2238 |
| 2239 service_->UpdateExtensionBlacklist(blacklist); | 2239 service_->UpdateExtensionBlacklist(blacklist); |
| 2240 // only good0 and good1 should be set | 2240 // only good0 and good1 should be set |
| 2241 ValidateBooleanPref(good0, "blacklist", true); | 2241 ValidateBooleanPref(good0, "blacklist", true); |
| 2242 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); | 2242 EXPECT_FALSE(IsPrefExist(good1, "blacklist")); |
| 2243 ValidateBooleanPref(good2, "blacklist", true); | 2243 ValidateBooleanPref(good2, "blacklist", true); |
| 2244 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); | 2244 EXPECT_FALSE(IsPrefExist("invalid_id", "blacklist")); |
| 2245 } | 2245 } |
| 2246 | 2246 |
| 2247 // Unload installed extension from blacklist. | 2247 // Unload installed extension from blacklist. |
| 2248 TEST_F(ExtensionsServiceTest, UnloadBlacklistedExtension) { | 2248 TEST_F(ExtensionServiceTest, UnloadBlacklistedExtension) { |
| 2249 InitializeEmptyExtensionsService(); | 2249 InitializeEmptyExtensionService(); |
| 2250 FilePath extensions_path; | 2250 FilePath extensions_path; |
| 2251 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2251 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2252 extensions_path = extensions_path.AppendASCII("extensions"); | 2252 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2253 | 2253 |
| 2254 FilePath path = extensions_path.AppendASCII("good.crx"); | 2254 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2255 | 2255 |
| 2256 InstallExtension(path, true); | 2256 InstallExtension(path, true); |
| 2257 const Extension* good = service_->extensions()->at(0); | 2257 const Extension* good = service_->extensions()->at(0); |
| 2258 EXPECT_EQ(good_crx, good->id()); | 2258 EXPECT_EQ(good_crx, good->id()); |
| 2259 UpdateExtension(good_crx, path, FAILED_SILENTLY); | 2259 UpdateExtension(good_crx, path, FAILED_SILENTLY); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2271 // Remove good_crx from blacklist | 2271 // Remove good_crx from blacklist |
| 2272 blacklist.pop_back(); | 2272 blacklist.pop_back(); |
| 2273 service_->UpdateExtensionBlacklist(blacklist); | 2273 service_->UpdateExtensionBlacklist(blacklist); |
| 2274 // Make sure pref is updated | 2274 // Make sure pref is updated |
| 2275 loop_.RunAllPending(); | 2275 loop_.RunAllPending(); |
| 2276 // blacklist value should not be set for good_crx | 2276 // blacklist value should not be set for good_crx |
| 2277 EXPECT_FALSE(IsPrefExist(good_crx, "blacklist")); | 2277 EXPECT_FALSE(IsPrefExist(good_crx, "blacklist")); |
| 2278 } | 2278 } |
| 2279 | 2279 |
| 2280 // Unload installed extension from blacklist. | 2280 // Unload installed extension from blacklist. |
| 2281 TEST_F(ExtensionsServiceTest, BlacklistedExtensionWillNotInstall) { | 2281 TEST_F(ExtensionServiceTest, BlacklistedExtensionWillNotInstall) { |
| 2282 InitializeEmptyExtensionsService(); | 2282 InitializeEmptyExtensionService(); |
| 2283 std::vector<std::string> blacklist; | 2283 std::vector<std::string> blacklist; |
| 2284 blacklist.push_back(good_crx); | 2284 blacklist.push_back(good_crx); |
| 2285 service_->UpdateExtensionBlacklist(blacklist); | 2285 service_->UpdateExtensionBlacklist(blacklist); |
| 2286 // Make sure pref is updated | 2286 // Make sure pref is updated |
| 2287 loop_.RunAllPending(); | 2287 loop_.RunAllPending(); |
| 2288 | 2288 |
| 2289 // Now, the good_crx is blacklisted. | 2289 // Now, the good_crx is blacklisted. |
| 2290 ValidateBooleanPref(good_crx, "blacklist", true); | 2290 ValidateBooleanPref(good_crx, "blacklist", true); |
| 2291 | 2291 |
| 2292 // We can not install good_crx. | 2292 // We can not install good_crx. |
| 2293 FilePath extensions_path; | 2293 FilePath extensions_path; |
| 2294 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2294 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2295 extensions_path = extensions_path.AppendASCII("extensions"); | 2295 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2296 FilePath path = extensions_path.AppendASCII("good.crx"); | 2296 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2297 service_->InstallExtension(path); | 2297 service_->InstallExtension(path); |
| 2298 loop_.RunAllPending(); | 2298 loop_.RunAllPending(); |
| 2299 EXPECT_EQ(0u, service_->extensions()->size()); | 2299 EXPECT_EQ(0u, service_->extensions()->size()); |
| 2300 ValidateBooleanPref(good_crx, "blacklist", true); | 2300 ValidateBooleanPref(good_crx, "blacklist", true); |
| 2301 } | 2301 } |
| 2302 | 2302 |
| 2303 // Test loading extensions from the profile directory, except | 2303 // Test loading extensions from the profile directory, except |
| 2304 // blacklisted ones. | 2304 // blacklisted ones. |
| 2305 TEST_F(ExtensionsServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { | 2305 TEST_F(ExtensionServiceTest, WillNotLoadBlacklistedExtensionsFromDirectory) { |
| 2306 // Initialize the test dir with a good Preferences/extensions. | 2306 // Initialize the test dir with a good Preferences/extensions. |
| 2307 FilePath source_install_dir; | 2307 FilePath source_install_dir; |
| 2308 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 2308 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 2309 source_install_dir = source_install_dir | 2309 source_install_dir = source_install_dir |
| 2310 .AppendASCII("extensions") | 2310 .AppendASCII("extensions") |
| 2311 .AppendASCII("good") | 2311 .AppendASCII("good") |
| 2312 .AppendASCII("Extensions"); | 2312 .AppendASCII("Extensions"); |
| 2313 FilePath pref_path = source_install_dir | 2313 FilePath pref_path = source_install_dir |
| 2314 .DirName() | 2314 .DirName() |
| 2315 .AppendASCII("Preferences"); | 2315 .AppendASCII("Preferences"); |
| 2316 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 2316 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 2317 | 2317 |
| 2318 // Blacklist good1. | 2318 // Blacklist good1. |
| 2319 std::vector<std::string> blacklist; | 2319 std::vector<std::string> blacklist; |
| 2320 blacklist.push_back(good1); | 2320 blacklist.push_back(good1); |
| 2321 service_->UpdateExtensionBlacklist(blacklist); | 2321 service_->UpdateExtensionBlacklist(blacklist); |
| 2322 // Make sure pref is updated | 2322 // Make sure pref is updated |
| 2323 loop_.RunAllPending(); | 2323 loop_.RunAllPending(); |
| 2324 | 2324 |
| 2325 ValidateBooleanPref(good1, "blacklist", true); | 2325 ValidateBooleanPref(good1, "blacklist", true); |
| 2326 | 2326 |
| 2327 // Load extensions. | 2327 // Load extensions. |
| 2328 service_->Init(); | 2328 service_->Init(); |
| 2329 loop_.RunAllPending(); | 2329 loop_.RunAllPending(); |
| 2330 | 2330 |
| 2331 std::vector<std::string> errors = GetErrors(); | 2331 std::vector<std::string> errors = GetErrors(); |
| 2332 for (std::vector<std::string>::iterator err = errors.begin(); | 2332 for (std::vector<std::string>::iterator err = errors.begin(); |
| 2333 err != errors.end(); ++err) { | 2333 err != errors.end(); ++err) { |
| 2334 LOG(ERROR) << *err; | 2334 LOG(ERROR) << *err; |
| 2335 } | 2335 } |
| 2336 ASSERT_EQ(2u, loaded_.size()); | 2336 ASSERT_EQ(2u, loaded_.size()); |
| 2337 | 2337 |
| 2338 EXPECT_NE(std::string(good1), loaded_[0]->id()); | 2338 EXPECT_NE(std::string(good1), loaded_[0]->id()); |
| 2339 EXPECT_NE(std::string(good1), loaded_[1]->id()); | 2339 EXPECT_NE(std::string(good1), loaded_[1]->id()); |
| 2340 } | 2340 } |
| 2341 | 2341 |
| 2342 #if defined(OS_CHROMEOS) | 2342 #if defined(OS_CHROMEOS) |
| 2343 // Test loading extensions from the profile directory, except | 2343 // Test loading extensions from the profile directory, except |
| 2344 // ones with a plugin. | 2344 // ones with a plugin. |
| 2345 TEST_F(ExtensionsServiceTest, WillNotLoadPluginExtensionsFromDirectory) { | 2345 TEST_F(ExtensionServiceTest, WillNotLoadPluginExtensionsFromDirectory) { |
| 2346 // Initialize the test dir with a good Preferences/extensions. | 2346 // Initialize the test dir with a good Preferences/extensions. |
| 2347 FilePath source_install_dir; | 2347 FilePath source_install_dir; |
| 2348 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 2348 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 2349 source_install_dir = source_install_dir | 2349 source_install_dir = source_install_dir |
| 2350 .AppendASCII("extensions") | 2350 .AppendASCII("extensions") |
| 2351 .AppendASCII("good") | 2351 .AppendASCII("good") |
| 2352 .AppendASCII("Extensions"); | 2352 .AppendASCII("Extensions"); |
| 2353 FilePath pref_path = source_install_dir | 2353 FilePath pref_path = source_install_dir |
| 2354 .DirName() | 2354 .DirName() |
| 2355 .AppendASCII("Preferences"); | 2355 .AppendASCII("Preferences"); |
| 2356 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 2356 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 2357 | 2357 |
| 2358 // good1 contains a plugin. | 2358 // good1 contains a plugin. |
| 2359 // Load extensions. | 2359 // Load extensions. |
| 2360 service_->Init(); | 2360 service_->Init(); |
| 2361 loop_.RunAllPending(); | 2361 loop_.RunAllPending(); |
| 2362 | 2362 |
| 2363 std::vector<std::string> errors = GetErrors(); | 2363 std::vector<std::string> errors = GetErrors(); |
| 2364 for (std::vector<std::string>::iterator err = errors.begin(); | 2364 for (std::vector<std::string>::iterator err = errors.begin(); |
| 2365 err != errors.end(); ++err) { | 2365 err != errors.end(); ++err) { |
| 2366 LOG(ERROR) << *err; | 2366 LOG(ERROR) << *err; |
| 2367 } | 2367 } |
| 2368 ASSERT_EQ(2u, loaded_.size()); | 2368 ASSERT_EQ(2u, loaded_.size()); |
| 2369 | 2369 |
| 2370 EXPECT_NE(std::string(good1), loaded_[0]->id()); | 2370 EXPECT_NE(std::string(good1), loaded_[0]->id()); |
| 2371 EXPECT_NE(std::string(good1), loaded_[1]->id()); | 2371 EXPECT_NE(std::string(good1), loaded_[1]->id()); |
| 2372 } | 2372 } |
| 2373 #endif | 2373 #endif |
| 2374 | 2374 |
| 2375 // Will not install extension blacklisted by policy. | 2375 // Will not install extension blacklisted by policy. |
| 2376 TEST_F(ExtensionsServiceTest, BlacklistedByPolicyWillNotInstall) { | 2376 TEST_F(ExtensionServiceTest, BlacklistedByPolicyWillNotInstall) { |
| 2377 InitializeEmptyExtensionsService(); | 2377 InitializeEmptyExtensionService(); |
| 2378 | 2378 |
| 2379 ListValue* whitelist = | 2379 ListValue* whitelist = |
| 2380 profile_->GetPrefs()->GetMutableList(prefs::kExtensionInstallAllowList); | 2380 profile_->GetPrefs()->GetMutableList(prefs::kExtensionInstallAllowList); |
| 2381 ListValue* blacklist = | 2381 ListValue* blacklist = |
| 2382 profile_->GetPrefs()->GetMutableList(prefs::kExtensionInstallDenyList); | 2382 profile_->GetPrefs()->GetMutableList(prefs::kExtensionInstallDenyList); |
| 2383 ASSERT_TRUE(whitelist != NULL && blacklist != NULL); | 2383 ASSERT_TRUE(whitelist != NULL && blacklist != NULL); |
| 2384 | 2384 |
| 2385 // Blacklist everything. | 2385 // Blacklist everything. |
| 2386 blacklist->Append(Value::CreateStringValue("*")); | 2386 blacklist->Append(Value::CreateStringValue("*")); |
| 2387 | 2387 |
| 2388 // Blacklist prevents us from installing good_crx. | 2388 // Blacklist prevents us from installing good_crx. |
| 2389 FilePath extensions_path; | 2389 FilePath extensions_path; |
| 2390 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2390 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2391 extensions_path = extensions_path.AppendASCII("extensions"); | 2391 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2392 FilePath path = extensions_path.AppendASCII("good.crx"); | 2392 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2393 service_->InstallExtension(path); | 2393 service_->InstallExtension(path); |
| 2394 loop_.RunAllPending(); | 2394 loop_.RunAllPending(); |
| 2395 EXPECT_EQ(0u, service_->extensions()->size()); | 2395 EXPECT_EQ(0u, service_->extensions()->size()); |
| 2396 | 2396 |
| 2397 // Now whitelist this particular extension. | 2397 // Now whitelist this particular extension. |
| 2398 whitelist->Append(Value::CreateStringValue(good_crx)); | 2398 whitelist->Append(Value::CreateStringValue(good_crx)); |
| 2399 | 2399 |
| 2400 // Ensure we can now install good_crx. | 2400 // Ensure we can now install good_crx. |
| 2401 service_->InstallExtension(path); | 2401 service_->InstallExtension(path); |
| 2402 loop_.RunAllPending(); | 2402 loop_.RunAllPending(); |
| 2403 EXPECT_EQ(1u, service_->extensions()->size()); | 2403 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2404 } | 2404 } |
| 2405 | 2405 |
| 2406 // Extension blacklisted by policy get unloaded after installing. | 2406 // Extension blacklisted by policy get unloaded after installing. |
| 2407 TEST_F(ExtensionsServiceTest, BlacklistedByPolicyRemovedIfRunning) { | 2407 TEST_F(ExtensionServiceTest, BlacklistedByPolicyRemovedIfRunning) { |
| 2408 InitializeEmptyExtensionsService(); | 2408 InitializeEmptyExtensionService(); |
| 2409 | 2409 |
| 2410 // Install good_crx. | 2410 // Install good_crx. |
| 2411 FilePath extensions_path; | 2411 FilePath extensions_path; |
| 2412 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2412 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2413 extensions_path = extensions_path.AppendASCII("extensions"); | 2413 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2414 FilePath path = extensions_path.AppendASCII("good.crx"); | 2414 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2415 service_->InstallExtension(path); | 2415 service_->InstallExtension(path); |
| 2416 loop_.RunAllPending(); | 2416 loop_.RunAllPending(); |
| 2417 EXPECT_EQ(1u, service_->extensions()->size()); | 2417 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2418 | 2418 |
| 2419 { // Scope for pref update notification. | 2419 { // Scope for pref update notification. |
| 2420 PrefService* prefs = profile_->GetPrefs(); | 2420 PrefService* prefs = profile_->GetPrefs(); |
| 2421 ScopedPrefUpdate pref_update(prefs, prefs::kExtensionInstallDenyList); | 2421 ScopedPrefUpdate pref_update(prefs, prefs::kExtensionInstallDenyList); |
| 2422 ListValue* blacklist = | 2422 ListValue* blacklist = |
| 2423 prefs->GetMutableList(prefs::kExtensionInstallDenyList); | 2423 prefs->GetMutableList(prefs::kExtensionInstallDenyList); |
| 2424 ASSERT_TRUE(blacklist != NULL); | 2424 ASSERT_TRUE(blacklist != NULL); |
| 2425 | 2425 |
| 2426 // Blacklist this extension. | 2426 // Blacklist this extension. |
| 2427 blacklist->Append(Value::CreateStringValue(good_crx)); | 2427 blacklist->Append(Value::CreateStringValue(good_crx)); |
| 2428 prefs->ScheduleSavePersistentPrefs(); | 2428 prefs->ScheduleSavePersistentPrefs(); |
| 2429 } | 2429 } |
| 2430 | 2430 |
| 2431 // Extension should not be running now. | 2431 // Extension should not be running now. |
| 2432 loop_.RunAllPending(); | 2432 loop_.RunAllPending(); |
| 2433 EXPECT_EQ(0u, service_->extensions()->size()); | 2433 EXPECT_EQ(0u, service_->extensions()->size()); |
| 2434 } | 2434 } |
| 2435 | 2435 |
| 2436 // Tests disabling extensions | 2436 // Tests disabling extensions |
| 2437 TEST_F(ExtensionsServiceTest, DisableExtension) { | 2437 TEST_F(ExtensionServiceTest, DisableExtension) { |
| 2438 InitializeEmptyExtensionsService(); | 2438 InitializeEmptyExtensionService(); |
| 2439 FilePath extensions_path; | 2439 FilePath extensions_path; |
| 2440 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2440 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2441 extensions_path = extensions_path.AppendASCII("extensions"); | 2441 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2442 | 2442 |
| 2443 // A simple extension that should install without error. | 2443 // A simple extension that should install without error. |
| 2444 FilePath path = extensions_path.AppendASCII("good.crx"); | 2444 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2445 InstallExtension(path, true); | 2445 InstallExtension(path, true); |
| 2446 | 2446 |
| 2447 const char* extension_id = good_crx; | 2447 const char* extension_id = good_crx; |
| 2448 EXPECT_FALSE(service_->extensions()->empty()); | 2448 EXPECT_FALSE(service_->extensions()->empty()); |
| 2449 EXPECT_TRUE(service_->GetExtensionById(extension_id, true) != NULL); | 2449 EXPECT_TRUE(service_->GetExtensionById(extension_id, true) != NULL); |
| 2450 EXPECT_TRUE(service_->GetExtensionById(extension_id, false) != NULL); | 2450 EXPECT_TRUE(service_->GetExtensionById(extension_id, false) != NULL); |
| 2451 EXPECT_TRUE(service_->disabled_extensions()->empty()); | 2451 EXPECT_TRUE(service_->disabled_extensions()->empty()); |
| 2452 | 2452 |
| 2453 // Disable it. | 2453 // Disable it. |
| 2454 service_->DisableExtension(extension_id); | 2454 service_->DisableExtension(extension_id); |
| 2455 | 2455 |
| 2456 EXPECT_TRUE(service_->extensions()->empty()); | 2456 EXPECT_TRUE(service_->extensions()->empty()); |
| 2457 EXPECT_TRUE(service_->GetExtensionById(extension_id, true) != NULL); | 2457 EXPECT_TRUE(service_->GetExtensionById(extension_id, true) != NULL); |
| 2458 EXPECT_FALSE(service_->GetExtensionById(extension_id, false) != NULL); | 2458 EXPECT_FALSE(service_->GetExtensionById(extension_id, false) != NULL); |
| 2459 EXPECT_FALSE(service_->disabled_extensions()->empty()); | 2459 EXPECT_FALSE(service_->disabled_extensions()->empty()); |
| 2460 } | 2460 } |
| 2461 | 2461 |
| 2462 // Tests disabling all extensions (simulating --disable-extensions flag). | 2462 // Tests disabling all extensions (simulating --disable-extensions flag). |
| 2463 TEST_F(ExtensionsServiceTest, DisableAllExtensions) { | 2463 TEST_F(ExtensionServiceTest, DisableAllExtensions) { |
| 2464 InitializeEmptyExtensionsService(); | 2464 InitializeEmptyExtensionService(); |
| 2465 | 2465 |
| 2466 FilePath extensions_path; | 2466 FilePath extensions_path; |
| 2467 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2467 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2468 extensions_path = extensions_path.AppendASCII("extensions"); | 2468 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2469 | 2469 |
| 2470 FilePath path = extensions_path.AppendASCII("good.crx"); | 2470 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2471 InstallExtension(path, true); | 2471 InstallExtension(path, true); |
| 2472 | 2472 |
| 2473 EXPECT_EQ(1u, service_->extensions()->size()); | 2473 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2474 EXPECT_EQ(0u, service_->disabled_extensions()->size()); | 2474 EXPECT_EQ(0u, service_->disabled_extensions()->size()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2491 | 2491 |
| 2492 // And then re-enable the extensions. | 2492 // And then re-enable the extensions. |
| 2493 service_->set_extensions_enabled(true); | 2493 service_->set_extensions_enabled(true); |
| 2494 service_->ReloadExtensions(); | 2494 service_->ReloadExtensions(); |
| 2495 | 2495 |
| 2496 EXPECT_EQ(1u, service_->extensions()->size()); | 2496 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2497 EXPECT_EQ(0u, service_->disabled_extensions()->size()); | 2497 EXPECT_EQ(0u, service_->disabled_extensions()->size()); |
| 2498 } | 2498 } |
| 2499 | 2499 |
| 2500 // Tests reloading extensions | 2500 // Tests reloading extensions |
| 2501 TEST_F(ExtensionsServiceTest, ReloadExtensions) { | 2501 TEST_F(ExtensionServiceTest, ReloadExtensions) { |
| 2502 InitializeEmptyExtensionsService(); | 2502 InitializeEmptyExtensionService(); |
| 2503 FilePath extensions_path; | 2503 FilePath extensions_path; |
| 2504 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2504 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2505 extensions_path = extensions_path.AppendASCII("extensions"); | 2505 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2506 | 2506 |
| 2507 // Simple extension that should install without error. | 2507 // Simple extension that should install without error. |
| 2508 FilePath path = extensions_path.AppendASCII("good.crx"); | 2508 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2509 InstallExtension(path, true); | 2509 InstallExtension(path, true); |
| 2510 const char* extension_id = good_crx; | 2510 const char* extension_id = good_crx; |
| 2511 service_->DisableExtension(extension_id); | 2511 service_->DisableExtension(extension_id); |
| 2512 | 2512 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2529 // UnloadAllExtensions() doesn't send out notifications. | 2529 // UnloadAllExtensions() doesn't send out notifications. |
| 2530 loaded_.clear(); | 2530 loaded_.clear(); |
| 2531 service_->ReloadExtensions(); | 2531 service_->ReloadExtensions(); |
| 2532 | 2532 |
| 2533 // Extension counts shouldn't change. | 2533 // Extension counts shouldn't change. |
| 2534 EXPECT_EQ(1u, service_->extensions()->size()); | 2534 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2535 EXPECT_EQ(0u, service_->disabled_extensions()->size()); | 2535 EXPECT_EQ(0u, service_->disabled_extensions()->size()); |
| 2536 } | 2536 } |
| 2537 | 2537 |
| 2538 // Tests uninstalling normal extensions | 2538 // Tests uninstalling normal extensions |
| 2539 TEST_F(ExtensionsServiceTest, UninstallExtension) { | 2539 TEST_F(ExtensionServiceTest, UninstallExtension) { |
| 2540 InitializeEmptyExtensionsService(); | 2540 InitializeEmptyExtensionService(); |
| 2541 FilePath extensions_path; | 2541 FilePath extensions_path; |
| 2542 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2542 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2543 extensions_path = extensions_path.AppendASCII("extensions"); | 2543 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2544 | 2544 |
| 2545 // A simple extension that should install without error. | 2545 // A simple extension that should install without error. |
| 2546 FilePath path = extensions_path.AppendASCII("good.crx"); | 2546 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2547 InstallExtension(path, true); | 2547 InstallExtension(path, true); |
| 2548 | 2548 |
| 2549 // The directory should be there now. | 2549 // The directory should be there now. |
| 2550 const char* extension_id = good_crx; | 2550 const char* extension_id = good_crx; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2567 | 2567 |
| 2568 // The extension should not be in the service anymore. | 2568 // The extension should not be in the service anymore. |
| 2569 ASSERT_FALSE(service_->GetExtensionById(extension_id, false)); | 2569 ASSERT_FALSE(service_->GetExtensionById(extension_id, false)); |
| 2570 loop_.RunAllPending(); | 2570 loop_.RunAllPending(); |
| 2571 | 2571 |
| 2572 // The directory should be gone. | 2572 // The directory should be gone. |
| 2573 EXPECT_FALSE(file_util::PathExists(extension_path)); | 2573 EXPECT_FALSE(file_util::PathExists(extension_path)); |
| 2574 } | 2574 } |
| 2575 | 2575 |
| 2576 // Tests the uninstaller helper. | 2576 // Tests the uninstaller helper. |
| 2577 TEST_F(ExtensionsServiceTest, UninstallExtensionHelper) { | 2577 TEST_F(ExtensionServiceTest, UninstallExtensionHelper) { |
| 2578 InitializeEmptyExtensionsService(); | 2578 InitializeEmptyExtensionService(); |
| 2579 FilePath extensions_path; | 2579 FilePath extensions_path; |
| 2580 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2580 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2581 extensions_path = extensions_path.AppendASCII("extensions"); | 2581 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2582 | 2582 |
| 2583 // A simple extension that should install without error. | 2583 // A simple extension that should install without error. |
| 2584 FilePath path = extensions_path.AppendASCII("good.crx"); | 2584 FilePath path = extensions_path.AppendASCII("good.crx"); |
| 2585 InstallExtension(path, true); | 2585 InstallExtension(path, true); |
| 2586 | 2586 |
| 2587 // The directory should be there now. | 2587 // The directory should be there now. |
| 2588 const char* extension_id = good_crx; | 2588 const char* extension_id = good_crx; |
| 2589 FilePath extension_path = extensions_install_dir_.AppendASCII(extension_id); | 2589 FilePath extension_path = extensions_install_dir_.AppendASCII(extension_id); |
| 2590 EXPECT_TRUE(file_util::PathExists(extension_path)); | 2590 EXPECT_TRUE(file_util::PathExists(extension_path)); |
| 2591 | 2591 |
| 2592 bool result = ExtensionsService::UninstallExtensionHelper(service_, | 2592 bool result = ExtensionService::UninstallExtensionHelper(service_, |
| 2593 extension_id); | 2593 extension_id); |
| 2594 total_successes_ = 0; | 2594 total_successes_ = 0; |
| 2595 | 2595 |
| 2596 EXPECT_TRUE(result); | 2596 EXPECT_TRUE(result); |
| 2597 | 2597 |
| 2598 // We should get an unload notification. | 2598 // We should get an unload notification. |
| 2599 ASSERT_TRUE(unloaded_id_.length()); | 2599 ASSERT_TRUE(unloaded_id_.length()); |
| 2600 EXPECT_EQ(extension_id, unloaded_id_); | 2600 EXPECT_EQ(extension_id, unloaded_id_); |
| 2601 | 2601 |
| 2602 ValidatePrefKeyCount(0); | 2602 ValidatePrefKeyCount(0); |
| 2603 | 2603 |
| 2604 // The extension should not be in the service anymore. | 2604 // The extension should not be in the service anymore. |
| 2605 ASSERT_FALSE(service_->GetExtensionById(extension_id, false)); | 2605 ASSERT_FALSE(service_->GetExtensionById(extension_id, false)); |
| 2606 loop_.RunAllPending(); | 2606 loop_.RunAllPending(); |
| 2607 | 2607 |
| 2608 // The directory should be gone. | 2608 // The directory should be gone. |
| 2609 EXPECT_FALSE(file_util::PathExists(extension_path)); | 2609 EXPECT_FALSE(file_util::PathExists(extension_path)); |
| 2610 | 2610 |
| 2611 // Attempt to uninstall again. This should fail as we just removed the | 2611 // Attempt to uninstall again. This should fail as we just removed the |
| 2612 // extension. | 2612 // extension. |
| 2613 result = ExtensionsService::UninstallExtensionHelper(service_, extension_id); | 2613 result = ExtensionService::UninstallExtensionHelper(service_, extension_id); |
| 2614 EXPECT_FALSE(result); | 2614 EXPECT_FALSE(result); |
| 2615 } | 2615 } |
| 2616 | 2616 |
| 2617 // Verifies extension state is removed upon uninstall | 2617 // Verifies extension state is removed upon uninstall |
| 2618 TEST_F(ExtensionsServiceTest, ClearExtensionData) { | 2618 TEST_F(ExtensionServiceTest, ClearExtensionData) { |
| 2619 InitializeEmptyExtensionsService(); | 2619 InitializeEmptyExtensionService(); |
| 2620 | 2620 |
| 2621 // Load a test extension. | 2621 // Load a test extension. |
| 2622 FilePath path; | 2622 FilePath path; |
| 2623 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 2623 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 2624 path = path.AppendASCII("extensions"); | 2624 path = path.AppendASCII("extensions"); |
| 2625 path = path.AppendASCII("good.crx"); | 2625 path = path.AppendASCII("good.crx"); |
| 2626 InstallExtension(path, true); | 2626 InstallExtension(path, true); |
| 2627 const Extension* extension = service_->GetExtensionById(good_crx, false); | 2627 const Extension* extension = service_->GetExtensionById(good_crx, false); |
| 2628 ASSERT_TRUE(extension); | 2628 ASSERT_TRUE(extension); |
| 2629 GURL ext_url(extension->url()); | 2629 GURL ext_url(extension->url()); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2685 EXPECT_EQ(0U, origins.size()); | 2685 EXPECT_EQ(0U, origins.size()); |
| 2686 | 2686 |
| 2687 // Check that the LSO file has been removed. | 2687 // Check that the LSO file has been removed. |
| 2688 EXPECT_FALSE(file_util::PathExists(lso_path)); | 2688 EXPECT_FALSE(file_util::PathExists(lso_path)); |
| 2689 | 2689 |
| 2690 // Check if the indexed db has disappeared too. | 2690 // Check if the indexed db has disappeared too. |
| 2691 EXPECT_FALSE(file_util::PathExists(idb_path)); | 2691 EXPECT_FALSE(file_util::PathExists(idb_path)); |
| 2692 } | 2692 } |
| 2693 | 2693 |
| 2694 // Tests loading single extensions (like --load-extension) | 2694 // Tests loading single extensions (like --load-extension) |
| 2695 TEST_F(ExtensionsServiceTest, LoadExtension) { | 2695 TEST_F(ExtensionServiceTest, LoadExtension) { |
| 2696 InitializeEmptyExtensionsService(); | 2696 InitializeEmptyExtensionService(); |
| 2697 FilePath extensions_path; | 2697 FilePath extensions_path; |
| 2698 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2698 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2699 extensions_path = extensions_path.AppendASCII("extensions"); | 2699 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2700 | 2700 |
| 2701 FilePath ext1 = extensions_path | 2701 FilePath ext1 = extensions_path |
| 2702 .AppendASCII("good") | 2702 .AppendASCII("good") |
| 2703 .AppendASCII("Extensions") | 2703 .AppendASCII("Extensions") |
| 2704 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 2704 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 2705 .AppendASCII("1.0.0.0"); | 2705 .AppendASCII("1.0.0.0"); |
| 2706 service_->LoadExtension(ext1); | 2706 service_->LoadExtension(ext1); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2728 EXPECT_FALSE(unloaded_id_.length()); | 2728 EXPECT_FALSE(unloaded_id_.length()); |
| 2729 service_->UninstallExtension(id, false); | 2729 service_->UninstallExtension(id, false); |
| 2730 loop_.RunAllPending(); | 2730 loop_.RunAllPending(); |
| 2731 EXPECT_EQ(id, unloaded_id_); | 2731 EXPECT_EQ(id, unloaded_id_); |
| 2732 ASSERT_EQ(0u, loaded_.size()); | 2732 ASSERT_EQ(0u, loaded_.size()); |
| 2733 EXPECT_EQ(0u, service_->extensions()->size()); | 2733 EXPECT_EQ(0u, service_->extensions()->size()); |
| 2734 } | 2734 } |
| 2735 | 2735 |
| 2736 // Tests that we generate IDs when they are not specified in the manifest for | 2736 // Tests that we generate IDs when they are not specified in the manifest for |
| 2737 // --load-extension. | 2737 // --load-extension. |
| 2738 TEST_F(ExtensionsServiceTest, GenerateID) { | 2738 TEST_F(ExtensionServiceTest, GenerateID) { |
| 2739 InitializeEmptyExtensionsService(); | 2739 InitializeEmptyExtensionService(); |
| 2740 | 2740 |
| 2741 FilePath extensions_path; | 2741 FilePath extensions_path; |
| 2742 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 2742 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 2743 extensions_path = extensions_path.AppendASCII("extensions"); | 2743 extensions_path = extensions_path.AppendASCII("extensions"); |
| 2744 | 2744 |
| 2745 FilePath no_id_ext = extensions_path.AppendASCII("no_id"); | 2745 FilePath no_id_ext = extensions_path.AppendASCII("no_id"); |
| 2746 service_->LoadExtension(no_id_ext); | 2746 service_->LoadExtension(no_id_ext); |
| 2747 loop_.RunAllPending(); | 2747 loop_.RunAllPending(); |
| 2748 EXPECT_EQ(0u, GetErrors().size()); | 2748 EXPECT_EQ(0u, GetErrors().size()); |
| 2749 ASSERT_EQ(1u, loaded_.size()); | 2749 ASSERT_EQ(1u, loaded_.size()); |
| 2750 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); | 2750 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); |
| 2751 EXPECT_EQ(loaded_[0]->location(), Extension::LOAD); | 2751 EXPECT_EQ(loaded_[0]->location(), Extension::LOAD); |
| 2752 | 2752 |
| 2753 ValidatePrefKeyCount(1); | 2753 ValidatePrefKeyCount(1); |
| 2754 | 2754 |
| 2755 std::string previous_id = loaded_[0]->id(); | 2755 std::string previous_id = loaded_[0]->id(); |
| 2756 | 2756 |
| 2757 // If we reload the same path, we should get the same extension ID. | 2757 // If we reload the same path, we should get the same extension ID. |
| 2758 service_->LoadExtension(no_id_ext); | 2758 service_->LoadExtension(no_id_ext); |
| 2759 loop_.RunAllPending(); | 2759 loop_.RunAllPending(); |
| 2760 ASSERT_EQ(1u, loaded_.size()); | 2760 ASSERT_EQ(1u, loaded_.size()); |
| 2761 ASSERT_EQ(previous_id, loaded_[0]->id()); | 2761 ASSERT_EQ(previous_id, loaded_[0]->id()); |
| 2762 } | 2762 } |
| 2763 | 2763 |
| 2764 void ExtensionsServiceTest::TestExternalProvider( | 2764 void ExtensionServiceTest::TestExternalProvider( |
| 2765 MockExtensionProvider* provider, Extension::Location location) { | 2765 MockExtensionProvider* provider, Extension::Location location) { |
| 2766 // Verify that starting with no providers loads no extensions. | 2766 // Verify that starting with no providers loads no extensions. |
| 2767 service_->Init(); | 2767 service_->Init(); |
| 2768 loop_.RunAllPending(); | 2768 loop_.RunAllPending(); |
| 2769 ASSERT_EQ(0u, loaded_.size()); | 2769 ASSERT_EQ(0u, loaded_.size()); |
| 2770 | 2770 |
| 2771 provider->set_visit_count(0); | 2771 provider->set_visit_count(0); |
| 2772 | 2772 |
| 2773 // Register a test extension externally using the mock registry provider. | 2773 // Register a test extension externally using the mock registry provider. |
| 2774 FilePath source_path; | 2774 FilePath source_path; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2884 service_->LoadAllExtensions(); | 2884 service_->LoadAllExtensions(); |
| 2885 loop_.RunAllPending(); | 2885 loop_.RunAllPending(); |
| 2886 ASSERT_EQ(0u, loaded_.size()); | 2886 ASSERT_EQ(0u, loaded_.size()); |
| 2887 ValidatePrefKeyCount(1); | 2887 ValidatePrefKeyCount(1); |
| 2888 | 2888 |
| 2889 EXPECT_EQ(5, provider->visit_count()); | 2889 EXPECT_EQ(5, provider->visit_count()); |
| 2890 } | 2890 } |
| 2891 | 2891 |
| 2892 // Tests the external installation feature | 2892 // Tests the external installation feature |
| 2893 #if defined(OS_WIN) | 2893 #if defined(OS_WIN) |
| 2894 TEST_F(ExtensionsServiceTest, ExternalInstallRegistry) { | 2894 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { |
| 2895 // This should all work, even when normal extension installation is disabled. | 2895 // This should all work, even when normal extension installation is disabled. |
| 2896 InitializeEmptyExtensionsService(); | 2896 InitializeEmptyExtensionService(); |
| 2897 set_extensions_enabled(false); | 2897 set_extensions_enabled(false); |
| 2898 | 2898 |
| 2899 // Now add providers. Extension system takes ownership of the objects. | 2899 // Now add providers. Extension system takes ownership of the objects. |
| 2900 MockExtensionProvider* reg_provider = | 2900 MockExtensionProvider* reg_provider = |
| 2901 new MockExtensionProvider(Extension::EXTERNAL_REGISTRY); | 2901 new MockExtensionProvider(Extension::EXTERNAL_REGISTRY); |
| 2902 AddMockExternalProvider(reg_provider); | 2902 AddMockExternalProvider(reg_provider); |
| 2903 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); | 2903 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); |
| 2904 } | 2904 } |
| 2905 #endif | 2905 #endif |
| 2906 | 2906 |
| 2907 TEST_F(ExtensionsServiceTest, ExternalInstallPref) { | 2907 TEST_F(ExtensionServiceTest, ExternalInstallPref) { |
| 2908 InitializeEmptyExtensionsService(); | 2908 InitializeEmptyExtensionService(); |
| 2909 | 2909 |
| 2910 // Now add providers. Extension system takes ownership of the objects. | 2910 // Now add providers. Extension system takes ownership of the objects. |
| 2911 MockExtensionProvider* pref_provider = | 2911 MockExtensionProvider* pref_provider = |
| 2912 new MockExtensionProvider(Extension::EXTERNAL_PREF); | 2912 new MockExtensionProvider(Extension::EXTERNAL_PREF); |
| 2913 | 2913 |
| 2914 AddMockExternalProvider(pref_provider); | 2914 AddMockExternalProvider(pref_provider); |
| 2915 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); | 2915 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); |
| 2916 } | 2916 } |
| 2917 | 2917 |
| 2918 TEST_F(ExtensionsServiceTest, ExternalInstallPrefUpdateUrl) { | 2918 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { |
| 2919 // This should all work, even when normal extension installation is disabled. | 2919 // This should all work, even when normal extension installation is disabled. |
| 2920 InitializeEmptyExtensionsService(); | 2920 InitializeEmptyExtensionService(); |
| 2921 set_extensions_enabled(false); | 2921 set_extensions_enabled(false); |
| 2922 | 2922 |
| 2923 // TODO(skerner): The mock provider is not a good model of a provider | 2923 // TODO(skerner): The mock provider is not a good model of a provider |
| 2924 // that works with update URLs, because it adds file and version info. | 2924 // that works with update URLs, because it adds file and version info. |
| 2925 // Extend the mock to work with update URLs. This test checks the | 2925 // Extend the mock to work with update URLs. This test checks the |
| 2926 // behavior that is common to all external extension visitors. The | 2926 // behavior that is common to all external extension visitors. The |
| 2927 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that | 2927 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that |
| 2928 // what the visitor does results in an extension being downloaded and | 2928 // what the visitor does results in an extension being downloaded and |
| 2929 // installed. | 2929 // installed. |
| 2930 MockExtensionProvider* pref_provider = | 2930 MockExtensionProvider* pref_provider = |
| 2931 new MockExtensionProvider(Extension::EXTERNAL_PREF_DOWNLOAD); | 2931 new MockExtensionProvider(Extension::EXTERNAL_PREF_DOWNLOAD); |
| 2932 AddMockExternalProvider(pref_provider); | 2932 AddMockExternalProvider(pref_provider); |
| 2933 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); | 2933 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); |
| 2934 } | 2934 } |
| 2935 | 2935 |
| 2936 // Tests that external extensions get uninstalled when the external extension | 2936 // Tests that external extensions get uninstalled when the external extension |
| 2937 // providers can't account for them. | 2937 // providers can't account for them. |
| 2938 TEST_F(ExtensionsServiceTest, ExternalUninstall) { | 2938 TEST_F(ExtensionServiceTest, ExternalUninstall) { |
| 2939 // Start the extensions service with one external extension already installed. | 2939 // Start the extensions service with one external extension already installed. |
| 2940 FilePath source_install_dir; | 2940 FilePath source_install_dir; |
| 2941 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 2941 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 2942 source_install_dir = source_install_dir | 2942 source_install_dir = source_install_dir |
| 2943 .AppendASCII("extensions") | 2943 .AppendASCII("extensions") |
| 2944 .AppendASCII("good") | 2944 .AppendASCII("good") |
| 2945 .AppendASCII("Extensions"); | 2945 .AppendASCII("Extensions"); |
| 2946 FilePath pref_path = source_install_dir | 2946 FilePath pref_path = source_install_dir |
| 2947 .DirName() | 2947 .DirName() |
| 2948 .AppendASCII("PreferencesExternal"); | 2948 .AppendASCII("PreferencesExternal"); |
| 2949 | 2949 |
| 2950 // This initializes the extensions service with no ExternalExtensionProviders. | 2950 // This initializes the extensions service with no ExternalExtensionProviders. |
| 2951 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 2951 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 2952 set_extensions_enabled(false); | 2952 set_extensions_enabled(false); |
| 2953 | 2953 |
| 2954 service_->Init(); | 2954 service_->Init(); |
| 2955 loop_.RunAllPending(); | 2955 loop_.RunAllPending(); |
| 2956 | 2956 |
| 2957 ASSERT_EQ(0u, GetErrors().size()); | 2957 ASSERT_EQ(0u, GetErrors().size()); |
| 2958 ASSERT_EQ(0u, loaded_.size()); | 2958 ASSERT_EQ(0u, loaded_.size()); |
| 2959 | 2959 |
| 2960 // Verify that it's not the disabled extensions flag causing it not to load. | 2960 // Verify that it's not the disabled extensions flag causing it not to load. |
| 2961 set_extensions_enabled(true); | 2961 set_extensions_enabled(true); |
| 2962 service_->ReloadExtensions(); | 2962 service_->ReloadExtensions(); |
| 2963 loop_.RunAllPending(); | 2963 loop_.RunAllPending(); |
| 2964 | 2964 |
| 2965 ASSERT_EQ(0u, GetErrors().size()); | 2965 ASSERT_EQ(0u, GetErrors().size()); |
| 2966 ASSERT_EQ(0u, loaded_.size()); | 2966 ASSERT_EQ(0u, loaded_.size()); |
| 2967 } | 2967 } |
| 2968 | 2968 |
| 2969 TEST_F(ExtensionsServiceTest, ExternalPrefProvider) { | 2969 TEST_F(ExtensionServiceTest, ExternalPrefProvider) { |
| 2970 InitializeEmptyExtensionsService(); | 2970 InitializeEmptyExtensionService(); |
| 2971 std::string json_data = | 2971 std::string json_data = |
| 2972 "{" | 2972 "{" |
| 2973 " \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\": {" | 2973 " \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\": {" |
| 2974 " \"external_crx\": \"RandomExtension.crx\"," | 2974 " \"external_crx\": \"RandomExtension.crx\"," |
| 2975 " \"external_version\": \"1.0\"" | 2975 " \"external_version\": \"1.0\"" |
| 2976 " }," | 2976 " }," |
| 2977 " \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\": {" | 2977 " \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\": {" |
| 2978 " \"external_crx\": \"RandomExtension2.crx\"," | 2978 " \"external_crx\": \"RandomExtension2.crx\"," |
| 2979 " \"external_version\": \"2.0\"" | 2979 " \"external_version\": \"2.0\"" |
| 2980 " }," | 2980 " }," |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3024 " }," | 3024 " }," |
| 3025 " \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\": {" | 3025 " \"hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\": {" |
| 3026 " \"external_crx\": \"RandomValidExtension.crx\"," | 3026 " \"external_crx\": \"RandomValidExtension.crx\"," |
| 3027 " \"external_version\": \"1.0\"" | 3027 " \"external_version\": \"1.0\"" |
| 3028 " }" | 3028 " }" |
| 3029 "}"; | 3029 "}"; |
| 3030 EXPECT_EQ(1, visitor.Visit(json_data)); | 3030 EXPECT_EQ(1, visitor.Visit(json_data)); |
| 3031 } | 3031 } |
| 3032 | 3032 |
| 3033 // Test loading good extensions from the profile directory. | 3033 // Test loading good extensions from the profile directory. |
| 3034 TEST_F(ExtensionsServiceTest, LoadAndRelocalizeExtensions) { | 3034 TEST_F(ExtensionServiceTest, LoadAndRelocalizeExtensions) { |
| 3035 // Initialize the test dir with a good Preferences/extensions. | 3035 // Initialize the test dir with a good Preferences/extensions. |
| 3036 FilePath source_install_dir; | 3036 FilePath source_install_dir; |
| 3037 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); | 3037 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &source_install_dir)); |
| 3038 source_install_dir = source_install_dir | 3038 source_install_dir = source_install_dir |
| 3039 .AppendASCII("extensions") | 3039 .AppendASCII("extensions") |
| 3040 .AppendASCII("l10n"); | 3040 .AppendASCII("l10n"); |
| 3041 FilePath pref_path = source_install_dir.AppendASCII("Preferences"); | 3041 FilePath pref_path = source_install_dir.AppendASCII("Preferences"); |
| 3042 InitializeInstalledExtensionsService(pref_path, source_install_dir); | 3042 InitializeInstalledExtensionService(pref_path, source_install_dir); |
| 3043 | 3043 |
| 3044 service_->Init(); | 3044 service_->Init(); |
| 3045 loop_.RunAllPending(); | 3045 loop_.RunAllPending(); |
| 3046 | 3046 |
| 3047 ASSERT_EQ(3u, loaded_.size()); | 3047 ASSERT_EQ(3u, loaded_.size()); |
| 3048 | 3048 |
| 3049 // This was equal to "sr" on load. | 3049 // This was equal to "sr" on load. |
| 3050 ValidateStringPref(loaded_[0]->id(), keys::kCurrentLocale, "en"); | 3050 ValidateStringPref(loaded_[0]->id(), keys::kCurrentLocale, "en"); |
| 3051 | 3051 |
| 3052 // These are untouched by re-localization. | 3052 // These are untouched by re-localization. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3082 default: | 3082 default: |
| 3083 NOTREACHED(); | 3083 NOTREACHED(); |
| 3084 } | 3084 } |
| 3085 } | 3085 } |
| 3086 | 3086 |
| 3087 NotificationRegistrar registrar_; | 3087 NotificationRegistrar registrar_; |
| 3088 bool ready_; | 3088 bool ready_; |
| 3089 }; | 3089 }; |
| 3090 | 3090 |
| 3091 // Test that we get enabled/disabled correctly for all the pref/command-line | 3091 // Test that we get enabled/disabled correctly for all the pref/command-line |
| 3092 // combinations. We don't want to derive from the ExtensionsServiceTest class | 3092 // combinations. We don't want to derive from the ExtensionServiceTest class |
| 3093 // for this test, so we use ExtensionsServiceTestSimple. | 3093 // for this test, so we use ExtensionServiceTestSimple. |
| 3094 // | 3094 // |
| 3095 // Also tests that we always fire EXTENSIONS_READY, no matter whether we are | 3095 // Also tests that we always fire EXTENSIONS_READY, no matter whether we are |
| 3096 // enabled or not. | 3096 // enabled or not. |
| 3097 TEST(ExtensionsServiceTestSimple, Enabledness) { | 3097 TEST(ExtensionServiceTestSimple, Enabledness) { |
| 3098 ExtensionsReadyRecorder recorder; | 3098 ExtensionsReadyRecorder recorder; |
| 3099 scoped_ptr<TestingProfile> profile(new TestingProfile()); | 3099 scoped_ptr<TestingProfile> profile(new TestingProfile()); |
| 3100 MessageLoop loop; | 3100 MessageLoop loop; |
| 3101 BrowserThread ui_thread(BrowserThread::UI, &loop); | 3101 BrowserThread ui_thread(BrowserThread::UI, &loop); |
| 3102 BrowserThread file_thread(BrowserThread::FILE, &loop); | 3102 BrowserThread file_thread(BrowserThread::FILE, &loop); |
| 3103 scoped_ptr<CommandLine> command_line; | 3103 scoped_ptr<CommandLine> command_line; |
| 3104 scoped_refptr<ExtensionsService> service; | 3104 scoped_refptr<ExtensionService> service; |
| 3105 FilePath install_dir = profile->GetPath() | 3105 FilePath install_dir = profile->GetPath() |
| 3106 .AppendASCII(ExtensionsService::kInstallDirectoryName); | 3106 .AppendASCII(ExtensionService::kInstallDirectoryName); |
| 3107 | 3107 |
| 3108 // By default, we are enabled. | 3108 // By default, we are enabled. |
| 3109 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3109 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
| 3110 service = profile->CreateExtensionsService(command_line.get(), | 3110 service = profile->CreateExtensionService(command_line.get(), |
| 3111 install_dir); | 3111 install_dir); |
| 3112 EXPECT_TRUE(service->extensions_enabled()); | 3112 EXPECT_TRUE(service->extensions_enabled()); |
| 3113 service->Init(); | 3113 service->Init(); |
| 3114 loop.RunAllPending(); | 3114 loop.RunAllPending(); |
| 3115 EXPECT_TRUE(recorder.ready()); | 3115 EXPECT_TRUE(recorder.ready()); |
| 3116 | 3116 |
| 3117 // If either the command line or pref is set, we are disabled. | 3117 // If either the command line or pref is set, we are disabled. |
| 3118 recorder.set_ready(false); | 3118 recorder.set_ready(false); |
| 3119 profile.reset(new TestingProfile()); | 3119 profile.reset(new TestingProfile()); |
| 3120 command_line->AppendSwitch(switches::kDisableExtensions); | 3120 command_line->AppendSwitch(switches::kDisableExtensions); |
| 3121 service = profile->CreateExtensionsService(command_line.get(), | 3121 service = profile->CreateExtensionService(command_line.get(), |
| 3122 install_dir); | 3122 install_dir); |
| 3123 EXPECT_FALSE(service->extensions_enabled()); | 3123 EXPECT_FALSE(service->extensions_enabled()); |
| 3124 service->Init(); | 3124 service->Init(); |
| 3125 loop.RunAllPending(); | 3125 loop.RunAllPending(); |
| 3126 EXPECT_TRUE(recorder.ready()); | 3126 EXPECT_TRUE(recorder.ready()); |
| 3127 | 3127 |
| 3128 recorder.set_ready(false); | 3128 recorder.set_ready(false); |
| 3129 profile.reset(new TestingProfile()); | 3129 profile.reset(new TestingProfile()); |
| 3130 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3130 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
| 3131 service = profile->CreateExtensionsService(command_line.get(), | 3131 service = profile->CreateExtensionService(command_line.get(), |
| 3132 install_dir); | 3132 install_dir); |
| 3133 EXPECT_FALSE(service->extensions_enabled()); | 3133 EXPECT_FALSE(service->extensions_enabled()); |
| 3134 service->Init(); | 3134 service->Init(); |
| 3135 loop.RunAllPending(); | 3135 loop.RunAllPending(); |
| 3136 EXPECT_TRUE(recorder.ready()); | 3136 EXPECT_TRUE(recorder.ready()); |
| 3137 | 3137 |
| 3138 recorder.set_ready(false); | 3138 recorder.set_ready(false); |
| 3139 profile.reset(new TestingProfile()); | 3139 profile.reset(new TestingProfile()); |
| 3140 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); | 3140 profile->GetPrefs()->SetBoolean(prefs::kDisableExtensions, true); |
| 3141 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); | 3141 command_line.reset(new CommandLine(CommandLine::NO_PROGRAM)); |
| 3142 service = profile->CreateExtensionsService(command_line.get(), | 3142 service = profile->CreateExtensionService(command_line.get(), |
| 3143 install_dir); | 3143 install_dir); |
| 3144 EXPECT_FALSE(service->extensions_enabled()); | 3144 EXPECT_FALSE(service->extensions_enabled()); |
| 3145 service->Init(); | 3145 service->Init(); |
| 3146 loop.RunAllPending(); | 3146 loop.RunAllPending(); |
| 3147 EXPECT_TRUE(recorder.ready()); | 3147 EXPECT_TRUE(recorder.ready()); |
| 3148 | 3148 |
| 3149 // Explicitly delete all the resources used in this test. | 3149 // Explicitly delete all the resources used in this test. |
| 3150 profile.reset(); | 3150 profile.reset(); |
| 3151 service = NULL; | 3151 service = NULL; |
| 3152 } | 3152 } |
| 3153 | 3153 |
| 3154 // Test loading extensions that require limited and unlimited storage quotas. | 3154 // Test loading extensions that require limited and unlimited storage quotas. |
| 3155 TEST_F(ExtensionsServiceTest, StorageQuota) { | 3155 TEST_F(ExtensionServiceTest, StorageQuota) { |
| 3156 InitializeEmptyExtensionsService(); | 3156 InitializeEmptyExtensionService(); |
| 3157 | 3157 |
| 3158 FilePath extensions_path; | 3158 FilePath extensions_path; |
| 3159 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); | 3159 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &extensions_path)); |
| 3160 extensions_path = extensions_path.AppendASCII("extensions") | 3160 extensions_path = extensions_path.AppendASCII("extensions") |
| 3161 .AppendASCII("storage_quota"); | 3161 .AppendASCII("storage_quota"); |
| 3162 | 3162 |
| 3163 FilePath limited_quota_ext = extensions_path.AppendASCII("limited_quota") | 3163 FilePath limited_quota_ext = extensions_path.AppendASCII("limited_quota") |
| 3164 .AppendASCII("1.0"); | 3164 .AppendASCII("1.0"); |
| 3165 | 3165 |
| 3166 // The old permission name for unlimited quota was "unlimited_storage", but | 3166 // The old permission name for unlimited quota was "unlimited_storage", but |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3204 1, &database_size, &unlimited_quota); | 3204 1, &database_size, &unlimited_quota); |
| 3205 db_tracker->DatabaseClosed(unlimited_quota_identifier, db_name); | 3205 db_tracker->DatabaseClosed(unlimited_quota_identifier, db_name); |
| 3206 EXPECT_EQ(kint64max, unlimited_quota); | 3206 EXPECT_EQ(kint64max, unlimited_quota); |
| 3207 db_tracker->DatabaseOpened(unlimited_quota_identifier2, db_name, description, | 3207 db_tracker->DatabaseOpened(unlimited_quota_identifier2, db_name, description, |
| 3208 1, &database_size, &unlimited_quota); | 3208 1, &database_size, &unlimited_quota); |
| 3209 db_tracker->DatabaseClosed(unlimited_quota_identifier2, db_name); | 3209 db_tracker->DatabaseClosed(unlimited_quota_identifier2, db_name); |
| 3210 | 3210 |
| 3211 EXPECT_EQ(kint64max, unlimited_quota); | 3211 EXPECT_EQ(kint64max, unlimited_quota); |
| 3212 } | 3212 } |
| 3213 | 3213 |
| 3214 // Tests ExtensionsService::register_component_extension(). | 3214 // Tests ExtensionService::register_component_extension(). |
| 3215 TEST_F(ExtensionsServiceTest, ComponentExtensions) { | 3215 TEST_F(ExtensionServiceTest, ComponentExtensions) { |
| 3216 InitializeEmptyExtensionsService(); | 3216 InitializeEmptyExtensionService(); |
| 3217 | 3217 |
| 3218 // Component extensions should work even when extensions are disabled. | 3218 // Component extensions should work even when extensions are disabled. |
| 3219 set_extensions_enabled(false); | 3219 set_extensions_enabled(false); |
| 3220 | 3220 |
| 3221 FilePath path; | 3221 FilePath path; |
| 3222 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); | 3222 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &path)); |
| 3223 path = path.AppendASCII("extensions") | 3223 path = path.AppendASCII("extensions") |
| 3224 .AppendASCII("good") | 3224 .AppendASCII("good") |
| 3225 .AppendASCII("Extensions") | 3225 .AppendASCII("Extensions") |
| 3226 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 3226 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| 3227 .AppendASCII("1.0.0.0"); | 3227 .AppendASCII("1.0.0.0"); |
| 3228 | 3228 |
| 3229 std::string manifest; | 3229 std::string manifest; |
| 3230 ASSERT_TRUE(file_util::ReadFileToString( | 3230 ASSERT_TRUE(file_util::ReadFileToString( |
| 3231 path.Append(Extension::kManifestFilename), &manifest)); | 3231 path.Append(Extension::kManifestFilename), &manifest)); |
| 3232 | 3232 |
| 3233 service_->register_component_extension( | 3233 service_->register_component_extension( |
| 3234 ExtensionsService::ComponentExtensionInfo(manifest, path)); | 3234 ExtensionService::ComponentExtensionInfo(manifest, path)); |
| 3235 service_->Init(); | 3235 service_->Init(); |
| 3236 | 3236 |
| 3237 // Note that we do not pump messages -- the extension should be loaded | 3237 // Note that we do not pump messages -- the extension should be loaded |
| 3238 // immediately. | 3238 // immediately. |
| 3239 | 3239 |
| 3240 EXPECT_EQ(0u, GetErrors().size()); | 3240 EXPECT_EQ(0u, GetErrors().size()); |
| 3241 ASSERT_EQ(1u, loaded_.size()); | 3241 ASSERT_EQ(1u, loaded_.size()); |
| 3242 EXPECT_EQ(Extension::COMPONENT, loaded_[0]->location()); | 3242 EXPECT_EQ(Extension::COMPONENT, loaded_[0]->location()); |
| 3243 EXPECT_EQ(1u, service_->extensions()->size()); | 3243 EXPECT_EQ(1u, service_->extensions()->size()); |
| 3244 | 3244 |
| 3245 // Component extensions shouldn't get recourded in the prefs. | 3245 // Component extensions shouldn't get recourded in the prefs. |
| 3246 ValidatePrefKeyCount(0); | 3246 ValidatePrefKeyCount(0); |
| 3247 | 3247 |
| 3248 // Reload all extensions, and make sure it comes back. | 3248 // Reload all extensions, and make sure it comes back. |
| 3249 std::string extension_id = service_->extensions()->at(0)->id(); | 3249 std::string extension_id = service_->extensions()->at(0)->id(); |
| 3250 loaded_.clear(); | 3250 loaded_.clear(); |
| 3251 service_->ReloadExtensions(); | 3251 service_->ReloadExtensions(); |
| 3252 ASSERT_EQ(1u, service_->extensions()->size()); | 3252 ASSERT_EQ(1u, service_->extensions()->size()); |
| 3253 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); | 3253 EXPECT_EQ(extension_id, service_->extensions()->at(0)->id()); |
| 3254 } | 3254 } |
| OLD | NEW |