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

Side by Side Diff: chrome/browser/extensions/extension_service_unittest.cc

Issue 12093036: Move Extension Location and Type enums to Manifest, and move InstallWarning to its own file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
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 "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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 using content::IndexedDBContext; 112 using content::IndexedDBContext;
113 using content::PluginService; 113 using content::PluginService;
114 using extensions::APIPermission; 114 using extensions::APIPermission;
115 using extensions::APIPermissionSet; 115 using extensions::APIPermissionSet;
116 using extensions::CrxInstaller; 116 using extensions::CrxInstaller;
117 using extensions::Extension; 117 using extensions::Extension;
118 using extensions::ExtensionCreator; 118 using extensions::ExtensionCreator;
119 using extensions::ExtensionPrefs; 119 using extensions::ExtensionPrefs;
120 using extensions::ExtensionSystem; 120 using extensions::ExtensionSystem;
121 using extensions::FeatureSwitch; 121 using extensions::FeatureSwitch;
122 using extensions::Manifest;
122 using extensions::PermissionSet; 123 using extensions::PermissionSet;
123 using extensions::URLPatternSet; 124 using extensions::URLPatternSet;
124 125
125 namespace keys = extension_manifest_keys; 126 namespace keys = extension_manifest_keys;
126 127
127 namespace { 128 namespace {
128 129
129 // Extension ids used during testing. 130 // Extension ids used during testing.
130 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; 131 const char* const all_zero = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
131 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; 132 const char* const zero_n_one = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab";
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 CHECK(file_util::CreateTemporaryFile(&temp_file)); 177 CHECK(file_util::CreateTemporaryFile(&temp_file));
177 return temp_file; 178 return temp_file;
178 } 179 }
179 180
180 } // namespace 181 } // namespace
181 182
182 class MockExtensionProvider : public extensions::ExternalProviderInterface { 183 class MockExtensionProvider : public extensions::ExternalProviderInterface {
183 public: 184 public:
184 MockExtensionProvider( 185 MockExtensionProvider(
185 VisitorInterface* visitor, 186 VisitorInterface* visitor,
186 Extension::Location location) 187 Manifest::Location location)
187 : location_(location), visitor_(visitor), visit_count_(0) { 188 : location_(location), visitor_(visitor), visit_count_(0) {
188 } 189 }
189 190
190 virtual ~MockExtensionProvider() {} 191 virtual ~MockExtensionProvider() {}
191 192
192 void UpdateOrAddExtension(const std::string& id, 193 void UpdateOrAddExtension(const std::string& id,
193 const std::string& version, 194 const std::string& version,
194 const FilePath& path) { 195 const FilePath& path) {
195 extension_map_[id] = std::make_pair(version, path); 196 extension_map_[id] = std::make_pair(version, path);
196 } 197 }
(...skipping 15 matching lines...) Expand all
212 } 213 }
213 visitor_->OnExternalProviderReady(this); 214 visitor_->OnExternalProviderReady(this);
214 } 215 }
215 216
216 virtual bool HasExtension(const std::string& id) const OVERRIDE { 217 virtual bool HasExtension(const std::string& id) const OVERRIDE {
217 return extension_map_.find(id) != extension_map_.end(); 218 return extension_map_.find(id) != extension_map_.end();
218 } 219 }
219 220
220 virtual bool GetExtensionDetails( 221 virtual bool GetExtensionDetails(
221 const std::string& id, 222 const std::string& id,
222 Extension::Location* location, 223 Manifest::Location* location,
223 scoped_ptr<Version>* version) const OVERRIDE { 224 scoped_ptr<Version>* version) const OVERRIDE {
224 DataMap::const_iterator it = extension_map_.find(id); 225 DataMap::const_iterator it = extension_map_.find(id);
225 if (it == extension_map_.end()) 226 if (it == extension_map_.end())
226 return false; 227 return false;
227 228
228 if (version) 229 if (version)
229 version->reset(new Version(it->second.first)); 230 version->reset(new Version(it->second.first));
230 231
231 if (location) 232 if (location)
232 *location = location_; 233 *location = location_;
233 234
234 return true; 235 return true;
235 } 236 }
236 237
237 virtual bool IsReady() const OVERRIDE { 238 virtual bool IsReady() const OVERRIDE {
238 return true; 239 return true;
239 } 240 }
240 241
241 virtual void ServiceShutdown() OVERRIDE { 242 virtual void ServiceShutdown() OVERRIDE {
242 } 243 }
243 244
244 int visit_count() const { return visit_count_; } 245 int visit_count() const { return visit_count_; }
245 void set_visit_count(int visit_count) { 246 void set_visit_count(int visit_count) {
246 visit_count_ = visit_count; 247 visit_count_ = visit_count;
247 } 248 }
248 249
249 private: 250 private:
250 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap; 251 typedef std::map< std::string, std::pair<std::string, FilePath> > DataMap;
251 DataMap extension_map_; 252 DataMap extension_map_;
252 Extension::Location location_; 253 Manifest::Location location_;
253 VisitorInterface* visitor_; 254 VisitorInterface* visitor_;
254 255
255 // visit_count_ tracks the number of calls to VisitRegisteredExtension(). 256 // visit_count_ tracks the number of calls to VisitRegisteredExtension().
256 // Mutable because it must be incremented on each call to 257 // Mutable because it must be incremented on each call to
257 // VisitRegisteredExtension(), which must be a const method to inherit 258 // VisitRegisteredExtension(), which must be a const method to inherit
258 // from the class being mocked. 259 // from the class being mocked.
259 mutable int visit_count_; 260 mutable int visit_count_;
260 261
261 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider); 262 DISALLOW_COPY_AND_ASSIGN(MockExtensionProvider);
262 }; 263 };
(...skipping 14 matching lines...) Expand all
277 : ids_found_(0), 278 : ids_found_(0),
278 fake_base_path_(fake_base_path), 279 fake_base_path_(fake_base_path),
279 expected_creation_flags_(expected_creation_flags) { 280 expected_creation_flags_(expected_creation_flags) {
280 } 281 }
281 282
282 int Visit(const std::string& json_data) { 283 int Visit(const std::string& json_data) {
283 // Give the test json file to the provider for parsing. 284 // Give the test json file to the provider for parsing.
284 provider_.reset(new extensions::ExternalProviderImpl( 285 provider_.reset(new extensions::ExternalProviderImpl(
285 this, 286 this,
286 new extensions::ExternalTestingLoader(json_data, fake_base_path_), 287 new extensions::ExternalTestingLoader(json_data, fake_base_path_),
287 Extension::EXTERNAL_PREF, 288 Manifest::EXTERNAL_PREF,
288 Extension::EXTERNAL_PREF_DOWNLOAD, 289 Manifest::EXTERNAL_PREF_DOWNLOAD,
289 Extension::NO_FLAGS)); 290 Extension::NO_FLAGS));
290 291
291 // We also parse the file into a dictionary to compare what we get back 292 // We also parse the file into a dictionary to compare what we get back
292 // from the provider. 293 // from the provider.
293 JSONStringValueSerializer serializer(json_data); 294 JSONStringValueSerializer serializer(json_data);
294 Value* json_value = serializer.Deserialize(NULL, NULL); 295 Value* json_value = serializer.Deserialize(NULL, NULL);
295 296
296 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) { 297 if (!json_value || !json_value->IsType(Value::TYPE_DICTIONARY)) {
297 NOTREACHED() << "Unable to deserialize json data"; 298 NOTREACHED() << "Unable to deserialize json data";
298 return -1; 299 return -1;
299 } else { 300 } else {
300 DictionaryValue* external_extensions = 301 DictionaryValue* external_extensions =
301 static_cast<DictionaryValue*>(json_value); 302 static_cast<DictionaryValue*>(json_value);
302 prefs_.reset(external_extensions); 303 prefs_.reset(external_extensions);
303 } 304 }
304 305
305 // Reset our counter. 306 // Reset our counter.
306 ids_found_ = 0; 307 ids_found_ = 0;
307 // Ask the provider to look up all extensions and return them. 308 // Ask the provider to look up all extensions and return them.
308 provider_->VisitRegisteredExtension(); 309 provider_->VisitRegisteredExtension();
309 310
310 return ids_found_; 311 return ids_found_;
311 } 312 }
312 313
313 virtual bool OnExternalExtensionFileFound(const std::string& id, 314 virtual bool OnExternalExtensionFileFound(const std::string& id,
314 const Version* version, 315 const Version* version,
315 const FilePath& path, 316 const FilePath& path,
316 Extension::Location unused, 317 Manifest::Location unused,
317 int creation_flags, 318 int creation_flags,
318 bool mark_acknowledged) { 319 bool mark_acknowledged) {
319 EXPECT_EQ(expected_creation_flags_, creation_flags); 320 EXPECT_EQ(expected_creation_flags_, creation_flags);
320 321
321 ++ids_found_; 322 ++ids_found_;
322 DictionaryValue* pref; 323 DictionaryValue* pref;
323 // This tests is to make sure that the provider only notifies us of the 324 // This tests is to make sure that the provider only notifies us of the
324 // values we gave it. So if the id we doesn't exist in our internal 325 // values we gave it. So if the id we doesn't exist in our internal
325 // dictionary then something is wrong. 326 // dictionary then something is wrong.
326 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) 327 EXPECT_TRUE(prefs_->GetDictionary(id, &pref))
327 << "Got back ID (" << id.c_str() << ") we weren't expecting"; 328 << "Got back ID (" << id.c_str() << ") we weren't expecting";
328 329
329 EXPECT_TRUE(path.IsAbsolute()); 330 EXPECT_TRUE(path.IsAbsolute());
330 if (!fake_base_path_.empty()) 331 if (!fake_base_path_.empty())
331 EXPECT_TRUE(fake_base_path_.IsParent(path)); 332 EXPECT_TRUE(fake_base_path_.IsParent(path));
332 333
333 if (pref) { 334 if (pref) {
334 EXPECT_TRUE(provider_->HasExtension(id)); 335 EXPECT_TRUE(provider_->HasExtension(id));
335 336
336 // Ask provider if the extension we got back is registered. 337 // Ask provider if the extension we got back is registered.
337 Extension::Location location = Extension::INVALID; 338 Manifest::Location location = Manifest::INVALID_LOCATION;
338 scoped_ptr<Version> v1; 339 scoped_ptr<Version> v1;
339 FilePath crx_path; 340 FilePath crx_path;
340 341
341 EXPECT_TRUE(provider_->GetExtensionDetails(id, NULL, &v1)); 342 EXPECT_TRUE(provider_->GetExtensionDetails(id, NULL, &v1));
342 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); 343 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str());
343 344
344 scoped_ptr<Version> v2; 345 scoped_ptr<Version> v2;
345 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location, &v2)); 346 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location, &v2));
346 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str()); 347 EXPECT_STREQ(version->GetString().c_str(), v1->GetString().c_str());
347 EXPECT_STREQ(version->GetString().c_str(), v2->GetString().c_str()); 348 EXPECT_STREQ(version->GetString().c_str(), v2->GetString().c_str());
348 EXPECT_EQ(Extension::EXTERNAL_PREF, location); 349 EXPECT_EQ(Manifest::EXTERNAL_PREF, location);
349 350
350 // Remove it so we won't count it ever again. 351 // Remove it so we won't count it ever again.
351 prefs_->Remove(id, NULL); 352 prefs_->Remove(id, NULL);
352 } 353 }
353 return true; 354 return true;
354 } 355 }
355 356
356 virtual bool OnExternalExtensionUpdateUrlFound( 357 virtual bool OnExternalExtensionUpdateUrlFound(
357 const std::string& id, const GURL& update_url, 358 const std::string& id, const GURL& update_url,
358 Extension::Location location) { 359 Manifest::Location location) {
359 ++ids_found_; 360 ++ids_found_;
360 DictionaryValue* pref; 361 DictionaryValue* pref;
361 // This tests is to make sure that the provider only notifies us of the 362 // This tests is to make sure that the provider only notifies us of the
362 // values we gave it. So if the id we doesn't exist in our internal 363 // values we gave it. So if the id we doesn't exist in our internal
363 // dictionary then something is wrong. 364 // dictionary then something is wrong.
364 EXPECT_TRUE(prefs_->GetDictionary(id, &pref)) 365 EXPECT_TRUE(prefs_->GetDictionary(id, &pref))
365 << L"Got back ID (" << id.c_str() << ") we weren't expecting"; 366 << L"Got back ID (" << id.c_str() << ") we weren't expecting";
366 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location); 367 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, location);
367 368
368 if (pref) { 369 if (pref) {
369 EXPECT_TRUE(provider_->HasExtension(id)); 370 EXPECT_TRUE(provider_->HasExtension(id));
370 371
371 // External extensions with update URLs do not have versions. 372 // External extensions with update URLs do not have versions.
372 scoped_ptr<Version> v1; 373 scoped_ptr<Version> v1;
373 Extension::Location location1 = Extension::INVALID; 374 Manifest::Location location1 = Manifest::INVALID_LOCATION;
374 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1)); 375 EXPECT_TRUE(provider_->GetExtensionDetails(id, &location1, &v1));
375 EXPECT_FALSE(v1.get()); 376 EXPECT_FALSE(v1.get());
376 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, location1); 377 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, location1);
377 378
378 // Remove it so we won't count it again. 379 // Remove it so we won't count it again.
379 prefs_->Remove(id, NULL); 380 prefs_->Remove(id, NULL);
380 } 381 }
381 return true; 382 return true;
382 } 383 }
383 384
384 virtual void OnExternalProviderReady( 385 virtual void OnExternalProviderReady(
385 const extensions::ExternalProviderInterface* provider) { 386 const extensions::ExternalProviderInterface* provider) {
386 EXPECT_EQ(provider, provider_.get()); 387 EXPECT_EQ(provider, provider_.get());
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 } 590 }
590 } 591 }
591 592
592 void AddMockExternalProvider( 593 void AddMockExternalProvider(
593 extensions::ExternalProviderInterface* provider) { 594 extensions::ExternalProviderInterface* provider) {
594 service_->AddProviderForTesting(provider); 595 service_->AddProviderForTesting(provider);
595 } 596 }
596 597
597 protected: 598 protected:
598 void TestExternalProvider(MockExtensionProvider* provider, 599 void TestExternalProvider(MockExtensionProvider* provider,
599 Extension::Location location); 600 Manifest::Location location);
600 601
601 void PackCRX(const FilePath& dir_path, 602 void PackCRX(const FilePath& dir_path,
602 const FilePath& pem_path, 603 const FilePath& pem_path,
603 const FilePath& crx_path) { 604 const FilePath& crx_path) {
604 // Use the existing pem key, if provided. 605 // Use the existing pem key, if provided.
605 FilePath pem_output_path; 606 FilePath pem_output_path;
606 if (pem_path.value().empty()) { 607 if (pem_path.value().empty()) {
607 pem_output_path = crx_path.DirName().AppendASCII("temp.pem"); 608 pem_output_path = crx_path.DirName().AppendASCII("temp.pem");
608 } else { 609 } else {
609 ASSERT_TRUE(file_util::PathExists(pem_path)); 610 ASSERT_TRUE(file_util::PathExists(pem_path));
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 return InstallCRX(path, install_state, Extension::NO_FLAGS); 688 return InstallCRX(path, install_state, Extension::NO_FLAGS);
688 } 689 }
689 690
690 const Extension* InstallCRXFromWebStore(const FilePath& path, 691 const Extension* InstallCRXFromWebStore(const FilePath& path,
691 InstallState install_state) { 692 InstallState install_state) {
692 StartCRXInstall(path, Extension::FROM_WEBSTORE); 693 StartCRXInstall(path, Extension::FROM_WEBSTORE);
693 return WaitForCrxInstall(path, install_state); 694 return WaitForCrxInstall(path, install_state);
694 } 695 }
695 696
696 const Extension* InstallCRXWithLocation(const FilePath& crx_path, 697 const Extension* InstallCRXWithLocation(const FilePath& crx_path,
697 Extension::Location install_location, 698 Manifest::Location install_location,
698 InstallState install_state) { 699 InstallState install_state) {
699 EXPECT_TRUE(file_util::PathExists(crx_path)) 700 EXPECT_TRUE(file_util::PathExists(crx_path))
700 << "Path does not exist: "<< crx_path.value().c_str(); 701 << "Path does not exist: "<< crx_path.value().c_str();
701 // no client (silent install) 702 // no client (silent install)
702 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL)); 703 scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(service_, NULL));
703 installer->set_install_source(install_location); 704 installer->set_install_source(install_location);
704 installer->InstallCrx(crx_path); 705 installer->InstallCrx(crx_path);
705 706
706 return WaitForCrxInstall(crx_path, install_state); 707 return WaitForCrxInstall(crx_path, install_state);
707 } 708 }
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 service_->Init(); 1112 service_->Init();
1112 1113
1113 uint32 expected_num_extensions = 3u; 1114 uint32 expected_num_extensions = 3u;
1114 ASSERT_EQ(expected_num_extensions, loaded_.size()); 1115 ASSERT_EQ(expected_num_extensions, loaded_.size());
1115 1116
1116 EXPECT_EQ(std::string(good0), loaded_[0]->id()); 1117 EXPECT_EQ(std::string(good0), loaded_[0]->id());
1117 EXPECT_EQ(std::string("My extension 1"), 1118 EXPECT_EQ(std::string("My extension 1"),
1118 loaded_[0]->name()); 1119 loaded_[0]->name());
1119 EXPECT_EQ(std::string("The first extension that I made."), 1120 EXPECT_EQ(std::string("The first extension that I made."),
1120 loaded_[0]->description()); 1121 loaded_[0]->description());
1121 EXPECT_EQ(Extension::INTERNAL, loaded_[0]->location()); 1122 EXPECT_EQ(Manifest::INTERNAL, loaded_[0]->location());
1122 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false)); 1123 EXPECT_TRUE(service_->GetExtensionById(loaded_[0]->id(), false));
1123 EXPECT_EQ(expected_num_extensions, service_->extensions()->size()); 1124 EXPECT_EQ(expected_num_extensions, service_->extensions()->size());
1124 1125
1125 ValidatePrefKeyCount(3); 1126 ValidatePrefKeyCount(3);
1126 ValidateIntegerPref(good0, "state", Extension::ENABLED); 1127 ValidateIntegerPref(good0, "state", Extension::ENABLED);
1127 ValidateIntegerPref(good0, "location", Extension::INTERNAL); 1128 ValidateIntegerPref(good0, "location", Manifest::INTERNAL);
1128 ValidateIntegerPref(good1, "state", Extension::ENABLED); 1129 ValidateIntegerPref(good1, "state", Extension::ENABLED);
1129 ValidateIntegerPref(good1, "location", Extension::INTERNAL); 1130 ValidateIntegerPref(good1, "location", Manifest::INTERNAL);
1130 ValidateIntegerPref(good2, "state", Extension::ENABLED); 1131 ValidateIntegerPref(good2, "state", Extension::ENABLED);
1131 ValidateIntegerPref(good2, "location", Extension::INTERNAL); 1132 ValidateIntegerPref(good2, "location", Manifest::INTERNAL);
1132 1133
1133 URLPatternSet expected_patterns; 1134 URLPatternSet expected_patterns;
1134 AddPattern(&expected_patterns, "file:///*"); 1135 AddPattern(&expected_patterns, "file:///*");
1135 AddPattern(&expected_patterns, "http://*.google.com/*"); 1136 AddPattern(&expected_patterns, "http://*.google.com/*");
1136 AddPattern(&expected_patterns, "https://*.google.com/*"); 1137 AddPattern(&expected_patterns, "https://*.google.com/*");
1137 const Extension* extension = loaded_[0]; 1138 const Extension* extension = loaded_[0];
1138 const extensions::UserScriptList& scripts = extension->content_scripts(); 1139 const extensions::UserScriptList& scripts = extension->content_scripts();
1139 ASSERT_EQ(2u, scripts.size()); 1140 ASSERT_EQ(2u, scripts.size());
1140 EXPECT_EQ(expected_patterns, scripts[0].url_patterns()); 1141 EXPECT_EQ(expected_patterns, scripts[0].url_patterns());
1141 EXPECT_EQ(2u, scripts[0].js_scripts().size()); 1142 EXPECT_EQ(2u, scripts[0].js_scripts().size());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 #else 1182 #else
1182 ASSERT_EQ(2u, loaded_[1]->plugins().size()); 1183 ASSERT_EQ(2u, loaded_[1]->plugins().size());
1183 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(), 1184 EXPECT_EQ(loaded_[1]->path().AppendASCII("content_plugin.dll").value(),
1184 loaded_[1]->plugins()[0].path.value()); 1185 loaded_[1]->plugins()[0].path.value());
1185 EXPECT_TRUE(loaded_[1]->plugins()[0].is_public); 1186 EXPECT_TRUE(loaded_[1]->plugins()[0].is_public);
1186 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(), 1187 EXPECT_EQ(loaded_[1]->path().AppendASCII("extension_plugin.dll").value(),
1187 loaded_[1]->plugins()[1].path.value()); 1188 loaded_[1]->plugins()[1].path.value());
1188 EXPECT_FALSE(loaded_[1]->plugins()[1].is_public); 1189 EXPECT_FALSE(loaded_[1]->plugins()[1].is_public);
1189 #endif 1190 #endif
1190 1191
1191 EXPECT_EQ(Extension::INTERNAL, loaded_[1]->location()); 1192 EXPECT_EQ(Manifest::INTERNAL, loaded_[1]->location());
1192 1193
1193 int index = expected_num_extensions - 1; 1194 int index = expected_num_extensions - 1;
1194 EXPECT_EQ(std::string(good2), loaded_[index]->id()); 1195 EXPECT_EQ(std::string(good2), loaded_[index]->id());
1195 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name()); 1196 EXPECT_EQ(std::string("My extension 3"), loaded_[index]->name());
1196 EXPECT_EQ(std::string(""), loaded_[index]->description()); 1197 EXPECT_EQ(std::string(""), loaded_[index]->description());
1197 EXPECT_EQ(0u, loaded_[index]->content_scripts().size()); 1198 EXPECT_EQ(0u, loaded_[index]->content_scripts().size());
1198 EXPECT_EQ(Extension::INTERNAL, loaded_[index]->location()); 1199 EXPECT_EQ(Manifest::INTERNAL, loaded_[index]->location());
1199 }; 1200 };
1200 1201
1201 // Test loading bad extensions from the profile directory. 1202 // Test loading bad extensions from the profile directory.
1202 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) { 1203 TEST_F(ExtensionServiceTest, LoadAllExtensionsFromDirectoryFail) {
1203 // Initialize the test dir with a bad Preferences/extensions. 1204 // Initialize the test dir with a bad Preferences/extensions.
1204 FilePath source_install_dir = data_dir_ 1205 FilePath source_install_dir = data_dir_
1205 .AppendASCII("bad") 1206 .AppendASCII("bad")
1206 .AppendASCII("Extensions"); 1207 .AppendASCII("Extensions");
1207 FilePath pref_path = source_install_dir 1208 FilePath pref_path = source_install_dir
1208 .DirName() 1209 .DirName()
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 ValidatePrefKeyCount(0); 1366 ValidatePrefKeyCount(0);
1366 1367
1367 // A simple extension that should install without error. 1368 // A simple extension that should install without error.
1368 path = data_dir_.AppendASCII("good.crx"); 1369 path = data_dir_.AppendASCII("good.crx");
1369 InstallCRX(path, INSTALL_NEW); 1370 InstallCRX(path, INSTALL_NEW);
1370 // TODO(erikkay): verify the contents of the installed extension. 1371 // TODO(erikkay): verify the contents of the installed extension.
1371 1372
1372 int pref_count = 0; 1373 int pref_count = 0;
1373 ValidatePrefKeyCount(++pref_count); 1374 ValidatePrefKeyCount(++pref_count);
1374 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 1375 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
1375 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); 1376 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL);
1376 1377
1377 // An extension with page actions. 1378 // An extension with page actions.
1378 path = data_dir_.AppendASCII("page_action.crx"); 1379 path = data_dir_.AppendASCII("page_action.crx");
1379 InstallCRX(path, INSTALL_NEW); 1380 InstallCRX(path, INSTALL_NEW);
1380 ValidatePrefKeyCount(++pref_count); 1381 ValidatePrefKeyCount(++pref_count);
1381 ValidateIntegerPref(page_action, "state", Extension::ENABLED); 1382 ValidateIntegerPref(page_action, "state", Extension::ENABLED);
1382 ValidateIntegerPref(page_action, "location", Extension::INTERNAL); 1383 ValidateIntegerPref(page_action, "location", Manifest::INTERNAL);
1383 1384
1384 // Bad signature. 1385 // Bad signature.
1385 path = data_dir_.AppendASCII("bad_signature.crx"); 1386 path = data_dir_.AppendASCII("bad_signature.crx");
1386 InstallCRX(path, INSTALL_FAILED); 1387 InstallCRX(path, INSTALL_FAILED);
1387 ValidatePrefKeyCount(pref_count); 1388 ValidatePrefKeyCount(pref_count);
1388 1389
1389 // 0-length extension file. 1390 // 0-length extension file.
1390 path = data_dir_.AppendASCII("not_an_extension.crx"); 1391 path = data_dir_.AppendASCII("not_an_extension.crx");
1391 InstallCRX(path, INSTALL_FAILED); 1392 InstallCRX(path, INSTALL_FAILED);
1392 ValidatePrefKeyCount(pref_count); 1393 ValidatePrefKeyCount(pref_count);
(...skipping 24 matching lines...) Expand all
1417 1418
1418 FilePath path = data_dir_.AppendASCII("good.crx"); 1419 FilePath path = data_dir_.AppendASCII("good.crx");
1419 set_extensions_enabled(true); 1420 set_extensions_enabled(true);
1420 1421
1421 // Register and install an external extension. 1422 // Register and install an external extension.
1422 Version version("1.0.0.0"); 1423 Version version("1.0.0.0");
1423 service_->OnExternalExtensionFileFound( 1424 service_->OnExternalExtensionFileFound(
1424 good_crx, 1425 good_crx,
1425 &version, 1426 &version,
1426 path, 1427 path,
1427 Extension::EXTERNAL_PREF, 1428 Manifest::EXTERNAL_PREF,
1428 Extension::FROM_BOOKMARK, 1429 Extension::FROM_BOOKMARK,
1429 false /* mark_acknowledged */); 1430 false /* mark_acknowledged */);
1430 loop_.RunUntilIdle(); 1431 loop_.RunUntilIdle();
1431 1432
1432 const Extension* extension = service_->GetExtensionById(good_crx, false); 1433 const Extension* extension = service_->GetExtensionById(good_crx, false);
1433 ASSERT_TRUE(extension); 1434 ASSERT_TRUE(extension);
1434 ASSERT_TRUE(extension->from_bookmark()); 1435 ASSERT_TRUE(extension->from_bookmark());
1435 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); 1436 ValidateBooleanPref(good_crx, kPrefFromBookmark, true);
1436 1437
1437 // Upgrade to version 2.0, the flag should be preserved. 1438 // Upgrade to version 2.0, the flag should be preserved.
1438 path = data_dir_.AppendASCII("good2.crx"); 1439 path = data_dir_.AppendASCII("good2.crx");
1439 UpdateExtension(good_crx, path, ENABLED); 1440 UpdateExtension(good_crx, path, ENABLED);
1440 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); 1441 ValidateBooleanPref(good_crx, kPrefFromBookmark, true);
1441 extension = service_->GetExtensionById(good_crx, false); 1442 extension = service_->GetExtensionById(good_crx, false);
1442 ASSERT_TRUE(extension); 1443 ASSERT_TRUE(extension);
1443 ASSERT_TRUE(extension->from_bookmark()); 1444 ASSERT_TRUE(extension->from_bookmark());
1444 } 1445 }
1445 1446
1446 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED 1447 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED
1447 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { 1448 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) {
1448 InitializeEmptyExtensionService(); 1449 InitializeEmptyExtensionService();
1449 1450
1450 FilePath path = data_dir_.AppendASCII("good.crx"); 1451 FilePath path = data_dir_.AppendASCII("good.crx");
1451 set_extensions_enabled(true); 1452 set_extensions_enabled(true);
1452 1453
1453 Version version("1.0.0.0"); 1454 Version version("1.0.0.0");
1454 // Install an external extension. 1455 // Install an external extension.
1455 service_->OnExternalExtensionFileFound(good_crx, &version, 1456 service_->OnExternalExtensionFileFound(good_crx, &version,
1456 path, Extension::EXTERNAL_PREF, 1457 path, Manifest::EXTERNAL_PREF,
1457 Extension::NO_FLAGS, false); 1458 Extension::NO_FLAGS, false);
1458 loop_.RunUntilIdle(); 1459 loop_.RunUntilIdle();
1459 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1460 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1460 1461
1461 // Uninstall it and check that its killbit gets set. 1462 // Uninstall it and check that its killbit gets set.
1462 UninstallExtension(good_crx, false); 1463 UninstallExtension(good_crx, false);
1463 ValidateIntegerPref(good_crx, "location", 1464 ValidateIntegerPref(good_crx, "location",
1464 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 1465 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
1465 1466
1466 // Try to re-install it externally. This should fail because of the killbit. 1467 // Try to re-install it externally. This should fail because of the killbit.
1467 service_->OnExternalExtensionFileFound(good_crx, &version, 1468 service_->OnExternalExtensionFileFound(good_crx, &version,
1468 path, Extension::EXTERNAL_PREF, 1469 path, Manifest::EXTERNAL_PREF,
1469 Extension::NO_FLAGS, false); 1470 Extension::NO_FLAGS, false);
1470 loop_.RunUntilIdle(); 1471 loop_.RunUntilIdle();
1471 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); 1472 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
1472 ValidateIntegerPref(good_crx, "location", 1473 ValidateIntegerPref(good_crx, "location",
1473 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 1474 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
1474 1475
1475 version = Version("1.0.0.1"); 1476 version = Version("1.0.0.1");
1476 // Repeat the same thing with a newer version of the extension. 1477 // Repeat the same thing with a newer version of the extension.
1477 path = data_dir_.AppendASCII("good2.crx"); 1478 path = data_dir_.AppendASCII("good2.crx");
1478 service_->OnExternalExtensionFileFound(good_crx, &version, 1479 service_->OnExternalExtensionFileFound(good_crx, &version,
1479 path, Extension::EXTERNAL_PREF, 1480 path, Manifest::EXTERNAL_PREF,
1480 Extension::NO_FLAGS, false); 1481 Extension::NO_FLAGS, false);
1481 loop_.RunUntilIdle(); 1482 loop_.RunUntilIdle();
1482 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); 1483 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false));
1483 ValidateIntegerPref(good_crx, "location", 1484 ValidateIntegerPref(good_crx, "location",
1484 Extension::EXTERNAL_EXTENSION_UNINSTALLED); 1485 Extension::EXTERNAL_EXTENSION_UNINSTALLED);
1485 1486
1486 // Try adding the same extension from an external update URL. 1487 // Try adding the same extension from an external update URL.
1487 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( 1488 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl(
1488 good_crx, 1489 good_crx,
1489 GURL("http:://fake.update/url"), 1490 GURL("http:://fake.update/url"),
1490 Extension::EXTERNAL_PREF_DOWNLOAD)); 1491 Manifest::EXTERNAL_PREF_DOWNLOAD));
1491 1492
1492 ASSERT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx)); 1493 ASSERT_FALSE(service_->pending_extension_manager()->IsIdPending(good_crx));
1493 } 1494 }
1494 1495
1495 // Test that uninstalling an external extension does not crash when 1496 // Test that uninstalling an external extension does not crash when
1496 // the extension could not be loaded. 1497 // the extension could not be loaded.
1497 // This extension shown in preferences file requires an experimental permission. 1498 // This extension shown in preferences file requires an experimental permission.
1498 // It could not be loaded without such permission. 1499 // It could not be loaded without such permission.
1499 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) { 1500 TEST_F(ExtensionServiceTest, UninstallingNotLoadedExtension) {
1500 FilePath source_install_dir = data_dir_ 1501 FilePath source_install_dir = data_dir_
1501 .AppendASCII("good") 1502 .AppendASCII("good")
1502 .AppendASCII("Extensions"); 1503 .AppendASCII("Extensions");
1503 // The preference contains an external extension 1504 // The preference contains an external extension
1504 // that requires 'experimental' permission. 1505 // that requires 'experimental' permission.
1505 FilePath pref_path = source_install_dir 1506 FilePath pref_path = source_install_dir
1506 .DirName() 1507 .DirName()
1507 .AppendASCII("PreferencesExperimental"); 1508 .AppendASCII("PreferencesExperimental");
1508 1509
1509 // Aforementioned extension will not be loaded if 1510 // Aforementioned extension will not be loaded if
1510 // there is no '--enable-experimental-extension-apis' command line flag. 1511 // there is no '--enable-experimental-extension-apis' command line flag.
1511 InitializeInstalledExtensionService(pref_path, source_install_dir); 1512 InitializeInstalledExtensionService(pref_path, source_install_dir);
1512 1513
1513 service_->Init(); 1514 service_->Init();
1514 1515
1515 // Check and try to uninstall it. 1516 // Check and try to uninstall it.
1516 // If we don't check whether the extension is loaded before we uninstall it 1517 // If we don't check whether the extension is loaded before we uninstall it
1517 // in CheckExternalUninstall, a crash will happen here because we will get or 1518 // in CheckExternalUninstall, a crash will happen here because we will get or
1518 // dereference a NULL pointer (extension) inside UninstallExtension. 1519 // dereference a NULL pointer (extension) inside UninstallExtension.
1519 MockExtensionProvider provider(NULL, Extension::EXTERNAL_REGISTRY); 1520 MockExtensionProvider provider(NULL, Manifest::EXTERNAL_REGISTRY);
1520 service_->OnExternalProviderReady(&provider); 1521 service_->OnExternalProviderReady(&provider);
1521 } 1522 }
1522 1523
1523 // Test that external extensions with incorrect IDs are not installed. 1524 // Test that external extensions with incorrect IDs are not installed.
1524 TEST_F(ExtensionServiceTest, FailOnWrongId) { 1525 TEST_F(ExtensionServiceTest, FailOnWrongId) {
1525 InitializeEmptyExtensionService(); 1526 InitializeEmptyExtensionService();
1526 FilePath path = data_dir_.AppendASCII("good.crx"); 1527 FilePath path = data_dir_.AppendASCII("good.crx");
1527 set_extensions_enabled(true); 1528 set_extensions_enabled(true);
1528 1529
1529 Version version("1.0.0.0"); 1530 Version version("1.0.0.0");
1530 1531
1531 const std::string wrong_id = all_zero; 1532 const std::string wrong_id = all_zero;
1532 const std::string correct_id = good_crx; 1533 const std::string correct_id = good_crx;
1533 ASSERT_NE(correct_id, wrong_id); 1534 ASSERT_NE(correct_id, wrong_id);
1534 1535
1535 // Install an external extension with an ID from the external 1536 // Install an external extension with an ID from the external
1536 // source that is not equal to the ID in the extension manifest. 1537 // source that is not equal to the ID in the extension manifest.
1537 service_->OnExternalExtensionFileFound( 1538 service_->OnExternalExtensionFileFound(
1538 wrong_id, &version, path, Extension::EXTERNAL_PREF, 1539 wrong_id, &version, path, Manifest::EXTERNAL_PREF,
1539 Extension::NO_FLAGS, false); 1540 Extension::NO_FLAGS, false);
1540 1541
1541 loop_.RunUntilIdle(); 1542 loop_.RunUntilIdle();
1542 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); 1543 ASSERT_FALSE(service_->GetExtensionById(good_crx, false));
1543 1544
1544 // Try again with the right ID. Expect success. 1545 // Try again with the right ID. Expect success.
1545 service_->OnExternalExtensionFileFound( 1546 service_->OnExternalExtensionFileFound(
1546 correct_id, &version, path, Extension::EXTERNAL_PREF, 1547 correct_id, &version, path, Manifest::EXTERNAL_PREF,
1547 Extension::NO_FLAGS, false); 1548 Extension::NO_FLAGS, false);
1548 loop_.RunUntilIdle(); 1549 loop_.RunUntilIdle();
1549 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1550 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1550 } 1551 }
1551 1552
1552 // Test that external extensions with incorrect versions are not installed. 1553 // Test that external extensions with incorrect versions are not installed.
1553 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { 1554 TEST_F(ExtensionServiceTest, FailOnWrongVersion) {
1554 InitializeEmptyExtensionService(); 1555 InitializeEmptyExtensionService();
1555 FilePath path = data_dir_.AppendASCII("good.crx"); 1556 FilePath path = data_dir_.AppendASCII("good.crx");
1556 set_extensions_enabled(true); 1557 set_extensions_enabled(true);
1557 1558
1558 // Install an external extension with a version from the external 1559 // Install an external extension with a version from the external
1559 // source that is not equal to the version in the extension manifest. 1560 // source that is not equal to the version in the extension manifest.
1560 Version wrong_version("1.2.3.4"); 1561 Version wrong_version("1.2.3.4");
1561 service_->OnExternalExtensionFileFound( 1562 service_->OnExternalExtensionFileFound(
1562 good_crx, &wrong_version, path, Extension::EXTERNAL_PREF, 1563 good_crx, &wrong_version, path, Manifest::EXTERNAL_PREF,
1563 Extension::NO_FLAGS, false); 1564 Extension::NO_FLAGS, false);
1564 1565
1565 loop_.RunUntilIdle(); 1566 loop_.RunUntilIdle();
1566 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); 1567 ASSERT_FALSE(service_->GetExtensionById(good_crx, false));
1567 1568
1568 // Try again with the right version. Expect success. 1569 // Try again with the right version. Expect success.
1569 service_->pending_extension_manager()->Remove(good_crx); 1570 service_->pending_extension_manager()->Remove(good_crx);
1570 Version correct_version("1.0.0.0"); 1571 Version correct_version("1.0.0.0");
1571 service_->OnExternalExtensionFileFound( 1572 service_->OnExternalExtensionFileFound(
1572 good_crx, &correct_version, path, Extension::EXTERNAL_PREF, 1573 good_crx, &correct_version, path, Manifest::EXTERNAL_PREF,
1573 Extension::NO_FLAGS, false); 1574 Extension::NO_FLAGS, false);
1574 loop_.RunUntilIdle(); 1575 loop_.RunUntilIdle();
1575 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); 1576 ASSERT_TRUE(service_->GetExtensionById(good_crx, false));
1576 } 1577 }
1577 1578
1578 // Install a user script (they get converted automatically to an extension) 1579 // Install a user script (they get converted automatically to an extension)
1579 TEST_F(ExtensionServiceTest, InstallUserScript) { 1580 TEST_F(ExtensionServiceTest, InstallUserScript) {
1580 // The details of script conversion are tested elsewhere, this just tests 1581 // The details of script conversion are tested elsewhere, this just tests
1581 // integration with ExtensionService. 1582 // integration with ExtensionService.
1582 InitializeEmptyExtensionService(); 1583 InitializeEmptyExtensionService();
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after
2049 2050
2050 TEST_F(ExtensionServiceTest, InstallTheme) { 2051 TEST_F(ExtensionServiceTest, InstallTheme) {
2051 InitializeEmptyExtensionService(); 2052 InitializeEmptyExtensionService();
2052 2053
2053 // A theme. 2054 // A theme.
2054 FilePath path = data_dir_.AppendASCII("theme.crx"); 2055 FilePath path = data_dir_.AppendASCII("theme.crx");
2055 InstallCRX(path, INSTALL_NEW); 2056 InstallCRX(path, INSTALL_NEW);
2056 int pref_count = 0; 2057 int pref_count = 0;
2057 ValidatePrefKeyCount(++pref_count); 2058 ValidatePrefKeyCount(++pref_count);
2058 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED); 2059 ValidateIntegerPref(theme_crx, "state", Extension::ENABLED);
2059 ValidateIntegerPref(theme_crx, "location", Extension::INTERNAL); 2060 ValidateIntegerPref(theme_crx, "location", Manifest::INTERNAL);
2060 2061
2061 // A theme when extensions are disabled. Themes can be installed, even when 2062 // A theme when extensions are disabled. Themes can be installed, even when
2062 // extensions are disabled. 2063 // extensions are disabled.
2063 set_extensions_enabled(false); 2064 set_extensions_enabled(false);
2064 path = data_dir_.AppendASCII("theme2.crx"); 2065 path = data_dir_.AppendASCII("theme2.crx");
2065 InstallCRX(path, INSTALL_NEW); 2066 InstallCRX(path, INSTALL_NEW);
2066 ValidatePrefKeyCount(++pref_count); 2067 ValidatePrefKeyCount(++pref_count);
2067 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED); 2068 ValidateIntegerPref(theme2_crx, "state", Extension::ENABLED);
2068 ValidateIntegerPref(theme2_crx, "location", Extension::INTERNAL); 2069 ValidateIntegerPref(theme2_crx, "location", Manifest::INTERNAL);
2069 2070
2070 // A theme with extension elements. Themes cannot have extension elements, 2071 // A theme with extension elements. Themes cannot have extension elements,
2071 // so any such elements (like content scripts) should be ignored. 2072 // so any such elements (like content scripts) should be ignored.
2072 set_extensions_enabled(true); 2073 set_extensions_enabled(true);
2073 { 2074 {
2074 path = data_dir_.AppendASCII("theme_with_extension.crx"); 2075 path = data_dir_.AppendASCII("theme_with_extension.crx");
2075 const Extension* extension = InstallCRX(path, INSTALL_NEW); 2076 const Extension* extension = InstallCRX(path, INSTALL_NEW);
2076 ValidatePrefKeyCount(++pref_count); 2077 ValidatePrefKeyCount(++pref_count);
2077 ASSERT_TRUE(extension); 2078 ASSERT_TRUE(extension);
2078 EXPECT_TRUE(extension->is_theme()); 2079 EXPECT_TRUE(extension->is_theme());
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
2200 TEST_F(ExtensionServiceTest, InstallApps) { 2201 TEST_F(ExtensionServiceTest, InstallApps) {
2201 InitializeEmptyExtensionService(); 2202 InitializeEmptyExtensionService();
2202 2203
2203 // An empty app. 2204 // An empty app.
2204 const Extension* app = PackAndInstallCRX(data_dir_.AppendASCII("app1"), 2205 const Extension* app = PackAndInstallCRX(data_dir_.AppendASCII("app1"),
2205 INSTALL_NEW); 2206 INSTALL_NEW);
2206 int pref_count = 0; 2207 int pref_count = 0;
2207 ValidatePrefKeyCount(++pref_count); 2208 ValidatePrefKeyCount(++pref_count);
2208 ASSERT_EQ(1u, service_->extensions()->size()); 2209 ASSERT_EQ(1u, service_->extensions()->size());
2209 ValidateIntegerPref(app->id(), "state", Extension::ENABLED); 2210 ValidateIntegerPref(app->id(), "state", Extension::ENABLED);
2210 ValidateIntegerPref(app->id(), "location", Extension::INTERNAL); 2211 ValidateIntegerPref(app->id(), "location", Manifest::INTERNAL);
2211 2212
2212 // Another app with non-overlapping extent. Should succeed. 2213 // Another app with non-overlapping extent. Should succeed.
2213 PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW); 2214 PackAndInstallCRX(data_dir_.AppendASCII("app2"), INSTALL_NEW);
2214 ValidatePrefKeyCount(++pref_count); 2215 ValidatePrefKeyCount(++pref_count);
2215 2216
2216 // A third app whose extent overlaps the first. Should fail. 2217 // A third app whose extent overlaps the first. Should fail.
2217 PackAndInstallCRX(data_dir_.AppendASCII("app3"), INSTALL_FAILED); 2218 PackAndInstallCRX(data_dir_.AppendASCII("app3"), INSTALL_FAILED);
2218 ValidatePrefKeyCount(pref_count); 2219 ValidatePrefKeyCount(pref_count);
2219 } 2220 }
2220 2221
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
2396 // Test that when an extension version is reinstalled, nothing happens. 2397 // Test that when an extension version is reinstalled, nothing happens.
2397 TEST_F(ExtensionServiceTest, Reinstall) { 2398 TEST_F(ExtensionServiceTest, Reinstall) {
2398 InitializeEmptyExtensionService(); 2399 InitializeEmptyExtensionService();
2399 2400
2400 // A simple extension that should install without error. 2401 // A simple extension that should install without error.
2401 FilePath path = data_dir_.AppendASCII("good.crx"); 2402 FilePath path = data_dir_.AppendASCII("good.crx");
2402 InstallCRX(path, INSTALL_NEW); 2403 InstallCRX(path, INSTALL_NEW);
2403 2404
2404 ValidatePrefKeyCount(1); 2405 ValidatePrefKeyCount(1);
2405 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 2406 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
2406 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); 2407 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL);
2407 2408
2408 // Reinstall the same version, it should overwrite the previous one. 2409 // Reinstall the same version, it should overwrite the previous one.
2409 InstallCRX(path, INSTALL_UPDATED); 2410 InstallCRX(path, INSTALL_UPDATED);
2410 2411
2411 ValidatePrefKeyCount(1); 2412 ValidatePrefKeyCount(1);
2412 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 2413 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
2413 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); 2414 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL);
2414 } 2415 }
2415 2416
2416 // Test that we can determine if extensions came from the 2417 // Test that we can determine if extensions came from the
2417 // Chrome web store. 2418 // Chrome web store.
2418 TEST_F(ExtensionServiceTest, FromWebStore) { 2419 TEST_F(ExtensionServiceTest, FromWebStore) {
2419 InitializeEmptyExtensionService(); 2420 InitializeEmptyExtensionService();
2420 2421
2421 // A simple extension that should install without error. 2422 // A simple extension that should install without error.
2422 FilePath path = data_dir_.AppendASCII("good.crx"); 2423 FilePath path = data_dir_.AppendASCII("good.crx");
2423 // Not from web store. 2424 // Not from web store.
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2585 good2->id())); 2586 good2->id()));
2586 } 2587 }
2587 2588
2588 // Tests that updating preserves extension location. 2589 // Tests that updating preserves extension location.
2589 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) { 2590 TEST_F(ExtensionServiceTest, UpdateExtensionPreservesLocation) {
2590 InitializeEmptyExtensionService(); 2591 InitializeEmptyExtensionService();
2591 2592
2592 FilePath path = data_dir_.AppendASCII("good.crx"); 2593 FilePath path = data_dir_.AppendASCII("good.crx");
2593 2594
2594 const Extension* good = 2595 const Extension* good =
2595 InstallCRXWithLocation(path, Extension::EXTERNAL_PREF, INSTALL_NEW); 2596 InstallCRXWithLocation(path, Manifest::EXTERNAL_PREF, INSTALL_NEW);
2596 2597
2597 ASSERT_EQ("1.0.0.0", good->VersionString()); 2598 ASSERT_EQ("1.0.0.0", good->VersionString());
2598 ASSERT_EQ(good_crx, good->id()); 2599 ASSERT_EQ(good_crx, good->id());
2599 2600
2600 path = data_dir_.AppendASCII("good2.crx"); 2601 path = data_dir_.AppendASCII("good2.crx");
2601 UpdateExtension(good_crx, path, ENABLED); 2602 UpdateExtension(good_crx, path, ENABLED);
2602 const Extension* good2 = service_->GetExtensionById(good_crx, false); 2603 const Extension* good2 = service_->GetExtensionById(good_crx, false);
2603 ASSERT_EQ("1.0.0.1", good2->version()->GetString()); 2604 ASSERT_EQ("1.0.0.1", good2->version()->GetString());
2604 EXPECT_EQ(good2->location(), Extension::EXTERNAL_PREF); 2605 EXPECT_EQ(good2->location(), Manifest::EXTERNAL_PREF);
2605 } 2606 }
2606 2607
2607 // Makes sure that LOAD extension types can downgrade. 2608 // Makes sure that LOAD extension types can downgrade.
2608 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) { 2609 TEST_F(ExtensionServiceTest, LoadExtensionsCanDowngrade) {
2609 InitializeEmptyExtensionService(); 2610 InitializeEmptyExtensionService();
2610 2611
2611 base::ScopedTempDir temp; 2612 base::ScopedTempDir temp;
2612 ASSERT_TRUE(temp.CreateUniqueTempDir()); 2613 ASSERT_TRUE(temp.CreateUniqueTempDir());
2613 2614
2614 // We'll write the extension manifest dynamically to a temporary path 2615 // We'll write the extension manifest dynamically to a temporary path
2615 // to make it easier to change the version number. 2616 // to make it easier to change the version number.
2616 FilePath extension_path = temp.path(); 2617 FilePath extension_path = temp.path();
2617 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename); 2618 FilePath manifest_path = extension_path.Append(Extension::kManifestFilename);
2618 ASSERT_FALSE(file_util::PathExists(manifest_path)); 2619 ASSERT_FALSE(file_util::PathExists(manifest_path));
2619 2620
2620 // Start with version 2.0. 2621 // Start with version 2.0.
2621 DictionaryValue manifest; 2622 DictionaryValue manifest;
2622 manifest.SetString("version", "2.0"); 2623 manifest.SetString("version", "2.0");
2623 manifest.SetString("name", "LOAD Downgrade Test"); 2624 manifest.SetString("name", "LOAD Downgrade Test");
2624 manifest.SetInteger("manifest_version", 2); 2625 manifest.SetInteger("manifest_version", 2);
2625 2626
2626 JSONFileValueSerializer serializer(manifest_path); 2627 JSONFileValueSerializer serializer(manifest_path);
2627 ASSERT_TRUE(serializer.Serialize(manifest)); 2628 ASSERT_TRUE(serializer.Serialize(manifest));
2628 2629
2629 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); 2630 extensions::UnpackedInstaller::Create(service_)->Load(extension_path);
2630 loop_.RunUntilIdle(); 2631 loop_.RunUntilIdle();
2631 2632
2632 EXPECT_EQ(0u, GetErrors().size()); 2633 EXPECT_EQ(0u, GetErrors().size());
2633 ASSERT_EQ(1u, loaded_.size()); 2634 ASSERT_EQ(1u, loaded_.size());
2634 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); 2635 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location());
2635 EXPECT_EQ(1u, service_->extensions()->size()); 2636 EXPECT_EQ(1u, service_->extensions()->size());
2636 EXPECT_EQ("2.0", loaded_[0]->VersionString()); 2637 EXPECT_EQ("2.0", loaded_[0]->VersionString());
2637 2638
2638 // Now set the version number to 1.0, reload the extensions and verify that 2639 // Now set the version number to 1.0, reload the extensions and verify that
2639 // the downgrade was accepted. 2640 // the downgrade was accepted.
2640 manifest.SetString("version", "1.0"); 2641 manifest.SetString("version", "1.0");
2641 ASSERT_TRUE(serializer.Serialize(manifest)); 2642 ASSERT_TRUE(serializer.Serialize(manifest));
2642 2643
2643 extensions::UnpackedInstaller::Create(service_)->Load(extension_path); 2644 extensions::UnpackedInstaller::Create(service_)->Load(extension_path);
2644 loop_.RunUntilIdle(); 2645 loop_.RunUntilIdle();
2645 2646
2646 EXPECT_EQ(0u, GetErrors().size()); 2647 EXPECT_EQ(0u, GetErrors().size());
2647 ASSERT_EQ(1u, loaded_.size()); 2648 ASSERT_EQ(1u, loaded_.size());
2648 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); 2649 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location());
2649 EXPECT_EQ(1u, service_->extensions()->size()); 2650 EXPECT_EQ(1u, service_->extensions()->size());
2650 EXPECT_EQ("1.0", loaded_[0]->VersionString()); 2651 EXPECT_EQ("1.0", loaded_[0]->VersionString());
2651 } 2652 }
2652 2653
2653 #if !defined(OS_CHROMEOS) 2654 #if !defined(OS_CHROMEOS)
2654 // LOAD extensions with plugins require approval. 2655 // LOAD extensions with plugins require approval.
2655 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) { 2656 TEST_F(ExtensionServiceTest, LoadExtensionsWithPlugins) {
2656 FilePath extension_with_plugin_path = data_dir_ 2657 FilePath extension_with_plugin_path = data_dir_
2657 .AppendASCII("good") 2658 .AppendASCII("good")
2658 .AppendASCII("Extensions") 2659 .AppendASCII("Extensions")
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
2726 loop_.RunUntilIdle(); 2727 loop_.RunUntilIdle();
2727 EXPECT_EQ(1u, loaded_.size()); 2728 EXPECT_EQ(1u, loaded_.size());
2728 EXPECT_EQ(2u, service_->extensions()->size()); 2729 EXPECT_EQ(2u, service_->extensions()->size());
2729 EXPECT_EQ(0u, service_->disabled_extensions()->size()); 2730 EXPECT_EQ(0u, service_->disabled_extensions()->size());
2730 } 2731 }
2731 #endif 2732 #endif
2732 2733
2733 namespace { 2734 namespace {
2734 2735
2735 bool IsExtension(const Extension& extension) { 2736 bool IsExtension(const Extension& extension) {
2736 return extension.GetType() == Extension::TYPE_EXTENSION; 2737 return extension.GetType() == Manifest::TYPE_EXTENSION;
2737 } 2738 }
2738 2739
2739 } // namespace 2740 } // namespace
2740 2741
2741 // Test adding a pending extension. 2742 // Test adding a pending extension.
2742 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) { 2743 TEST_F(ExtensionServiceTest, AddPendingExtensionFromSync) {
2743 InitializeEmptyExtensionService(); 2744 InitializeEmptyExtensionService();
2744 2745
2745 const std::string kFakeId(all_zero); 2746 const std::string kFakeId(all_zero);
2746 const GURL kFakeUpdateURL("http:://fake.update/url"); 2747 const GURL kFakeUpdateURL("http:://fake.update/url");
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2816 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx 2817 #define MAYBE_UpdatePendingExternalCrx DISABLED_UpdatePendingExternalCrx
2817 #else 2818 #else
2818 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx 2819 #define MAYBE_UpdatePendingExternalCrx UpdatePendingExternalCrx
2819 #endif 2820 #endif
2820 // Test updating a pending CRX as if the source is an external extension 2821 // Test updating a pending CRX as if the source is an external extension
2821 // with an update URL. In this case we don't know if the CRX is a theme 2822 // with an update URL. In this case we don't know if the CRX is a theme
2822 // or not. 2823 // or not.
2823 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) { 2824 TEST_F(ExtensionServiceTest, MAYBE_UpdatePendingExternalCrx) {
2824 InitializeEmptyExtensionService(); 2825 InitializeEmptyExtensionService();
2825 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( 2826 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl(
2826 theme_crx, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD)); 2827 theme_crx, GURL(), Manifest::EXTERNAL_PREF_DOWNLOAD));
2827 2828
2828 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx)); 2829 EXPECT_TRUE(service_->pending_extension_manager()->IsIdPending(theme_crx));
2829 2830
2830 FilePath path = data_dir_.AppendASCII("theme.crx"); 2831 FilePath path = data_dir_.AppendASCII("theme.crx");
2831 UpdateExtension(theme_crx, path, ENABLED); 2832 UpdateExtension(theme_crx, path, ENABLED);
2832 2833
2833 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx)); 2834 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(theme_crx));
2834 2835
2835 const Extension* extension = service_->GetExtensionById(theme_crx, true); 2836 const Extension* extension = service_->GetExtensionById(theme_crx, true);
2836 ASSERT_TRUE(extension); 2837 ASSERT_TRUE(extension);
(...skipping 16 matching lines...) Expand all
2853 kGoodInstallSilently)); 2854 kGoodInstallSilently));
2854 2855
2855 // Check that there is a pending crx, with is_from_sync set to true. 2856 // Check that there is a pending crx, with is_from_sync set to true.
2856 const extensions::PendingExtensionInfo* pending_extension_info; 2857 const extensions::PendingExtensionInfo* pending_extension_info;
2857 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> 2858 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()->
2858 GetById(kGoodId))); 2859 GetById(kGoodId)));
2859 EXPECT_TRUE(pending_extension_info->is_from_sync()); 2860 EXPECT_TRUE(pending_extension_info->is_from_sync());
2860 2861
2861 // Add a crx to be updated, with the same ID, from a non-sync source. 2862 // Add a crx to be updated, with the same ID, from a non-sync source.
2862 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( 2863 EXPECT_TRUE(service_->pending_extension_manager()->AddFromExternalUpdateUrl(
2863 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_PREF_DOWNLOAD)); 2864 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_PREF_DOWNLOAD));
2864 2865
2865 // Check that there is a pending crx, with is_from_sync set to false. 2866 // Check that there is a pending crx, with is_from_sync set to false.
2866 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> 2867 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()->
2867 GetById(kGoodId))); 2868 GetById(kGoodId)));
2868 EXPECT_FALSE(pending_extension_info->is_from_sync()); 2869 EXPECT_FALSE(pending_extension_info->is_from_sync());
2869 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, 2870 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD,
2870 pending_extension_info->install_source()); 2871 pending_extension_info->install_source());
2871 2872
2872 // Add a crx to be installed from the update mechanism. 2873 // Add a crx to be installed from the update mechanism.
2873 EXPECT_FALSE(service_->pending_extension_manager()->AddFromSync( 2874 EXPECT_FALSE(service_->pending_extension_manager()->AddFromSync(
2874 kGoodId, GURL(kGoodUpdateURL), &IsExtension, 2875 kGoodId, GURL(kGoodUpdateURL), &IsExtension,
2875 kGoodInstallSilently)); 2876 kGoodInstallSilently));
2876 2877
2877 // Check that the external, non-sync update was not overridden. 2878 // Check that the external, non-sync update was not overridden.
2878 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()-> 2879 ASSERT_TRUE((pending_extension_info = service_->pending_extension_manager()->
2879 GetById(kGoodId))); 2880 GetById(kGoodId)));
2880 EXPECT_FALSE(pending_extension_info->is_from_sync()); 2881 EXPECT_FALSE(pending_extension_info->is_from_sync());
2881 EXPECT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, 2882 EXPECT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD,
2882 pending_extension_info->install_source()); 2883 pending_extension_info->install_source());
2883 } 2884 }
2884 2885
2885 // Updating a theme should fail if the updater is explicitly told that 2886 // Updating a theme should fail if the updater is explicitly told that
2886 // the CRX is not a theme. 2887 // the CRX is not a theme.
2887 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) { 2888 TEST_F(ExtensionServiceTest, UpdatePendingCrxThemeMismatch) {
2888 InitializeEmptyExtensionService(); 2889 InitializeEmptyExtensionService();
2889 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync( 2890 EXPECT_TRUE(service_->pending_extension_manager()->AddFromSync(
2890 theme_crx, GURL(), &IsExtension, true)); 2891 theme_crx, GURL(), &IsExtension, true));
2891 2892
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2942 FilePath path = data_dir_.AppendASCII("good.crx"); 2943 FilePath path = data_dir_.AppendASCII("good.crx");
2943 const Extension* good = InstallCRX(path, INSTALL_NEW); 2944 const Extension* good = InstallCRX(path, INSTALL_NEW);
2944 ASSERT_EQ(1u, service_->extensions()->size()); 2945 ASSERT_EQ(1u, service_->extensions()->size());
2945 2946
2946 EXPECT_FALSE(good->is_theme()); 2947 EXPECT_FALSE(good->is_theme());
2947 2948
2948 // Use AddExtensionImpl() as AddFrom*() would balk. 2949 // Use AddExtensionImpl() as AddFrom*() would balk.
2949 service_->pending_extension_manager()->AddExtensionImpl( 2950 service_->pending_extension_manager()->AddExtensionImpl(
2950 good->id(), extensions::ManifestURL::GetUpdateURL(good), 2951 good->id(), extensions::ManifestURL::GetUpdateURL(good),
2951 Version(), &IsExtension, kGoodIsFromSync, 2952 Version(), &IsExtension, kGoodIsFromSync,
2952 kGoodInstallSilently, Extension::INTERNAL); 2953 kGoodInstallSilently, Manifest::INTERNAL);
2953 UpdateExtension(good->id(), path, ENABLED); 2954 UpdateExtension(good->id(), path, ENABLED);
2954 2955
2955 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId)); 2956 EXPECT_FALSE(service_->pending_extension_manager()->IsIdPending(kGoodId));
2956 } 2957 }
2957 2958
2958 // Test pref settings for blacklist and unblacklist extensions. 2959 // Test pref settings for blacklist and unblacklist extensions.
2959 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) { 2960 TEST_F(ExtensionServiceTest, SetUnsetBlacklistInPrefs) {
2960 InitializeEmptyExtensionService(); 2961 InitializeEmptyExtensionService();
2961 std::vector<std::string> blacklist; 2962 std::vector<std::string> blacklist;
2962 blacklist.push_back(good0); 2963 blacklist.push_back(good0);
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
3221 // Mark good.crx for force-installation. 3222 // Mark good.crx for force-installation.
3222 DictionaryPrefUpdate forcelist_update(profile_->GetPrefs(), 3223 DictionaryPrefUpdate forcelist_update(profile_->GetPrefs(),
3223 prefs::kExtensionInstallForceList); 3224 prefs::kExtensionInstallForceList);
3224 extensions::ExternalPolicyLoader::AddExtension( 3225 extensions::ExternalPolicyLoader::AddExtension(
3225 forcelist_update.Get(), good_crx, "http://example.com/update_url"); 3226 forcelist_update.Get(), good_crx, "http://example.com/update_url");
3226 } 3227 }
3227 3228
3228 // Have policy force-install an extension. 3229 // Have policy force-install an extension.
3229 MockExtensionProvider* provider = 3230 MockExtensionProvider* provider =
3230 new MockExtensionProvider(service_, 3231 new MockExtensionProvider(service_,
3231 Extension::EXTERNAL_POLICY_DOWNLOAD); 3232 Manifest::EXTERNAL_POLICY_DOWNLOAD);
3232 AddMockExternalProvider(provider); 3233 AddMockExternalProvider(provider);
3233 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", 3234 provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
3234 data_dir_.AppendASCII("good.crx")); 3235 data_dir_.AppendASCII("good.crx"));
3235 3236
3236 // Reloading extensions should find our externally registered extension 3237 // Reloading extensions should find our externally registered extension
3237 // and install it. 3238 // and install it.
3238 service_->CheckForExternalUpdates(); 3239 service_->CheckForExternalUpdates();
3239 loop_.RunUntilIdle(); 3240 loop_.RunUntilIdle();
3240 3241
3241 // Extension should be installed despite blacklist. 3242 // Extension should be installed despite blacklist.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3276 // Create a fake extension to be loaded as though it were read from prefs. 3277 // Create a fake extension to be loaded as though it were read from prefs.
3277 FilePath path = data_dir_.AppendASCII("management") 3278 FilePath path = data_dir_.AppendASCII("management")
3278 .AppendASCII("simple_extension"); 3279 .AppendASCII("simple_extension");
3279 DictionaryValue manifest; 3280 DictionaryValue manifest;
3280 manifest.SetString(keys::kName, "simple_extension"); 3281 manifest.SetString(keys::kName, "simple_extension");
3281 manifest.SetString(keys::kVersion, "1"); 3282 manifest.SetString(keys::kVersion, "1");
3282 // LOAD is for extensions loaded from the command line. We use it here, even 3283 // LOAD is for extensions loaded from the command line. We use it here, even
3283 // though we're testing loading from prefs, so that we don't need to provide 3284 // though we're testing loading from prefs, so that we don't need to provide
3284 // an extension key. 3285 // an extension key.
3285 extensions::ExtensionInfo extension_info(&manifest, "", path, 3286 extensions::ExtensionInfo extension_info(&manifest, "", path,
3286 Extension::LOAD); 3287 Manifest::LOAD);
3287 3288
3288 // Ensure we can load it with no management policy in place. 3289 // Ensure we can load it with no management policy in place.
3289 management_policy_->UnregisterAllProviders(); 3290 management_policy_->UnregisterAllProviders();
3290 EXPECT_EQ(0u, service_->extensions()->size()); 3291 EXPECT_EQ(0u, service_->extensions()->size());
3291 extensions::InstalledLoader(service_).Load(extension_info, false); 3292 extensions::InstalledLoader(service_).Load(extension_info, false);
3292 EXPECT_EQ(1u, service_->extensions()->size()); 3293 EXPECT_EQ(1u, service_->extensions()->size());
3293 3294
3294 const Extension* extension = *(service_->extensions()->begin()); 3295 const Extension* extension = *(service_->extensions()->begin());
3295 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL)); 3296 EXPECT_TRUE(service_->UninstallExtension(extension->id(), false, NULL));
3296 EXPECT_EQ(0u, service_->extensions()->size()); 3297 EXPECT_EQ(0u, service_->extensions()->size());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
3390 EXPECT_EQ(0u, service_->disabled_extensions()->size()); 3391 EXPECT_EQ(0u, service_->disabled_extensions()->size());
3391 } 3392 }
3392 3393
3393 TEST_F(ExtensionServiceTest, ExternalExtensionAutoAcknowledgement) { 3394 TEST_F(ExtensionServiceTest, ExternalExtensionAutoAcknowledgement) {
3394 InitializeEmptyExtensionService(); 3395 InitializeEmptyExtensionService();
3395 set_extensions_enabled(true); 3396 set_extensions_enabled(true);
3396 3397
3397 { 3398 {
3398 // Register and install an external extension. 3399 // Register and install an external extension.
3399 MockExtensionProvider* provider = 3400 MockExtensionProvider* provider =
3400 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 3401 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
3401 AddMockExternalProvider(provider); 3402 AddMockExternalProvider(provider);
3402 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", 3403 provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
3403 data_dir_.AppendASCII("good.crx")); 3404 data_dir_.AppendASCII("good.crx"));
3404 } 3405 }
3405 { 3406 {
3406 // Have policy force-install an extension. 3407 // Have policy force-install an extension.
3407 MockExtensionProvider* provider = 3408 MockExtensionProvider* provider =
3408 new MockExtensionProvider(service_, 3409 new MockExtensionProvider(service_,
3409 Extension::EXTERNAL_POLICY_DOWNLOAD); 3410 Manifest::EXTERNAL_POLICY_DOWNLOAD);
3410 AddMockExternalProvider(provider); 3411 AddMockExternalProvider(provider);
3411 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 3412 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
3412 data_dir_.AppendASCII("page_action.crx")); 3413 data_dir_.AppendASCII("page_action.crx"));
3413 } 3414 }
3414 3415
3415 // Providers are set up. Let them run. 3416 // Providers are set up. Let them run.
3416 service_->CheckForExternalUpdates(); 3417 service_->CheckForExternalUpdates();
3417 loop_.RunUntilIdle(); 3418 loop_.RunUntilIdle();
3418 3419
3419 ASSERT_EQ(2u, service_->extensions()->size()); 3420 ASSERT_EQ(2u, service_->extensions()->size());
(...skipping 18 matching lines...) Expand all
3438 " \"external_crx\": \"good.crx\"," 3439 " \"external_crx\": \"good.crx\","
3439 " \"external_version\": \"1.0.0.0\"," 3440 " \"external_version\": \"1.0.0.0\","
3440 " \"is_bookmark_app\": false" 3441 " \"is_bookmark_app\": false"
3441 " }" 3442 " }"
3442 "}"; 3443 "}";
3443 default_apps::Provider* provider = 3444 default_apps::Provider* provider =
3444 new default_apps::Provider( 3445 new default_apps::Provider(
3445 profile_.get(), 3446 profile_.get(),
3446 service_, 3447 service_,
3447 new extensions::ExternalTestingLoader(json_data, data_dir_), 3448 new extensions::ExternalTestingLoader(json_data, data_dir_),
3448 Extension::INTERNAL, 3449 Manifest::INTERNAL,
3449 Extension::INVALID, 3450 Manifest::INVALID_LOCATION,
3450 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT); 3451 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT);
3451 3452
3452 AddMockExternalProvider(provider); 3453 AddMockExternalProvider(provider);
3453 } 3454 }
3454 3455
3455 ASSERT_EQ(0u, service_->extensions()->size()); 3456 ASSERT_EQ(0u, service_->extensions()->size());
3456 service_->CheckForExternalUpdates(); 3457 service_->CheckForExternalUpdates();
3457 loop_.RunUntilIdle(); 3458 loop_.RunUntilIdle();
3458 3459
3459 ASSERT_EQ(1u, service_->extensions()->size()); 3460 ASSERT_EQ(1u, service_->extensions()->size());
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
3961 3962
3962 FilePath ext1 = data_dir_ 3963 FilePath ext1 = data_dir_
3963 .AppendASCII("good") 3964 .AppendASCII("good")
3964 .AppendASCII("Extensions") 3965 .AppendASCII("Extensions")
3965 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 3966 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
3966 .AppendASCII("1.0.0.0"); 3967 .AppendASCII("1.0.0.0");
3967 extensions::UnpackedInstaller::Create(service_)->Load(ext1); 3968 extensions::UnpackedInstaller::Create(service_)->Load(ext1);
3968 loop_.RunUntilIdle(); 3969 loop_.RunUntilIdle();
3969 EXPECT_EQ(0u, GetErrors().size()); 3970 EXPECT_EQ(0u, GetErrors().size());
3970 ASSERT_EQ(1u, loaded_.size()); 3971 ASSERT_EQ(1u, loaded_.size());
3971 EXPECT_EQ(Extension::LOAD, loaded_[0]->location()); 3972 EXPECT_EQ(Manifest::LOAD, loaded_[0]->location());
3972 EXPECT_EQ(1u, service_->extensions()->size()); 3973 EXPECT_EQ(1u, service_->extensions()->size());
3973 3974
3974 ValidatePrefKeyCount(1); 3975 ValidatePrefKeyCount(1);
3975 3976
3976 FilePath no_manifest = data_dir_ 3977 FilePath no_manifest = data_dir_
3977 .AppendASCII("bad") 3978 .AppendASCII("bad")
3978 // .AppendASCII("Extensions") 3979 // .AppendASCII("Extensions")
3979 .AppendASCII("cccccccccccccccccccccccccccccccc") 3980 .AppendASCII("cccccccccccccccccccccccccccccccc")
3980 .AppendASCII("1"); 3981 .AppendASCII("1");
3981 extensions::UnpackedInstaller::Create(service_)->Load(no_manifest); 3982 extensions::UnpackedInstaller::Create(service_)->Load(no_manifest);
(...skipping 16 matching lines...) Expand all
3998 // --load-extension. 3999 // --load-extension.
3999 TEST_F(ExtensionServiceTest, GenerateID) { 4000 TEST_F(ExtensionServiceTest, GenerateID) {
4000 InitializeEmptyExtensionService(); 4001 InitializeEmptyExtensionService();
4001 4002
4002 FilePath no_id_ext = data_dir_.AppendASCII("no_id"); 4003 FilePath no_id_ext = data_dir_.AppendASCII("no_id");
4003 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); 4004 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext);
4004 loop_.RunUntilIdle(); 4005 loop_.RunUntilIdle();
4005 EXPECT_EQ(0u, GetErrors().size()); 4006 EXPECT_EQ(0u, GetErrors().size());
4006 ASSERT_EQ(1u, loaded_.size()); 4007 ASSERT_EQ(1u, loaded_.size());
4007 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id())); 4008 ASSERT_TRUE(Extension::IdIsValid(loaded_[0]->id()));
4008 EXPECT_EQ(loaded_[0]->location(), Extension::LOAD); 4009 EXPECT_EQ(loaded_[0]->location(), Manifest::LOAD);
4009 4010
4010 ValidatePrefKeyCount(1); 4011 ValidatePrefKeyCount(1);
4011 4012
4012 std::string previous_id = loaded_[0]->id(); 4013 std::string previous_id = loaded_[0]->id();
4013 4014
4014 // If we reload the same path, we should get the same extension ID. 4015 // If we reload the same path, we should get the same extension ID.
4015 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext); 4016 extensions::UnpackedInstaller::Create(service_)->Load(no_id_ext);
4016 loop_.RunUntilIdle(); 4017 loop_.RunUntilIdle();
4017 ASSERT_EQ(1u, loaded_.size()); 4018 ASSERT_EQ(1u, loaded_.size());
4018 ASSERT_EQ(previous_id, loaded_[0]->id()); 4019 ASSERT_EQ(previous_id, loaded_[0]->id());
4019 } 4020 }
4020 4021
4021 void ExtensionServiceTest::TestExternalProvider( 4022 void ExtensionServiceTest::TestExternalProvider(
4022 MockExtensionProvider* provider, Extension::Location location) { 4023 MockExtensionProvider* provider, Manifest::Location location) {
4023 // Verify that starting with no providers loads no extensions. 4024 // Verify that starting with no providers loads no extensions.
4024 service_->Init(); 4025 service_->Init();
4025 ASSERT_EQ(0u, loaded_.size()); 4026 ASSERT_EQ(0u, loaded_.size());
4026 4027
4027 provider->set_visit_count(0); 4028 provider->set_visit_count(0);
4028 4029
4029 // Register a test extension externally using the mock registry provider. 4030 // Register a test extension externally using the mock registry provider.
4030 FilePath source_path = data_dir_.AppendASCII("good.crx"); 4031 FilePath source_path = data_dir_.AppendASCII("good.crx");
4031 4032
4032 // Add the extension. 4033 // Add the extension.
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
4152 4153
4153 // Tests the external installation feature 4154 // Tests the external installation feature
4154 #if defined(OS_WIN) 4155 #if defined(OS_WIN)
4155 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) { 4156 TEST_F(ExtensionServiceTest, ExternalInstallRegistry) {
4156 // This should all work, even when normal extension installation is disabled. 4157 // This should all work, even when normal extension installation is disabled.
4157 InitializeEmptyExtensionService(); 4158 InitializeEmptyExtensionService();
4158 set_extensions_enabled(false); 4159 set_extensions_enabled(false);
4159 4160
4160 // Now add providers. Extension system takes ownership of the objects. 4161 // Now add providers. Extension system takes ownership of the objects.
4161 MockExtensionProvider* reg_provider = 4162 MockExtensionProvider* reg_provider =
4162 new MockExtensionProvider(service_, Extension::EXTERNAL_REGISTRY); 4163 new MockExtensionProvider(service_, Manifest::EXTERNAL_REGISTRY);
4163 AddMockExternalProvider(reg_provider); 4164 AddMockExternalProvider(reg_provider);
4164 TestExternalProvider(reg_provider, Extension::EXTERNAL_REGISTRY); 4165 TestExternalProvider(reg_provider, Manifest::EXTERNAL_REGISTRY);
4165 } 4166 }
4166 #endif 4167 #endif
4167 4168
4168 TEST_F(ExtensionServiceTest, ExternalInstallPref) { 4169 TEST_F(ExtensionServiceTest, ExternalInstallPref) {
4169 InitializeEmptyExtensionService(); 4170 InitializeEmptyExtensionService();
4170 4171
4171 // Now add providers. Extension system takes ownership of the objects. 4172 // Now add providers. Extension system takes ownership of the objects.
4172 MockExtensionProvider* pref_provider = 4173 MockExtensionProvider* pref_provider =
4173 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 4174 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
4174 4175
4175 AddMockExternalProvider(pref_provider); 4176 AddMockExternalProvider(pref_provider);
4176 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF); 4177 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF);
4177 } 4178 }
4178 4179
4179 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) { 4180 TEST_F(ExtensionServiceTest, ExternalInstallPrefUpdateUrl) {
4180 // This should all work, even when normal extension installation is disabled. 4181 // This should all work, even when normal extension installation is disabled.
4181 InitializeEmptyExtensionService(); 4182 InitializeEmptyExtensionService();
4182 set_extensions_enabled(false); 4183 set_extensions_enabled(false);
4183 4184
4184 // TODO(skerner): The mock provider is not a good model of a provider 4185 // TODO(skerner): The mock provider is not a good model of a provider
4185 // that works with update URLs, because it adds file and version info. 4186 // that works with update URLs, because it adds file and version info.
4186 // Extend the mock to work with update URLs. This test checks the 4187 // Extend the mock to work with update URLs. This test checks the
4187 // behavior that is common to all external extension visitors. The 4188 // behavior that is common to all external extension visitors. The
4188 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that 4189 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that
4189 // what the visitor does results in an extension being downloaded and 4190 // what the visitor does results in an extension being downloaded and
4190 // installed. 4191 // installed.
4191 MockExtensionProvider* pref_provider = 4192 MockExtensionProvider* pref_provider =
4192 new MockExtensionProvider(service_, 4193 new MockExtensionProvider(service_,
4193 Extension::EXTERNAL_PREF_DOWNLOAD); 4194 Manifest::EXTERNAL_PREF_DOWNLOAD);
4194 AddMockExternalProvider(pref_provider); 4195 AddMockExternalProvider(pref_provider);
4195 TestExternalProvider(pref_provider, Extension::EXTERNAL_PREF_DOWNLOAD); 4196 TestExternalProvider(pref_provider, Manifest::EXTERNAL_PREF_DOWNLOAD);
4196 } 4197 }
4197 4198
4198 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) { 4199 TEST_F(ExtensionServiceTest, ExternalInstallPolicyUpdateUrl) {
4199 // This should all work, even when normal extension installation is disabled. 4200 // This should all work, even when normal extension installation is disabled.
4200 InitializeEmptyExtensionService(); 4201 InitializeEmptyExtensionService();
4201 set_extensions_enabled(false); 4202 set_extensions_enabled(false);
4202 4203
4203 // TODO(skerner): The mock provider is not a good model of a provider 4204 // TODO(skerner): The mock provider is not a good model of a provider
4204 // that works with update URLs, because it adds file and version info. 4205 // that works with update URLs, because it adds file and version info.
4205 // Extend the mock to work with update URLs. This test checks the 4206 // Extend the mock to work with update URLs. This test checks the
4206 // behavior that is common to all external extension visitors. The 4207 // behavior that is common to all external extension visitors. The
4207 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that 4208 // browser test ExtensionManagementTest.ExternalUrlUpdate tests that
4208 // what the visitor does results in an extension being downloaded and 4209 // what the visitor does results in an extension being downloaded and
4209 // installed. 4210 // installed.
4210 MockExtensionProvider* pref_provider = 4211 MockExtensionProvider* pref_provider =
4211 new MockExtensionProvider(service_, 4212 new MockExtensionProvider(service_,
4212 Extension::EXTERNAL_POLICY_DOWNLOAD); 4213 Manifest::EXTERNAL_POLICY_DOWNLOAD);
4213 AddMockExternalProvider(pref_provider); 4214 AddMockExternalProvider(pref_provider);
4214 TestExternalProvider(pref_provider, Extension::EXTERNAL_POLICY_DOWNLOAD); 4215 TestExternalProvider(pref_provider, Manifest::EXTERNAL_POLICY_DOWNLOAD);
4215 } 4216 }
4216 4217
4217 // Tests that external extensions get uninstalled when the external extension 4218 // Tests that external extensions get uninstalled when the external extension
4218 // providers can't account for them. 4219 // providers can't account for them.
4219 TEST_F(ExtensionServiceTest, ExternalUninstall) { 4220 TEST_F(ExtensionServiceTest, ExternalUninstall) {
4220 // Start the extensions service with one external extension already installed. 4221 // Start the extensions service with one external extension already installed.
4221 FilePath source_install_dir = data_dir_ 4222 FilePath source_install_dir = data_dir_
4222 .AppendASCII("good") 4223 .AppendASCII("good")
4223 .AppendASCII("Extensions"); 4224 .AppendASCII("Extensions");
4224 FilePath pref_path = source_install_dir 4225 FilePath pref_path = source_install_dir
(...skipping 17 matching lines...) Expand all
4242 ASSERT_EQ(0u, GetErrors().size()); 4243 ASSERT_EQ(0u, GetErrors().size());
4243 ASSERT_EQ(0u, loaded_.size()); 4244 ASSERT_EQ(0u, loaded_.size());
4244 } 4245 }
4245 4246
4246 // Test that running multiple update checks simultaneously does not 4247 // Test that running multiple update checks simultaneously does not
4247 // keep the update from succeeding. 4248 // keep the update from succeeding.
4248 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) { 4249 TEST_F(ExtensionServiceTest, MultipleExternalUpdateCheck) {
4249 InitializeEmptyExtensionService(); 4250 InitializeEmptyExtensionService();
4250 4251
4251 MockExtensionProvider* provider = 4252 MockExtensionProvider* provider =
4252 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 4253 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
4253 AddMockExternalProvider(provider); 4254 AddMockExternalProvider(provider);
4254 4255
4255 // Verify that starting with no providers loads no extensions. 4256 // Verify that starting with no providers loads no extensions.
4256 service_->Init(); 4257 service_->Init();
4257 ASSERT_EQ(0u, loaded_.size()); 4258 ASSERT_EQ(0u, loaded_.size());
4258 4259
4259 // Start two checks for updates. 4260 // Start two checks for updates.
4260 provider->set_visit_count(0); 4261 provider->set_visit_count(0);
4261 service_->CheckForExternalUpdates(); 4262 service_->CheckForExternalUpdates();
4262 service_->CheckForExternalUpdates(); 4263 service_->CheckForExternalUpdates();
(...skipping 10 matching lines...) Expand all
4273 4274
4274 // Two checks for external updates should find the extension, and install it 4275 // Two checks for external updates should find the extension, and install it
4275 // once. 4276 // once.
4276 provider->set_visit_count(0); 4277 provider->set_visit_count(0);
4277 service_->CheckForExternalUpdates(); 4278 service_->CheckForExternalUpdates();
4278 service_->CheckForExternalUpdates(); 4279 service_->CheckForExternalUpdates();
4279 loop_.RunUntilIdle(); 4280 loop_.RunUntilIdle();
4280 EXPECT_EQ(2, provider->visit_count()); 4281 EXPECT_EQ(2, provider->visit_count());
4281 ASSERT_EQ(0u, GetErrors().size()); 4282 ASSERT_EQ(0u, GetErrors().size());
4282 ASSERT_EQ(1u, loaded_.size()); 4283 ASSERT_EQ(1u, loaded_.size());
4283 ASSERT_EQ(Extension::EXTERNAL_PREF, loaded_[0]->location()); 4284 ASSERT_EQ(Manifest::EXTERNAL_PREF, loaded_[0]->location());
4284 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString()); 4285 ASSERT_EQ("1.0.0.0", loaded_[0]->version()->GetString());
4285 ValidatePrefKeyCount(1); 4286 ValidatePrefKeyCount(1);
4286 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 4287 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
4287 ValidateIntegerPref(good_crx, "location", Extension::EXTERNAL_PREF); 4288 ValidateIntegerPref(good_crx, "location", Manifest::EXTERNAL_PREF);
4288 4289
4289 provider->RemoveExtension(good_crx); 4290 provider->RemoveExtension(good_crx);
4290 provider->set_visit_count(0); 4291 provider->set_visit_count(0);
4291 service_->CheckForExternalUpdates(); 4292 service_->CheckForExternalUpdates();
4292 service_->CheckForExternalUpdates(); 4293 service_->CheckForExternalUpdates();
4293 loop_.RunUntilIdle(); 4294 loop_.RunUntilIdle();
4294 4295
4295 // Two calls should cause two checks for external extensions. 4296 // Two calls should cause two checks for external extensions.
4296 // Because the external source no longer includes good_crx, 4297 // Because the external source no longer includes good_crx,
4297 // good_crx will be uninstalled. So, expect that no extensions 4298 // good_crx will be uninstalled. So, expect that no extensions
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
4682 path.Append(Extension::kManifestFilename), &manifest)); 4683 path.Append(Extension::kManifestFilename), &manifest));
4683 4684
4684 service_->component_loader()->Add(manifest, path); 4685 service_->component_loader()->Add(manifest, path);
4685 service_->Init(); 4686 service_->Init();
4686 4687
4687 // Note that we do not pump messages -- the extension should be loaded 4688 // Note that we do not pump messages -- the extension should be loaded
4688 // immediately. 4689 // immediately.
4689 4690
4690 EXPECT_EQ(0u, GetErrors().size()); 4691 EXPECT_EQ(0u, GetErrors().size());
4691 ASSERT_EQ(1u, loaded_.size()); 4692 ASSERT_EQ(1u, loaded_.size());
4692 EXPECT_EQ(Extension::COMPONENT, loaded_[0]->location()); 4693 EXPECT_EQ(Manifest::COMPONENT, loaded_[0]->location());
4693 EXPECT_EQ(1u, service_->extensions()->size()); 4694 EXPECT_EQ(1u, service_->extensions()->size());
4694 4695
4695 // Component extensions get a prefs entry on first install. 4696 // Component extensions get a prefs entry on first install.
4696 ValidatePrefKeyCount(1); 4697 ValidatePrefKeyCount(1);
4697 4698
4698 // Reload all extensions, and make sure it comes back. 4699 // Reload all extensions, and make sure it comes back.
4699 std::string extension_id = (*service_->extensions()->begin())->id(); 4700 std::string extension_id = (*service_->extensions()->begin())->id();
4700 loaded_.clear(); 4701 loaded_.clear();
4701 service_->ReloadExtensions(); 4702 service_->ReloadExtensions();
4702 ASSERT_EQ(1u, service_->extensions()->size()); 4703 ASSERT_EQ(1u, service_->extensions()->size());
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
4822 ASSERT_EQ(list.size(), 1U); 4823 ASSERT_EQ(list.size(), 1U);
4823 extensions::ExtensionSyncData data(list[0]); 4824 extensions::ExtensionSyncData data(list[0]);
4824 EXPECT_TRUE(data.enabled()); 4825 EXPECT_TRUE(data.enabled());
4825 EXPECT_TRUE(data.incognito_enabled()); 4826 EXPECT_TRUE(data.incognito_enabled());
4826 } 4827 }
4827 } 4828 }
4828 4829
4829 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) { 4830 TEST_F(ExtensionServiceTest, SyncForUninstalledExternalExtension) {
4830 InitializeEmptyExtensionService(); 4831 InitializeEmptyExtensionService();
4831 InstallCRXWithLocation(data_dir_.AppendASCII("good.crx"), 4832 InstallCRXWithLocation(data_dir_.AppendASCII("good.crx"),
4832 Extension::EXTERNAL_PREF, INSTALL_NEW); 4833 Manifest::EXTERNAL_PREF, INSTALL_NEW);
4833 const Extension* extension = service_->GetInstalledExtension(good_crx); 4834 const Extension* extension = service_->GetInstalledExtension(good_crx);
4834 ASSERT_TRUE(extension); 4835 ASSERT_TRUE(extension);
4835 4836
4836 TestSyncProcessorStub processor; 4837 TestSyncProcessorStub processor;
4837 service_->MergeDataAndStartSyncing( 4838 service_->MergeDataAndStartSyncing(
4838 syncer::EXTENSIONS, syncer::SyncDataList(), 4839 syncer::EXTENSIONS, syncer::SyncDataList(),
4839 scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub), 4840 scoped_ptr<syncer::SyncChangeProcessor>(new TestSyncProcessorStub),
4840 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 4841 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
4841 4842
4842 UninstallExtension(good_crx, false); 4843 UninstallExtension(good_crx, false);
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
5258 EXPECT_TRUE(service_->updater()->WillCheckSoon()); 5259 EXPECT_TRUE(service_->updater()->WillCheckSoon());
5259 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); 5260 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
5260 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx)); 5261 EXPECT_TRUE(service_->IsIncognitoEnabled(good_crx));
5261 5262
5262 const extensions::PendingExtensionInfo* info; 5263 const extensions::PendingExtensionInfo* info;
5263 EXPECT_TRUE((info = service_->pending_extension_manager()-> 5264 EXPECT_TRUE((info = service_->pending_extension_manager()->
5264 GetById(good_crx))); 5265 GetById(good_crx)));
5265 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec()); 5266 EXPECT_EQ(ext_specifics->update_url(), info->update_url().spec());
5266 EXPECT_TRUE(info->is_from_sync()); 5267 EXPECT_TRUE(info->is_from_sync());
5267 EXPECT_TRUE(info->install_silently()); 5268 EXPECT_TRUE(info->install_silently());
5268 EXPECT_EQ(Extension::INTERNAL, info->install_source()); 5269 EXPECT_EQ(Manifest::INTERNAL, info->install_source());
5269 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|. 5270 // TODO(akalin): Figure out a way to test |info.ShouldAllowInstall()|.
5270 } 5271 }
5271 5272
5272 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) { 5273 TEST_F(ExtensionServiceTest, InstallPriorityExternalUpdateUrl) {
5273 InitializeEmptyExtensionService(); 5274 InitializeEmptyExtensionService();
5274 5275
5275 FilePath path = data_dir_.AppendASCII("good.crx"); 5276 FilePath path = data_dir_.AppendASCII("good.crx");
5276 InstallCRX(path, INSTALL_NEW); 5277 InstallCRX(path, INSTALL_NEW);
5277 ValidatePrefKeyCount(1u); 5278 ValidatePrefKeyCount(1u);
5278 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 5279 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
5279 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); 5280 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL);
5280 5281
5281 extensions::PendingExtensionManager* pending = 5282 extensions::PendingExtensionManager* pending =
5282 service_->pending_extension_manager(); 5283 service_->pending_extension_manager();
5283 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5284 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5284 5285
5285 // Skip install when the location is the same. 5286 // Skip install when the location is the same.
5286 EXPECT_FALSE( 5287 EXPECT_FALSE(
5287 service_->OnExternalExtensionUpdateUrlFound( 5288 service_->OnExternalExtensionUpdateUrlFound(
5288 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); 5289 kGoodId, GURL(kGoodUpdateURL), Manifest::INTERNAL));
5289 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5290 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5290 5291
5291 // Install when the location has higher priority. 5292 // Install when the location has higher priority.
5292 EXPECT_TRUE( 5293 EXPECT_TRUE(
5293 service_->OnExternalExtensionUpdateUrlFound( 5294 service_->OnExternalExtensionUpdateUrlFound(
5294 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_POLICY_DOWNLOAD)); 5295 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_POLICY_DOWNLOAD));
5295 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5296 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5296 5297
5297 // Try the low priority again. Should be rejected. 5298 // Try the low priority again. Should be rejected.
5298 EXPECT_FALSE( 5299 EXPECT_FALSE(
5299 service_->OnExternalExtensionUpdateUrlFound( 5300 service_->OnExternalExtensionUpdateUrlFound(
5300 kGoodId, GURL(kGoodUpdateURL), Extension::EXTERNAL_PREF_DOWNLOAD)); 5301 kGoodId, GURL(kGoodUpdateURL), Manifest::EXTERNAL_PREF_DOWNLOAD));
5301 // The existing record should still be present in the pending extension 5302 // The existing record should still be present in the pending extension
5302 // manager. 5303 // manager.
5303 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5304 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5304 5305
5305 pending->Remove(kGoodId); 5306 pending->Remove(kGoodId);
5306 5307
5307 // Skip install when the location has the same priority as the installed 5308 // Skip install when the location has the same priority as the installed
5308 // location. 5309 // location.
5309 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( 5310 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound(
5310 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); 5311 kGoodId, GURL(kGoodUpdateURL), Manifest::INTERNAL));
5311 5312
5312 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5313 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5313 } 5314 }
5314 5315
5315 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { 5316 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) {
5316 Version older_version("0.1.0.0"); 5317 Version older_version("0.1.0.0");
5317 Version newer_version("2.0.0.0"); 5318 Version newer_version("2.0.0.0");
5318 5319
5319 // We don't want the extension to be installed. A path that doesn't 5320 // We don't want the extension to be installed. A path that doesn't
5320 // point to a valid CRX ensures this. 5321 // point to a valid CRX ensures this.
5321 const FilePath kInvalidPathToCrx = FilePath(); 5322 const FilePath kInvalidPathToCrx = FilePath();
5322 5323
5323 const int kCreationFlags = 0; 5324 const int kCreationFlags = 0;
5324 const bool kDontMarkAcknowledged = false; 5325 const bool kDontMarkAcknowledged = false;
5325 5326
5326 InitializeEmptyExtensionService(); 5327 InitializeEmptyExtensionService();
5327 5328
5328 // The test below uses install source constants to test that 5329 // The test below uses install source constants to test that
5329 // priority is enforced. It assumes a specific ranking of install 5330 // priority is enforced. It assumes a specific ranking of install
5330 // sources: Registry (EXTERNAL_REGISTRY) overrides external pref 5331 // sources: Registry (EXTERNAL_REGISTRY) overrides external pref
5331 // (EXTERNAL_PREF), and external pref overrides user install (INTERNAL). 5332 // (EXTERNAL_PREF), and external pref overrides user install (INTERNAL).
5332 // The following assertions verify these assumptions: 5333 // The following assertions verify these assumptions:
5333 ASSERT_EQ(Extension::EXTERNAL_REGISTRY, 5334 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY,
5334 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_REGISTRY, 5335 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY,
5335 Extension::EXTERNAL_PREF)); 5336 Manifest::EXTERNAL_PREF));
5336 ASSERT_EQ(Extension::EXTERNAL_REGISTRY, 5337 ASSERT_EQ(Manifest::EXTERNAL_REGISTRY,
5337 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_REGISTRY, 5338 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_REGISTRY,
5338 Extension::INTERNAL)); 5339 Manifest::INTERNAL));
5339 ASSERT_EQ(Extension::EXTERNAL_PREF, 5340 ASSERT_EQ(Manifest::EXTERNAL_PREF,
5340 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_PREF, 5341 Manifest::GetHigherPriorityLocation(Manifest::EXTERNAL_PREF,
5341 Extension::INTERNAL)); 5342 Manifest::INTERNAL));
5342 5343
5343 extensions::PendingExtensionManager* pending = 5344 extensions::PendingExtensionManager* pending =
5344 service_->pending_extension_manager(); 5345 service_->pending_extension_manager();
5345 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5346 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5346 5347
5347 // Simulate an external source adding the extension as INTERNAL. 5348 // Simulate an external source adding the extension as INTERNAL.
5348 EXPECT_TRUE( 5349 EXPECT_TRUE(
5349 service_->OnExternalExtensionFileFound( 5350 service_->OnExternalExtensionFileFound(
5350 kGoodId, &older_version, kInvalidPathToCrx, 5351 kGoodId, &older_version, kInvalidPathToCrx,
5351 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5352 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5352 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5353 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5353 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); 5354 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED);
5354 5355
5355 // Simulate an external source adding the extension as EXTERNAL_PREF. 5356 // Simulate an external source adding the extension as EXTERNAL_PREF.
5356 EXPECT_TRUE( 5357 EXPECT_TRUE(
5357 service_->OnExternalExtensionFileFound( 5358 service_->OnExternalExtensionFileFound(
5358 kGoodId, &older_version, kInvalidPathToCrx, 5359 kGoodId, &older_version, kInvalidPathToCrx,
5359 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5360 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5360 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5361 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5361 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); 5362 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED);
5362 5363
5363 // Simulate an external source adding as EXTERNAL_PREF again. 5364 // Simulate an external source adding as EXTERNAL_PREF again.
5364 // This is rejected because the version and the location are the same as 5365 // This is rejected because the version and the location are the same as
5365 // the previous installation, which is still pending. 5366 // the previous installation, which is still pending.
5366 EXPECT_FALSE( 5367 EXPECT_FALSE(
5367 service_->OnExternalExtensionFileFound( 5368 service_->OnExternalExtensionFileFound(
5368 kGoodId, &older_version, kInvalidPathToCrx, 5369 kGoodId, &older_version, kInvalidPathToCrx,
5369 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5370 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5370 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5371 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5371 5372
5372 // Try INTERNAL again. Should fail. 5373 // Try INTERNAL again. Should fail.
5373 EXPECT_FALSE( 5374 EXPECT_FALSE(
5374 service_->OnExternalExtensionFileFound( 5375 service_->OnExternalExtensionFileFound(
5375 kGoodId, &older_version, kInvalidPathToCrx, 5376 kGoodId, &older_version, kInvalidPathToCrx,
5376 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5377 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5377 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5378 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5378 5379
5379 // Now the registry adds the extension. 5380 // Now the registry adds the extension.
5380 EXPECT_TRUE( 5381 EXPECT_TRUE(
5381 service_->OnExternalExtensionFileFound( 5382 service_->OnExternalExtensionFileFound(
5382 kGoodId, &older_version, kInvalidPathToCrx, 5383 kGoodId, &older_version, kInvalidPathToCrx,
5383 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); 5384 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged));
5384 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5385 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5385 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); 5386 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED);
5386 5387
5387 // Registry outranks both external pref and internal, so both fail. 5388 // Registry outranks both external pref and internal, so both fail.
5388 EXPECT_FALSE( 5389 EXPECT_FALSE(
5389 service_->OnExternalExtensionFileFound( 5390 service_->OnExternalExtensionFileFound(
5390 kGoodId, &older_version, kInvalidPathToCrx, 5391 kGoodId, &older_version, kInvalidPathToCrx,
5391 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5392 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5392 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5393 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5393 5394
5394 EXPECT_FALSE( 5395 EXPECT_FALSE(
5395 service_->OnExternalExtensionFileFound( 5396 service_->OnExternalExtensionFileFound(
5396 kGoodId, &older_version, kInvalidPathToCrx, 5397 kGoodId, &older_version, kInvalidPathToCrx,
5397 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5398 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5398 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5399 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5399 5400
5400 pending->Remove(kGoodId); 5401 pending->Remove(kGoodId);
5401 5402
5402 // Install the extension. 5403 // Install the extension.
5403 FilePath path = data_dir_.AppendASCII("good.crx"); 5404 FilePath path = data_dir_.AppendASCII("good.crx");
5404 const Extension* ext = InstallCRX(path, INSTALL_NEW); 5405 const Extension* ext = InstallCRX(path, INSTALL_NEW);
5405 ValidatePrefKeyCount(1u); 5406 ValidatePrefKeyCount(1u);
5406 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); 5407 ValidateIntegerPref(good_crx, "state", Extension::ENABLED);
5407 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); 5408 ValidateIntegerPref(good_crx, "location", Manifest::INTERNAL);
5408 5409
5409 // Now test the logic of OnExternalExtensionFileFound() when the extension 5410 // Now test the logic of OnExternalExtensionFileFound() when the extension
5410 // being added is already installed. 5411 // being added is already installed.
5411 5412
5412 // Tests assume |older_version| is less than the installed version, and 5413 // Tests assume |older_version| is less than the installed version, and
5413 // |newer_version| is greater. Verify this: 5414 // |newer_version| is greater. Verify this:
5414 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); 5415 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString()));
5415 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); 5416 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString()));
5416 5417
5417 // An external install for the same location should fail if the version is 5418 // An external install for the same location should fail if the version is
5418 // older, or the same, and succeed if the version is newer. 5419 // older, or the same, and succeed if the version is newer.
5419 5420
5420 // Older than the installed version... 5421 // Older than the installed version...
5421 EXPECT_FALSE( 5422 EXPECT_FALSE(
5422 service_->OnExternalExtensionFileFound( 5423 service_->OnExternalExtensionFileFound(
5423 kGoodId, &older_version, kInvalidPathToCrx, 5424 kGoodId, &older_version, kInvalidPathToCrx,
5424 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5425 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5425 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5426 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5426 5427
5427 // Same version as the installed version... 5428 // Same version as the installed version...
5428 EXPECT_FALSE( 5429 EXPECT_FALSE(
5429 service_->OnExternalExtensionFileFound( 5430 service_->OnExternalExtensionFileFound(
5430 kGoodId, ext->version(), kInvalidPathToCrx, 5431 kGoodId, ext->version(), kInvalidPathToCrx,
5431 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5432 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5432 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5433 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5433 5434
5434 // Newer than the installed version... 5435 // Newer than the installed version...
5435 EXPECT_TRUE( 5436 EXPECT_TRUE(
5436 service_->OnExternalExtensionFileFound( 5437 service_->OnExternalExtensionFileFound(
5437 kGoodId, &newer_version, kInvalidPathToCrx, 5438 kGoodId, &newer_version, kInvalidPathToCrx,
5438 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); 5439 Manifest::INTERNAL, kCreationFlags, kDontMarkAcknowledged));
5439 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5440 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5440 5441
5441 // An external install for a higher priority install source should succeed 5442 // An external install for a higher priority install source should succeed
5442 // if the version is greater. |older_version| is not... 5443 // if the version is greater. |older_version| is not...
5443 EXPECT_FALSE( 5444 EXPECT_FALSE(
5444 service_->OnExternalExtensionFileFound( 5445 service_->OnExternalExtensionFileFound(
5445 kGoodId, &older_version, kInvalidPathToCrx, 5446 kGoodId, &older_version, kInvalidPathToCrx,
5446 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5447 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5447 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5448 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5448 5449
5449 // |newer_version| is newer. 5450 // |newer_version| is newer.
5450 EXPECT_TRUE( 5451 EXPECT_TRUE(
5451 service_->OnExternalExtensionFileFound( 5452 service_->OnExternalExtensionFileFound(
5452 kGoodId, &newer_version, kInvalidPathToCrx, 5453 kGoodId, &newer_version, kInvalidPathToCrx,
5453 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5454 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5454 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5455 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5455 5456
5456 // An external install for an even higher priority install source should 5457 // An external install for an even higher priority install source should
5457 // succeed if the version is greater. 5458 // succeed if the version is greater.
5458 EXPECT_TRUE( 5459 EXPECT_TRUE(
5459 service_->OnExternalExtensionFileFound( 5460 service_->OnExternalExtensionFileFound(
5460 kGoodId, &newer_version, kInvalidPathToCrx, 5461 kGoodId, &newer_version, kInvalidPathToCrx,
5461 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); 5462 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged));
5462 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5463 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5463 5464
5464 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, 5465 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY,
5465 // adding from external pref will now fail. 5466 // adding from external pref will now fail.
5466 EXPECT_FALSE( 5467 EXPECT_FALSE(
5467 service_->OnExternalExtensionFileFound( 5468 service_->OnExternalExtensionFileFound(
5468 kGoodId, &newer_version, kInvalidPathToCrx, 5469 kGoodId, &newer_version, kInvalidPathToCrx,
5469 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5470 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5470 EXPECT_TRUE(pending->IsIdPending(kGoodId)); 5471 EXPECT_TRUE(pending->IsIdPending(kGoodId));
5471 } 5472 }
5472 5473
5473 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { 5474 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) {
5474 Version kVersion123("1.2.3"); 5475 Version kVersion123("1.2.3");
5475 Version kVersion124("1.2.4"); 5476 Version kVersion124("1.2.4");
5476 Version kVersion125("1.2.5"); 5477 Version kVersion125("1.2.5");
5477 const FilePath kInvalidPathToCrx = FilePath(); 5478 const FilePath kInvalidPathToCrx = FilePath();
5478 const int kCreationFlags = 0; 5479 const int kCreationFlags = 0;
5479 const bool kDontMarkAcknowledged = false; 5480 const bool kDontMarkAcknowledged = false;
5480 5481
5481 InitializeEmptyExtensionService(); 5482 InitializeEmptyExtensionService();
5482 5483
5483 extensions::PendingExtensionManager* pending = 5484 extensions::PendingExtensionManager* pending =
5484 service_->pending_extension_manager(); 5485 service_->pending_extension_manager();
5485 EXPECT_FALSE(pending->IsIdPending(kGoodId)); 5486 EXPECT_FALSE(pending->IsIdPending(kGoodId));
5486 5487
5487 // An external provider starts installing from a local crx. 5488 // An external provider starts installing from a local crx.
5488 EXPECT_TRUE( 5489 EXPECT_TRUE(
5489 service_->OnExternalExtensionFileFound( 5490 service_->OnExternalExtensionFileFound(
5490 kGoodId, &kVersion123, kInvalidPathToCrx, 5491 kGoodId, &kVersion123, kInvalidPathToCrx,
5491 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5492 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5492 const extensions::PendingExtensionInfo* info; 5493 const extensions::PendingExtensionInfo* info;
5493 EXPECT_TRUE((info = pending->GetById(kGoodId))); 5494 EXPECT_TRUE((info = pending->GetById(kGoodId)));
5494 EXPECT_TRUE(info->version().IsValid()); 5495 EXPECT_TRUE(info->version().IsValid());
5495 EXPECT_TRUE(info->version().Equals(kVersion123)); 5496 EXPECT_TRUE(info->version().Equals(kVersion123));
5496 5497
5497 // Adding a newer version overrides the currently pending version. 5498 // Adding a newer version overrides the currently pending version.
5498 EXPECT_TRUE( 5499 EXPECT_TRUE(
5499 service_->OnExternalExtensionFileFound( 5500 service_->OnExternalExtensionFileFound(
5500 kGoodId, &kVersion124, kInvalidPathToCrx, 5501 kGoodId, &kVersion124, kInvalidPathToCrx,
5501 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5502 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5502 EXPECT_TRUE((info = pending->GetById(kGoodId))); 5503 EXPECT_TRUE((info = pending->GetById(kGoodId)));
5503 EXPECT_TRUE(info->version().IsValid()); 5504 EXPECT_TRUE(info->version().IsValid());
5504 EXPECT_TRUE(info->version().Equals(kVersion124)); 5505 EXPECT_TRUE(info->version().Equals(kVersion124));
5505 5506
5506 // Adding an older version fails. 5507 // Adding an older version fails.
5507 EXPECT_FALSE( 5508 EXPECT_FALSE(
5508 service_->OnExternalExtensionFileFound( 5509 service_->OnExternalExtensionFileFound(
5509 kGoodId, &kVersion123, kInvalidPathToCrx, 5510 kGoodId, &kVersion123, kInvalidPathToCrx,
5510 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); 5511 Manifest::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged));
5511 EXPECT_TRUE((info = pending->GetById(kGoodId))); 5512 EXPECT_TRUE((info = pending->GetById(kGoodId)));
5512 EXPECT_TRUE(info->version().IsValid()); 5513 EXPECT_TRUE(info->version().IsValid());
5513 EXPECT_TRUE(info->version().Equals(kVersion124)); 5514 EXPECT_TRUE(info->version().Equals(kVersion124));
5514 5515
5515 // Adding an older version fails even when coming from a higher-priority 5516 // Adding an older version fails even when coming from a higher-priority
5516 // location. 5517 // location.
5517 EXPECT_FALSE( 5518 EXPECT_FALSE(
5518 service_->OnExternalExtensionFileFound( 5519 service_->OnExternalExtensionFileFound(
5519 kGoodId, &kVersion123, kInvalidPathToCrx, 5520 kGoodId, &kVersion123, kInvalidPathToCrx,
5520 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); 5521 Manifest::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged));
5521 EXPECT_TRUE((info = pending->GetById(kGoodId))); 5522 EXPECT_TRUE((info = pending->GetById(kGoodId)));
5522 EXPECT_TRUE(info->version().IsValid()); 5523 EXPECT_TRUE(info->version().IsValid());
5523 EXPECT_TRUE(info->version().Equals(kVersion124)); 5524 EXPECT_TRUE(info->version().Equals(kVersion124));
5524 5525
5525 // Adding the latest version from the webstore overrides a specific version. 5526 // Adding the latest version from the webstore overrides a specific version.
5526 GURL kUpdateUrl("http://example.com/update"); 5527 GURL kUpdateUrl("http://example.com/update");
5527 EXPECT_TRUE( 5528 EXPECT_TRUE(
5528 service_->OnExternalExtensionUpdateUrlFound( 5529 service_->OnExternalExtensionUpdateUrlFound(
5529 kGoodId, kUpdateUrl, Extension::EXTERNAL_POLICY_DOWNLOAD)); 5530 kGoodId, kUpdateUrl, Manifest::EXTERNAL_POLICY_DOWNLOAD));
5530 EXPECT_TRUE((info = pending->GetById(kGoodId))); 5531 EXPECT_TRUE((info = pending->GetById(kGoodId)));
5531 EXPECT_FALSE(info->version().IsValid()); 5532 EXPECT_FALSE(info->version().IsValid());
5532 } 5533 }
5533 5534
5534 // This makes sure we can package and install CRX files that use whitelisted 5535 // This makes sure we can package and install CRX files that use whitelisted
5535 // permissions. 5536 // permissions.
5536 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) { 5537 TEST_F(ExtensionServiceTest, InstallWhitelistedExtension) {
5537 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk"; 5538 std::string test_id = "hdkklepkcpckhnpgjnmbdfhehckloojk";
5538 CommandLine::ForCurrentProcess()->AppendSwitchASCII( 5539 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
5539 switches::kWhitelistedExtensionID, test_id); 5540 switches::kWhitelistedExtensionID, test_id);
(...skipping 23 matching lines...) Expand all
5563 5564
5564 // All tests use a single extension. Put the id and path in member vars 5565 // All tests use a single extension. Put the id and path in member vars
5565 // that all methods can read. 5566 // that all methods can read.
5566 crx_id_ = kGoodId; 5567 crx_id_ = kGoodId;
5567 crx_path_ = data_dir_.AppendASCII("good.crx"); 5568 crx_path_ = data_dir_.AppendASCII("good.crx");
5568 } 5569 }
5569 5570
5570 // Fake an external source adding a URL to fetch an extension from. 5571 // Fake an external source adding a URL to fetch an extension from.
5571 bool AddPendingExternalPrefUrl() { 5572 bool AddPendingExternalPrefUrl() {
5572 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( 5573 return service_->pending_extension_manager()->AddFromExternalUpdateUrl(
5573 crx_id_, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); 5574 crx_id_, GURL(), Manifest::EXTERNAL_PREF_DOWNLOAD);
5574 } 5575 }
5575 5576
5576 // Fake an external file from external_extensions.json. 5577 // Fake an external file from external_extensions.json.
5577 bool AddPendingExternalPrefFileInstall() { 5578 bool AddPendingExternalPrefFileInstall() {
5578 Version version("1.0.0.0"); 5579 Version version("1.0.0.0");
5579 5580
5580 return service_->OnExternalExtensionFileFound( 5581 return service_->OnExternalExtensionFileFound(
5581 crx_id_, &version, crx_path_, Extension::EXTERNAL_PREF, 5582 crx_id_, &version, crx_path_, Manifest::EXTERNAL_PREF,
5582 Extension::NO_FLAGS, false); 5583 Extension::NO_FLAGS, false);
5583 } 5584 }
5584 5585
5585 // Fake a request from sync to install an extension. 5586 // Fake a request from sync to install an extension.
5586 bool AddPendingSyncInstall() { 5587 bool AddPendingSyncInstall() {
5587 return service_->pending_extension_manager()->AddFromSync( 5588 return service_->pending_extension_manager()->AddFromSync(
5588 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently); 5589 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently);
5589 } 5590 }
5590 5591
5591 // Fake a policy install. 5592 // Fake a policy install.
5592 bool AddPendingPolicyInstall() { 5593 bool AddPendingPolicyInstall() {
5593 // Get path to the CRX with id |kGoodId|. 5594 // Get path to the CRX with id |kGoodId|.
5594 return service_->OnExternalExtensionUpdateUrlFound( 5595 return service_->OnExternalExtensionUpdateUrlFound(
5595 crx_id_, GURL(), Extension::EXTERNAL_POLICY_DOWNLOAD); 5596 crx_id_, GURL(), Manifest::EXTERNAL_POLICY_DOWNLOAD);
5596 } 5597 }
5597 5598
5598 // Get the install source of a pending extension. 5599 // Get the install source of a pending extension.
5599 Extension::Location GetPendingLocation() { 5600 Manifest::Location GetPendingLocation() {
5600 const extensions::PendingExtensionInfo* info; 5601 const extensions::PendingExtensionInfo* info;
5601 EXPECT_TRUE((info = service_->pending_extension_manager()-> 5602 EXPECT_TRUE((info = service_->pending_extension_manager()->
5602 GetById(crx_id_))); 5603 GetById(crx_id_)));
5603 return info->install_source(); 5604 return info->install_source();
5604 } 5605 }
5605 5606
5606 // Is an extension pending from a sync request? 5607 // Is an extension pending from a sync request?
5607 bool GetPendingIsFromSync() { 5608 bool GetPendingIsFromSync() {
5608 const extensions::PendingExtensionInfo* info; 5609 const extensions::PendingExtensionInfo* info;
5609 EXPECT_TRUE((info = service_->pending_extension_manager()-> 5610 EXPECT_TRUE((info = service_->pending_extension_manager()->
(...skipping 21 matching lines...) Expand all
5631 // Test that a pending request for installation of an external CRX from 5632 // Test that a pending request for installation of an external CRX from
5632 // an update URL overrides a pending request to install the same extension 5633 // an update URL overrides a pending request to install the same extension
5633 // from sync. 5634 // from sync.
5634 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) { 5635 TEST_F(ExtensionSourcePriorityTest, PendingExternalFileOverSync) {
5635 InitializeEmptyExtensionService(); 5636 InitializeEmptyExtensionService();
5636 5637
5637 ASSERT_FALSE(IsCrxInstalled()); 5638 ASSERT_FALSE(IsCrxInstalled());
5638 5639
5639 // Install pending extension from sync. 5640 // Install pending extension from sync.
5640 EXPECT_TRUE(AddPendingSyncInstall()); 5641 EXPECT_TRUE(AddPendingSyncInstall());
5641 ASSERT_EQ(Extension::INTERNAL, GetPendingLocation()); 5642 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation());
5642 EXPECT_TRUE(GetPendingIsFromSync()); 5643 EXPECT_TRUE(GetPendingIsFromSync());
5643 ASSERT_FALSE(IsCrxInstalled()); 5644 ASSERT_FALSE(IsCrxInstalled());
5644 5645
5645 // Install pending as external prefs json would. 5646 // Install pending as external prefs json would.
5646 AddPendingExternalPrefFileInstall(); 5647 AddPendingExternalPrefFileInstall();
5647 ASSERT_EQ(Extension::EXTERNAL_PREF, GetPendingLocation()); 5648 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation());
5648 ASSERT_FALSE(IsCrxInstalled()); 5649 ASSERT_FALSE(IsCrxInstalled());
5649 5650
5650 // Another request from sync should be ignorred. 5651 // Another request from sync should be ignorred.
5651 EXPECT_FALSE(AddPendingSyncInstall()); 5652 EXPECT_FALSE(AddPendingSyncInstall());
5652 ASSERT_EQ(Extension::EXTERNAL_PREF, GetPendingLocation()); 5653 ASSERT_EQ(Manifest::EXTERNAL_PREF, GetPendingLocation());
5653 ASSERT_FALSE(IsCrxInstalled()); 5654 ASSERT_FALSE(IsCrxInstalled());
5654 5655
5655 WaitForCrxInstall(crx_path_, INSTALL_NEW); 5656 WaitForCrxInstall(crx_path_, INSTALL_NEW);
5656 ASSERT_TRUE(IsCrxInstalled()); 5657 ASSERT_TRUE(IsCrxInstalled());
5657 } 5658 }
5658 5659
5659 // Test that an install of an external CRX from an update overrides 5660 // Test that an install of an external CRX from an update overrides
5660 // an install of the same extension from sync. 5661 // an install of the same extension from sync.
5661 TEST_F(ExtensionSourcePriorityTest, PendingExternalUrlOverSync) { 5662 TEST_F(ExtensionSourcePriorityTest, PendingExternalUrlOverSync) {
5662 InitializeEmptyExtensionService(); 5663 InitializeEmptyExtensionService();
5663 ASSERT_FALSE(IsCrxInstalled()); 5664 ASSERT_FALSE(IsCrxInstalled());
5664 5665
5665 EXPECT_TRUE(AddPendingSyncInstall()); 5666 EXPECT_TRUE(AddPendingSyncInstall());
5666 ASSERT_EQ(Extension::INTERNAL, GetPendingLocation()); 5667 ASSERT_EQ(Manifest::INTERNAL, GetPendingLocation());
5667 EXPECT_TRUE(GetPendingIsFromSync()); 5668 EXPECT_TRUE(GetPendingIsFromSync());
5668 ASSERT_FALSE(IsCrxInstalled()); 5669 ASSERT_FALSE(IsCrxInstalled());
5669 5670
5670 ASSERT_TRUE(AddPendingExternalPrefUrl()); 5671 ASSERT_TRUE(AddPendingExternalPrefUrl());
5671 ASSERT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); 5672 ASSERT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation());
5672 EXPECT_FALSE(GetPendingIsFromSync()); 5673 EXPECT_FALSE(GetPendingIsFromSync());
5673 ASSERT_FALSE(IsCrxInstalled()); 5674 ASSERT_FALSE(IsCrxInstalled());
5674 5675
5675 EXPECT_FALSE(AddPendingSyncInstall()); 5676 EXPECT_FALSE(AddPendingSyncInstall());
5676 ASSERT_EQ(Extension::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation()); 5677 ASSERT_EQ(Manifest::EXTERNAL_PREF_DOWNLOAD, GetPendingLocation());
5677 EXPECT_FALSE(GetPendingIsFromSync()); 5678 EXPECT_FALSE(GetPendingIsFromSync());
5678 ASSERT_FALSE(IsCrxInstalled()); 5679 ASSERT_FALSE(IsCrxInstalled());
5679 } 5680 }
5680 5681
5681 // Test that an external install request stops sync from installing 5682 // Test that an external install request stops sync from installing
5682 // the same extension. 5683 // the same extension.
5683 TEST_F(ExtensionSourcePriorityTest, InstallExternalBlocksSyncRequest) { 5684 TEST_F(ExtensionSourcePriorityTest, InstallExternalBlocksSyncRequest) {
5684 InitializeEmptyExtensionService(); 5685 InitializeEmptyExtensionService();
5685 ASSERT_FALSE(IsCrxInstalled()); 5686 ASSERT_FALSE(IsCrxInstalled());
5686 5687
(...skipping 16 matching lines...) Expand all
5703 ASSERT_FALSE(AddPendingSyncInstall()); 5704 ASSERT_FALSE(AddPendingSyncInstall());
5704 } 5705 }
5705 5706
5706 // Test that installing an external extension displays a GlobalError. 5707 // Test that installing an external extension displays a GlobalError.
5707 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) { 5708 TEST_F(ExtensionServiceTest, ExternalInstallGlobalError) {
5708 FeatureSwitch::ScopedOverride prompt( 5709 FeatureSwitch::ScopedOverride prompt(
5709 FeatureSwitch::prompt_for_external_extensions(), true); 5710 FeatureSwitch::prompt_for_external_extensions(), true);
5710 5711
5711 InitializeEmptyExtensionService(); 5712 InitializeEmptyExtensionService();
5712 MockExtensionProvider* provider = 5713 MockExtensionProvider* provider =
5713 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 5714 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
5714 AddMockExternalProvider(provider); 5715 AddMockExternalProvider(provider);
5715 5716
5716 service_->UpdateExternalExtensionAlert(); 5717 service_->UpdateExternalExtensionAlert();
5717 // Should return false, meaning there aren't any extensions that the user 5718 // Should return false, meaning there aren't any extensions that the user
5718 // needs to know about. 5719 // needs to know about.
5719 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 5720 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5720 5721
5721 // This is a normal extension, installed normally. 5722 // This is a normal extension, installed normally.
5722 // This should NOT trigger an alert. 5723 // This should NOT trigger an alert.
5723 set_extensions_enabled(true); 5724 set_extensions_enabled(true);
(...skipping 24 matching lines...) Expand all
5748 } 5749 }
5749 5750
5750 // Test that external extensions are initially disabled, and that enabling 5751 // Test that external extensions are initially disabled, and that enabling
5751 // them clears the prompt. 5752 // them clears the prompt.
5752 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) { 5753 TEST_F(ExtensionServiceTest, ExternalInstallInitiallyDisabled) {
5753 FeatureSwitch::ScopedOverride prompt( 5754 FeatureSwitch::ScopedOverride prompt(
5754 FeatureSwitch::prompt_for_external_extensions(), true); 5755 FeatureSwitch::prompt_for_external_extensions(), true);
5755 5756
5756 InitializeEmptyExtensionService(); 5757 InitializeEmptyExtensionService();
5757 MockExtensionProvider* provider = 5758 MockExtensionProvider* provider =
5758 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 5759 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
5759 AddMockExternalProvider(provider); 5760 AddMockExternalProvider(provider);
5760 5761
5761 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 5762 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
5762 data_dir_.AppendASCII("page_action.crx")); 5763 data_dir_.AppendASCII("page_action.crx"));
5763 5764
5764 service_->CheckForExternalUpdates(); 5765 service_->CheckForExternalUpdates();
5765 loop_.RunUntilIdle(); 5766 loop_.RunUntilIdle();
5766 EXPECT_TRUE(extensions::HasExternalInstallError(service_)); 5767 EXPECT_TRUE(extensions::HasExternalInstallError(service_));
5767 EXPECT_FALSE(service_->IsExtensionEnabled(page_action)); 5768 EXPECT_FALSE(service_->IsExtensionEnabled(page_action));
5768 5769
5769 const Extension* extension = 5770 const Extension* extension =
5770 service_->disabled_extensions()->GetByID(page_action); 5771 service_->disabled_extensions()->GetByID(page_action);
5771 EXPECT_TRUE(extension); 5772 EXPECT_TRUE(extension);
5772 EXPECT_EQ(page_action, extension->id()); 5773 EXPECT_EQ(page_action, extension->id());
5773 5774
5774 service_->EnableExtension(page_action); 5775 service_->EnableExtension(page_action);
5775 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 5776 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5776 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); 5777 EXPECT_TRUE(service_->IsExtensionEnabled(page_action));
5777 } 5778 }
5778 5779
5779 // Test that installing multiple external extensions works. 5780 // Test that installing multiple external extensions works.
5780 TEST_F(ExtensionServiceTest, ExternalInstallMultiple) { 5781 TEST_F(ExtensionServiceTest, ExternalInstallMultiple) {
5781 FeatureSwitch::ScopedOverride prompt( 5782 FeatureSwitch::ScopedOverride prompt(
5782 FeatureSwitch::prompt_for_external_extensions(), true); 5783 FeatureSwitch::prompt_for_external_extensions(), true);
5783 5784
5784 InitializeEmptyExtensionService(); 5785 InitializeEmptyExtensionService();
5785 MockExtensionProvider* provider = 5786 MockExtensionProvider* provider =
5786 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 5787 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
5787 AddMockExternalProvider(provider); 5788 AddMockExternalProvider(provider);
5788 5789
5789 provider->UpdateOrAddExtension(page_action, "1.0.0.0", 5790 provider->UpdateOrAddExtension(page_action, "1.0.0.0",
5790 data_dir_.AppendASCII("page_action.crx")); 5791 data_dir_.AppendASCII("page_action.crx"));
5791 provider->UpdateOrAddExtension(good_crx, "1.0.0.0", 5792 provider->UpdateOrAddExtension(good_crx, "1.0.0.0",
5792 data_dir_.AppendASCII("good.crx")); 5793 data_dir_.AppendASCII("good.crx"));
5793 provider->UpdateOrAddExtension(theme_crx, "2.0", 5794 provider->UpdateOrAddExtension(theme_crx, "2.0",
5794 data_dir_.AppendASCII("theme.crx")); 5795 data_dir_.AppendASCII("theme.crx"));
5795 5796
5796 service_->CheckForExternalUpdates(); 5797 service_->CheckForExternalUpdates();
(...skipping 11 matching lines...) Expand all
5808 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 5809 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5809 } 5810 }
5810 5811
5811 // Test that a sideloaded extension gets wiped out. 5812 // Test that a sideloaded extension gets wiped out.
5812 TEST_F(ExtensionServiceTest, WipeOutExtension) { 5813 TEST_F(ExtensionServiceTest, WipeOutExtension) {
5813 FeatureSwitch::ScopedOverride prompt( 5814 FeatureSwitch::ScopedOverride prompt(
5814 FeatureSwitch::sideload_wipeout(), true); 5815 FeatureSwitch::sideload_wipeout(), true);
5815 5816
5816 InitializeEmptyExtensionService(); 5817 InitializeEmptyExtensionService();
5817 MockExtensionProvider* provider_registry = 5818 MockExtensionProvider* provider_registry =
5818 new MockExtensionProvider(service_, Extension::EXTERNAL_REGISTRY); 5819 new MockExtensionProvider(service_, Manifest::EXTERNAL_REGISTRY);
5819 AddMockExternalProvider(provider_registry); 5820 AddMockExternalProvider(provider_registry);
5820 MockExtensionProvider* provider_pref = 5821 MockExtensionProvider* provider_pref =
5821 new MockExtensionProvider(service_, Extension::EXTERNAL_PREF); 5822 new MockExtensionProvider(service_, Manifest::EXTERNAL_PREF);
5822 AddMockExternalProvider(provider_pref); 5823 AddMockExternalProvider(provider_pref);
5823 5824
5824 provider_registry->UpdateOrAddExtension(good_crx, "1.0.0.0", 5825 provider_registry->UpdateOrAddExtension(good_crx, "1.0.0.0",
5825 data_dir_.AppendASCII("good.crx")); 5826 data_dir_.AppendASCII("good.crx"));
5826 provider_pref->UpdateOrAddExtension(good_crx, "1.0.0.0", 5827 provider_pref->UpdateOrAddExtension(good_crx, "1.0.0.0",
5827 data_dir_.AppendASCII("good.crx")); 5828 data_dir_.AppendASCII("good.crx"));
5828 5829
5829 service_->CheckForExternalUpdates(); 5830 service_->CheckForExternalUpdates();
5830 loop_.RunUntilIdle(); 5831 loop_.RunUntilIdle();
5831 EXPECT_FALSE(extensions::HasExternalInstallError(service_)); 5832 EXPECT_FALSE(extensions::HasExternalInstallError(service_));
5832 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx)); 5833 EXPECT_FALSE(service_->IsExtensionEnabled(good_crx));
5833 EXPECT_TRUE(service_->IsExtensionEnabled(page_action)); 5834 EXPECT_TRUE(service_->IsExtensionEnabled(page_action));
5834 5835
5835 ExtensionPrefs* prefs = service_->extension_prefs(); 5836 ExtensionPrefs* prefs = service_->extension_prefs();
5836 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) & 5837 EXPECT_NE(0, prefs->GetDisableReasons(good_crx) &
5837 Extension::DISABLE_SIDELOAD_WIPEOUT); 5838 Extension::DISABLE_SIDELOAD_WIPEOUT);
5838 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) & 5839 EXPECT_EQ(0, prefs->GetDisableReasons(page_action) &
5839 Extension::DISABLE_SIDELOAD_WIPEOUT); 5840 Extension::DISABLE_SIDELOAD_WIPEOUT);
5840 } 5841 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698