| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/extension_service_unittest.h" | 5 #include "chrome/browser/extensions/extension_service_unittest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 449 base::MessageLoop::current()->RunUntilIdle(); | 449 base::MessageLoop::current()->RunUntilIdle(); |
| 450 profile_.reset(NULL); | 450 profile_.reset(NULL); |
| 451 base::MessageLoop::current()->RunUntilIdle(); | 451 base::MessageLoop::current()->RunUntilIdle(); |
| 452 } | 452 } |
| 453 | 453 |
| 454 void ExtensionServiceTestBase::InitializeExtensionService( | 454 void ExtensionServiceTestBase::InitializeExtensionService( |
| 455 const ExtensionServiceTestBase::ExtensionServiceInitParams& params) { | 455 const ExtensionServiceTestBase::ExtensionServiceInitParams& params) { |
| 456 TestingProfile::Builder profile_builder; | 456 TestingProfile::Builder profile_builder; |
| 457 // Create a PrefService that only contains user defined preference values. | 457 // Create a PrefService that only contains user defined preference values. |
| 458 PrefServiceMockBuilder builder; | 458 PrefServiceMockBuilder builder; |
| 459 builder.WithUserFilePrefs( | 459 builder.WithUserFilePrefs(params.pref_file, loop_.message_loop_proxy().get()); |
| 460 params.pref_file, loop_.message_loop_proxy()); | |
| 461 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( | 460 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( |
| 462 new user_prefs::PrefRegistrySyncable); | 461 new user_prefs::PrefRegistrySyncable); |
| 463 scoped_ptr<PrefServiceSyncable> prefs(builder.CreateSyncable(registry.get())); | 462 scoped_ptr<PrefServiceSyncable> prefs(builder.CreateSyncable(registry.get())); |
| 464 chrome::RegisterUserPrefs(registry.get()); | 463 chrome::RegisterUserPrefs(registry.get()); |
| 465 profile_builder.SetPrefService(prefs.Pass()); | 464 profile_builder.SetPrefService(prefs.Pass()); |
| 466 profile_builder.SetPath(params.profile_path); | 465 profile_builder.SetPath(params.profile_path); |
| 467 profile_ = profile_builder.Build(); | 466 profile_ = profile_builder.Build(); |
| 468 | 467 |
| 469 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( | 468 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( |
| 470 ExtensionSystem::Get(profile_.get())); | 469 ExtensionSystem::Get(profile_.get())); |
| 471 if (!params.is_first_run) { | 470 if (!params.is_first_run) { |
| 472 ExtensionPrefs* prefs = system->CreateExtensionPrefs( | 471 ExtensionPrefs* prefs = system->CreateExtensionPrefs( |
| 473 CommandLine::ForCurrentProcess(), | 472 CommandLine::ForCurrentProcess(), |
| 474 params.extensions_install_dir); | 473 params.extensions_install_dir); |
| 475 prefs->SetAlertSystemFirstRun(); | 474 prefs->SetAlertSystemFirstRun(); |
| 476 } | 475 } |
| 477 | 476 |
| 478 service_ = system->CreateExtensionService( | 477 service_ = system->CreateExtensionService( |
| 479 CommandLine::ForCurrentProcess(), | 478 CommandLine::ForCurrentProcess(), |
| 480 params.extensions_install_dir, | 479 params.extensions_install_dir, |
| 481 params.autoupdate_enabled); | 480 params.autoupdate_enabled); |
| 482 service_->SetFileTaskRunnerForTesting(loop_.message_loop_proxy()); | 481 service_->SetFileTaskRunnerForTesting(loop_.message_loop_proxy().get()); |
| 483 service_->set_extensions_enabled(true); | 482 service_->set_extensions_enabled(true); |
| 484 service_->set_show_extensions_prompts(false); | 483 service_->set_show_extensions_prompts(false); |
| 485 service_->set_install_updates_when_idle_for_test(false); | 484 service_->set_install_updates_when_idle_for_test(false); |
| 486 | 485 |
| 487 management_policy_ = | 486 management_policy_ = |
| 488 ExtensionSystem::Get(profile_.get())->management_policy(); | 487 ExtensionSystem::Get(profile_.get())->management_policy(); |
| 489 | 488 |
| 490 // When we start up, we want to make sure there is no external provider, | 489 // When we start up, we want to make sure there is no external provider, |
| 491 // since the ExtensionService on Windows will use the Registry as a default | 490 // since the ExtensionService on Windows will use the Registry as a default |
| 492 // provider and if there is something already registered there then it will | 491 // provider and if there is something already registered there then it will |
| (...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1873 std::set<std::string> host_permissions; | 1872 std::set<std::string> host_permissions; |
| 1874 | 1873 |
| 1875 // Test that the extension is disabled when an API permission is missing from | 1874 // Test that the extension is disabled when an API permission is missing from |
| 1876 // the extension's granted api permissions preference. (This simulates | 1875 // the extension's granted api permissions preference. (This simulates |
| 1877 // updating the browser to a version which recognizes a new API permission). | 1876 // updating the browser to a version which recognizes a new API permission). |
| 1878 SetPref(extension_id, "granted_permissions.api", | 1877 SetPref(extension_id, "granted_permissions.api", |
| 1879 new ListValue(), "granted_permissions.api"); | 1878 new ListValue(), "granted_permissions.api"); |
| 1880 service_->ReloadExtensions(); | 1879 service_->ReloadExtensions(); |
| 1881 | 1880 |
| 1882 EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 1881 EXPECT_EQ(1u, service_->disabled_extensions()->size()); |
| 1883 extension = *service_->disabled_extensions()->begin(); | 1882 extension = service_->disabled_extensions()->begin()->get(); |
| 1884 | 1883 |
| 1885 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); | 1884 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); |
| 1886 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); | 1885 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); |
| 1887 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1886 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); |
| 1888 | 1887 |
| 1889 // Now grant and re-enable the extension, making sure the prefs are updated. | 1888 // Now grant and re-enable the extension, making sure the prefs are updated. |
| 1890 service_->GrantPermissionsAndEnableExtension(extension); | 1889 service_->GrantPermissionsAndEnableExtension(extension); |
| 1891 | 1890 |
| 1892 ASSERT_FALSE(prefs->IsExtensionDisabled(extension_id)); | 1891 ASSERT_FALSE(prefs->IsExtensionDisabled(extension_id)); |
| 1893 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); | 1892 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1916 api_permissions->Append( | 1915 api_permissions->Append( |
| 1917 Value::CreateStringValue("tabs")); | 1916 Value::CreateStringValue("tabs")); |
| 1918 SetPref(extension_id, "granted_permissions.api", | 1917 SetPref(extension_id, "granted_permissions.api", |
| 1919 api_permissions, "granted_permissions.api"); | 1918 api_permissions, "granted_permissions.api"); |
| 1920 SetPrefStringSet( | 1919 SetPrefStringSet( |
| 1921 extension_id, "granted_permissions.scriptable_host", host_permissions); | 1920 extension_id, "granted_permissions.scriptable_host", host_permissions); |
| 1922 | 1921 |
| 1923 service_->ReloadExtensions(); | 1922 service_->ReloadExtensions(); |
| 1924 | 1923 |
| 1925 EXPECT_EQ(1u, service_->disabled_extensions()->size()); | 1924 EXPECT_EQ(1u, service_->disabled_extensions()->size()); |
| 1926 extension = *service_->disabled_extensions()->begin(); | 1925 extension = service_->disabled_extensions()->begin()->get(); |
| 1927 | 1926 |
| 1928 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); | 1927 ASSERT_TRUE(prefs->IsExtensionDisabled(extension_id)); |
| 1929 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); | 1928 ASSERT_FALSE(service_->IsExtensionEnabled(extension_id)); |
| 1930 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1929 ASSERT_TRUE(prefs->DidExtensionEscalatePermissions(extension_id)); |
| 1931 | 1930 |
| 1932 // Now grant and re-enable the extension, making sure the prefs are updated. | 1931 // Now grant and re-enable the extension, making sure the prefs are updated. |
| 1933 service_->GrantPermissionsAndEnableExtension(extension); | 1932 service_->GrantPermissionsAndEnableExtension(extension); |
| 1934 | 1933 |
| 1935 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); | 1934 ASSERT_TRUE(service_->IsExtensionEnabled(extension_id)); |
| 1936 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); | 1935 ASSERT_FALSE(prefs->DidExtensionEscalatePermissions(extension_id)); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2191 // Load. | 2190 // Load. |
| 2192 InitializeEmptyExtensionService(); | 2191 InitializeEmptyExtensionService(); |
| 2193 base::FilePath extension_path = data_dir_ | 2192 base::FilePath extension_path = data_dir_ |
| 2194 .AppendASCII("theme_i18n"); | 2193 .AppendASCII("theme_i18n"); |
| 2195 | 2194 |
| 2196 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); | 2195 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); |
| 2197 loop_.RunUntilIdle(); | 2196 loop_.RunUntilIdle(); |
| 2198 EXPECT_EQ(0u, GetErrors().size()); | 2197 EXPECT_EQ(0u, GetErrors().size()); |
| 2199 ASSERT_EQ(1u, loaded_.size()); | 2198 ASSERT_EQ(1u, loaded_.size()); |
| 2200 EXPECT_EQ(1u, service_->extensions()->size()); | 2199 EXPECT_EQ(1u, service_->extensions()->size()); |
| 2201 const Extension* theme = *service_->extensions()->begin(); | 2200 const Extension* theme = service_->extensions()->begin()->get(); |
| 2202 EXPECT_EQ("name", theme->name()); | 2201 EXPECT_EQ("name", theme->name()); |
| 2203 EXPECT_EQ("description", theme->description()); | 2202 EXPECT_EQ("description", theme->description()); |
| 2204 | 2203 |
| 2205 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a | 2204 // Cleanup the "Cached Theme.pak" file. Ideally, this would be installed in a |
| 2206 // temporary directory, but it automatically installs to the extension's | 2205 // temporary directory, but it automatically installs to the extension's |
| 2207 // directory, and we don't want to copy the whole extension for a unittest. | 2206 // directory, and we don't want to copy the whole extension for a unittest. |
| 2208 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename); | 2207 base::FilePath theme_file = extension_path.Append(chrome::kThemePackFilename); |
| 2209 ASSERT_TRUE(file_util::PathExists(theme_file)); | 2208 ASSERT_TRUE(file_util::PathExists(theme_file)); |
| 2210 ASSERT_TRUE(file_util::Delete(theme_file, false)); // Not recursive. | 2209 ASSERT_TRUE(file_util::Delete(theme_file, false)); // Not recursive. |
| 2211 } | 2210 } |
| (...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3387 // an extension key. | 3386 // an extension key. |
| 3388 extensions::ExtensionInfo extension_info( | 3387 extensions::ExtensionInfo extension_info( |
| 3389 &manifest, std::string(), path, Manifest::UNPACKED); | 3388 &manifest, std::string(), path, Manifest::UNPACKED); |
| 3390 | 3389 |
| 3391 // Ensure we can load it with no management policy in place. | 3390 // Ensure we can load it with no management policy in place. |
| 3392 management_policy_->UnregisterAllProviders(); | 3391 management_policy_->UnregisterAllProviders(); |
| 3393 EXPECT_EQ(0u, service_->extensions()->size()); | 3392 EXPECT_EQ(0u, service_->extensions()->size()); |
| 3394 extensions::InstalledLoader(service_).Load(extension_info, false); | 3393 extensions::InstalledLoader(service_).Load(extension_info, false); |
| 3395 EXPECT_EQ(1u, service_->extensions()->size()); | 3394 EXPECT_EQ(1u, service_->extensions()->size()); |
| 3396 | 3395 |
| 3397 const Extension* extension = *(service_->extensions()->begin()); | 3396 const Extension* extension = (service_->extensions()->begin())->get(); |
| 3398 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); | 3397 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); |
| 3399 EXPECT_EQ(0u, service_->extensions()->size()); | 3398 EXPECT_EQ(0u, service_->extensions()->size()); |
| 3400 | 3399 |
| 3401 // Ensure we cannot load it if management policy prohibits installation. | 3400 // Ensure we cannot load it if management policy prohibits installation. |
| 3402 extensions::TestManagementPolicyProvider provider_( | 3401 extensions::TestManagementPolicyProvider provider_( |
| 3403 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); | 3402 extensions::TestManagementPolicyProvider::PROHIBIT_LOAD); |
| 3404 management_policy_->RegisterProvider(&provider_); | 3403 management_policy_->RegisterProvider(&provider_); |
| 3405 | 3404 |
| 3406 extensions::InstalledLoader(service_).Load(extension_info, false); | 3405 extensions::InstalledLoader(service_).Load(extension_info, false); |
| 3407 EXPECT_EQ(0u, service_->extensions()->size()); | 3406 EXPECT_EQ(0u, service_->extensions()->size()); |
| (...skipping 2612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6020 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6019 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
| 6021 AddMockExternalProvider(provider); | 6020 AddMockExternalProvider(provider); |
| 6022 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6021 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
| 6023 | 6022 |
| 6024 service_->CheckForExternalUpdates(); | 6023 service_->CheckForExternalUpdates(); |
| 6025 loop_.RunUntilIdle(); | 6024 loop_.RunUntilIdle(); |
| 6026 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); | 6025 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); |
| 6027 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); | 6026 EXPECT_FALSE(extensions::HasExternalInstallBubble(service_)); |
| 6028 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); | 6027 EXPECT_FALSE(service_->IsExtensionEnabled(updates_from_webstore)); |
| 6029 } | 6028 } |
| OLD | NEW |