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 // Add a local storage to the set of canned local storages that is returned 79 // by this helper. 80 void AddLocalStorage(const GURL& origin); 81 82 // Clear the list of canned local storages. 83 void Reset(); 84 85 // True if no local storages are currently stored. 86 bool empty() const; 87 88 // Returns the number of local storages currently stored. 89 size_t GetLocalStorageCount() const; 90 91 // Returns the set of origins that use local storage. 92 const std::set<GURL>& GetLocalStorageInfo() const; 93 94 // BrowsingDataLocalStorageHelper implementation. 95 virtual void StartFetching( 96 const base::Callback<void(const std::list<LocalStorageInfo>&)>& callback) 97 OVERRIDE; 98 virtual void DeleteOrigin(const GURL& origin) OVERRIDE; 99 100 private: 101 virtual ~CannedBrowsingDataLocalStorageHelper(); 102 103 std::set<GURL> pending_local_storage_info_; 104 105 DISALLOW_COPY_AND_ASSIGN(CannedBrowsingDataLocalStorageHelper); 106 }; 107 108 #endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_LOCAL_STORAGE_HELPER_H_ 109