OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 | 167 |
168 void RemoveExtension(const std::string& id) { | 168 void RemoveExtension(const std::string& id) { |
169 extension_map_.erase(id); | 169 extension_map_.erase(id); |
170 } | 170 } |
171 | 171 |
172 // ExternalExtensionProvider implementation: | 172 // ExternalExtensionProvider implementation: |
173 virtual void VisitRegisteredExtension() OVERRIDE { | 173 virtual void VisitRegisteredExtension() OVERRIDE { |
174 visit_count_++; | 174 visit_count_++; |
175 for (DataMap::const_iterator i = extension_map_.begin(); | 175 for (DataMap::const_iterator i = extension_map_.begin(); |
176 i != extension_map_.end(); ++i) { | 176 i != extension_map_.end(); ++i) { |
177 scoped_ptr<Version> version; | 177 Version version(i->second.first); |
178 version.reset(Version::GetVersionFromString(i->second.first)); | |
179 | 178 |
180 visitor_->OnExternalExtensionFileFound( | 179 visitor_->OnExternalExtensionFileFound( |
181 i->first, version.get(), i->second.second, location_, | 180 i->first, &version, i->second.second, location_, |
182 Extension::NO_FLAGS, false); | 181 Extension::NO_FLAGS, false); |
183 } | 182 } |
184 visitor_->OnExternalProviderReady(this); | 183 visitor_->OnExternalProviderReady(this); |
185 } | 184 } |
186 | 185 |
187 virtual bool HasExtension(const std::string& id) const OVERRIDE { | 186 virtual bool HasExtension(const std::string& id) const OVERRIDE { |
188 return extension_map_.find(id) != extension_map_.end(); | 187 return extension_map_.find(id) != extension_map_.end(); |
189 } | 188 } |
190 | 189 |
191 virtual bool GetExtensionDetails( | 190 virtual bool GetExtensionDetails( |
192 const std::string& id, | 191 const std::string& id, |
193 Extension::Location* location, | 192 Extension::Location* location, |
194 scoped_ptr<Version>* version) const OVERRIDE { | 193 scoped_ptr<Version>* version) const OVERRIDE { |
195 DataMap::const_iterator it = extension_map_.find(id); | 194 DataMap::const_iterator it = extension_map_.find(id); |
196 if (it == extension_map_.end()) | 195 if (it == extension_map_.end()) |
197 return false; | 196 return false; |
198 | 197 |
199 if (version) | 198 if (version) |
200 version->reset(Version::GetVersionFromString(it->second.first)); | 199 version->reset(new Version(it->second.first)); |
201 | 200 |
202 if (location) | 201 if (location) |
203 *location = location_; | 202 *location = location_; |
204 | 203 |
205 return true; | 204 return true; |
206 } | 205 } |
207 | 206 |
208 virtual bool IsReady() const OVERRIDE { | 207 virtual bool IsReady() const OVERRIDE { |
209 return true; | 208 return true; |
210 } | 209 } |
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1254 // extension object. | 1253 // extension object. |
1255 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { | 1254 TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { |
1256 const char kPrefFromBookmark[] = "from_bookmark"; | 1255 const char kPrefFromBookmark[] = "from_bookmark"; |
1257 | 1256 |
1258 InitializeEmptyExtensionService(); | 1257 InitializeEmptyExtensionService(); |
1259 | 1258 |
1260 FilePath path = data_dir_.AppendASCII("good.crx"); | 1259 FilePath path = data_dir_.AppendASCII("good.crx"); |
1261 set_extensions_enabled(true); | 1260 set_extensions_enabled(true); |
1262 | 1261 |
1263 // Register and install an external extension. | 1262 // Register and install an external extension. |
1264 scoped_ptr<Version> version(Version::GetVersionFromString("1.0.0.0")); | 1263 Version version("1.0.0.0"); |
1265 service_->OnExternalExtensionFileFound( | 1264 service_->OnExternalExtensionFileFound( |
1266 good_crx, | 1265 good_crx, |
1267 version.get(), | 1266 &version, |
1268 path, | 1267 path, |
1269 Extension::EXTERNAL_PREF, | 1268 Extension::EXTERNAL_PREF, |
1270 Extension::FROM_BOOKMARK, | 1269 Extension::FROM_BOOKMARK, |
1271 false /* mark_acknowledged */); | 1270 false /* mark_acknowledged */); |
1272 loop_.RunAllPending(); | 1271 loop_.RunAllPending(); |
1273 | 1272 |
1274 const Extension* extension = service_->GetExtensionById(good_crx, false); | 1273 const Extension* extension = service_->GetExtensionById(good_crx, false); |
1275 ASSERT_TRUE(extension); | 1274 ASSERT_TRUE(extension); |
1276 ASSERT_TRUE(extension->from_bookmark()); | 1275 ASSERT_TRUE(extension->from_bookmark()); |
1277 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); | 1276 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); |
1278 | 1277 |
1279 // Upgrade to version 2.0, the flag should be preserved. | 1278 // Upgrade to version 2.0, the flag should be preserved. |
1280 path = data_dir_.AppendASCII("good2.crx"); | 1279 path = data_dir_.AppendASCII("good2.crx"); |
1281 UpdateExtension(good_crx, path, ENABLED); | 1280 UpdateExtension(good_crx, path, ENABLED); |
1282 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); | 1281 ValidateBooleanPref(good_crx, kPrefFromBookmark, true); |
1283 extension = service_->GetExtensionById(good_crx, false); | 1282 extension = service_->GetExtensionById(good_crx, false); |
1284 ASSERT_TRUE(extension); | 1283 ASSERT_TRUE(extension); |
1285 ASSERT_TRUE(extension->from_bookmark()); | 1284 ASSERT_TRUE(extension->from_bookmark()); |
1286 } | 1285 } |
1287 | 1286 |
1288 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED | 1287 // Test the handling of Extension::EXTERNAL_EXTENSION_UNINSTALLED |
1289 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { | 1288 TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { |
1290 InitializeEmptyExtensionService(); | 1289 InitializeEmptyExtensionService(); |
1291 | 1290 |
1292 FilePath path = data_dir_.AppendASCII("good.crx"); | 1291 FilePath path = data_dir_.AppendASCII("good.crx"); |
1293 set_extensions_enabled(true); | 1292 set_extensions_enabled(true); |
1294 | 1293 |
1295 scoped_ptr<Version> version; | 1294 Version version("1.0.0.0"); |
1296 version.reset(Version::GetVersionFromString("1.0.0.0")); | |
1297 // Install an external extension. | 1295 // Install an external extension. |
1298 service_->OnExternalExtensionFileFound(good_crx, version.get(), | 1296 service_->OnExternalExtensionFileFound(good_crx, &version, |
1299 path, Extension::EXTERNAL_PREF, | 1297 path, Extension::EXTERNAL_PREF, |
1300 Extension::NO_FLAGS, false); | 1298 Extension::NO_FLAGS, false); |
1301 loop_.RunAllPending(); | 1299 loop_.RunAllPending(); |
1302 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1300 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1303 | 1301 |
1304 // Uninstall it and check that its killbit gets set. | 1302 // Uninstall it and check that its killbit gets set. |
1305 UninstallExtension(good_crx, false); | 1303 UninstallExtension(good_crx, false); |
1306 ValidateIntegerPref(good_crx, "location", | 1304 ValidateIntegerPref(good_crx, "location", |
1307 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1305 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1308 | 1306 |
1309 // Try to re-install it externally. This should fail because of the killbit. | 1307 // Try to re-install it externally. This should fail because of the killbit. |
1310 service_->OnExternalExtensionFileFound(good_crx, version.get(), | 1308 service_->OnExternalExtensionFileFound(good_crx, &version, |
1311 path, Extension::EXTERNAL_PREF, | 1309 path, Extension::EXTERNAL_PREF, |
1312 Extension::NO_FLAGS, false); | 1310 Extension::NO_FLAGS, false); |
1313 loop_.RunAllPending(); | 1311 loop_.RunAllPending(); |
1314 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1312 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1315 ValidateIntegerPref(good_crx, "location", | 1313 ValidateIntegerPref(good_crx, "location", |
1316 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1314 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1317 | 1315 |
1318 version.reset(Version::GetVersionFromString("1.0.0.1")); | 1316 version = Version("1.0.0.1"); |
1319 // Repeat the same thing with a newer version of the extension. | 1317 // Repeat the same thing with a newer version of the extension. |
1320 path = data_dir_.AppendASCII("good2.crx"); | 1318 path = data_dir_.AppendASCII("good2.crx"); |
1321 service_->OnExternalExtensionFileFound(good_crx, version.get(), | 1319 service_->OnExternalExtensionFileFound(good_crx, &version, |
1322 path, Extension::EXTERNAL_PREF, | 1320 path, Extension::EXTERNAL_PREF, |
1323 Extension::NO_FLAGS, false); | 1321 Extension::NO_FLAGS, false); |
1324 loop_.RunAllPending(); | 1322 loop_.RunAllPending(); |
1325 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); | 1323 ASSERT_TRUE(NULL == service_->GetExtensionById(good_crx, false)); |
1326 ValidateIntegerPref(good_crx, "location", | 1324 ValidateIntegerPref(good_crx, "location", |
1327 Extension::EXTERNAL_EXTENSION_UNINSTALLED); | 1325 Extension::EXTERNAL_EXTENSION_UNINSTALLED); |
1328 | 1326 |
1329 // Try adding the same extension from an external update URL. | 1327 // Try adding the same extension from an external update URL. |
1330 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 1328 ASSERT_FALSE(service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
1331 good_crx, | 1329 good_crx, |
(...skipping 30 matching lines...) Expand all Loading... |
1362 MockExtensionProvider provider(NULL, Extension::EXTERNAL_REGISTRY); | 1360 MockExtensionProvider provider(NULL, Extension::EXTERNAL_REGISTRY); |
1363 service_->OnExternalProviderReady(&provider); | 1361 service_->OnExternalProviderReady(&provider); |
1364 } | 1362 } |
1365 | 1363 |
1366 // Test that external extensions with incorrect IDs are not installed. | 1364 // Test that external extensions with incorrect IDs are not installed. |
1367 TEST_F(ExtensionServiceTest, FailOnWrongId) { | 1365 TEST_F(ExtensionServiceTest, FailOnWrongId) { |
1368 InitializeEmptyExtensionService(); | 1366 InitializeEmptyExtensionService(); |
1369 FilePath path = data_dir_.AppendASCII("good.crx"); | 1367 FilePath path = data_dir_.AppendASCII("good.crx"); |
1370 set_extensions_enabled(true); | 1368 set_extensions_enabled(true); |
1371 | 1369 |
1372 scoped_ptr<Version> version; | 1370 Version version("1.0.0.0"); |
1373 version.reset(Version::GetVersionFromString("1.0.0.0")); | |
1374 | 1371 |
1375 const std::string wrong_id = all_zero; | 1372 const std::string wrong_id = all_zero; |
1376 const std::string correct_id = good_crx; | 1373 const std::string correct_id = good_crx; |
1377 ASSERT_NE(correct_id, wrong_id); | 1374 ASSERT_NE(correct_id, wrong_id); |
1378 | 1375 |
1379 // Install an external extension with an ID from the external | 1376 // Install an external extension with an ID from the external |
1380 // source that is not equal to the ID in the extension manifest. | 1377 // source that is not equal to the ID in the extension manifest. |
1381 service_->OnExternalExtensionFileFound( | 1378 service_->OnExternalExtensionFileFound( |
1382 wrong_id, version.get(), path, Extension::EXTERNAL_PREF, | 1379 wrong_id, &version, path, Extension::EXTERNAL_PREF, |
1383 Extension::NO_FLAGS, false); | 1380 Extension::NO_FLAGS, false); |
1384 | 1381 |
1385 loop_.RunAllPending(); | 1382 loop_.RunAllPending(); |
1386 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1383 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
1387 | 1384 |
1388 // Try again with the right ID. Expect success. | 1385 // Try again with the right ID. Expect success. |
1389 service_->OnExternalExtensionFileFound( | 1386 service_->OnExternalExtensionFileFound( |
1390 correct_id, version.get(), path, Extension::EXTERNAL_PREF, | 1387 correct_id, &version, path, Extension::EXTERNAL_PREF, |
1391 Extension::NO_FLAGS, false); | 1388 Extension::NO_FLAGS, false); |
1392 loop_.RunAllPending(); | 1389 loop_.RunAllPending(); |
1393 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1390 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1394 } | 1391 } |
1395 | 1392 |
1396 // Test that external extensions with incorrect versions are not installed. | 1393 // Test that external extensions with incorrect versions are not installed. |
1397 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { | 1394 TEST_F(ExtensionServiceTest, FailOnWrongVersion) { |
1398 InitializeEmptyExtensionService(); | 1395 InitializeEmptyExtensionService(); |
1399 FilePath path = data_dir_.AppendASCII("good.crx"); | 1396 FilePath path = data_dir_.AppendASCII("good.crx"); |
1400 set_extensions_enabled(true); | 1397 set_extensions_enabled(true); |
1401 | 1398 |
1402 // Install an external extension with a version from the external | 1399 // Install an external extension with a version from the external |
1403 // source that is not equal to the version in the extension manifest. | 1400 // source that is not equal to the version in the extension manifest. |
1404 scoped_ptr<Version> wrong_version; | 1401 Version wrong_version("1.2.3.4"); |
1405 wrong_version.reset(Version::GetVersionFromString("1.2.3.4")); | |
1406 service_->OnExternalExtensionFileFound( | 1402 service_->OnExternalExtensionFileFound( |
1407 good_crx, wrong_version.get(), path, Extension::EXTERNAL_PREF, | 1403 good_crx, &wrong_version, path, Extension::EXTERNAL_PREF, |
1408 Extension::NO_FLAGS, false); | 1404 Extension::NO_FLAGS, false); |
1409 | 1405 |
1410 loop_.RunAllPending(); | 1406 loop_.RunAllPending(); |
1411 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); | 1407 ASSERT_FALSE(service_->GetExtensionById(good_crx, false)); |
1412 | 1408 |
1413 // Try again with the right version. Expect success. | 1409 // Try again with the right version. Expect success. |
1414 service_->pending_extension_manager()->Remove(good_crx); | 1410 service_->pending_extension_manager()->Remove(good_crx); |
1415 scoped_ptr<Version> correct_version; | 1411 Version correct_version("1.0.0.0"); |
1416 correct_version.reset(Version::GetVersionFromString("1.0.0.0")); | |
1417 service_->OnExternalExtensionFileFound( | 1412 service_->OnExternalExtensionFileFound( |
1418 good_crx, correct_version.get(), path, Extension::EXTERNAL_PREF, | 1413 good_crx, &correct_version, path, Extension::EXTERNAL_PREF, |
1419 Extension::NO_FLAGS, false); | 1414 Extension::NO_FLAGS, false); |
1420 loop_.RunAllPending(); | 1415 loop_.RunAllPending(); |
1421 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); | 1416 ASSERT_TRUE(service_->GetExtensionById(good_crx, false)); |
1422 } | 1417 } |
1423 | 1418 |
1424 // Install a user script (they get converted automatically to an extension) | 1419 // Install a user script (they get converted automatically to an extension) |
1425 TEST_F(ExtensionServiceTest, InstallUserScript) { | 1420 TEST_F(ExtensionServiceTest, InstallUserScript) { |
1426 // The details of script conversion are tested elsewhere, this just tests | 1421 // The details of script conversion are tested elsewhere, this just tests |
1427 // integration with ExtensionService. | 1422 // integration with ExtensionService. |
1428 InitializeEmptyExtensionService(); | 1423 InitializeEmptyExtensionService(); |
(...skipping 3329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4758 | 4753 |
4759 // Skip install when the location has the same priority as the installed | 4754 // Skip install when the location has the same priority as the installed |
4760 // location. | 4755 // location. |
4761 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( | 4756 EXPECT_FALSE(service_->OnExternalExtensionUpdateUrlFound( |
4762 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); | 4757 kGoodId, GURL(kGoodUpdateURL), Extension::INTERNAL)); |
4763 | 4758 |
4764 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 4759 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
4765 } | 4760 } |
4766 | 4761 |
4767 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { | 4762 TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { |
4768 scoped_ptr<Version> older_version; | 4763 Version older_version("0.1.0.0"); |
4769 older_version.reset(Version::GetVersionFromString("0.1.0.0")); | 4764 Version newer_version("2.0.0.0"); |
4770 | |
4771 scoped_ptr<Version> newer_version; | |
4772 newer_version.reset(Version::GetVersionFromString("2.0.0.0")); | |
4773 | 4765 |
4774 // We don't want the extension to be installed. A path that doesn't | 4766 // We don't want the extension to be installed. A path that doesn't |
4775 // point to a valid CRX ensures this. | 4767 // point to a valid CRX ensures this. |
4776 const FilePath kInvalidPathToCrx = FilePath(); | 4768 const FilePath kInvalidPathToCrx = FilePath(); |
4777 | 4769 |
4778 const int kCreationFlags = 0; | 4770 const int kCreationFlags = 0; |
4779 const bool kDontMarkAcknowledged = false; | 4771 const bool kDontMarkAcknowledged = false; |
4780 | 4772 |
4781 InitializeEmptyExtensionService(); | 4773 InitializeEmptyExtensionService(); |
4782 | 4774 |
(...skipping 11 matching lines...) Expand all Loading... |
4794 ASSERT_EQ(Extension::EXTERNAL_PREF, | 4786 ASSERT_EQ(Extension::EXTERNAL_PREF, |
4795 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_PREF, | 4787 Extension::GetHigherPriorityLocation(Extension::EXTERNAL_PREF, |
4796 Extension::INTERNAL)); | 4788 Extension::INTERNAL)); |
4797 | 4789 |
4798 PendingExtensionManager* pending = service_->pending_extension_manager(); | 4790 PendingExtensionManager* pending = service_->pending_extension_manager(); |
4799 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 4791 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
4800 | 4792 |
4801 // Simulate an external source adding the extension as INTERNAL. | 4793 // Simulate an external source adding the extension as INTERNAL. |
4802 EXPECT_TRUE( | 4794 EXPECT_TRUE( |
4803 service_->OnExternalExtensionFileFound( | 4795 service_->OnExternalExtensionFileFound( |
4804 kGoodId, older_version.get(), kInvalidPathToCrx, | 4796 kGoodId, &older_version, kInvalidPathToCrx, |
4805 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4797 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4806 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4798 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4807 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 4799 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
4808 | 4800 |
4809 // Simulate an external source adding the extension as EXTERNAL_PREF. | 4801 // Simulate an external source adding the extension as EXTERNAL_PREF. |
4810 EXPECT_TRUE( | 4802 EXPECT_TRUE( |
4811 service_->OnExternalExtensionFileFound( | 4803 service_->OnExternalExtensionFileFound( |
4812 kGoodId, older_version.get(), kInvalidPathToCrx, | 4804 kGoodId, &older_version, kInvalidPathToCrx, |
4813 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4805 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4814 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4806 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4815 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 4807 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
4816 | 4808 |
4817 // Simulate an external source adding as EXTERNAL_PREF again. | 4809 // Simulate an external source adding as EXTERNAL_PREF again. |
4818 EXPECT_TRUE( | 4810 EXPECT_TRUE( |
4819 service_->OnExternalExtensionFileFound( | 4811 service_->OnExternalExtensionFileFound( |
4820 kGoodId, older_version.get(), kInvalidPathToCrx, | 4812 kGoodId, &older_version, kInvalidPathToCrx, |
4821 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4813 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4822 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4814 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4823 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 4815 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
4824 | 4816 |
4825 // Try INTERNAL again. Should fail. | 4817 // Try INTERNAL again. Should fail. |
4826 EXPECT_FALSE( | 4818 EXPECT_FALSE( |
4827 service_->OnExternalExtensionFileFound( | 4819 service_->OnExternalExtensionFileFound( |
4828 kGoodId, older_version.get(), kInvalidPathToCrx, | 4820 kGoodId, &older_version, kInvalidPathToCrx, |
4829 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4821 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4830 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4822 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4831 | 4823 |
4832 // Now the registry adds the extension. | 4824 // Now the registry adds the extension. |
4833 EXPECT_TRUE( | 4825 EXPECT_TRUE( |
4834 service_->OnExternalExtensionFileFound( | 4826 service_->OnExternalExtensionFileFound( |
4835 kGoodId, older_version.get(), kInvalidPathToCrx, | 4827 kGoodId, &older_version, kInvalidPathToCrx, |
4836 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 4828 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); |
4837 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4829 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4838 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); | 4830 WaitForCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); |
4839 | 4831 |
4840 // Registry outranks both external pref and internal, so both fail. | 4832 // Registry outranks both external pref and internal, so both fail. |
4841 EXPECT_FALSE( | 4833 EXPECT_FALSE( |
4842 service_->OnExternalExtensionFileFound( | 4834 service_->OnExternalExtensionFileFound( |
4843 kGoodId, older_version.get(), kInvalidPathToCrx, | 4835 kGoodId, &older_version, kInvalidPathToCrx, |
4844 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4836 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4845 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4837 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4846 | 4838 |
4847 EXPECT_FALSE( | 4839 EXPECT_FALSE( |
4848 service_->OnExternalExtensionFileFound( | 4840 service_->OnExternalExtensionFileFound( |
4849 kGoodId, older_version.get(), kInvalidPathToCrx, | 4841 kGoodId, &older_version, kInvalidPathToCrx, |
4850 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4842 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4851 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4843 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4852 | 4844 |
4853 pending->Remove(kGoodId); | 4845 pending->Remove(kGoodId); |
4854 | 4846 |
4855 // Install the extension. | 4847 // Install the extension. |
4856 FilePath path = data_dir_.AppendASCII("good.crx"); | 4848 FilePath path = data_dir_.AppendASCII("good.crx"); |
4857 const Extension* ext = InstallCRX(path, INSTALL_NEW); | 4849 const Extension* ext = InstallCRX(path, INSTALL_NEW); |
4858 ValidatePrefKeyCount(1u); | 4850 ValidatePrefKeyCount(1u); |
4859 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); | 4851 ValidateIntegerPref(good_crx, "state", Extension::ENABLED); |
4860 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); | 4852 ValidateIntegerPref(good_crx, "location", Extension::INTERNAL); |
4861 | 4853 |
4862 // Now test the logic of OnExternalExtensionFileFound() when the extension | 4854 // Now test the logic of OnExternalExtensionFileFound() when the extension |
4863 // being added is already installed. | 4855 // being added is already installed. |
4864 | 4856 |
4865 // Tests assume |older_version| is less than the installed version, and | 4857 // Tests assume |older_version| is less than the installed version, and |
4866 // |newer_version| is greater. Verify this: | 4858 // |newer_version| is greater. Verify this: |
4867 ASSERT_TRUE(older_version->IsOlderThan(ext->VersionString())); | 4859 ASSERT_TRUE(older_version.IsOlderThan(ext->VersionString())); |
4868 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version->GetString())); | 4860 ASSERT_TRUE(ext->version()->IsOlderThan(newer_version.GetString())); |
4869 | 4861 |
4870 // An external install for the same location should fail if the version is | 4862 // An external install for the same location should fail if the version is |
4871 // older, or the same, and succeed if the version is newer. | 4863 // older, or the same, and succeed if the version is newer. |
4872 | 4864 |
4873 // Older than the installed version... | 4865 // Older than the installed version... |
4874 EXPECT_FALSE( | 4866 EXPECT_FALSE( |
4875 service_->OnExternalExtensionFileFound( | 4867 service_->OnExternalExtensionFileFound( |
4876 kGoodId, older_version.get(), kInvalidPathToCrx, | 4868 kGoodId, &older_version, kInvalidPathToCrx, |
4877 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4869 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4878 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 4870 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
4879 | 4871 |
4880 // Same version as the installed version... | 4872 // Same version as the installed version... |
4881 EXPECT_FALSE( | 4873 EXPECT_FALSE( |
4882 service_->OnExternalExtensionFileFound( | 4874 service_->OnExternalExtensionFileFound( |
4883 kGoodId, ext->version(), kInvalidPathToCrx, | 4875 kGoodId, ext->version(), kInvalidPathToCrx, |
4884 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4876 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4885 EXPECT_FALSE(pending->IsIdPending(kGoodId)); | 4877 EXPECT_FALSE(pending->IsIdPending(kGoodId)); |
4886 | 4878 |
4887 // Newer than the installed version... | 4879 // Newer than the installed version... |
4888 EXPECT_TRUE( | 4880 EXPECT_TRUE( |
4889 service_->OnExternalExtensionFileFound( | 4881 service_->OnExternalExtensionFileFound( |
4890 kGoodId, newer_version.get(), kInvalidPathToCrx, | 4882 kGoodId, &newer_version, kInvalidPathToCrx, |
4891 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); | 4883 Extension::INTERNAL, kCreationFlags, kDontMarkAcknowledged)); |
4892 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4884 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4893 | 4885 |
4894 // An external install for a higher priority install source should succeed | 4886 // An external install for a higher priority install source should succeed |
4895 // if the version is greater. |older_version| is not... | 4887 // if the version is greater. |older_version| is not... |
4896 EXPECT_FALSE( | 4888 EXPECT_FALSE( |
4897 service_->OnExternalExtensionFileFound( | 4889 service_->OnExternalExtensionFileFound( |
4898 kGoodId, older_version.get(), kInvalidPathToCrx, | 4890 kGoodId, &older_version, kInvalidPathToCrx, |
4899 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4891 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4900 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4892 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4901 | 4893 |
4902 // |newer_version| is newer. | 4894 // |newer_version| is newer. |
4903 EXPECT_TRUE( | 4895 EXPECT_TRUE( |
4904 service_->OnExternalExtensionFileFound( | 4896 service_->OnExternalExtensionFileFound( |
4905 kGoodId, newer_version.get(), kInvalidPathToCrx, | 4897 kGoodId, &newer_version, kInvalidPathToCrx, |
4906 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4898 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4907 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4899 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4908 | 4900 |
4909 // An external install for an even higher priority install source should | 4901 // An external install for an even higher priority install source should |
4910 // succeed if the version is greater. | 4902 // succeed if the version is greater. |
4911 EXPECT_TRUE( | 4903 EXPECT_TRUE( |
4912 service_->OnExternalExtensionFileFound( | 4904 service_->OnExternalExtensionFileFound( |
4913 kGoodId, newer_version.get(), kInvalidPathToCrx, | 4905 kGoodId, &newer_version, kInvalidPathToCrx, |
4914 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); | 4906 Extension::EXTERNAL_REGISTRY, kCreationFlags, kDontMarkAcknowledged)); |
4915 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4907 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4916 | 4908 |
4917 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, | 4909 // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, |
4918 // adding from external pref will now fail. | 4910 // adding from external pref will now fail. |
4919 EXPECT_FALSE( | 4911 EXPECT_FALSE( |
4920 service_->OnExternalExtensionFileFound( | 4912 service_->OnExternalExtensionFileFound( |
4921 kGoodId, newer_version.get(), kInvalidPathToCrx, | 4913 kGoodId, &newer_version, kInvalidPathToCrx, |
4922 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); | 4914 Extension::EXTERNAL_PREF, kCreationFlags, kDontMarkAcknowledged)); |
4923 EXPECT_TRUE(pending->IsIdPending(kGoodId)); | 4915 EXPECT_TRUE(pending->IsIdPending(kGoodId)); |
4924 } | 4916 } |
4925 | 4917 |
4926 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { | 4918 TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { |
4927 Version kVersion123("1.2.3"); | 4919 Version kVersion123("1.2.3"); |
4928 Version kVersion124("1.2.4"); | 4920 Version kVersion124("1.2.4"); |
4929 Version kVersion125("1.2.5"); | 4921 Version kVersion125("1.2.5"); |
4930 const FilePath kInvalidPathToCrx = FilePath(); | 4922 const FilePath kInvalidPathToCrx = FilePath(); |
4931 const int kCreationFlags = 0; | 4923 const int kCreationFlags = 0; |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5020 } | 5012 } |
5021 | 5013 |
5022 // Fake an external source adding a URL to fetch an extension from. | 5014 // Fake an external source adding a URL to fetch an extension from. |
5023 bool AddPendingExternalPrefUrl() { | 5015 bool AddPendingExternalPrefUrl() { |
5024 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( | 5016 return service_->pending_extension_manager()->AddFromExternalUpdateUrl( |
5025 crx_id_, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); | 5017 crx_id_, GURL(), Extension::EXTERNAL_PREF_DOWNLOAD); |
5026 } | 5018 } |
5027 | 5019 |
5028 // Fake an external file from external_extensions.json. | 5020 // Fake an external file from external_extensions.json. |
5029 bool AddPendingExternalPrefFileInstall() { | 5021 bool AddPendingExternalPrefFileInstall() { |
5030 scoped_ptr<Version> version; | 5022 Version version("1.0.0.0"); |
5031 version.reset(Version::GetVersionFromString("1.0.0.0")); | |
5032 | 5023 |
5033 return service_->OnExternalExtensionFileFound( | 5024 return service_->OnExternalExtensionFileFound( |
5034 crx_id_, version.get(), crx_path_, Extension::EXTERNAL_PREF, | 5025 crx_id_, &version, crx_path_, Extension::EXTERNAL_PREF, |
5035 Extension::NO_FLAGS, false); | 5026 Extension::NO_FLAGS, false); |
5036 } | 5027 } |
5037 | 5028 |
5038 // Fake a request from sync to install an extension. | 5029 // Fake a request from sync to install an extension. |
5039 bool AddPendingSyncInstall() { | 5030 bool AddPendingSyncInstall() { |
5040 return service_->pending_extension_manager()->AddFromSync( | 5031 return service_->pending_extension_manager()->AddFromSync( |
5041 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently); | 5032 crx_id_, GURL(kGoodUpdateURL), &IsExtension, kGoodInstallSilently); |
5042 } | 5033 } |
5043 | 5034 |
5044 // Fake a policy install. | 5035 // Fake a policy install. |
5045 bool AddPendingPolicyInstall() { | 5036 bool AddPendingPolicyInstall() { |
5046 scoped_ptr<Version> version; | |
5047 version.reset(Version::GetVersionFromString("1.0.0.0")); | |
5048 | |
5049 // Get path to the CRX with id |kGoodId|. | 5037 // Get path to the CRX with id |kGoodId|. |
5050 return service_->OnExternalExtensionUpdateUrlFound( | 5038 return service_->OnExternalExtensionUpdateUrlFound( |
5051 crx_id_, GURL(), Extension::EXTERNAL_POLICY_DOWNLOAD); | 5039 crx_id_, GURL(), Extension::EXTERNAL_POLICY_DOWNLOAD); |
5052 } | 5040 } |
5053 | 5041 |
5054 // Get the install source of a pending extension. | 5042 // Get the install source of a pending extension. |
5055 Extension::Location GetPendingLocation() { | 5043 Extension::Location GetPendingLocation() { |
5056 const PendingExtensionInfo* info; | 5044 const PendingExtensionInfo* info; |
5057 EXPECT_TRUE((info = service_->pending_extension_manager()-> | 5045 EXPECT_TRUE((info = service_->pending_extension_manager()-> |
5058 GetById(crx_id_))); | 5046 GetById(crx_id_))); |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5188 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", | 5176 provider->UpdateOrAddExtension(hosted_app, "1.0.0.0", |
5189 data_dir_.AppendASCII("hosted_app.crx")); | 5177 data_dir_.AppendASCII("hosted_app.crx")); |
5190 | 5178 |
5191 service_->CheckForExternalUpdates(); | 5179 service_->CheckForExternalUpdates(); |
5192 loop_.RunAllPending(); | 5180 loop_.RunAllPending(); |
5193 | 5181 |
5194 ASSERT_TRUE(service_->PopulateExtensionGlobalError( | 5182 ASSERT_TRUE(service_->PopulateExtensionGlobalError( |
5195 extension_global_error.get())); | 5183 extension_global_error.get())); |
5196 ASSERT_EQ(1u, extension_global_error->get_external_extension_ids()->size()); | 5184 ASSERT_EQ(1u, extension_global_error->get_external_extension_ids()->size()); |
5197 } | 5185 } |
OLD | NEW |