Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc

Issue 1092953004: [Extensions] Update developerPrivate API to use base-64 data urls for icons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/json/json_file_value_serializer.h" 5 #include "base/json/json_file_value_serializer.h"
6 #include "base/json/json_writer.h" 6 #include "base/json/json_writer.h"
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/extensions/api/developer_private/extension_info_generat or.h" 9 #include "chrome/browser/extensions/api/developer_private/extension_info_generat or.h"
10 #include "chrome/browser/extensions/api/developer_private/inspectable_views_find er.h" 10 #include "chrome/browser/extensions/api/developer_private/inspectable_views_find er.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 public: 48 public:
49 ExtensionInfoGeneratorUnitTest() {} 49 ExtensionInfoGeneratorUnitTest() {}
50 ~ExtensionInfoGeneratorUnitTest() override {} 50 ~ExtensionInfoGeneratorUnitTest() override {}
51 51
52 protected: 52 protected:
53 void SetUp() override { 53 void SetUp() override {
54 ExtensionServiceTestBase::SetUp(); 54 ExtensionServiceTestBase::SetUp();
55 InitializeEmptyExtensionService(); 55 InitializeEmptyExtensionService();
56 } 56 }
57 57
58 void OnInfosGenerated(linked_ptr<developer::ExtensionInfo>* info_out,
59 const ExtensionInfoGenerator::ExtensionInfoList& list) {
60 EXPECT_EQ(1u, list.size());
61 if (!list.empty())
62 *info_out = list[0];
63 quit_closure_.Run();
64 quit_closure_.Reset();
65 }
66
67 scoped_ptr<developer::ExtensionInfo> GenerateExtensionInfo(
68 const std::string& extension_id) {
69 linked_ptr<developer::ExtensionInfo> info;
70 base::RunLoop run_loop;
71 quit_closure_ = run_loop.QuitClosure();
72 scoped_ptr<ExtensionInfoGenerator> generator(
73 new ExtensionInfoGenerator(browser_context()));
74 generator->CreateExtensionInfo(
75 extension_id,
76 base::Bind(&ExtensionInfoGeneratorUnitTest::OnInfosGenerated,
77 base::Unretained(this),
78 base::Unretained(&info)));
79 run_loop.Run();
80 return make_scoped_ptr(info.release());
81 }
82
58 const scoped_refptr<const Extension> CreateExtension( 83 const scoped_refptr<const Extension> CreateExtension(
59 const std::string& name, 84 const std::string& name,
60 ListBuilder& permissions) { 85 ListBuilder& permissions) {
61 const std::string kId = crx_file::id_util::GenerateId(name); 86 const std::string kId = crx_file::id_util::GenerateId(name);
62 scoped_refptr<const Extension> extension = 87 scoped_refptr<const Extension> extension =
63 ExtensionBuilder().SetManifest( 88 ExtensionBuilder().SetManifest(
64 DictionaryBuilder() 89 DictionaryBuilder()
65 .Set("name", name) 90 .Set("name", name)
66 .Set("description", "an extension") 91 .Set("description", "an extension")
67 .Set("manifest_version", 2) 92 .Set("manifest_version", 2)
(...skipping 15 matching lines...) Expand all
83 108
84 base::FilePath manifest_path = extension_path.Append(kManifestFilename); 109 base::FilePath manifest_path = extension_path.Append(kManifestFilename);
85 scoped_ptr<base::DictionaryValue> extension_data = 110 scoped_ptr<base::DictionaryValue> extension_data =
86 DeserializeJSONTestData(manifest_path, &error); 111 DeserializeJSONTestData(manifest_path, &error);
87 EXPECT_EQ(std::string(), error); 112 EXPECT_EQ(std::string(), error);
88 113
89 scoped_refptr<Extension> extension(Extension::Create( 114 scoped_refptr<Extension> extension(Extension::Create(
90 extension_path, location, *extension_data, Extension::REQUIRE_KEY, 115 extension_path, location, *extension_data, Extension::REQUIRE_KEY,
91 &error)); 116 &error));
92 CHECK(extension.get()); 117 CHECK(extension.get());
118 service()->AddExtension(extension.get());
93 EXPECT_EQ(std::string(), error); 119 EXPECT_EQ(std::string(), error);
94 120
95 return ExtensionInfoGenerator(browser_context()).CreateExtensionInfo( 121 return GenerateExtensionInfo(extension->id());
96 *extension,
97 api::developer_private::EXTENSION_STATE_ENABLED);
98 } 122 }
99 123
100 void CompareExpectedAndActualOutput( 124 void CompareExpectedAndActualOutput(
101 const base::FilePath& extension_path, 125 const base::FilePath& extension_path,
102 const InspectableViewsFinder::ViewList& views, 126 const InspectableViewsFinder::ViewList& views,
103 const base::FilePath& expected_output_path) { 127 const base::FilePath& expected_output_path) {
104 std::string error; 128 std::string error;
105 scoped_ptr<base::DictionaryValue> expected_output_data( 129 scoped_ptr<base::DictionaryValue> expected_output_data(
106 DeserializeJSONTestData(expected_output_path, &error)); 130 DeserializeJSONTestData(expected_output_path, &error));
107 EXPECT_EQ(std::string(), error); 131 EXPECT_EQ(std::string(), error);
(...skipping 21 matching lines...) Expand all
129 if (!actual_value) 153 if (!actual_value)
130 continue; 154 continue;
131 if (!actual_value->Equals(expected_value)) { 155 if (!actual_value->Equals(expected_value)) {
132 base::JSONWriter::Write(expected_value, &expected_string); 156 base::JSONWriter::Write(expected_value, &expected_string);
133 base::JSONWriter::Write(actual_value, &actual_string); 157 base::JSONWriter::Write(actual_value, &actual_string);
134 EXPECT_EQ(expected_string, actual_string) << 158 EXPECT_EQ(expected_string, actual_string) <<
135 field.key() << paths_details; 159 field.key() << paths_details;
136 } 160 }
137 } 161 }
138 } 162 }
163
164 private:
165 base::Closure quit_closure_;
166
167 DISALLOW_COPY_AND_ASSIGN(ExtensionInfoGeneratorUnitTest);
139 }; 168 };
140 169
141 // Test some of the basic fields. 170 // Test some of the basic fields.
142 TEST_F(ExtensionInfoGeneratorUnitTest, BasicInfoTest) { 171 TEST_F(ExtensionInfoGeneratorUnitTest, BasicInfoTest) {
143 // Enable error console for testing. 172 // Enable error console for testing.
144 ResetThreadBundle(content::TestBrowserThreadBundle::DEFAULT); 173 ResetThreadBundle(content::TestBrowserThreadBundle::DEFAULT);
145 FeatureSwitch::ScopedOverride error_console_override( 174 FeatureSwitch::ScopedOverride error_console_override(
146 FeatureSwitch::error_console(), true); 175 FeatureSwitch::error_console(), true);
147 profile()->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); 176 profile()->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true);
148 177
149 const char kName[] = "extension name"; 178 const char kName[] = "extension name";
150 const char kVersion[] = "1.0.0.1"; 179 const char kVersion[] = "1.0.0.1";
151 std::string id = crx_file::id_util::GenerateId(kName); 180 std::string id = crx_file::id_util::GenerateId("alpha");
152 scoped_ptr<base::DictionaryValue> manifest = 181 scoped_ptr<base::DictionaryValue> manifest =
153 DictionaryBuilder().Set("name", kName) 182 DictionaryBuilder().Set("name", kName)
154 .Set("version", kVersion) 183 .Set("version", kVersion)
155 .Set("manifest_version", 2) 184 .Set("manifest_version", 2)
156 .Set("description", "an extension") 185 .Set("description", "an extension")
157 .Set("permissions", 186 .Set("permissions",
158 ListBuilder().Append("file://*/*")).Build(); 187 ListBuilder().Append("file://*/*")).Build();
159 scoped_ptr<base::DictionaryValue> manifest_copy(manifest->DeepCopy()); 188 scoped_ptr<base::DictionaryValue> manifest_copy(manifest->DeepCopy());
160 scoped_refptr<const Extension> extension = 189 scoped_refptr<const Extension> extension =
161 ExtensionBuilder().SetManifest(manifest.Pass()) 190 ExtensionBuilder().SetManifest(manifest.Pass())
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 base::UTF8ToUTF16("function"))), 225 base::UTF8ToUTF16("function"))),
197 GURL("url"), 226 GURL("url"),
198 logging::LOG_VERBOSE, 227 logging::LOG_VERBOSE,
199 1, 228 1,
200 1))); 229 1)));
201 230
202 // It's not feasible to validate every field here, because that would be 231 // It's not feasible to validate every field here, because that would be
203 // a duplication of the logic in the method itself. Instead, test a handful 232 // a duplication of the logic in the method itself. Instead, test a handful
204 // of fields for sanity. 233 // of fields for sanity.
205 scoped_ptr<api::developer_private::ExtensionInfo> info = 234 scoped_ptr<api::developer_private::ExtensionInfo> info =
206 ExtensionInfoGenerator(browser_context()).CreateExtensionInfo( 235 GenerateExtensionInfo(extension->id());
207 *extension, developer::EXTENSION_STATE_ENABLED); 236 ASSERT_TRUE(info.get());
208 ASSERT_TRUE(info);
209 EXPECT_EQ(kName, info->name); 237 EXPECT_EQ(kName, info->name);
210 EXPECT_EQ(id, info->id); 238 EXPECT_EQ(id, info->id);
211 EXPECT_EQ(kVersion, info->version); 239 EXPECT_EQ(kVersion, info->version);
212 EXPECT_EQ(info->location, developer::LOCATION_UNPACKED); 240 EXPECT_EQ(info->location, developer::LOCATION_UNPACKED);
213 ASSERT_TRUE(info->path); 241 ASSERT_TRUE(info->path);
214 EXPECT_EQ(data_dir(), base::FilePath::FromUTF8Unsafe(*info->path)); 242 EXPECT_EQ(data_dir(), base::FilePath::FromUTF8Unsafe(*info->path));
215 EXPECT_EQ(api::developer_private::EXTENSION_STATE_ENABLED, info->state); 243 EXPECT_EQ(api::developer_private::EXTENSION_STATE_ENABLED, info->state);
216 EXPECT_EQ(api::developer_private::EXTENSION_TYPE_EXTENSION, info->type); 244 EXPECT_EQ(api::developer_private::EXTENSION_TYPE_EXTENSION, info->type);
217 EXPECT_TRUE(info->file_access.is_enabled); 245 EXPECT_TRUE(info->file_access.is_enabled);
218 EXPECT_FALSE(info->file_access.is_active); 246 EXPECT_FALSE(info->file_access.is_active);
(...skipping 12 matching lines...) Expand all
231 *info->runtime_errors[1]; 259 *info->runtime_errors[1];
232 EXPECT_EQ(api::developer_private::ERROR_LEVEL_LOG, 260 EXPECT_EQ(api::developer_private::ERROR_LEVEL_LOG,
233 runtime_error_verbose.severity); 261 runtime_error_verbose.severity);
234 const api::developer_private::ManifestError& manifest_error = 262 const api::developer_private::ManifestError& manifest_error =
235 *info->manifest_errors[0]; 263 *info->manifest_errors[0];
236 EXPECT_EQ(extension->id(), manifest_error.extension_id); 264 EXPECT_EQ(extension->id(), manifest_error.extension_id);
237 265
238 // Test an extension that isn't unpacked. 266 // Test an extension that isn't unpacked.
239 manifest_copy->SetString("update_url", 267 manifest_copy->SetString("update_url",
240 "https://clients2.google.com/service/update2/crx"); 268 "https://clients2.google.com/service/update2/crx");
269 id = crx_file::id_util::GenerateId("beta");
241 extension = ExtensionBuilder().SetManifest(manifest_copy.Pass()) 270 extension = ExtensionBuilder().SetManifest(manifest_copy.Pass())
242 .SetLocation(Manifest::EXTERNAL_PREF) 271 .SetLocation(Manifest::EXTERNAL_PREF)
243 .SetID(id) 272 .SetID(id)
244 .Build(); 273 .Build();
245 info = ExtensionInfoGenerator(browser_context()).CreateExtensionInfo( 274 service()->AddExtension(extension.get());
246 *extension, developer::EXTENSION_STATE_ENABLED); 275 info = GenerateExtensionInfo(extension->id());
247 EXPECT_EQ(developer::LOCATION_THIRD_PARTY, info->location); 276 EXPECT_EQ(developer::LOCATION_THIRD_PARTY, info->location);
248 EXPECT_FALSE(info->path); 277 EXPECT_FALSE(info->path);
249 } 278 }
250 279
251 // Test three generated json outputs. 280 // Test three generated json outputs.
252 TEST_F(ExtensionInfoGeneratorUnitTest, GenerateExtensionsJSONData) { 281 TEST_F(ExtensionInfoGeneratorUnitTest, GenerateExtensionsJSONData) {
253 // Test Extension1 282 // Test Extension1
254 base::FilePath extension_path = 283 base::FilePath extension_path =
255 data_dir().AppendASCII("good") 284 data_dir().AppendASCII("good")
256 .AppendASCII("Extensions") 285 .AppendASCII("Extensions")
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 // Start with the switch enabled. 344 // Start with the switch enabled.
316 scoped_ptr<FeatureSwitch::ScopedOverride> enable_scripts_switch( 345 scoped_ptr<FeatureSwitch::ScopedOverride> enable_scripts_switch(
317 new FeatureSwitch::ScopedOverride( 346 new FeatureSwitch::ScopedOverride(
318 FeatureSwitch::scripts_require_action(), true)); 347 FeatureSwitch::scripts_require_action(), true));
319 // Two extensions - one with all urls, one without. 348 // Two extensions - one with all urls, one without.
320 scoped_refptr<const Extension> all_urls_extension = CreateExtension( 349 scoped_refptr<const Extension> all_urls_extension = CreateExtension(
321 "all_urls", ListBuilder().Append(kAllHostsPermission).Pass()); 350 "all_urls", ListBuilder().Append(kAllHostsPermission).Pass());
322 scoped_refptr<const Extension> no_urls_extension = 351 scoped_refptr<const Extension> no_urls_extension =
323 CreateExtension("no urls", ListBuilder().Pass()); 352 CreateExtension("no urls", ListBuilder().Pass());
324 353
325 ExtensionInfoGenerator generator(browser_context());
326 scoped_ptr<developer::ExtensionInfo> info = 354 scoped_ptr<developer::ExtensionInfo> info =
327 generator.CreateExtensionInfo( 355 GenerateExtensionInfo(all_urls_extension->id());
328 *all_urls_extension,
329 api::developer_private::EXTENSION_STATE_ENABLED);
330 356
331 // The extension should want all urls, but not currently have it. 357 // The extension should want all urls, but not currently have it.
332 EXPECT_TRUE(info->run_on_all_urls.is_enabled); 358 EXPECT_TRUE(info->run_on_all_urls.is_enabled);
333 EXPECT_FALSE(info->run_on_all_urls.is_active); 359 EXPECT_FALSE(info->run_on_all_urls.is_active);
334 360
335 // Give the extension all urls. 361 // Give the extension all urls.
336 util::SetAllowedScriptingOnAllUrls(all_urls_extension->id(), profile(), true); 362 util::SetAllowedScriptingOnAllUrls(all_urls_extension->id(), profile(), true);
337 363
338 // Now the extension should both want and have all urls. 364 // Now the extension should both want and have all urls.
339 info = generator.CreateExtensionInfo(*all_urls_extension, 365 info = GenerateExtensionInfo(all_urls_extension->id());
340 developer::EXTENSION_STATE_ENABLED);
341 EXPECT_TRUE(info->run_on_all_urls.is_enabled); 366 EXPECT_TRUE(info->run_on_all_urls.is_enabled);
342 EXPECT_TRUE(info->run_on_all_urls.is_active); 367 EXPECT_TRUE(info->run_on_all_urls.is_active);
343 368
344 // The other extension should neither want nor have all urls. 369 // The other extension should neither want nor have all urls.
345 info = generator.CreateExtensionInfo(*no_urls_extension, 370 info = GenerateExtensionInfo(no_urls_extension->id());
346 developer::EXTENSION_STATE_ENABLED);
347 EXPECT_FALSE(info->run_on_all_urls.is_enabled); 371 EXPECT_FALSE(info->run_on_all_urls.is_enabled);
348 EXPECT_FALSE(info->run_on_all_urls.is_active); 372 EXPECT_FALSE(info->run_on_all_urls.is_active);
349 373
350 // Revoke the first extension's permissions. 374 // Revoke the first extension's permissions.
351 util::SetAllowedScriptingOnAllUrls( 375 util::SetAllowedScriptingOnAllUrls(
352 all_urls_extension->id(), profile(), false); 376 all_urls_extension->id(), profile(), false);
353 377
354 // Turn off the switch and load another extension (so permissions are 378 // Turn off the switch and load another extension (so permissions are
355 // re-initialized). 379 // re-initialized).
356 enable_scripts_switch.reset(); 380 enable_scripts_switch.reset();
357 381
358 // Since the extension doesn't have access to all urls (but normally would), 382 // Since the extension doesn't have access to all urls (but normally would),
359 // the extension should have the "want" flag even with the switch off. 383 // the extension should have the "want" flag even with the switch off.
360 info = generator.CreateExtensionInfo(*all_urls_extension, 384 info = GenerateExtensionInfo(all_urls_extension->id());
361 developer::EXTENSION_STATE_ENABLED);
362 EXPECT_TRUE(info->run_on_all_urls.is_enabled); 385 EXPECT_TRUE(info->run_on_all_urls.is_enabled);
363 EXPECT_FALSE(info->run_on_all_urls.is_active); 386 EXPECT_FALSE(info->run_on_all_urls.is_active);
364 387
365 // If we grant the extension all urls, then the checkbox should still be 388 // If we grant the extension all urls, then the checkbox should still be
366 // there, since it has an explicitly-set user preference. 389 // there, since it has an explicitly-set user preference.
367 util::SetAllowedScriptingOnAllUrls(all_urls_extension->id(), profile(), true); 390 util::SetAllowedScriptingOnAllUrls(all_urls_extension->id(), profile(), true);
368 info = generator.CreateExtensionInfo(*all_urls_extension, 391 info = GenerateExtensionInfo(all_urls_extension->id());
369 developer::EXTENSION_STATE_ENABLED);
370 EXPECT_TRUE(info->run_on_all_urls.is_enabled); 392 EXPECT_TRUE(info->run_on_all_urls.is_enabled);
371 EXPECT_TRUE(info->run_on_all_urls.is_active); 393 EXPECT_TRUE(info->run_on_all_urls.is_active);
372 394
373 // Load another extension with all urls (so permissions get re-init'd). 395 // Load another extension with all urls (so permissions get re-init'd).
374 all_urls_extension = CreateExtension( 396 all_urls_extension = CreateExtension(
375 "all_urls_II", ListBuilder().Append(kAllHostsPermission).Pass()); 397 "all_urls_II", ListBuilder().Append(kAllHostsPermission).Pass());
376 398
377 // Even though the extension has all_urls permission, the checkbox shouldn't 399 // Even though the extension has all_urls permission, the checkbox shouldn't
378 // show up without the switch. 400 // show up without the switch.
379 info = generator.CreateExtensionInfo(*all_urls_extension, 401 info = GenerateExtensionInfo(all_urls_extension->id());
380 developer::EXTENSION_STATE_ENABLED);
381 EXPECT_FALSE(info->run_on_all_urls.is_enabled); 402 EXPECT_FALSE(info->run_on_all_urls.is_enabled);
382 EXPECT_TRUE(info->run_on_all_urls.is_active); 403 EXPECT_TRUE(info->run_on_all_urls.is_active);
383 } 404 }
384 405
385 } // namespace extensions 406 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698