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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_LOCAL_STORAGE_HELPER_H_ 6 #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_LOCAL_STORAGE_HELPER_H_ 7 8 #include <list> 9 #include <set> 10 #include <vector> 11 12 #include "base/callback.h" 13 #include "base/compiler_specific.h" 14 #include "base/files/file_path.h" 15 #include "base/memory/ref_counted.h" 16 #include "base/synchronization/lock.h" 17 #include "base/time/time.h" 18 #include "chrome/common/url_constants.h" 19 #include "content/public/browser/dom_storage_context.h" 20 #include "url/gurl.h" 21 22 class Profile; 23 24 // This class fetches local storage information and provides a 25 // means to delete the data associated with an origin. 26 class BrowsingDataLocalStorageHelper 27 : public base::RefCounted<BrowsingDataLocalStorageHelper> { 28 public: 29 // Contains detailed information about local storage. 30 struct LocalStorageInfo { 31 LocalStorageInfo( 32 const GURL& origin_url, 33 int64 size, 34 base::Time last_modified); 35 ~LocalStorageInfo(); 36 37 GURL origin_url; 38 int64 size; 39 base::Time last_modified; 40 }; 41 42 explicit BrowsingDataLocalStorageHelper(Profile* profile); 43 44 // Starts the fetching process, which will notify its completion via 45 // callback. This must be called only in the UI thread. 46 virtual void StartFetching( 47 const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback); 48 49 // Deletes the local storage for the |origin|. 50 virtual void DeleteOrigin(const GURL& origin); 51 52 protected: 53 friend class base::RefCounted<BrowsingDataLocalStorageHelper>; 54 virtual ~BrowsingDataLocalStorageHelper(); 55 56 void CallCompletionCallback(); 57 58 content::DOMStorageContext* dom_storage_context_; // Owned by the profile 59 base::Callback<void(const std::list<LocalStorageInfo>&)> completion_callback_; 60 bool is_fetching_; 61 std::list<LocalStorageInfo> local_storage_info_; 62 63 private: 64 void GetUsageInfoCallback( 65 const std::vector<content::LocalStorageUsageInfo>& infos); 66 67 DISALLOW_COPY_AND_ASSIGN(BrowsingDataLocalStorageHelper); 68 }; 69 70 // This class is a thin wrapper around BrowsingDataLocalStorageHelper that does 71 // not fetch its information from the local storage tracker, but gets them 72 // passed as a parameter during construction. 73 class CannedBrowsingDataLocalStorageHelper 74 : public BrowsingDataLocalStorageHelper { 75 public: 76 explicit CannedBrowsingDataLocalStorageHelper(Profile* profile); 77 78 // Return a copy of the local storage helper. Only one consumer can use the 79 // StartFetching method at a time, so we need to create a copy of the helper 80 // every time we instantiate a cookies tree model for it. 81 CannedBrowsingDataLocalStorageHelper* Clone(); 82 83 // Add a local storage to the set of canned local storages that is returned 84 // by this helper. 85 void AddLocalStorage(const GURL& origin); 86 87 // Clear the list of canned local storages. 88 void Reset(); 89 90 // True if no local storages are currently stored. 91 bool empty() const; 92 93 // Returns the number of local storages currently stored. 94 size_t GetLocalStorageCount() const; 95 96 // Returns the set of origins that use local storage. 97 const std::set<GURL>& GetLocalStorageInfo() const; 98 99 // BrowsingDataLocalStorageHelper implementation. 100 virtual void StartFetching( 101 const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) 102 OVERRIDE; 103 104 private: 105 virtual ~CannedBrowsingDataLocalStorageHelper(); 106 107 // Convert the pending local storage info to local storage info objects. 108 void ConvertPendingInfo(); 109 110 std::set<GURL> pending_local_storage_info_; 111 112 Profile* profile_; 113 114 DISALLOW_COPY_AND_ASSIGN(CannedBrowsingDataLocalStorageHelper); 115 }; 116 117 #endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_LOCAL_STORAGE_HELPER_H_ 118