appcache_working_set.h revision 116680a4aac90f2aa7413d9095a592090648e557
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/common/content_export.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCache; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCacheGroup; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCacheResponseInfo; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Represents the working set of appcache object instances 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// currently in memory. 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CONTENT_EXPORT AppCacheWorkingSet { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<GURL, AppCacheGroup*> GroupMap; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheWorkingSet(); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~AppCacheWorkingSet(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Disable(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_disabled() const { return is_disabled_; } 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddCache(AppCache* cache); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveCache(AppCache* cache); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCache* GetCache(int64 id) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CacheMap::iterator it = caches_.find(id); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (it != caches_.end()) ? it->second : NULL; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddGroup(AppCacheGroup* group); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveGroup(AppCacheGroup* group); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheGroup* GetGroup(const GURL& manifest_url) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GroupMap::iterator it = groups_.find(manifest_url); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (it != groups_.end()) ? it->second : NULL; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GroupMap* GetGroupsInOrigin(const GURL& origin_url) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetMutableGroupsInOrigin(origin_url); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddResponseInfo(AppCacheResponseInfo* response_info); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveResponseInfo(AppCacheResponseInfo* response_info); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheResponseInfo* GetResponseInfo(int64 id) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResponseInfoMap::iterator it = response_infos_.find(id); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (it != response_infos_.end()) ? it->second : NULL; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::hash_map<int64, AppCache*> CacheMap; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::map<GURL, GroupMap> GroupsByOriginMap; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef base::hash_map<int64, AppCacheResponseInfo*> ResponseInfoMap; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GroupMap* GetMutableGroupsInOrigin(const GURL& origin_url) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GroupsByOriginMap::iterator it = groups_by_origin_.find(origin_url); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (it != groups_by_origin_.end()) ? &it->second : NULL; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CacheMap caches_; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GroupMap groups_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GroupsByOriginMap groups_by_origin_; // origin -> (manifest -> group) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResponseInfoMap response_infos_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_disabled_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace content 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_ 77