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.h" | 5 #include "chrome/browser/extensions/extension_service.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 1839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1850 InitializeEmptyExtensionService(); | 1850 InitializeEmptyExtensionService(); |
1851 base::FilePath input_directory = | 1851 base::FilePath input_directory = |
1852 data_dir() | 1852 data_dir() |
1853 .AppendASCII("good") | 1853 .AppendASCII("good") |
1854 .AppendASCII("Extensions") | 1854 .AppendASCII("Extensions") |
1855 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 1855 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
1856 .AppendASCII("1.0.0.0"); | 1856 .AppendASCII("1.0.0.0"); |
1857 | 1857 |
1858 base::ScopedTempDir temp_dir; | 1858 base::ScopedTempDir temp_dir; |
1859 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 1859 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
1860 base::FilePath output_directory = temp_dir.path(); | 1860 base::FilePath output_directory = temp_dir.GetPath(); |
1861 | 1861 |
1862 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 1862 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
1863 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); | 1863 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); |
1864 | 1864 |
1865 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 1865 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
1866 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), | 1866 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), |
1867 privkey_path, ExtensionCreator::kNoRunFlags)); | 1867 privkey_path, ExtensionCreator::kNoRunFlags)); |
1868 ASSERT_TRUE(base::PathExists(crx_path)); | 1868 ASSERT_TRUE(base::PathExists(crx_path)); |
1869 ASSERT_TRUE(base::PathExists(privkey_path)); | 1869 ASSERT_TRUE(base::PathExists(privkey_path)); |
1870 | 1870 |
(...skipping 19 matching lines...) Expand all Loading... |
1890 creator.reset(new ExtensionCreator()); | 1890 creator.reset(new ExtensionCreator()); |
1891 ASSERT_FALSE( | 1891 ASSERT_FALSE( |
1892 creator->Run(base::FilePath(), base::FilePath(), base::FilePath(), | 1892 creator->Run(base::FilePath(), base::FilePath(), base::FilePath(), |
1893 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 1893 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
1894 | 1894 |
1895 // Try packing an empty directory. Should fail because an empty directory is | 1895 // Try packing an empty directory. Should fail because an empty directory is |
1896 // not a valid extension. | 1896 // not a valid extension. |
1897 base::ScopedTempDir temp_dir2; | 1897 base::ScopedTempDir temp_dir2; |
1898 ASSERT_TRUE(temp_dir2.CreateUniqueTempDir()); | 1898 ASSERT_TRUE(temp_dir2.CreateUniqueTempDir()); |
1899 creator.reset(new ExtensionCreator()); | 1899 creator.reset(new ExtensionCreator()); |
1900 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, | 1900 ASSERT_FALSE(creator->Run(temp_dir2.GetPath(), crx_path, privkey_path, |
1901 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 1901 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
1902 | 1902 |
1903 // Try packing with an invalid manifest. | 1903 // Try packing with an invalid manifest. |
1904 std::string invalid_manifest_content = "I am not a manifest."; | 1904 std::string invalid_manifest_content = "I am not a manifest."; |
1905 ASSERT_TRUE(base::WriteFile( | 1905 ASSERT_TRUE(base::WriteFile( |
1906 temp_dir2.path().Append(extensions::kManifestFilename), | 1906 temp_dir2.GetPath().Append(extensions::kManifestFilename), |
1907 invalid_manifest_content.c_str(), invalid_manifest_content.size())); | 1907 invalid_manifest_content.c_str(), invalid_manifest_content.size())); |
1908 creator.reset(new ExtensionCreator()); | 1908 creator.reset(new ExtensionCreator()); |
1909 ASSERT_FALSE(creator->Run(temp_dir2.path(), crx_path, privkey_path, | 1909 ASSERT_FALSE(creator->Run(temp_dir2.GetPath(), crx_path, privkey_path, |
1910 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 1910 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
1911 | 1911 |
1912 // Try packing with a private key that is a valid key, but invalid for the | 1912 // Try packing with a private key that is a valid key, but invalid for the |
1913 // extension. | 1913 // extension. |
1914 base::FilePath bad_private_key_dir = | 1914 base::FilePath bad_private_key_dir = |
1915 data_dir().AppendASCII("bad_private_key"); | 1915 data_dir().AppendASCII("bad_private_key"); |
1916 crx_path = output_directory.AppendASCII("bad_private_key.crx"); | 1916 crx_path = output_directory.AppendASCII("bad_private_key.crx"); |
1917 privkey_path = data_dir().AppendASCII("bad_private_key.pem"); | 1917 privkey_path = data_dir().AppendASCII("bad_private_key.pem"); |
1918 ASSERT_FALSE(creator->Run(bad_private_key_dir, crx_path, base::FilePath(), | 1918 ASSERT_FALSE(creator->Run(bad_private_key_dir, crx_path, base::FilePath(), |
1919 privkey_path, ExtensionCreator::kOverwriteCRX)); | 1919 privkey_path, ExtensionCreator::kOverwriteCRX)); |
(...skipping 27 matching lines...) Expand all Loading... |
1947 }; | 1947 }; |
1948 const base::FilePath expected_private_key_names[] = { | 1948 const base::FilePath expected_private_key_names[] = { |
1949 base::FilePath(FILE_PATH_LITERAL("this.extensions.name.has.periods.pem")), | 1949 base::FilePath(FILE_PATH_LITERAL("this.extensions.name.has.periods.pem")), |
1950 base::FilePath( | 1950 base::FilePath( |
1951 FILE_PATH_LITERAL(".thisextensionsnamestartswithaperiod.pem")), | 1951 FILE_PATH_LITERAL(".thisextensionsnamestartswithaperiod.pem")), |
1952 base::FilePath(FILE_PATH_LITERAL("thisextensionhasaslashinitsname.pem")), | 1952 base::FilePath(FILE_PATH_LITERAL("thisextensionhasaslashinitsname.pem")), |
1953 }; | 1953 }; |
1954 | 1954 |
1955 for (size_t i = 0; i < arraysize(punctuated_names); ++i) { | 1955 for (size_t i = 0; i < arraysize(punctuated_names); ++i) { |
1956 SCOPED_TRACE(punctuated_names[i].value().c_str()); | 1956 SCOPED_TRACE(punctuated_names[i].value().c_str()); |
1957 base::FilePath output_dir = temp_dir.path().Append(punctuated_names[i]); | 1957 base::FilePath output_dir = temp_dir.GetPath().Append(punctuated_names[i]); |
1958 | 1958 |
1959 // Copy the extension into the output directory, as PackExtensionJob doesn't | 1959 // Copy the extension into the output directory, as PackExtensionJob doesn't |
1960 // let us choose where to output the packed extension. | 1960 // let us choose where to output the packed extension. |
1961 ASSERT_TRUE(base::CopyDirectory(input_directory, output_dir, true)); | 1961 ASSERT_TRUE(base::CopyDirectory(input_directory, output_dir, true)); |
1962 | 1962 |
1963 base::FilePath expected_crx_path = | 1963 base::FilePath expected_crx_path = |
1964 temp_dir.path().Append(expected_crx_names[i]); | 1964 temp_dir.GetPath().Append(expected_crx_names[i]); |
1965 base::FilePath expected_private_key_path = | 1965 base::FilePath expected_private_key_path = |
1966 temp_dir.path().Append(expected_private_key_names[i]); | 1966 temp_dir.GetPath().Append(expected_private_key_names[i]); |
1967 PackExtensionTestClient pack_client(expected_crx_path, | 1967 PackExtensionTestClient pack_client(expected_crx_path, |
1968 expected_private_key_path); | 1968 expected_private_key_path); |
1969 scoped_refptr<extensions::PackExtensionJob> packer( | 1969 scoped_refptr<extensions::PackExtensionJob> packer( |
1970 new extensions::PackExtensionJob(&pack_client, output_dir, | 1970 new extensions::PackExtensionJob(&pack_client, output_dir, |
1971 base::FilePath(), | 1971 base::FilePath(), |
1972 ExtensionCreator::kOverwriteCRX)); | 1972 ExtensionCreator::kOverwriteCRX)); |
1973 packer->Start(); | 1973 packer->Start(); |
1974 | 1974 |
1975 // The packer will post a notification task to the current thread's message | 1975 // The packer will post a notification task to the current thread's message |
1976 // loop when it is finished. We manually run the loop here so that we | 1976 // loop when it is finished. We manually run the loop here so that we |
1977 // block and catch the notification; otherwise, the process would exit. | 1977 // block and catch the notification; otherwise, the process would exit. |
1978 // This call to |Run()| is matched by a call to |Quit()| in the | 1978 // This call to |Run()| is matched by a call to |Quit()| in the |
1979 // |PackExtensionTestClient|'s notification handling code. | 1979 // |PackExtensionTestClient|'s notification handling code. |
1980 base::RunLoop().Run(); | 1980 base::RunLoop().Run(); |
1981 | 1981 |
1982 if (HasFatalFailure()) | 1982 if (HasFatalFailure()) |
1983 return; | 1983 return; |
1984 | 1984 |
1985 InstallCRX(expected_crx_path, INSTALL_NEW); | 1985 InstallCRX(expected_crx_path, INSTALL_NEW); |
1986 } | 1986 } |
1987 } | 1987 } |
1988 | 1988 |
1989 TEST_F(ExtensionServiceTest, PackExtensionContainingKeyFails) { | 1989 TEST_F(ExtensionServiceTest, PackExtensionContainingKeyFails) { |
1990 InitializeEmptyExtensionService(); | 1990 InitializeEmptyExtensionService(); |
1991 | 1991 |
1992 base::ScopedTempDir extension_temp_dir; | 1992 base::ScopedTempDir extension_temp_dir; |
1993 ASSERT_TRUE(extension_temp_dir.CreateUniqueTempDir()); | 1993 ASSERT_TRUE(extension_temp_dir.CreateUniqueTempDir()); |
1994 base::FilePath input_directory = extension_temp_dir.path().AppendASCII("ext"); | 1994 base::FilePath input_directory = |
| 1995 extension_temp_dir.GetPath().AppendASCII("ext"); |
1995 ASSERT_TRUE( | 1996 ASSERT_TRUE( |
1996 base::CopyDirectory(data_dir() | 1997 base::CopyDirectory(data_dir() |
1997 .AppendASCII("good") | 1998 .AppendASCII("good") |
1998 .AppendASCII("Extensions") | 1999 .AppendASCII("Extensions") |
1999 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 2000 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
2000 .AppendASCII("1.0.0.0"), | 2001 .AppendASCII("1.0.0.0"), |
2001 input_directory, | 2002 input_directory, |
2002 /*recursive=*/true)); | 2003 /*recursive=*/true)); |
2003 | 2004 |
2004 base::ScopedTempDir output_temp_dir; | 2005 base::ScopedTempDir output_temp_dir; |
2005 ASSERT_TRUE(output_temp_dir.CreateUniqueTempDir()); | 2006 ASSERT_TRUE(output_temp_dir.CreateUniqueTempDir()); |
2006 base::FilePath output_directory = output_temp_dir.path(); | 2007 base::FilePath output_directory = output_temp_dir.GetPath(); |
2007 | 2008 |
2008 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 2009 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
2009 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); | 2010 base::FilePath privkey_path(output_directory.AppendASCII("privkey.pem")); |
2010 | 2011 |
2011 // Pack the extension once to get a private key. | 2012 // Pack the extension once to get a private key. |
2012 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 2013 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
2013 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), | 2014 ASSERT_TRUE(creator->Run(input_directory, crx_path, base::FilePath(), |
2014 privkey_path, ExtensionCreator::kNoRunFlags)) | 2015 privkey_path, ExtensionCreator::kNoRunFlags)) |
2015 << creator->error_message(); | 2016 << creator->error_message(); |
2016 ASSERT_TRUE(base::PathExists(crx_path)); | 2017 ASSERT_TRUE(base::PathExists(crx_path)); |
(...skipping 25 matching lines...) Expand all Loading... |
2042 .AppendASCII("good") | 2043 .AppendASCII("good") |
2043 .AppendASCII("Extensions") | 2044 .AppendASCII("Extensions") |
2044 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 2045 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
2045 .AppendASCII("1.0.0.0"); | 2046 .AppendASCII("1.0.0.0"); |
2046 base::FilePath privkey_path( | 2047 base::FilePath privkey_path( |
2047 data_dir().AppendASCII("openssl_privkey_asn1.pem")); | 2048 data_dir().AppendASCII("openssl_privkey_asn1.pem")); |
2048 ASSERT_TRUE(base::PathExists(privkey_path)); | 2049 ASSERT_TRUE(base::PathExists(privkey_path)); |
2049 | 2050 |
2050 base::ScopedTempDir temp_dir; | 2051 base::ScopedTempDir temp_dir; |
2051 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 2052 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
2052 base::FilePath output_directory = temp_dir.path(); | 2053 base::FilePath output_directory = temp_dir.GetPath(); |
2053 | 2054 |
2054 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); | 2055 base::FilePath crx_path(output_directory.AppendASCII("ex1.crx")); |
2055 | 2056 |
2056 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); | 2057 std::unique_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
2057 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, | 2058 ASSERT_TRUE(creator->Run(input_directory, crx_path, privkey_path, |
2058 base::FilePath(), ExtensionCreator::kOverwriteCRX)); | 2059 base::FilePath(), ExtensionCreator::kOverwriteCRX)); |
2059 | 2060 |
2060 InstallCRX(crx_path, INSTALL_NEW); | 2061 InstallCRX(crx_path, INSTALL_NEW); |
2061 } | 2062 } |
2062 | 2063 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2142 | 2143 |
2143 // Paths to test data files. | 2144 // Paths to test data files. |
2144 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json"); | 2145 base::FilePath source_manifest = source_data_dir.AppendASCII("manifest.json"); |
2145 ASSERT_TRUE(base::PathExists(source_manifest)); | 2146 ASSERT_TRUE(base::PathExists(source_manifest)); |
2146 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png"); | 2147 base::FilePath source_icon = source_data_dir.AppendASCII("icon.png"); |
2147 ASSERT_TRUE(base::PathExists(source_icon)); | 2148 ASSERT_TRUE(base::PathExists(source_icon)); |
2148 | 2149 |
2149 // Set up the temporary extension directory. | 2150 // Set up the temporary extension directory. |
2150 base::ScopedTempDir temp; | 2151 base::ScopedTempDir temp; |
2151 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2152 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2152 base::FilePath extension_path = temp.path(); | 2153 base::FilePath extension_path = temp.GetPath(); |
2153 base::FilePath manifest = extension_path.Append( | 2154 base::FilePath manifest = extension_path.Append( |
2154 extensions::kManifestFilename); | 2155 extensions::kManifestFilename); |
2155 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png"); | 2156 base::FilePath icon_symlink = extension_path.AppendASCII("icon.png"); |
2156 base::CopyFile(source_manifest, manifest); | 2157 base::CopyFile(source_manifest, manifest); |
2157 base::CreateSymbolicLink(source_icon, icon_symlink); | 2158 base::CreateSymbolicLink(source_icon, icon_symlink); |
2158 | 2159 |
2159 // Load extension. | 2160 // Load extension. |
2160 InitializeEmptyExtensionService(); | 2161 InitializeEmptyExtensionService(); |
2161 extensions::UnpackedInstaller::Create(service())->Load(extension_path); | 2162 extensions::UnpackedInstaller::Create(service())->Load(extension_path); |
2162 base::RunLoop().RunUntilIdle(); | 2163 base::RunLoop().RunUntilIdle(); |
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2594 | 2595 |
2595 // Makes sure that LOAD extension types can downgrade. | 2596 // Makes sure that LOAD extension types can downgrade. |
2596 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { | 2597 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { |
2597 InitializeEmptyExtensionService(); | 2598 InitializeEmptyExtensionService(); |
2598 | 2599 |
2599 base::ScopedTempDir temp; | 2600 base::ScopedTempDir temp; |
2600 ASSERT_TRUE(temp.CreateUniqueTempDir()); | 2601 ASSERT_TRUE(temp.CreateUniqueTempDir()); |
2601 | 2602 |
2602 // We'll write the extension manifest dynamically to a temporary path | 2603 // We'll write the extension manifest dynamically to a temporary path |
2603 // to make it easier to change the version number. | 2604 // to make it easier to change the version number. |
2604 base::FilePath extension_path = temp.path(); | 2605 base::FilePath extension_path = temp.GetPath(); |
2605 base::FilePath manifest_path = | 2606 base::FilePath manifest_path = |
2606 extension_path.Append(extensions::kManifestFilename); | 2607 extension_path.Append(extensions::kManifestFilename); |
2607 ASSERT_FALSE(base::PathExists(manifest_path)); | 2608 ASSERT_FALSE(base::PathExists(manifest_path)); |
2608 | 2609 |
2609 // Start with version 2.0. | 2610 // Start with version 2.0. |
2610 base::DictionaryValue manifest; | 2611 base::DictionaryValue manifest; |
2611 manifest.SetString("version", "2.0"); | 2612 manifest.SetString("version", "2.0"); |
2612 manifest.SetString("name", "LOAD Downgrade Test"); | 2613 manifest.SetString("name", "LOAD Downgrade Test"); |
2613 manifest.SetInteger("manifest_version", 2); | 2614 manifest.SetInteger("manifest_version", 2); |
2614 | 2615 |
(...skipping 1358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3973 // Tests that extension supposed to be force installed but with conflicting | 3974 // Tests that extension supposed to be force installed but with conflicting |
3974 // required permissions cannot be installed. | 3975 // required permissions cannot be installed. |
3975 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionConflictsWithForceInstall) { | 3976 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionConflictsWithForceInstall) { |
3976 InitializeEmptyExtensionServiceWithTestingPrefs(); | 3977 InitializeEmptyExtensionServiceWithTestingPrefs(); |
3977 | 3978 |
3978 // Pack the crx file. | 3979 // Pack the crx file. |
3979 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | 3980 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); |
3980 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); | 3981 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); |
3981 base::ScopedTempDir temp_dir; | 3982 base::ScopedTempDir temp_dir; |
3982 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); | 3983 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); |
3983 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx"); | 3984 base::FilePath crx_path = temp_dir.GetPath().AppendASCII("temp.crx"); |
3984 | 3985 |
3985 PackCRX(path, pem_path, crx_path); | 3986 PackCRX(path, pem_path, crx_path); |
3986 | 3987 |
3987 { | 3988 { |
3988 // Block one of the required permissions. | 3989 // Block one of the required permissions. |
3989 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); | 3990 ManagementPrefUpdater pref(profile_->GetTestingPrefService()); |
3990 pref.AddBlockedPermission("*", "tabs"); | 3991 pref.AddBlockedPermission("*", "tabs"); |
3991 } | 3992 } |
3992 | 3993 |
3993 // Use MockExtensionProvider to simulate force installing extension. | 3994 // Use MockExtensionProvider to simulate force installing extension. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4073 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionPolicyUpdate) { | 4074 TEST_F(ExtensionServiceTest, PolicyBlockedPermissionPolicyUpdate) { |
4074 InitializeEmptyExtensionServiceWithTestingPrefs(); | 4075 InitializeEmptyExtensionServiceWithTestingPrefs(); |
4075 | 4076 |
4076 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); | 4077 base::FilePath path = data_dir().AppendASCII("permissions_blocklist"); |
4077 base::FilePath path2 = data_dir().AppendASCII("permissions_blocklist2"); | 4078 base::FilePath path2 = data_dir().AppendASCII("permissions_blocklist2"); |
4078 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); | 4079 base::FilePath pem_path = data_dir().AppendASCII("permissions_blocklist.pem"); |
4079 | 4080 |
4080 // Pack the crx file. | 4081 // Pack the crx file. |
4081 base::ScopedTempDir temp_dir; | 4082 base::ScopedTempDir temp_dir; |
4082 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); | 4083 EXPECT_TRUE(temp_dir.CreateUniqueTempDir()); |
4083 base::FilePath crx_path = temp_dir.path().AppendASCII("temp.crx"); | 4084 base::FilePath crx_path = temp_dir.GetPath().AppendASCII("temp.crx"); |
4084 | 4085 |
4085 PackCRX(path2, pem_path, crx_path); | 4086 PackCRX(path2, pem_path, crx_path); |
4086 | 4087 |
4087 // Install two arbitary extensions with specified manifest. | 4088 // Install two arbitary extensions with specified manifest. |
4088 std::string ext1 = PackAndInstallCRX(path, INSTALL_NEW)->id(); | 4089 std::string ext1 = PackAndInstallCRX(path, INSTALL_NEW)->id(); |
4089 std::string ext2 = PackAndInstallCRX(path2, INSTALL_NEW)->id(); | 4090 std::string ext2 = PackAndInstallCRX(path2, INSTALL_NEW)->id(); |
4090 ASSERT_NE(ext1, permissions_blocklist); | 4091 ASSERT_NE(ext1, permissions_blocklist); |
4091 ASSERT_NE(ext2, permissions_blocklist); | 4092 ASSERT_NE(ext2, permissions_blocklist); |
4092 ASSERT_NE(ext1, ext2); | 4093 ASSERT_NE(ext1, ext2); |
4093 | 4094 |
(...skipping 2340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6434 // post-first run. | 6435 // post-first run. |
6435 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6436 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6436 params.is_first_run = false; | 6437 params.is_first_run = false; |
6437 InitializeExtensionService(params); | 6438 InitializeExtensionService(params); |
6438 | 6439 |
6439 MockExtensionProvider* provider = | 6440 MockExtensionProvider* provider = |
6440 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6441 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6441 AddMockExternalProvider(provider); | 6442 AddMockExternalProvider(provider); |
6442 | 6443 |
6443 std::vector<BubbleErrorsTestData> data; | 6444 std::vector<BubbleErrorsTestData> data; |
6444 data.push_back( | 6445 data.push_back(BubbleErrorsTestData( |
6445 BubbleErrorsTestData(updates_from_webstore, "1", | 6446 updates_from_webstore, "1", |
6446 temp_dir().path().AppendASCII("webstore.crx"), 1u)); | 6447 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); |
6447 data.push_back( | 6448 data.push_back(BubbleErrorsTestData( |
6448 BubbleErrorsTestData(updates_from_webstore2, "1", | 6449 updates_from_webstore2, "1", |
6449 temp_dir().path().AppendASCII("webstore2.crx"), 2u)); | 6450 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); |
6450 data.push_back(BubbleErrorsTestData(good_crx, "1.0.0.0", | 6451 data.push_back(BubbleErrorsTestData(good_crx, "1.0.0.0", |
6451 data_dir().AppendASCII("good.crx"), 2u)); | 6452 data_dir().AppendASCII("good.crx"), 2u)); |
6452 | 6453 |
6453 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6454 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6454 data_dir().AppendASCII("update_from_webstore.pem"), data[0].crx_path); | 6455 data_dir().AppendASCII("update_from_webstore.pem"), data[0].crx_path); |
6455 PackCRX(data_dir().AppendASCII("update_from_webstore2"), | 6456 PackCRX(data_dir().AppendASCII("update_from_webstore2"), |
6456 data_dir().AppendASCII("update_from_webstore2.pem"), | 6457 data_dir().AppendASCII("update_from_webstore2.pem"), |
6457 data[1].crx_path); | 6458 data[1].crx_path); |
6458 | 6459 |
6459 // Install extensions from |data| one by one and expect each of them to result | 6460 // Install extensions from |data| one by one and expect each of them to result |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6503 ->external_install_manager() | 6504 ->external_install_manager() |
6504 ->has_currently_visible_install_alert()); | 6505 ->has_currently_visible_install_alert()); |
6505 EXPECT_EQ(0u, GetExternalInstallBubbleCount(service())); | 6506 EXPECT_EQ(0u, GetExternalInstallBubbleCount(service())); |
6506 EXPECT_FALSE(HasExternalInstallErrors(service())); | 6507 EXPECT_FALSE(HasExternalInstallErrors(service())); |
6507 | 6508 |
6508 // Add a new webstore install. Verify that this shows an error bubble since | 6509 // Add a new webstore install. Verify that this shows an error bubble since |
6509 // there are no error bubbles pending at this point. Also verify that the | 6510 // there are no error bubbles pending at this point. Also verify that the |
6510 // error bubble is for this newly added extension. | 6511 // error bubble is for this newly added extension. |
6511 { | 6512 { |
6512 base::FilePath webstore_crx_three = | 6513 base::FilePath webstore_crx_three = |
6513 temp_dir().path().AppendASCII("webstore3.crx"); | 6514 temp_dir().GetPath().AppendASCII("webstore3.crx"); |
6514 PackCRX(data_dir().AppendASCII("update_from_webstore3"), | 6515 PackCRX(data_dir().AppendASCII("update_from_webstore3"), |
6515 data_dir().AppendASCII("update_from_webstore3.pem"), | 6516 data_dir().AppendASCII("update_from_webstore3.pem"), |
6516 webstore_crx_three); | 6517 webstore_crx_three); |
6517 | 6518 |
6518 content::WindowedNotificationObserver global_error_observer( | 6519 content::WindowedNotificationObserver global_error_observer( |
6519 chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, | 6520 chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, |
6520 content::NotificationService::AllSources()); | 6521 content::NotificationService::AllSources()); |
6521 content::WindowedNotificationObserver observer( | 6522 content::WindowedNotificationObserver observer( |
6522 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6523 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
6523 content::NotificationService::AllSources()); | 6524 content::NotificationService::AllSources()); |
6524 provider->UpdateOrAddExtension( | 6525 provider->UpdateOrAddExtension( |
6525 updates_from_webstore3, "1", | 6526 updates_from_webstore3, "1", |
6526 temp_dir().path().AppendASCII("webstore3.crx")); | 6527 temp_dir().GetPath().AppendASCII("webstore3.crx")); |
6527 service()->CheckForExternalUpdates(); | 6528 service()->CheckForExternalUpdates(); |
6528 observer.Wait(); | 6529 observer.Wait(); |
6529 // Make sure ExternalInstallError::OnDialogReady() fires. | 6530 // Make sure ExternalInstallError::OnDialogReady() fires. |
6530 global_error_observer.Wait(); | 6531 global_error_observer.Wait(); |
6531 | 6532 |
6532 std::vector<ExternalInstallError*> errors = | 6533 std::vector<ExternalInstallError*> errors = |
6533 service_->external_install_manager()->GetErrorsForTesting(); | 6534 service_->external_install_manager()->GetErrorsForTesting(); |
6534 EXPECT_EQ(1u, errors.size()); | 6535 EXPECT_EQ(1u, errors.size()); |
6535 EXPECT_EQ(1u, GetExternalInstallBubbleCount(service())); | 6536 EXPECT_EQ(1u, GetExternalInstallBubbleCount(service())); |
6536 EXPECT_TRUE(service() | 6537 EXPECT_TRUE(service() |
(...skipping 16 matching lines...) Expand all Loading... |
6553 // post-first run. | 6554 // post-first run. |
6554 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6555 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6555 params.is_first_run = false; | 6556 params.is_first_run = false; |
6556 InitializeExtensionService(params); | 6557 InitializeExtensionService(params); |
6557 | 6558 |
6558 MockExtensionProvider* provider = | 6559 MockExtensionProvider* provider = |
6559 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6560 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6560 AddMockExternalProvider(provider); | 6561 AddMockExternalProvider(provider); |
6561 | 6562 |
6562 std::vector<BubbleErrorsTestData> data; | 6563 std::vector<BubbleErrorsTestData> data; |
6563 data.push_back( | 6564 data.push_back(BubbleErrorsTestData( |
6564 BubbleErrorsTestData(updates_from_webstore, "1", | 6565 updates_from_webstore, "1", |
6565 temp_dir().path().AppendASCII("webstore.crx"), 1u)); | 6566 temp_dir().GetPath().AppendASCII("webstore.crx"), 1u)); |
6566 data.push_back( | 6567 data.push_back(BubbleErrorsTestData( |
6567 BubbleErrorsTestData(updates_from_webstore2, "1", | 6568 updates_from_webstore2, "1", |
6568 temp_dir().path().AppendASCII("webstore2.crx"), 2u)); | 6569 temp_dir().GetPath().AppendASCII("webstore2.crx"), 2u)); |
6569 | 6570 |
6570 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6571 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6571 data_dir().AppendASCII("update_from_webstore.pem"), data[0].crx_path); | 6572 data_dir().AppendASCII("update_from_webstore.pem"), data[0].crx_path); |
6572 PackCRX(data_dir().AppendASCII("update_from_webstore2"), | 6573 PackCRX(data_dir().AppendASCII("update_from_webstore2"), |
6573 data_dir().AppendASCII("update_from_webstore2.pem"), | 6574 data_dir().AppendASCII("update_from_webstore2.pem"), |
6574 data[1].crx_path); | 6575 data[1].crx_path); |
6575 { | 6576 { |
6576 content::WindowedNotificationObserver global_error_observer( | 6577 content::WindowedNotificationObserver global_error_observer( |
6577 chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, | 6578 chrome::NOTIFICATION_GLOBAL_ERRORS_CHANGED, |
6578 content::NotificationService::AllSources()); | 6579 content::NotificationService::AllSources()); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6647 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { | 6648 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreOldProfile) { |
6648 FeatureSwitch::ScopedOverride prompt( | 6649 FeatureSwitch::ScopedOverride prompt( |
6649 FeatureSwitch::prompt_for_external_extensions(), true); | 6650 FeatureSwitch::prompt_for_external_extensions(), true); |
6650 | 6651 |
6651 // This sets up the ExtensionPrefs used by our ExtensionService to be | 6652 // This sets up the ExtensionPrefs used by our ExtensionService to be |
6652 // post-first run. | 6653 // post-first run. |
6653 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6654 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6654 params.is_first_run = false; | 6655 params.is_first_run = false; |
6655 InitializeExtensionService(params); | 6656 InitializeExtensionService(params); |
6656 | 6657 |
6657 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6658 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
6658 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6659 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6659 data_dir().AppendASCII("update_from_webstore.pem"), | 6660 data_dir().AppendASCII("update_from_webstore.pem"), |
6660 crx_path); | 6661 crx_path); |
6661 | 6662 |
6662 MockExtensionProvider* provider = | 6663 MockExtensionProvider* provider = |
6663 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6664 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6664 AddMockExternalProvider(provider); | 6665 AddMockExternalProvider(provider); |
6665 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6666 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6666 | 6667 |
6667 content::WindowedNotificationObserver observer( | 6668 content::WindowedNotificationObserver observer( |
6668 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 6669 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
6669 content::NotificationService::AllSources()); | 6670 content::NotificationService::AllSources()); |
6670 service()->CheckForExternalUpdates(); | 6671 service()->CheckForExternalUpdates(); |
6671 observer.Wait(); | 6672 observer.Wait(); |
6672 EXPECT_TRUE(HasExternalInstallErrors(service())); | 6673 EXPECT_TRUE(HasExternalInstallErrors(service())); |
6673 ASSERT_TRUE(GetError(updates_from_webstore)); | 6674 ASSERT_TRUE(GetError(updates_from_webstore)); |
6674 EXPECT_EQ(ExternalInstallError::BUBBLE_ALERT, | 6675 EXPECT_EQ(ExternalInstallError::BUBBLE_ALERT, |
6675 GetError(updates_from_webstore)->alert_type()); | 6676 GetError(updates_from_webstore)->alert_type()); |
6676 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); | 6677 EXPECT_FALSE(service()->IsExtensionEnabled(updates_from_webstore)); |
6677 } | 6678 } |
6678 | 6679 |
6679 // Test that there is no bubble for external extensions if the profile is new. | 6680 // Test that there is no bubble for external extensions if the profile is new. |
6680 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { | 6681 TEST_F(ExtensionServiceTest, ExternalInstallUpdatesFromWebstoreNewProfile) { |
6681 FeatureSwitch::ScopedOverride prompt( | 6682 FeatureSwitch::ScopedOverride prompt( |
6682 FeatureSwitch::prompt_for_external_extensions(), true); | 6683 FeatureSwitch::prompt_for_external_extensions(), true); |
6683 | 6684 |
6684 InitializeEmptyExtensionService(); | 6685 InitializeEmptyExtensionService(); |
6685 | 6686 |
6686 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6687 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
6687 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6688 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6688 data_dir().AppendASCII("update_from_webstore.pem"), | 6689 data_dir().AppendASCII("update_from_webstore.pem"), |
6689 crx_path); | 6690 crx_path); |
6690 | 6691 |
6691 MockExtensionProvider* provider = | 6692 MockExtensionProvider* provider = |
6692 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); | 6693 new MockExtensionProvider(service(), Manifest::EXTERNAL_PREF); |
6693 AddMockExternalProvider(provider); | 6694 AddMockExternalProvider(provider); |
6694 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6695 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6695 | 6696 |
6696 content::WindowedNotificationObserver observer( | 6697 content::WindowedNotificationObserver observer( |
(...skipping 11 matching lines...) Expand all Loading... |
6708 // Test that clicking to remove the extension on an external install warning | 6709 // Test that clicking to remove the extension on an external install warning |
6709 // uninstalls the extension. | 6710 // uninstalls the extension. |
6710 TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) { | 6711 TEST_F(ExtensionServiceTest, ExternalInstallClickToRemove) { |
6711 FeatureSwitch::ScopedOverride prompt( | 6712 FeatureSwitch::ScopedOverride prompt( |
6712 FeatureSwitch::prompt_for_external_extensions(), true); | 6713 FeatureSwitch::prompt_for_external_extensions(), true); |
6713 | 6714 |
6714 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6715 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6715 params.is_first_run = false; | 6716 params.is_first_run = false; |
6716 InitializeExtensionService(params); | 6717 InitializeExtensionService(params); |
6717 | 6718 |
6718 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6719 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
6719 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6720 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6720 data_dir().AppendASCII("update_from_webstore.pem"), | 6721 data_dir().AppendASCII("update_from_webstore.pem"), |
6721 crx_path); | 6722 crx_path); |
6722 | 6723 |
6723 MockExtensionProvider* provider = | 6724 MockExtensionProvider* provider = |
6724 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6725 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6725 AddMockExternalProvider(provider); | 6726 AddMockExternalProvider(provider); |
6726 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6727 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6727 | 6728 |
6728 content::WindowedNotificationObserver observer( | 6729 content::WindowedNotificationObserver observer( |
(...skipping 22 matching lines...) Expand all Loading... |
6751 // Test that clicking to keep the extension on an external install warning | 6752 // Test that clicking to keep the extension on an external install warning |
6752 // re-enables the extension. | 6753 // re-enables the extension. |
6753 TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) { | 6754 TEST_F(ExtensionServiceTest, ExternalInstallClickToKeep) { |
6754 FeatureSwitch::ScopedOverride prompt( | 6755 FeatureSwitch::ScopedOverride prompt( |
6755 FeatureSwitch::prompt_for_external_extensions(), true); | 6756 FeatureSwitch::prompt_for_external_extensions(), true); |
6756 | 6757 |
6757 ExtensionServiceInitParams params = CreateDefaultInitParams(); | 6758 ExtensionServiceInitParams params = CreateDefaultInitParams(); |
6758 params.is_first_run = false; | 6759 params.is_first_run = false; |
6759 InitializeExtensionService(params); | 6760 InitializeExtensionService(params); |
6760 | 6761 |
6761 base::FilePath crx_path = temp_dir().path().AppendASCII("webstore.crx"); | 6762 base::FilePath crx_path = temp_dir().GetPath().AppendASCII("webstore.crx"); |
6762 PackCRX(data_dir().AppendASCII("update_from_webstore"), | 6763 PackCRX(data_dir().AppendASCII("update_from_webstore"), |
6763 data_dir().AppendASCII("update_from_webstore.pem"), | 6764 data_dir().AppendASCII("update_from_webstore.pem"), |
6764 crx_path); | 6765 crx_path); |
6765 | 6766 |
6766 MockExtensionProvider* provider = | 6767 MockExtensionProvider* provider = |
6767 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); | 6768 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF); |
6768 AddMockExternalProvider(provider); | 6769 AddMockExternalProvider(provider); |
6769 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); | 6770 provider->UpdateOrAddExtension(updates_from_webstore, "1", crx_path); |
6770 | 6771 |
6771 content::WindowedNotificationObserver observer( | 6772 content::WindowedNotificationObserver observer( |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6916 | 6917 |
6917 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, | 6918 service()->Observe(chrome::NOTIFICATION_PROFILE_DESTRUCTION_STARTED, |
6918 content::Source<Profile>(profile()), | 6919 content::Source<Profile>(profile()), |
6919 content::NotificationService::NoDetails()); | 6920 content::NotificationService::NoDetails()); |
6920 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); | 6921 EXPECT_EQ(UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN, unloaded_reason_); |
6921 EXPECT_EQ(0u, registry()->enabled_extensions().size()); | 6922 EXPECT_EQ(0u, registry()->enabled_extensions().size()); |
6922 EXPECT_EQ(0u, registry()->disabled_extensions().size()); | 6923 EXPECT_EQ(0u, registry()->disabled_extensions().size()); |
6923 EXPECT_EQ(0u, registry()->terminated_extensions().size()); | 6924 EXPECT_EQ(0u, registry()->terminated_extensions().size()); |
6924 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); | 6925 EXPECT_EQ(0u, registry()->blacklisted_extensions().size()); |
6925 } | 6926 } |
OLD | NEW |