OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/json/json_file_value_serializer.h" | 6 #include "base/json/json_file_value_serializer.h" |
7 #include "base/message_loop/message_loop.h" | 7 #include "base/message_loop/message_loop.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "chrome/browser/extensions/extension_service.h" | 10 #include "chrome/browser/extensions/extension_service.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 management_policy_)); | 47 management_policy_)); |
48 } | 48 } |
49 | 49 |
50 virtual void TearDown() OVERRIDE { | 50 virtual void TearDown() OVERRIDE { |
51 handler_.reset(); | 51 handler_.reset(); |
52 profile_.reset(); | 52 profile_.reset(); |
53 // Execute any pending deletion tasks. | 53 // Execute any pending deletion tasks. |
54 message_loop_.RunUntilIdle(); | 54 message_loop_.RunUntilIdle(); |
55 } | 55 } |
56 | 56 |
57 static DictionaryValue* DeserializeJSONTestData(const base::FilePath& path, | 57 static base::DictionaryValue* DeserializeJSONTestData( |
| 58 const base::FilePath& path, |
58 std::string *error) { | 59 std::string *error) { |
59 Value* value; | 60 base::Value* value; |
60 | 61 |
61 JSONFileValueSerializer serializer(path); | 62 JSONFileValueSerializer serializer(path); |
62 value = serializer.Deserialize(NULL, error); | 63 value = serializer.Deserialize(NULL, error); |
63 | 64 |
64 return static_cast<DictionaryValue*>(value); | 65 return static_cast<base::DictionaryValue*>(value); |
65 } | 66 } |
66 | 67 |
67 DictionaryValue* CreateExtensionDetailViewFromPath( | 68 base::DictionaryValue* CreateExtensionDetailViewFromPath( |
68 const base::FilePath& extension_path, | 69 const base::FilePath& extension_path, |
69 const std::vector<ExtensionPage>& pages, | 70 const std::vector<ExtensionPage>& pages, |
70 Manifest::Location location) { | 71 Manifest::Location location) { |
71 std::string error; | 72 std::string error; |
72 | 73 |
73 base::FilePath manifest_path = extension_path.Append(kManifestFilename); | 74 base::FilePath manifest_path = extension_path.Append(kManifestFilename); |
74 scoped_ptr<DictionaryValue> extension_data(DeserializeJSONTestData( | 75 scoped_ptr<base::DictionaryValue> extension_data(DeserializeJSONTestData( |
75 manifest_path, &error)); | 76 manifest_path, &error)); |
76 EXPECT_EQ("", error); | 77 EXPECT_EQ("", error); |
77 | 78 |
78 scoped_refptr<Extension> extension(Extension::Create( | 79 scoped_refptr<Extension> extension(Extension::Create( |
79 extension_path, location, *extension_data, Extension::REQUIRE_KEY, | 80 extension_path, location, *extension_data, Extension::REQUIRE_KEY, |
80 &error)); | 81 &error)); |
81 EXPECT_TRUE(extension.get()); | 82 EXPECT_TRUE(extension.get()); |
82 EXPECT_EQ("", error); | 83 EXPECT_EQ("", error); |
83 | 84 |
84 return handler_->CreateExtensionDetailValue(extension.get(), pages, NULL); | 85 return handler_->CreateExtensionDetailValue(extension.get(), pages, NULL); |
85 } | 86 } |
86 | 87 |
87 void CompareExpectedAndActualOutput( | 88 void CompareExpectedAndActualOutput( |
88 const base::FilePath& extension_path, | 89 const base::FilePath& extension_path, |
89 const std::vector<ExtensionPage>& pages, | 90 const std::vector<ExtensionPage>& pages, |
90 const base::FilePath& expected_output_path) { | 91 const base::FilePath& expected_output_path) { |
91 std::string error; | 92 std::string error; |
92 | 93 |
93 scoped_ptr<DictionaryValue> expected_output_data(DeserializeJSONTestData( | 94 scoped_ptr<base::DictionaryValue> expected_output_data( |
94 expected_output_path, &error)); | 95 DeserializeJSONTestData(expected_output_path, &error)); |
95 EXPECT_EQ("", error); | 96 EXPECT_EQ("", error); |
96 | 97 |
97 // Produce test output. | 98 // Produce test output. |
98 scoped_ptr<DictionaryValue> actual_output_data( | 99 scoped_ptr<base::DictionaryValue> actual_output_data( |
99 CreateExtensionDetailViewFromPath( | 100 CreateExtensionDetailViewFromPath( |
100 extension_path, pages, Manifest::INVALID_LOCATION)); | 101 extension_path, pages, Manifest::INVALID_LOCATION)); |
101 | 102 |
102 // Compare the outputs. | 103 // Compare the outputs. |
103 // Ignore unknown fields in the actual output data. | 104 // Ignore unknown fields in the actual output data. |
104 std::string paths_details = " - expected (" + | 105 std::string paths_details = " - expected (" + |
105 expected_output_path.MaybeAsASCII() + ") vs. actual (" + | 106 expected_output_path.MaybeAsASCII() + ") vs. actual (" + |
106 extension_path.MaybeAsASCII() + ")"; | 107 extension_path.MaybeAsASCII() + ")"; |
107 for (DictionaryValue::Iterator field(*expected_output_data); | 108 for (base::DictionaryValue::Iterator field(*expected_output_data); |
108 !field.IsAtEnd(); field.Advance()) { | 109 !field.IsAtEnd(); field.Advance()) { |
109 const Value* expected_value = &field.value(); | 110 const base::Value* expected_value = &field.value(); |
110 Value* actual_value = NULL; | 111 base::Value* actual_value = NULL; |
111 EXPECT_TRUE(actual_output_data->Get(field.key(), &actual_value)) << | 112 EXPECT_TRUE(actual_output_data->Get(field.key(), &actual_value)) << |
112 field.key() + " is missing" + paths_details; | 113 field.key() + " is missing" + paths_details; |
113 EXPECT_TRUE(expected_value->Equals(actual_value)) << field.key() + | 114 EXPECT_TRUE(expected_value->Equals(actual_value)) << field.key() + |
114 paths_details; | 115 paths_details; |
115 } | 116 } |
116 } | 117 } |
117 | 118 |
118 base::MessageLoop message_loop_; | 119 base::MessageLoop message_loop_; |
119 content::TestBrowserThread ui_thread_; | 120 content::TestBrowserThread ui_thread_; |
120 content::TestBrowserThread file_thread_; | 121 content::TestBrowserThread file_thread_; |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); | 200 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); |
200 | 201 |
201 extension_path = data_test_dir_path.AppendASCII("extensions") | 202 extension_path = data_test_dir_path.AppendASCII("extensions") |
202 .AppendASCII("good") | 203 .AppendASCII("good") |
203 .AppendASCII("Extensions") | 204 .AppendASCII("Extensions") |
204 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 205 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
205 .AppendASCII("1.0.0.0"); | 206 .AppendASCII("1.0.0.0"); |
206 | 207 |
207 std::vector<ExtensionPage> pages; | 208 std::vector<ExtensionPage> pages; |
208 | 209 |
209 scoped_ptr<DictionaryValue> extension_details( | 210 scoped_ptr<base::DictionaryValue> extension_details( |
210 CreateExtensionDetailViewFromPath( | 211 CreateExtensionDetailViewFromPath( |
211 extension_path, pages, Manifest::UNPACKED)); | 212 extension_path, pages, Manifest::UNPACKED)); |
212 | 213 |
213 bool ui_allow_reload = false; | 214 bool ui_allow_reload = false; |
214 bool ui_is_unpacked = false; | 215 bool ui_is_unpacked = false; |
215 base::FilePath::StringType ui_path; | 216 base::FilePath::StringType ui_path; |
216 | 217 |
217 EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); | 218 EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); |
218 EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); | 219 EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); |
219 EXPECT_TRUE(extension_details->GetString("path", &ui_path)); | 220 EXPECT_TRUE(extension_details->GetString("path", &ui_path)); |
(...skipping 11 matching lines...) Expand all Loading... |
231 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); | 232 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); |
232 | 233 |
233 extension_path = data_test_dir_path.AppendASCII("extensions") | 234 extension_path = data_test_dir_path.AppendASCII("extensions") |
234 .AppendASCII("good") | 235 .AppendASCII("good") |
235 .AppendASCII("Extensions") | 236 .AppendASCII("Extensions") |
236 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 237 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
237 .AppendASCII("1.0.0.0"); | 238 .AppendASCII("1.0.0.0"); |
238 | 239 |
239 std::vector<ExtensionPage> pages; | 240 std::vector<ExtensionPage> pages; |
240 | 241 |
241 scoped_ptr<DictionaryValue> extension_details( | 242 scoped_ptr<base::DictionaryValue> extension_details( |
242 CreateExtensionDetailViewFromPath( | 243 CreateExtensionDetailViewFromPath( |
243 extension_path, pages, Manifest::EXTERNAL_PREF)); | 244 extension_path, pages, Manifest::EXTERNAL_PREF)); |
244 | 245 |
245 bool ui_allow_reload = true; | 246 bool ui_allow_reload = true; |
246 bool ui_is_unpacked = true; | 247 bool ui_is_unpacked = true; |
247 base::FilePath::StringType ui_path; | 248 base::FilePath::StringType ui_path; |
248 | 249 |
249 EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); | 250 EXPECT_TRUE(extension_details->GetBoolean("allow_reload", &ui_allow_reload)); |
250 EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); | 251 EXPECT_TRUE(extension_details->GetBoolean("isUnpacked", &ui_is_unpacked)); |
251 EXPECT_FALSE(extension_details->GetString("path", &ui_path)); | 252 EXPECT_FALSE(extension_details->GetString("path", &ui_path)); |
252 EXPECT_FALSE(ui_allow_reload); | 253 EXPECT_FALSE(ui_allow_reload); |
253 EXPECT_FALSE(ui_is_unpacked); | 254 EXPECT_FALSE(ui_is_unpacked); |
254 } | 255 } |
255 | 256 |
256 // Test that the extension path is correctly propagated into the extension | 257 // Test that the extension path is correctly propagated into the extension |
257 // details. | 258 // details. |
258 TEST_F(ExtensionUITest, PathPropagation) { | 259 TEST_F(ExtensionUITest, PathPropagation) { |
259 base::FilePath data_test_dir_path, extension_path; | 260 base::FilePath data_test_dir_path, extension_path; |
260 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); | 261 EXPECT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &data_test_dir_path)); |
261 | 262 |
262 extension_path = data_test_dir_path.AppendASCII("extensions") | 263 extension_path = data_test_dir_path.AppendASCII("extensions") |
263 .AppendASCII("good") | 264 .AppendASCII("good") |
264 .AppendASCII("Extensions") | 265 .AppendASCII("Extensions") |
265 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") | 266 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
266 .AppendASCII("1.0.0.0"); | 267 .AppendASCII("1.0.0.0"); |
267 | 268 |
268 std::vector<ExtensionPage> pages; | 269 std::vector<ExtensionPage> pages; |
269 | 270 |
270 scoped_ptr<DictionaryValue> extension_details( | 271 scoped_ptr<base::DictionaryValue> extension_details( |
271 CreateExtensionDetailViewFromPath( | 272 CreateExtensionDetailViewFromPath( |
272 extension_path, pages, Manifest::UNPACKED)); | 273 extension_path, pages, Manifest::UNPACKED)); |
273 | 274 |
274 base::FilePath::StringType ui_path; | 275 base::FilePath::StringType ui_path; |
275 | 276 |
276 EXPECT_TRUE(extension_details->GetString("path", &ui_path)); | 277 EXPECT_TRUE(extension_details->GetString("path", &ui_path)); |
277 EXPECT_EQ(extension_path, base::FilePath(ui_path)); | 278 EXPECT_EQ(extension_path, base::FilePath(ui_path)); |
278 } | 279 } |
279 | 280 |
280 } // namespace extensions | 281 } // namespace extensions |
OLD | NEW |