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_prefs.h" | 5 #include "chrome/browser/extensions/extension_prefs.h" |
6 | 6 |
7 #include "base/prefs/pref_notifier.h" | 7 #include "base/prefs/pref_notifier.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 const char kActiveBit[] = "active_bit"; | 114 const char kActiveBit[] = "active_bit"; |
115 | 115 |
116 // Path for settings specific to blacklist update. | 116 // Path for settings specific to blacklist update. |
117 const char kExtensionsBlacklistUpdate[] = "extensions.blacklistupdate"; | 117 const char kExtensionsBlacklistUpdate[] = "extensions.blacklistupdate"; |
118 | 118 |
119 // Path for the delayed install info dictionary preference. The actual string | 119 // Path for the delayed install info dictionary preference. The actual string |
120 // value is a legacy artifact for when delayed installs only pertained to | 120 // value is a legacy artifact for when delayed installs only pertained to |
121 // updates that were waiting for idle. | 121 // updates that were waiting for idle. |
122 const char kDelayedInstallInfo[] = "idle_install_info"; | 122 const char kDelayedInstallInfo[] = "idle_install_info"; |
123 | 123 |
| 124 // Reason why the extension's install was delayed. |
| 125 const char kDelayedInstallReason[] = "delay_install_reason"; |
| 126 |
124 // Path for the suggested page ordinal of a delayed extension install. | 127 // Path for the suggested page ordinal of a delayed extension install. |
125 const char kPrefSuggestedPageOrdinal[] = "suggested_page_ordinal"; | 128 const char kPrefSuggestedPageOrdinal[] = "suggested_page_ordinal"; |
126 | 129 |
127 // A preference that, if true, will allow this extension to run in incognito | 130 // A preference that, if true, will allow this extension to run in incognito |
128 // mode. | 131 // mode. |
129 const char kPrefIncognitoEnabled[] = "incognito"; | 132 const char kPrefIncognitoEnabled[] = "incognito"; |
130 | 133 |
131 // A preference to control whether an extension is allowed to inject script in | 134 // A preference to control whether an extension is allowed to inject script in |
132 // pages with file URLs. | 135 // pages with file URLs. |
133 const char kPrefAllowFileAccess[] = "newAllowFileAccess"; | 136 const char kPrefAllowFileAccess[] = "newAllowFileAccess"; |
(...skipping 1187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1321 if (info) | 1324 if (info) |
1322 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); | 1325 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); |
1323 } | 1326 } |
1324 | 1327 |
1325 return extensions_info.Pass(); | 1328 return extensions_info.Pass(); |
1326 } | 1329 } |
1327 | 1330 |
1328 void ExtensionPrefs::SetDelayedInstallInfo( | 1331 void ExtensionPrefs::SetDelayedInstallInfo( |
1329 const Extension* extension, | 1332 const Extension* extension, |
1330 Extension::State initial_state, | 1333 Extension::State initial_state, |
| 1334 DelayReason delay_reason, |
1331 const syncer::StringOrdinal& page_ordinal) { | 1335 const syncer::StringOrdinal& page_ordinal) { |
1332 DictionaryValue* extension_dict = new DictionaryValue(); | 1336 DictionaryValue* extension_dict = new DictionaryValue(); |
1333 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(), | 1337 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(), |
1334 initial_state, extension_dict); | 1338 initial_state, extension_dict); |
1335 | 1339 |
1336 // Add transient data that is needed by FinishDelayedInstallInfo(), but | 1340 // Add transient data that is needed by FinishDelayedInstallInfo(), but |
1337 // should not be in the final extension prefs. All entries here should have | 1341 // should not be in the final extension prefs. All entries here should have |
1338 // a corresponding Remove() call in FinishDelayedInstallInfo(). | 1342 // a corresponding Remove() call in FinishDelayedInstallInfo(). |
1339 if (extension->RequiresSortOrdinal()) { | 1343 if (extension->RequiresSortOrdinal()) { |
1340 extension_dict->SetString( | 1344 extension_dict->SetString( |
1341 kPrefSuggestedPageOrdinal, | 1345 kPrefSuggestedPageOrdinal, |
1342 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() | 1346 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() |
1343 : std::string()); | 1347 : std::string()); |
1344 } | 1348 } |
| 1349 extension_dict->SetInteger(kDelayedInstallReason, |
| 1350 static_cast<int>(delay_reason)); |
1345 | 1351 |
1346 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict); | 1352 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict); |
1347 } | 1353 } |
1348 | 1354 |
1349 bool ExtensionPrefs::RemoveDelayedInstallInfo( | 1355 bool ExtensionPrefs::RemoveDelayedInstallInfo( |
1350 const std::string& extension_id) { | 1356 const std::string& extension_id) { |
1351 if (!GetExtensionPref(extension_id)) | 1357 if (!GetExtensionPref(extension_id)) |
1352 return false; | 1358 return false; |
1353 ScopedExtensionPrefUpdate update(prefs_, extension_id); | 1359 ScopedExtensionPrefUpdate update(prefs_, extension_id); |
1354 bool result = update->Remove(kDelayedInstallInfo, NULL); | 1360 bool result = update->Remove(kDelayedInstallInfo, NULL); |
(...skipping 15 matching lines...) Expand all Loading... |
1370 // Also do any other data cleanup that makes sense. | 1376 // Also do any other data cleanup that makes sense. |
1371 std::string serialized_ordinal; | 1377 std::string serialized_ordinal; |
1372 syncer::StringOrdinal suggested_page_ordinal; | 1378 syncer::StringOrdinal suggested_page_ordinal; |
1373 bool needs_sort_ordinal = false; | 1379 bool needs_sort_ordinal = false; |
1374 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal, | 1380 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal, |
1375 &serialized_ordinal)) { | 1381 &serialized_ordinal)) { |
1376 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal); | 1382 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal); |
1377 needs_sort_ordinal = true; | 1383 needs_sort_ordinal = true; |
1378 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, NULL); | 1384 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, NULL); |
1379 } | 1385 } |
| 1386 pending_install_dict->Remove(kDelayedInstallReason, NULL); |
1380 | 1387 |
1381 const base::Time install_time = time_provider_->GetCurrentTime(); | 1388 const base::Time install_time = time_provider_->GetCurrentTime(); |
1382 pending_install_dict->Set( | 1389 pending_install_dict->Set( |
1383 kPrefInstallTime, | 1390 kPrefInstallTime, |
1384 Value::CreateStringValue( | 1391 Value::CreateStringValue( |
1385 base::Int64ToString(install_time.ToInternalValue()))); | 1392 base::Int64ToString(install_time.ToInternalValue()))); |
1386 | 1393 |
1387 // Commit the delayed install data. | 1394 // Commit the delayed install data. |
1388 extension_dict->MergeDictionary(pending_install_dict); | 1395 extension_dict->MergeDictionary(pending_install_dict); |
1389 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal, | 1396 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal, |
1390 suggested_page_ordinal, extension_dict); | 1397 suggested_page_ordinal, extension_dict); |
1391 return true; | 1398 return true; |
1392 } | 1399 } |
1393 | 1400 |
1394 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo( | 1401 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo( |
1395 const std::string& extension_id) const { | 1402 const std::string& extension_id) const { |
1396 const DictionaryValue* extension_prefs = | 1403 const DictionaryValue* extension_prefs = |
1397 GetExtensionPref(extension_id); | 1404 GetExtensionPref(extension_id); |
1398 if (!extension_prefs) | 1405 if (!extension_prefs) |
1399 return scoped_ptr<ExtensionInfo>(); | 1406 return scoped_ptr<ExtensionInfo>(); |
1400 | 1407 |
1401 const DictionaryValue* ext = NULL; | 1408 const DictionaryValue* ext = NULL; |
1402 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) | 1409 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) |
1403 return scoped_ptr<ExtensionInfo>(); | 1410 return scoped_ptr<ExtensionInfo>(); |
1404 | 1411 |
1405 return GetInstalledInfoHelper(extension_id, ext); | 1412 return GetInstalledInfoHelper(extension_id, ext); |
1406 } | 1413 } |
1407 | 1414 |
| 1415 ExtensionPrefs::DelayReason ExtensionPrefs::GetDelayedInstallReason( |
| 1416 const std::string& extension_id) const { |
| 1417 const DictionaryValue* extension_prefs = |
| 1418 GetExtensionPref(extension_id); |
| 1419 if (!extension_prefs) |
| 1420 return DELAY_REASON_NONE; |
| 1421 |
| 1422 const DictionaryValue* ext = NULL; |
| 1423 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) |
| 1424 return DELAY_REASON_NONE; |
| 1425 |
| 1426 int delay_reason; |
| 1427 if (!ext->GetInteger(kDelayedInstallReason, &delay_reason)) |
| 1428 return DELAY_REASON_NONE; |
| 1429 |
| 1430 return static_cast<DelayReason>(delay_reason); |
| 1431 } |
| 1432 |
1408 scoped_ptr<ExtensionPrefs::ExtensionsInfo> ExtensionPrefs:: | 1433 scoped_ptr<ExtensionPrefs::ExtensionsInfo> ExtensionPrefs:: |
1409 GetAllDelayedInstallInfo() const { | 1434 GetAllDelayedInstallInfo() const { |
1410 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo); | 1435 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo); |
1411 | 1436 |
1412 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); | 1437 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); |
1413 for (DictionaryValue::Iterator extension_id(*extensions); | 1438 for (DictionaryValue::Iterator extension_id(*extensions); |
1414 !extension_id.IsAtEnd(); extension_id.Advance()) { | 1439 !extension_id.IsAtEnd(); extension_id.Advance()) { |
1415 if (!Extension::IdIsValid(extension_id.key())) | 1440 if (!Extension::IdIsValid(extension_id.key())) |
1416 continue; | 1441 continue; |
1417 | 1442 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 if (IsFromBookmark(extension_id)) | 1483 if (IsFromBookmark(extension_id)) |
1459 creation_flags |= Extension::FROM_BOOKMARK; | 1484 creation_flags |= Extension::FROM_BOOKMARK; |
1460 if (IsFromWebStore(extension_id)) | 1485 if (IsFromWebStore(extension_id)) |
1461 creation_flags |= Extension::FROM_WEBSTORE; | 1486 creation_flags |= Extension::FROM_WEBSTORE; |
1462 if (WasInstalledByDefault(extension_id)) | 1487 if (WasInstalledByDefault(extension_id)) |
1463 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT; | 1488 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT; |
1464 } | 1489 } |
1465 return creation_flags; | 1490 return creation_flags; |
1466 } | 1491 } |
1467 | 1492 |
| 1493 int ExtensionPrefs::GetDelayedInstallCreationFlags( |
| 1494 const std::string& extension_id) const { |
| 1495 int creation_flags = Extension::NO_FLAGS; |
| 1496 const DictionaryValue* delayed_info = NULL; |
| 1497 if (ReadPrefAsDictionary(extension_id, kDelayedInstallInfo, &delayed_info)) { |
| 1498 delayed_info->GetInteger(kPrefCreationFlags, &creation_flags); |
| 1499 } |
| 1500 return creation_flags; |
| 1501 } |
| 1502 |
1468 bool ExtensionPrefs::WasInstalledByDefault( | 1503 bool ExtensionPrefs::WasInstalledByDefault( |
1469 const std::string& extension_id) const { | 1504 const std::string& extension_id) const { |
1470 const DictionaryValue* dictionary = GetExtensionPref(extension_id); | 1505 const DictionaryValue* dictionary = GetExtensionPref(extension_id); |
1471 bool result = false; | 1506 bool result = false; |
1472 if (dictionary && | 1507 if (dictionary && |
1473 dictionary->GetBoolean(kPrefWasInstalledByDefault, &result)) | 1508 dictionary->GetBoolean(kPrefWasInstalledByDefault, &result)) |
1474 return result; | 1509 return result; |
1475 return false; | 1510 return false; |
1476 } | 1511 } |
1477 | 1512 |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1823 is_enabled = initial_state == Extension::ENABLED; | 1858 is_enabled = initial_state == Extension::ENABLED; |
1824 } | 1859 } |
1825 | 1860 |
1826 extension_pref_value_map_->RegisterExtension(extension_id, install_time, | 1861 extension_pref_value_map_->RegisterExtension(extension_id, install_time, |
1827 is_enabled); | 1862 is_enabled); |
1828 content_settings_store_->RegisterExtension(extension_id, install_time, | 1863 content_settings_store_->RegisterExtension(extension_id, install_time, |
1829 is_enabled); | 1864 is_enabled); |
1830 } | 1865 } |
1831 | 1866 |
1832 } // namespace extensions | 1867 } // namespace extensions |
OLD | NEW |