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

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

Issue 14973007: Auto-install/uninstall shared module dependencies for extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: feedback Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (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/string_util.h" 9 #include "base/string_util.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 const char kActiveBit[] = "active_bit"; 111 const char kActiveBit[] = "active_bit";
112 112
113 // Path for settings specific to blacklist update. 113 // Path for settings specific to blacklist update.
114 const char kExtensionsBlacklistUpdate[] = "extensions.blacklistupdate"; 114 const char kExtensionsBlacklistUpdate[] = "extensions.blacklistupdate";
115 115
116 // Path for the delayed install info dictionary preference. The actual string 116 // Path for the delayed install info dictionary preference. The actual string
117 // value is a legacy artifact for when delayed installs only pertained to 117 // value is a legacy artifact for when delayed installs only pertained to
118 // updates that were waiting for idle. 118 // updates that were waiting for idle.
119 const char kDelayedInstallInfo[] = "idle_install_info"; 119 const char kDelayedInstallInfo[] = "idle_install_info";
120 120
121 // Reason why the extension's install was delayed.
122 const char kDelayedInstallReason[] = "delay_install_reason";
123
121 // Path for the suggested page ordinal of a delayed extension install. 124 // Path for the suggested page ordinal of a delayed extension install.
122 const char kPrefSuggestedPageOrdinal[] = "suggested_page_ordinal"; 125 const char kPrefSuggestedPageOrdinal[] = "suggested_page_ordinal";
123 126
124 // A preference that, if true, will allow this extension to run in incognito 127 // A preference that, if true, will allow this extension to run in incognito
125 // mode. 128 // mode.
126 const char kPrefIncognitoEnabled[] = "incognito"; 129 const char kPrefIncognitoEnabled[] = "incognito";
127 130
128 // A preference to control whether an extension is allowed to inject script in 131 // A preference to control whether an extension is allowed to inject script in
129 // pages with file URLs. 132 // pages with file URLs.
130 const char kPrefAllowFileAccess[] = "newAllowFileAccess"; 133 const char kPrefAllowFileAccess[] = "newAllowFileAccess";
(...skipping 1256 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 if (info) 1390 if (info)
1388 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release())); 1391 extensions_info->push_back(linked_ptr<ExtensionInfo>(info.release()));
1389 } 1392 }
1390 1393
1391 return extensions_info.Pass(); 1394 return extensions_info.Pass();
1392 } 1395 }
1393 1396
1394 void ExtensionPrefs::SetDelayedInstallInfo( 1397 void ExtensionPrefs::SetDelayedInstallInfo(
1395 const Extension* extension, 1398 const Extension* extension,
1396 Extension::State initial_state, 1399 Extension::State initial_state,
1400 DelayReason delay_reason,
1397 const syncer::StringOrdinal& page_ordinal) { 1401 const syncer::StringOrdinal& page_ordinal) {
1398 DictionaryValue* extension_dict = new DictionaryValue(); 1402 DictionaryValue* extension_dict = new DictionaryValue();
1399 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(), 1403 PopulateExtensionInfoPrefs(extension, time_provider_->GetCurrentTime(),
1400 initial_state, extension_dict); 1404 initial_state, extension_dict);
1401 1405
1402 // Add transient data that is needed by FinishDelayedInstallInfo(), but 1406 // Add transient data that is needed by FinishDelayedInstallInfo(), but
1403 // should not be in the final extension prefs. All entries here should have 1407 // should not be in the final extension prefs. All entries here should have
1404 // a corresponding Remove() call in FinishDelayedInstallInfo(). 1408 // a corresponding Remove() call in FinishDelayedInstallInfo().
1405 if (extension->RequiresSortOrdinal()) { 1409 if (extension->RequiresSortOrdinal()) {
1406 extension_dict->SetString( 1410 extension_dict->SetString(
1407 kPrefSuggestedPageOrdinal, 1411 kPrefSuggestedPageOrdinal,
1408 page_ordinal.IsValid() ? page_ordinal.ToInternalValue() 1412 page_ordinal.IsValid() ? page_ordinal.ToInternalValue()
1409 : std::string()); 1413 : std::string());
1410 } 1414 }
1415 extension_dict->SetInteger(kDelayedInstallReason,
1416 static_cast<int>(delay_reason));
1411 1417
1412 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict); 1418 UpdateExtensionPref(extension->id(), kDelayedInstallInfo, extension_dict);
1413 } 1419 }
1414 1420
1415 bool ExtensionPrefs::RemoveDelayedInstallInfo( 1421 bool ExtensionPrefs::RemoveDelayedInstallInfo(
1416 const std::string& extension_id) { 1422 const std::string& extension_id) {
1417 if (!GetExtensionPref(extension_id)) 1423 if (!GetExtensionPref(extension_id))
1418 return false; 1424 return false;
1419 ScopedExtensionPrefUpdate update(prefs_, extension_id); 1425 ScopedExtensionPrefUpdate update(prefs_, extension_id);
1420 bool result = update->Remove(kDelayedInstallInfo, NULL); 1426 bool result = update->Remove(kDelayedInstallInfo, NULL);
(...skipping 15 matching lines...) Expand all
1436 // Also do any other data cleanup that makes sense. 1442 // Also do any other data cleanup that makes sense.
1437 std::string serialized_ordinal; 1443 std::string serialized_ordinal;
1438 syncer::StringOrdinal suggested_page_ordinal; 1444 syncer::StringOrdinal suggested_page_ordinal;
1439 bool needs_sort_ordinal = false; 1445 bool needs_sort_ordinal = false;
1440 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal, 1446 if (pending_install_dict->GetString(kPrefSuggestedPageOrdinal,
1441 &serialized_ordinal)) { 1447 &serialized_ordinal)) {
1442 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal); 1448 suggested_page_ordinal = syncer::StringOrdinal(serialized_ordinal);
1443 needs_sort_ordinal = true; 1449 needs_sort_ordinal = true;
1444 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, NULL); 1450 pending_install_dict->Remove(kPrefSuggestedPageOrdinal, NULL);
1445 } 1451 }
1452 pending_install_dict->Remove(kDelayedInstallReason, NULL);
1446 1453
1447 const base::Time install_time = time_provider_->GetCurrentTime(); 1454 const base::Time install_time = time_provider_->GetCurrentTime();
1448 pending_install_dict->Set( 1455 pending_install_dict->Set(
1449 kPrefInstallTime, 1456 kPrefInstallTime,
1450 Value::CreateStringValue( 1457 Value::CreateStringValue(
1451 base::Int64ToString(install_time.ToInternalValue()))); 1458 base::Int64ToString(install_time.ToInternalValue())));
1452 1459
1453 // Commit the delayed install data. 1460 // Commit the delayed install data.
1454 extension_dict->MergeDictionary(pending_install_dict); 1461 extension_dict->MergeDictionary(pending_install_dict);
1455 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal, 1462 FinishExtensionInfoPrefs(extension_id, install_time, needs_sort_ordinal,
1456 suggested_page_ordinal, extension_dict); 1463 suggested_page_ordinal, extension_dict);
1457 return true; 1464 return true;
1458 } 1465 }
1459 1466
1460 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo( 1467 scoped_ptr<ExtensionInfo> ExtensionPrefs::GetDelayedInstallInfo(
1461 const std::string& extension_id) const { 1468 const std::string& extension_id) const {
1462 const DictionaryValue* extension_prefs = 1469 const DictionaryValue* extension_prefs =
1463 GetExtensionPref(extension_id); 1470 GetExtensionPref(extension_id);
1464 if (!extension_prefs) 1471 if (!extension_prefs)
1465 return scoped_ptr<ExtensionInfo>(); 1472 return scoped_ptr<ExtensionInfo>();
1466 1473
1467 const DictionaryValue* ext = NULL; 1474 const DictionaryValue* ext = NULL;
1468 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext)) 1475 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext))
1469 return scoped_ptr<ExtensionInfo>(); 1476 return scoped_ptr<ExtensionInfo>();
1470 1477
1471 return GetInstalledInfoHelper(extension_id, ext); 1478 return GetInstalledInfoHelper(extension_id, ext);
1472 } 1479 }
1473 1480
1481 ExtensionPrefs::DelayReason ExtensionPrefs::GetDelayedInstallReason(
1482 const std::string& extension_id) const {
1483 const DictionaryValue* extension_prefs =
1484 GetExtensionPref(extension_id);
1485 if (!extension_prefs)
1486 return DELAY_REASON_NONE;
1487
1488 const DictionaryValue* ext = NULL;
1489 if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext))
1490 return DELAY_REASON_NONE;
1491
1492 int delay_reason;
1493 if (!ext->GetInteger(kDelayedInstallReason, &delay_reason))
1494 return DELAY_REASON_NONE;
1495
1496 return static_cast<DelayReason>(delay_reason);
1497 }
1498
1474 scoped_ptr<ExtensionPrefs::ExtensionsInfo> ExtensionPrefs:: 1499 scoped_ptr<ExtensionPrefs::ExtensionsInfo> ExtensionPrefs::
1475 GetAllDelayedInstallInfo() const { 1500 GetAllDelayedInstallInfo() const {
1476 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo); 1501 scoped_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo);
1477 1502
1478 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref); 1503 const DictionaryValue* extensions = prefs_->GetDictionary(kExtensionsPref);
1479 for (DictionaryValue::Iterator extension_id(*extensions); 1504 for (DictionaryValue::Iterator extension_id(*extensions);
1480 !extension_id.IsAtEnd(); extension_id.Advance()) { 1505 !extension_id.IsAtEnd(); extension_id.Advance()) {
1481 if (!Extension::IdIsValid(extension_id.key())) 1506 if (!Extension::IdIsValid(extension_id.key()))
1482 continue; 1507 continue;
1483 1508
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 if (IsFromBookmark(extension_id)) 1565 if (IsFromBookmark(extension_id))
1541 creation_flags |= Extension::FROM_BOOKMARK; 1566 creation_flags |= Extension::FROM_BOOKMARK;
1542 if (IsFromWebStore(extension_id)) 1567 if (IsFromWebStore(extension_id))
1543 creation_flags |= Extension::FROM_WEBSTORE; 1568 creation_flags |= Extension::FROM_WEBSTORE;
1544 if (WasInstalledByDefault(extension_id)) 1569 if (WasInstalledByDefault(extension_id))
1545 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT; 1570 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT;
1546 } 1571 }
1547 return creation_flags; 1572 return creation_flags;
1548 } 1573 }
1549 1574
1575 int ExtensionPrefs::GetDelayedInstallCreationFlags(
1576 const std::string& extension_id) const {
1577 int creation_flags = Extension::NO_FLAGS;
1578 const DictionaryValue* delayed_info = NULL;
1579 if (ReadPrefAsDictionary(extension_id, kDelayedInstallInfo, &delayed_info)) {
1580 delayed_info->GetInteger(kPrefCreationFlags, &creation_flags);
1581 }
1582 return creation_flags;
1583 }
1584
1550 bool ExtensionPrefs::WasInstalledByDefault( 1585 bool ExtensionPrefs::WasInstalledByDefault(
1551 const std::string& extension_id) const { 1586 const std::string& extension_id) const {
1552 const DictionaryValue* dictionary = GetExtensionPref(extension_id); 1587 const DictionaryValue* dictionary = GetExtensionPref(extension_id);
1553 bool result = false; 1588 bool result = false;
1554 if (dictionary && 1589 if (dictionary &&
1555 dictionary->GetBoolean(kPrefWasInstalledByDefault, &result)) 1590 dictionary->GetBoolean(kPrefWasInstalledByDefault, &result))
1556 return result; 1591 return result;
1557 return false; 1592 return false;
1558 } 1593 }
1559 1594
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
2045 is_enabled = initial_state == Extension::ENABLED; 2080 is_enabled = initial_state == Extension::ENABLED;
2046 } 2081 }
2047 2082
2048 extension_pref_value_map_->RegisterExtension(extension_id, install_time, 2083 extension_pref_value_map_->RegisterExtension(extension_id, install_time,
2049 is_enabled); 2084 is_enabled);
2050 content_settings_store_->RegisterExtension(extension_id, install_time, 2085 content_settings_store_->RegisterExtension(extension_id, install_time,
2051 is_enabled); 2086 is_enabled);
2052 } 2087 }
2053 2088
2054 } // namespace extensions 2089 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698