| 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/test/chromedriver/chrome_launcher.h" | 5 #include "chrome/test/chromedriver/chrome_launcher.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/base64.h" | 9 #include "base/base64.h" |
| 10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 base::ScopedTempDir extension_dir; | 53 base::ScopedTempDir extension_dir; |
| 54 Switches switches; | 54 Switches switches; |
| 55 std::vector<std::string> bg_pages; | 55 std::vector<std::string> bg_pages; |
| 56 | 56 |
| 57 ASSERT_TRUE(AddExtensionForInstall("no_key_in_manifest.crx", &extensions)); | 57 ASSERT_TRUE(AddExtensionForInstall("no_key_in_manifest.crx", &extensions)); |
| 58 ASSERT_TRUE(AddExtensionForInstall("same_key_as_header.crx", &extensions)); | 58 ASSERT_TRUE(AddExtensionForInstall("same_key_as_header.crx", &extensions)); |
| 59 ASSERT_TRUE(AddExtensionForInstall("diff_key_from_header.crx", &extensions)); | 59 ASSERT_TRUE(AddExtensionForInstall("diff_key_from_header.crx", &extensions)); |
| 60 | 60 |
| 61 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); | 61 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); |
| 62 | 62 |
| 63 Status status = internal::ProcessExtensions(extensions, extension_dir.path(), | 63 Status status = internal::ProcessExtensions( |
| 64 false, &switches, &bg_pages); | 64 extensions, extension_dir.GetPath(), false, &switches, &bg_pages); |
| 65 | 65 |
| 66 ASSERT_EQ(kOk, status.code()) << status.message(); | 66 ASSERT_EQ(kOk, status.code()) << status.message(); |
| 67 ASSERT_EQ(3u, bg_pages.size()); | 67 ASSERT_EQ(3u, bg_pages.size()); |
| 68 ASSERT_EQ("chrome-extension://llphabdmknikmpmkioimgdfbohinlekl/" | 68 ASSERT_EQ("chrome-extension://llphabdmknikmpmkioimgdfbohinlekl/" |
| 69 "_generated_background_page.html", bg_pages[0]); | 69 "_generated_background_page.html", bg_pages[0]); |
| 70 ASSERT_EQ("chrome-extension://dfdeoklpcichfcnoaomfpagfiibhomnh/" | 70 ASSERT_EQ("chrome-extension://dfdeoklpcichfcnoaomfpagfiibhomnh/" |
| 71 "_generated_background_page.html", bg_pages[1]); | 71 "_generated_background_page.html", bg_pages[1]); |
| 72 ASSERT_EQ("chrome-extension://ioccpomhcpklobebcbeohnmffkmcokbm/" | 72 ASSERT_EQ("chrome-extension://ioccpomhcpklobebcbeohnmffkmcokbm/" |
| 73 "_generated_background_page.html", bg_pages[2]); | 73 "_generated_background_page.html", bg_pages[2]); |
| 74 } | 74 } |
| 75 | 75 |
| 76 TEST(ProcessExtensions, SingleExtensionWithBgPage) { | 76 TEST(ProcessExtensions, SingleExtensionWithBgPage) { |
| 77 std::vector<std::string> extensions; | 77 std::vector<std::string> extensions; |
| 78 ASSERT_TRUE(AddExtensionForInstall("ext_slow_loader.crx", &extensions)); | 78 ASSERT_TRUE(AddExtensionForInstall("ext_slow_loader.crx", &extensions)); |
| 79 | 79 |
| 80 base::ScopedTempDir extension_dir; | 80 base::ScopedTempDir extension_dir; |
| 81 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); | 81 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); |
| 82 | 82 |
| 83 Switches switches; | 83 Switches switches; |
| 84 std::vector<std::string> bg_pages; | 84 std::vector<std::string> bg_pages; |
| 85 Status status = internal::ProcessExtensions(extensions, extension_dir.path(), | 85 Status status = internal::ProcessExtensions( |
| 86 false, &switches, &bg_pages); | 86 extensions, extension_dir.GetPath(), false, &switches, &bg_pages); |
| 87 ASSERT_TRUE(status.IsOk()); | 87 ASSERT_TRUE(status.IsOk()); |
| 88 ASSERT_TRUE(switches.HasSwitch("load-extension")); | 88 ASSERT_TRUE(switches.HasSwitch("load-extension")); |
| 89 base::FilePath temp_ext_path(switches.GetSwitchValueNative("load-extension")); | 89 base::FilePath temp_ext_path(switches.GetSwitchValueNative("load-extension")); |
| 90 ASSERT_TRUE(base::PathExists(temp_ext_path)); | 90 ASSERT_TRUE(base::PathExists(temp_ext_path)); |
| 91 std::string manifest_txt; | 91 std::string manifest_txt; |
| 92 ASSERT_TRUE(base::ReadFileToString( | 92 ASSERT_TRUE(base::ReadFileToString( |
| 93 temp_ext_path.AppendASCII("manifest.json"), &manifest_txt)); | 93 temp_ext_path.AppendASCII("manifest.json"), &manifest_txt)); |
| 94 std::unique_ptr<base::Value> manifest = base::JSONReader::Read(manifest_txt); | 94 std::unique_ptr<base::Value> manifest = base::JSONReader::Read(manifest_txt); |
| 95 ASSERT_TRUE(manifest); | 95 ASSERT_TRUE(manifest); |
| 96 base::DictionaryValue* manifest_dict = NULL; | 96 base::DictionaryValue* manifest_dict = NULL; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 113 TEST(ProcessExtensions, MultipleExtensionsNoBgPages) { | 113 TEST(ProcessExtensions, MultipleExtensionsNoBgPages) { |
| 114 std::vector<std::string> extensions; | 114 std::vector<std::string> extensions; |
| 115 ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); | 115 ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); |
| 116 ASSERT_TRUE(AddExtensionForInstall("ext_test_2.crx", &extensions)); | 116 ASSERT_TRUE(AddExtensionForInstall("ext_test_2.crx", &extensions)); |
| 117 | 117 |
| 118 base::ScopedTempDir extension_dir; | 118 base::ScopedTempDir extension_dir; |
| 119 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); | 119 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); |
| 120 | 120 |
| 121 Switches switches; | 121 Switches switches; |
| 122 std::vector<std::string> bg_pages; | 122 std::vector<std::string> bg_pages; |
| 123 Status status = internal::ProcessExtensions(extensions, extension_dir.path(), | 123 Status status = internal::ProcessExtensions( |
| 124 false, &switches, &bg_pages); | 124 extensions, extension_dir.GetPath(), false, &switches, &bg_pages); |
| 125 ASSERT_TRUE(status.IsOk()); | 125 ASSERT_TRUE(status.IsOk()); |
| 126 ASSERT_TRUE(switches.HasSwitch("load-extension")); | 126 ASSERT_TRUE(switches.HasSwitch("load-extension")); |
| 127 base::CommandLine::StringType ext_paths = | 127 base::CommandLine::StringType ext_paths = |
| 128 switches.GetSwitchValueNative("load-extension"); | 128 switches.GetSwitchValueNative("load-extension"); |
| 129 std::vector<base::CommandLine::StringType> ext_path_list = | 129 std::vector<base::CommandLine::StringType> ext_path_list = |
| 130 base::SplitString(ext_paths, base::CommandLine::StringType(1, ','), | 130 base::SplitString(ext_paths, base::CommandLine::StringType(1, ','), |
| 131 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | 131 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); |
| 132 ASSERT_EQ(2u, ext_path_list.size()); | 132 ASSERT_EQ(2u, ext_path_list.size()); |
| 133 ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[0]))); | 133 ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[0]))); |
| 134 ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[1]))); | 134 ASSERT_TRUE(base::PathExists(base::FilePath(ext_path_list[1]))); |
| 135 ASSERT_EQ(0u, bg_pages.size()); | 135 ASSERT_EQ(0u, bg_pages.size()); |
| 136 } | 136 } |
| 137 | 137 |
| 138 TEST(ProcessExtensions, CommandLineExtensions) { | 138 TEST(ProcessExtensions, CommandLineExtensions) { |
| 139 std::vector<std::string> extensions; | 139 std::vector<std::string> extensions; |
| 140 ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); | 140 ASSERT_TRUE(AddExtensionForInstall("ext_test_1.crx", &extensions)); |
| 141 base::ScopedTempDir extension_dir; | 141 base::ScopedTempDir extension_dir; |
| 142 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); | 142 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); |
| 143 | 143 |
| 144 Switches switches; | 144 Switches switches; |
| 145 switches.SetSwitch("load-extension", "/a"); | 145 switches.SetSwitch("load-extension", "/a"); |
| 146 std::vector<std::string> bg_pages; | 146 std::vector<std::string> bg_pages; |
| 147 Status status = internal::ProcessExtensions(extensions, extension_dir.path(), | 147 Status status = internal::ProcessExtensions( |
| 148 false, &switches, &bg_pages); | 148 extensions, extension_dir.GetPath(), false, &switches, &bg_pages); |
| 149 ASSERT_EQ(kOk, status.code()); | 149 ASSERT_EQ(kOk, status.code()); |
| 150 base::FilePath::StringType load = switches.GetSwitchValueNative( | 150 base::FilePath::StringType load = switches.GetSwitchValueNative( |
| 151 "load-extension"); | 151 "load-extension"); |
| 152 ASSERT_EQ(FILE_PATH_LITERAL("/a,"), load.substr(0, 3)); | 152 ASSERT_EQ(FILE_PATH_LITERAL("/a,"), load.substr(0, 3)); |
| 153 ASSERT_TRUE(base::PathExists(base::FilePath(load.substr(3)))); | 153 ASSERT_TRUE(base::PathExists(base::FilePath(load.substr(3)))); |
| 154 } | 154 } |
| 155 | 155 |
| 156 namespace { | 156 namespace { |
| 157 | 157 |
| 158 void AssertEQ(const base::DictionaryValue& dict, const std::string& key, | 158 void AssertEQ(const base::DictionaryValue& dict, const std::string& key, |
| 159 const char* expected_value) { | 159 const char* expected_value) { |
| 160 std::string value; | 160 std::string value; |
| 161 ASSERT_TRUE(dict.GetString(key, &value)); | 161 ASSERT_TRUE(dict.GetString(key, &value)); |
| 162 ASSERT_STREQ(value.c_str(), expected_value); | 162 ASSERT_STREQ(value.c_str(), expected_value); |
| 163 } | 163 } |
| 164 | 164 |
| 165 } // namespace | 165 } // namespace |
| 166 | 166 |
| 167 TEST(PrepareUserDataDir, CustomPrefs) { | 167 TEST(PrepareUserDataDir, CustomPrefs) { |
| 168 base::ScopedTempDir temp_dir; | 168 base::ScopedTempDir temp_dir; |
| 169 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 169 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 170 | 170 |
| 171 base::DictionaryValue prefs; | 171 base::DictionaryValue prefs; |
| 172 prefs.SetString("myPrefsKey", "ok"); | 172 prefs.SetString("myPrefsKey", "ok"); |
| 173 prefs.SetStringWithoutPathExpansion("pref.sub", "1"); | 173 prefs.SetStringWithoutPathExpansion("pref.sub", "1"); |
| 174 base::DictionaryValue local_state; | 174 base::DictionaryValue local_state; |
| 175 local_state.SetString("myLocalKey", "ok"); | 175 local_state.SetString("myLocalKey", "ok"); |
| 176 local_state.SetStringWithoutPathExpansion("local.state.sub", "2"); | 176 local_state.SetStringWithoutPathExpansion("local.state.sub", "2"); |
| 177 Status status = internal::PrepareUserDataDir( | 177 Status status = |
| 178 temp_dir.path(), &prefs, &local_state); | 178 internal::PrepareUserDataDir(temp_dir.GetPath(), &prefs, &local_state); |
| 179 ASSERT_EQ(kOk, status.code()); | 179 ASSERT_EQ(kOk, status.code()); |
| 180 | 180 |
| 181 base::FilePath prefs_file = | 181 base::FilePath prefs_file = temp_dir.GetPath() |
| 182 temp_dir.path().AppendASCII(chrome::kInitialProfile).Append( | 182 .AppendASCII(chrome::kInitialProfile) |
| 183 chrome::kPreferencesFilename); | 183 .Append(chrome::kPreferencesFilename); |
| 184 std::string prefs_str; | 184 std::string prefs_str; |
| 185 ASSERT_TRUE(base::ReadFileToString(prefs_file, &prefs_str)); | 185 ASSERT_TRUE(base::ReadFileToString(prefs_file, &prefs_str)); |
| 186 std::unique_ptr<base::Value> prefs_value = base::JSONReader::Read(prefs_str); | 186 std::unique_ptr<base::Value> prefs_value = base::JSONReader::Read(prefs_str); |
| 187 const base::DictionaryValue* prefs_dict = NULL; | 187 const base::DictionaryValue* prefs_dict = NULL; |
| 188 ASSERT_TRUE(prefs_value->GetAsDictionary(&prefs_dict)); | 188 ASSERT_TRUE(prefs_value->GetAsDictionary(&prefs_dict)); |
| 189 AssertEQ(*prefs_dict, "myPrefsKey", "ok"); | 189 AssertEQ(*prefs_dict, "myPrefsKey", "ok"); |
| 190 AssertEQ(*prefs_dict, "pref.sub", "1"); | 190 AssertEQ(*prefs_dict, "pref.sub", "1"); |
| 191 | 191 |
| 192 base::FilePath local_state_file = | 192 base::FilePath local_state_file = |
| 193 temp_dir.path().Append(chrome::kLocalStateFilename); | 193 temp_dir.GetPath().Append(chrome::kLocalStateFilename); |
| 194 std::string local_state_str; | 194 std::string local_state_str; |
| 195 ASSERT_TRUE(base::ReadFileToString(local_state_file, &local_state_str)); | 195 ASSERT_TRUE(base::ReadFileToString(local_state_file, &local_state_str)); |
| 196 std::unique_ptr<base::Value> local_state_value = | 196 std::unique_ptr<base::Value> local_state_value = |
| 197 base::JSONReader::Read(local_state_str); | 197 base::JSONReader::Read(local_state_str); |
| 198 const base::DictionaryValue* local_state_dict = NULL; | 198 const base::DictionaryValue* local_state_dict = NULL; |
| 199 ASSERT_TRUE(local_state_value->GetAsDictionary(&local_state_dict)); | 199 ASSERT_TRUE(local_state_value->GetAsDictionary(&local_state_dict)); |
| 200 AssertEQ(*local_state_dict, "myLocalKey", "ok"); | 200 AssertEQ(*local_state_dict, "myLocalKey", "ok"); |
| 201 AssertEQ(*local_state_dict, "local.state.sub", "2"); | 201 AssertEQ(*local_state_dict, "local.state.sub", "2"); |
| 202 } | 202 } |
| OLD | NEW |