| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ | 5 #ifndef EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ |
| 6 #define EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ | 6 #define EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ |
| 7 | 7 |
| 8 #include <memory> |
| 8 #include <set> | 9 #include <set> |
| 9 #include <string> | 10 #include <string> |
| 10 #include <vector> | 11 #include <vector> |
| 11 | 12 |
| 12 #include "base/macros.h" | 13 #include "base/macros.h" |
| 13 #include "base/memory/linked_ptr.h" | 14 #include "base/memory/linked_ptr.h" |
| 14 #include "base/memory/scoped_ptr.h" | |
| 15 #include "base/observer_list.h" | 15 #include "base/observer_list.h" |
| 16 #include "base/time/time.h" | 16 #include "base/time/time.h" |
| 17 #include "base/values.h" | 17 #include "base/values.h" |
| 18 #include "components/keyed_service/core/keyed_service.h" | 18 #include "components/keyed_service/core/keyed_service.h" |
| 19 #include "components/prefs/scoped_user_pref_update.h" | 19 #include "components/prefs/scoped_user_pref_update.h" |
| 20 #include "extensions/browser/blacklist_state.h" | 20 #include "extensions/browser/blacklist_state.h" |
| 21 #include "extensions/browser/extension_scoped_prefs.h" | 21 #include "extensions/browser/extension_scoped_prefs.h" |
| 22 #include "extensions/browser/install_flag.h" | 22 #include "extensions/browser/install_flag.h" |
| 23 #include "extensions/common/constants.h" | 23 #include "extensions/common/constants.h" |
| 24 #include "extensions/common/extension.h" | 24 #include "extensions/common/extension.h" |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 // A version of Create which allows injection of a custom base::Time provider. | 140 // A version of Create which allows injection of a custom base::Time provider. |
| 141 // Use this as needed for testing. | 141 // Use this as needed for testing. |
| 142 static ExtensionPrefs* Create( | 142 static ExtensionPrefs* Create( |
| 143 content::BrowserContext* browser_context, | 143 content::BrowserContext* browser_context, |
| 144 PrefService* prefs, | 144 PrefService* prefs, |
| 145 const base::FilePath& root_dir, | 145 const base::FilePath& root_dir, |
| 146 ExtensionPrefValueMap* extension_pref_value_map, | 146 ExtensionPrefValueMap* extension_pref_value_map, |
| 147 bool extensions_disabled, | 147 bool extensions_disabled, |
| 148 const std::vector<ExtensionPrefsObserver*>& early_observers, | 148 const std::vector<ExtensionPrefsObserver*>& early_observers, |
| 149 scoped_ptr<TimeProvider> time_provider); | 149 std::unique_ptr<TimeProvider> time_provider); |
| 150 | 150 |
| 151 ~ExtensionPrefs() override; | 151 ~ExtensionPrefs() override; |
| 152 | 152 |
| 153 // Convenience function to get the ExtensionPrefs for a BrowserContext. | 153 // Convenience function to get the ExtensionPrefs for a BrowserContext. |
| 154 static ExtensionPrefs* Get(content::BrowserContext* context); | 154 static ExtensionPrefs* Get(content::BrowserContext* context); |
| 155 | 155 |
| 156 // Returns all installed extensions from extension preferences provided by | 156 // Returns all installed extensions from extension preferences provided by |
| 157 // |pref_service|. This is exposed for ProtectedPrefsWatcher because it needs | 157 // |pref_service|. This is exposed for ProtectedPrefsWatcher because it needs |
| 158 // access to the extension ID list before the ExtensionService is initialized. | 158 // access to the extension ID list before the ExtensionService is initialized. |
| 159 static ExtensionIdList GetExtensionsFrom(const PrefService* pref_service); | 159 static ExtensionIdList GetExtensionsFrom(const PrefService* pref_service); |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 | 349 |
| 350 // A bit we use for determining if we should send the "days since active" | 350 // A bit we use for determining if we should send the "days since active" |
| 351 // ping. A value of true means the item has been active (launched) since the | 351 // ping. A value of true means the item has been active (launched) since the |
| 352 // last update check. | 352 // last update check. |
| 353 bool GetActiveBit(const std::string& extension_id) const; | 353 bool GetActiveBit(const std::string& extension_id) const; |
| 354 void SetActiveBit(const std::string& extension_id, bool active); | 354 void SetActiveBit(const std::string& extension_id, bool active); |
| 355 | 355 |
| 356 // Returns the granted permission set for the extension with |extension_id|, | 356 // Returns the granted permission set for the extension with |extension_id|, |
| 357 // and NULL if no preferences were found for |extension_id|. | 357 // and NULL if no preferences were found for |extension_id|. |
| 358 // This passes ownership of the returned set to the caller. | 358 // This passes ownership of the returned set to the caller. |
| 359 scoped_ptr<const PermissionSet> GetGrantedPermissions( | 359 std::unique_ptr<const PermissionSet> GetGrantedPermissions( |
| 360 const std::string& extension_id) const; | 360 const std::string& extension_id) const; |
| 361 | 361 |
| 362 // Adds |permissions| to the granted permissions set for the extension with | 362 // Adds |permissions| to the granted permissions set for the extension with |
| 363 // |extension_id|. The new granted permissions set will be the union of | 363 // |extension_id|. The new granted permissions set will be the union of |
| 364 // |permissions| and the already granted permissions. | 364 // |permissions| and the already granted permissions. |
| 365 void AddGrantedPermissions(const std::string& extension_id, | 365 void AddGrantedPermissions(const std::string& extension_id, |
| 366 const PermissionSet& permissions); | 366 const PermissionSet& permissions); |
| 367 | 367 |
| 368 // As above, but subtracts the given |permissions| from the granted set. | 368 // As above, but subtracts the given |permissions| from the granted set. |
| 369 void RemoveGrantedPermissions(const std::string& extension_id, | 369 void RemoveGrantedPermissions(const std::string& extension_id, |
| 370 const PermissionSet& permissions); | 370 const PermissionSet& permissions); |
| 371 | 371 |
| 372 // Gets the active permission set for the specified extension. This may | 372 // Gets the active permission set for the specified extension. This may |
| 373 // differ from the permissions in the manifest due to the optional | 373 // differ from the permissions in the manifest due to the optional |
| 374 // permissions API. This passes ownership of the set to the caller. | 374 // permissions API. This passes ownership of the set to the caller. |
| 375 scoped_ptr<const PermissionSet> GetActivePermissions( | 375 std::unique_ptr<const PermissionSet> GetActivePermissions( |
| 376 const std::string& extension_id) const; | 376 const std::string& extension_id) const; |
| 377 | 377 |
| 378 // Sets the active |permissions| for the extension with |extension_id|. | 378 // Sets the active |permissions| for the extension with |extension_id|. |
| 379 void SetActivePermissions(const std::string& extension_id, | 379 void SetActivePermissions(const std::string& extension_id, |
| 380 const PermissionSet& permissions); | 380 const PermissionSet& permissions); |
| 381 | 381 |
| 382 // Records whether or not this extension is currently running. | 382 // Records whether or not this extension is currently running. |
| 383 void SetExtensionRunning(const std::string& extension_id, bool is_running); | 383 void SetExtensionRunning(const std::string& extension_id, bool is_running); |
| 384 | 384 |
| 385 // Returns whether or not this extension is marked as running. This is used to | 385 // Returns whether or not this extension is marked as running. This is used to |
| (...skipping 20 matching lines...) Expand all Loading... |
| 406 // IMPORTANT: you probably want to use extensions::util::AllowFileAccess | 406 // IMPORTANT: you probably want to use extensions::util::AllowFileAccess |
| 407 // instead of this method. | 407 // instead of this method. |
| 408 bool AllowFileAccess(const std::string& extension_id) const; | 408 bool AllowFileAccess(const std::string& extension_id) const; |
| 409 void SetAllowFileAccess(const std::string& extension_id, bool allow); | 409 void SetAllowFileAccess(const std::string& extension_id, bool allow); |
| 410 bool HasAllowFileAccessSetting(const std::string& extension_id) const; | 410 bool HasAllowFileAccessSetting(const std::string& extension_id) const; |
| 411 | 411 |
| 412 // Saves ExtensionInfo for each installed extension with the path to the | 412 // Saves ExtensionInfo for each installed extension with the path to the |
| 413 // version directory and the location. Blacklisted extensions won't be saved | 413 // version directory and the location. Blacklisted extensions won't be saved |
| 414 // and neither will external extensions the user has explicitly uninstalled. | 414 // and neither will external extensions the user has explicitly uninstalled. |
| 415 // Caller takes ownership of returned structure. | 415 // Caller takes ownership of returned structure. |
| 416 scoped_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const; | 416 std::unique_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const; |
| 417 | 417 |
| 418 // Same as above, but only includes external extensions the user has | 418 // Same as above, but only includes external extensions the user has |
| 419 // explicitly uninstalled. | 419 // explicitly uninstalled. |
| 420 scoped_ptr<ExtensionsInfo> GetUninstalledExtensionsInfo() const; | 420 std::unique_ptr<ExtensionsInfo> GetUninstalledExtensionsInfo() const; |
| 421 | 421 |
| 422 // Returns the ExtensionInfo from the prefs for the given extension. If the | 422 // Returns the ExtensionInfo from the prefs for the given extension. If the |
| 423 // extension is not present, NULL is returned. | 423 // extension is not present, NULL is returned. |
| 424 scoped_ptr<ExtensionInfo> GetInstalledExtensionInfo( | 424 std::unique_ptr<ExtensionInfo> GetInstalledExtensionInfo( |
| 425 const std::string& extension_id) const; | 425 const std::string& extension_id) const; |
| 426 | 426 |
| 427 // We've downloaded an updated .crx file for the extension, but are waiting | 427 // We've downloaded an updated .crx file for the extension, but are waiting |
| 428 // to install it. | 428 // to install it. |
| 429 // | 429 // |
| 430 // |install_flags| are a bitmask of extension::InstallFlags. | 430 // |install_flags| are a bitmask of extension::InstallFlags. |
| 431 void SetDelayedInstallInfo(const Extension* extension, | 431 void SetDelayedInstallInfo(const Extension* extension, |
| 432 Extension::State initial_state, | 432 Extension::State initial_state, |
| 433 int install_flags, | 433 int install_flags, |
| 434 DelayReason delay_reason, | 434 DelayReason delay_reason, |
| 435 const syncer::StringOrdinal& page_ordinal, | 435 const syncer::StringOrdinal& page_ordinal, |
| 436 const std::string& install_parameter); | 436 const std::string& install_parameter); |
| 437 | 437 |
| 438 // Removes any delayed install information we have for the given | 438 // Removes any delayed install information we have for the given |
| 439 // |extension_id|. Returns true if there was info to remove; false otherwise. | 439 // |extension_id|. Returns true if there was info to remove; false otherwise. |
| 440 bool RemoveDelayedInstallInfo(const std::string& extension_id); | 440 bool RemoveDelayedInstallInfo(const std::string& extension_id); |
| 441 | 441 |
| 442 // Update the prefs to finish the update for an extension. | 442 // Update the prefs to finish the update for an extension. |
| 443 bool FinishDelayedInstallInfo(const std::string& extension_id); | 443 bool FinishDelayedInstallInfo(const std::string& extension_id); |
| 444 | 444 |
| 445 // Returns the ExtensionInfo from the prefs for delayed install information | 445 // Returns the ExtensionInfo from the prefs for delayed install information |
| 446 // for |extension_id|, if we have any. Otherwise returns NULL. | 446 // for |extension_id|, if we have any. Otherwise returns NULL. |
| 447 scoped_ptr<ExtensionInfo> GetDelayedInstallInfo( | 447 std::unique_ptr<ExtensionInfo> GetDelayedInstallInfo( |
| 448 const std::string& extension_id) const; | 448 const std::string& extension_id) const; |
| 449 | 449 |
| 450 DelayReason GetDelayedInstallReason(const std::string& extension_id) const; | 450 DelayReason GetDelayedInstallReason(const std::string& extension_id) const; |
| 451 | 451 |
| 452 // Returns information about all the extensions that have delayed install | 452 // Returns information about all the extensions that have delayed install |
| 453 // information. | 453 // information. |
| 454 scoped_ptr<ExtensionsInfo> GetAllDelayedInstallInfo() const; | 454 std::unique_ptr<ExtensionsInfo> GetAllDelayedInstallInfo() const; |
| 455 | 455 |
| 456 // Returns true if the user repositioned the app on the app launcher via drag | 456 // Returns true if the user repositioned the app on the app launcher via drag |
| 457 // and drop. | 457 // and drop. |
| 458 bool WasAppDraggedByUser(const std::string& extension_id) const; | 458 bool WasAppDraggedByUser(const std::string& extension_id) const; |
| 459 | 459 |
| 460 // Sets a flag indicating that the user repositioned the app on the app | 460 // Sets a flag indicating that the user repositioned the app on the app |
| 461 // launcher by drag and dropping it. | 461 // launcher by drag and dropping it. |
| 462 void SetAppDraggedByUser(const std::string& extension_id); | 462 void SetAppDraggedByUser(const std::string& extension_id); |
| 463 | 463 |
| 464 // Returns true if there is an extension which controls the preference value | 464 // Returns true if there is an extension which controls the preference value |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 // start of this ExtensionService. Applies only to extensions with isolated | 515 // start of this ExtensionService. Applies only to extensions with isolated |
| 516 // storage. | 516 // storage. |
| 517 void SetNeedsStorageGarbageCollection(bool value); | 517 void SetNeedsStorageGarbageCollection(bool value); |
| 518 bool NeedsStorageGarbageCollection() const; | 518 bool NeedsStorageGarbageCollection() const; |
| 519 | 519 |
| 520 // Used by AppWindowGeometryCache to persist its cache. These methods | 520 // Used by AppWindowGeometryCache to persist its cache. These methods |
| 521 // should not be called directly. | 521 // should not be called directly. |
| 522 const base::DictionaryValue* GetGeometryCache( | 522 const base::DictionaryValue* GetGeometryCache( |
| 523 const std::string& extension_id) const; | 523 const std::string& extension_id) const; |
| 524 void SetGeometryCache(const std::string& extension_id, | 524 void SetGeometryCache(const std::string& extension_id, |
| 525 scoped_ptr<base::DictionaryValue> cache); | 525 std::unique_ptr<base::DictionaryValue> cache); |
| 526 | 526 |
| 527 // Used for verification of installed extension ids. For the Set method, pass | 527 // Used for verification of installed extension ids. For the Set method, pass |
| 528 // null to remove the preference. | 528 // null to remove the preference. |
| 529 const base::DictionaryValue* GetInstallSignature() const; | 529 const base::DictionaryValue* GetInstallSignature() const; |
| 530 void SetInstallSignature(const base::DictionaryValue* signature); | 530 void SetInstallSignature(const base::DictionaryValue* signature); |
| 531 | 531 |
| 532 // The installation parameter associated with the extension. | 532 // The installation parameter associated with the extension. |
| 533 std::string GetInstallParam(const std::string& extension_id) const; | 533 std::string GetInstallParam(const std::string& extension_id) const; |
| 534 void SetInstallParam(const std::string& extension_id, | 534 void SetInstallParam(const std::string& extension_id, |
| 535 const std::string& install_parameter); | 535 const std::string& install_parameter); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 555 DISABLE_REASON_REMOVE, | 555 DISABLE_REASON_REMOVE, |
| 556 DISABLE_REASON_REPLACE, | 556 DISABLE_REASON_REPLACE, |
| 557 DISABLE_REASON_CLEAR | 557 DISABLE_REASON_CLEAR |
| 558 }; | 558 }; |
| 559 | 559 |
| 560 // See the Create methods. | 560 // See the Create methods. |
| 561 ExtensionPrefs(content::BrowserContext* browser_context, | 561 ExtensionPrefs(content::BrowserContext* browser_context, |
| 562 PrefService* prefs, | 562 PrefService* prefs, |
| 563 const base::FilePath& root_dir, | 563 const base::FilePath& root_dir, |
| 564 ExtensionPrefValueMap* extension_pref_value_map, | 564 ExtensionPrefValueMap* extension_pref_value_map, |
| 565 scoped_ptr<TimeProvider> time_provider, | 565 std::unique_ptr<TimeProvider> time_provider, |
| 566 bool extensions_disabled, | 566 bool extensions_disabled, |
| 567 const std::vector<ExtensionPrefsObserver*>& early_observers); | 567 const std::vector<ExtensionPrefsObserver*>& early_observers); |
| 568 | 568 |
| 569 // Converts absolute paths in the pref to paths relative to the | 569 // Converts absolute paths in the pref to paths relative to the |
| 570 // install_directory_. | 570 // install_directory_. |
| 571 void MakePathsRelative(); | 571 void MakePathsRelative(); |
| 572 | 572 |
| 573 // Converts internal relative paths to be absolute. Used for export to | 573 // Converts internal relative paths to be absolute. Used for export to |
| 574 // consumers who expect full paths. | 574 // consumers who expect full paths. |
| 575 void MakePathsAbsolute(base::DictionaryValue* dict); | 575 void MakePathsAbsolute(base::DictionaryValue* dict); |
| 576 | 576 |
| 577 // Helper function used by GetInstalledExtensionInfo() and | 577 // Helper function used by GetInstalledExtensionInfo() and |
| 578 // GetDelayedInstallInfo() to construct an ExtensionInfo from the provided | 578 // GetDelayedInstallInfo() to construct an ExtensionInfo from the provided |
| 579 // |extension| dictionary. | 579 // |extension| dictionary. |
| 580 scoped_ptr<ExtensionInfo> GetInstalledInfoHelper( | 580 std::unique_ptr<ExtensionInfo> GetInstalledInfoHelper( |
| 581 const std::string& extension_id, | 581 const std::string& extension_id, |
| 582 const base::DictionaryValue* extension) const; | 582 const base::DictionaryValue* extension) const; |
| 583 | 583 |
| 584 // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a | 584 // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a |
| 585 // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns. | 585 // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns. |
| 586 bool ReadPrefAsURLPatternSet(const std::string& extension_id, | 586 bool ReadPrefAsURLPatternSet(const std::string& extension_id, |
| 587 const std::string& pref_key, | 587 const std::string& pref_key, |
| 588 URLPatternSet* result, | 588 URLPatternSet* result, |
| 589 int valid_schemes) const; | 589 int valid_schemes) const; |
| 590 | 590 |
| 591 // Converts |new_value| to a list of strings and sets the |pref_key| pref | 591 // Converts |new_value| to a list of strings and sets the |pref_key| pref |
| 592 // belonging to |extension_id|. | 592 // belonging to |extension_id|. |
| 593 void SetExtensionPrefURLPatternSet(const std::string& extension_id, | 593 void SetExtensionPrefURLPatternSet(const std::string& extension_id, |
| 594 const std::string& pref_key, | 594 const std::string& pref_key, |
| 595 const URLPatternSet& new_value); | 595 const URLPatternSet& new_value); |
| 596 | 596 |
| 597 // Read the boolean preference entry and return true if the preference exists | 597 // Read the boolean preference entry and return true if the preference exists |
| 598 // and the preference's value is true; false otherwise. | 598 // and the preference's value is true; false otherwise. |
| 599 bool ReadPrefAsBooleanAndReturn(const std::string& extension_id, | 599 bool ReadPrefAsBooleanAndReturn(const std::string& extension_id, |
| 600 const std::string& key) const; | 600 const std::string& key) const; |
| 601 | 601 |
| 602 // Interprets |pref_key| in |extension_id|'s preferences as an | 602 // Interprets |pref_key| in |extension_id|'s preferences as an |
| 603 // PermissionSet, and passes ownership of the set to the caller. | 603 // PermissionSet, and passes ownership of the set to the caller. |
| 604 scoped_ptr<const PermissionSet> ReadPrefAsPermissionSet( | 604 std::unique_ptr<const PermissionSet> ReadPrefAsPermissionSet( |
| 605 const std::string& extension_id, | 605 const std::string& extension_id, |
| 606 const std::string& pref_key) const; | 606 const std::string& pref_key) const; |
| 607 | 607 |
| 608 // Converts the |new_value| to its value and sets the |pref_key| pref | 608 // Converts the |new_value| to its value and sets the |pref_key| pref |
| 609 // belonging to |extension_id|. | 609 // belonging to |extension_id|. |
| 610 void SetExtensionPrefPermissionSet(const std::string& extension_id, | 610 void SetExtensionPrefPermissionSet(const std::string& extension_id, |
| 611 const std::string& pref_key, | 611 const std::string& pref_key, |
| 612 const PermissionSet& new_value); | 612 const PermissionSet& new_value); |
| 613 | 613 |
| 614 // Returns an immutable dictionary for extension |id|'s prefs, or NULL if it | 614 // Returns an immutable dictionary for extension |id|'s prefs, or NULL if it |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 // The pref service specific to this set of extension prefs. Owned by the | 675 // The pref service specific to this set of extension prefs. Owned by the |
| 676 // BrowserContext. | 676 // BrowserContext. |
| 677 PrefService* prefs_; | 677 PrefService* prefs_; |
| 678 | 678 |
| 679 // Base extensions install directory. | 679 // Base extensions install directory. |
| 680 base::FilePath install_directory_; | 680 base::FilePath install_directory_; |
| 681 | 681 |
| 682 // Weak pointer, owned by BrowserContext. | 682 // Weak pointer, owned by BrowserContext. |
| 683 ExtensionPrefValueMap* extension_pref_value_map_; | 683 ExtensionPrefValueMap* extension_pref_value_map_; |
| 684 | 684 |
| 685 scoped_ptr<TimeProvider> time_provider_; | 685 std::unique_ptr<TimeProvider> time_provider_; |
| 686 | 686 |
| 687 bool extensions_disabled_; | 687 bool extensions_disabled_; |
| 688 | 688 |
| 689 base::ObserverList<ExtensionPrefsObserver> observer_list_; | 689 base::ObserverList<ExtensionPrefsObserver> observer_list_; |
| 690 | 690 |
| 691 DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); | 691 DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); |
| 692 }; | 692 }; |
| 693 | 693 |
| 694 } // namespace extensions | 694 } // namespace extensions |
| 695 | 695 |
| 696 #endif // EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ | 696 #endif // EXTENSIONS_BROWSER_EXTENSION_PREFS_H_ |
| OLD | NEW |