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_APPCACHE_HELPER_H_ 6 #define CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_APPCACHE_HELPER_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/ref_counted.h" 10 #include "net/base/completion_callback.h" 11 #include "url/gurl.h" 12 #include "webkit/browser/appcache/appcache_service.h" 13 14 class Profile; 15 16 namespace appcache { 17 class AppCacheService; 18 } 19 20 // This class fetches appcache information on behalf of a caller 21 // on the UI thread. 22 class BrowsingDataAppCacheHelper 23 : public base::RefCountedThreadSafe<BrowsingDataAppCacheHelper> { 24 public: 25 typedef std::map<GURL, appcache::AppCacheInfoVector> OriginAppCacheInfoMap; 26 27 explicit BrowsingDataAppCacheHelper(Profile* profile); 28 29 virtual void StartFetching(const base::Closure& completion_callback); 30 virtual void DeleteAppCacheGroup(const GURL& manifest_url); 31 32 appcache::AppCacheInfoCollection* info_collection() const { 33 DCHECK(!is_fetching_); 34 return info_collection_.get(); 35 } 36 37 protected: 38 friend class base::RefCountedThreadSafe<BrowsingDataAppCacheHelper>; 39 virtual ~BrowsingDataAppCacheHelper(); 40 41 base::Closure completion_callback_; 42 scoped_refptr<appcache::AppCacheInfoCollection> info_collection_; 43 44 private: 45 void OnFetchComplete(int rv); 46 47 bool is_fetching_; 48 appcache::AppCacheService* appcache_service_; 49 net::CancelableCompletionCallback appcache_info_callback_; 50 51 DISALLOW_COPY_AND_ASSIGN(BrowsingDataAppCacheHelper); 52 }; 53 54 // This class is a thin wrapper around BrowsingDataAppCacheHelper that does not 55 // fetch its information from the appcache service, but gets them passed as 56 // a parameter during construction. 57 class CannedBrowsingDataAppCacheHelper : public BrowsingDataAppCacheHelper { 58 public: 59 explicit CannedBrowsingDataAppCacheHelper(Profile* profile); 60 61 // Return a copy of the appcache helper. Only one consumer can use the 62 // StartFetching method at a time, so we need to create a copy of the helper 63 // every time we instantiate a cookies tree model for it. 64 CannedBrowsingDataAppCacheHelper* Clone(); 65 66 // Add an appcache to the set of canned caches that is returned by this 67 // helper. 68 void AddAppCache(const GURL& manifest_url); 69 70 // Clears the list of canned caches. 71 void Reset(); 72 73 // True if no appcaches are currently stored. 74 bool empty() const; 75 76 // Returns the number of app cache resources. 77 size_t GetAppCacheCount() const; 78 79 // Returns a current map with the |AppCacheInfoVector|s per origin. 80 const OriginAppCacheInfoMap& GetOriginAppCacheInfoMap() const; 81 82 // BrowsingDataAppCacheHelper methods. 83 virtual void StartFetching(const base::Closure& completion_callback) OVERRIDE; 84 virtual void DeleteAppCacheGroup(const GURL& manifest_url) OVERRIDE; 85 86 private: 87 virtual ~CannedBrowsingDataAppCacheHelper(); 88 89 Profile* profile_; 90 91 DISALLOW_COPY_AND_ASSIGN(CannedBrowsingDataAppCacheHelper); 92 }; 93 94 #endif // CHROME_BROWSER_BROWSING_DATA_BROWSING_DATA_APPCACHE_HELPER_H_ 95