1// Copyright (c) 2011 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 CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_
6#define CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_
7
8#include <map>
9
10#include "base/containers/hash_tables.h"
11#include "content/common/content_export.h"
12#include "url/gurl.h"
13
14namespace content {
15
16class AppCache;
17class AppCacheGroup;
18class AppCacheResponseInfo;
19
20// Represents the working set of appcache object instances
21// currently in memory.
22class CONTENT_EXPORT AppCacheWorkingSet {
23 public:
24  typedef std::map<GURL, AppCacheGroup*> GroupMap;
25
26  AppCacheWorkingSet();
27  ~AppCacheWorkingSet();
28
29  void Disable();
30  bool is_disabled() const { return is_disabled_; }
31
32  void AddCache(AppCache* cache);
33  void RemoveCache(AppCache* cache);
34  AppCache* GetCache(int64 id) {
35    CacheMap::iterator it = caches_.find(id);
36    return (it != caches_.end()) ? it->second : NULL;
37  }
38
39  void AddGroup(AppCacheGroup* group);
40  void RemoveGroup(AppCacheGroup* group);
41  AppCacheGroup* GetGroup(const GURL& manifest_url) {
42    GroupMap::iterator it = groups_.find(manifest_url);
43    return (it != groups_.end()) ? it->second : NULL;
44  }
45
46  const GroupMap* GetGroupsInOrigin(const GURL& origin_url) {
47    return GetMutableGroupsInOrigin(origin_url);
48  }
49
50  void AddResponseInfo(AppCacheResponseInfo* response_info);
51  void RemoveResponseInfo(AppCacheResponseInfo* response_info);
52  AppCacheResponseInfo* GetResponseInfo(int64 id) {
53    ResponseInfoMap::iterator it = response_infos_.find(id);
54    return (it != response_infos_.end()) ? it->second : NULL;
55  }
56
57 private:
58  typedef base::hash_map<int64, AppCache*> CacheMap;
59  typedef std::map<GURL, GroupMap> GroupsByOriginMap;
60  typedef base::hash_map<int64, AppCacheResponseInfo*> ResponseInfoMap;
61
62  GroupMap* GetMutableGroupsInOrigin(const GURL& origin_url) {
63    GroupsByOriginMap::iterator it = groups_by_origin_.find(origin_url);
64    return (it != groups_by_origin_.end()) ? &it->second : NULL;
65  }
66
67  CacheMap caches_;
68  GroupMap groups_;
69  GroupsByOriginMap groups_by_origin_;  // origin -> (manifest -> group)
70  ResponseInfoMap response_infos_;
71  bool is_disabled_;
72};
73
74}  // namespace content
75
76#endif  // CONTENT_BROWSER_APPCACHE_APPCACHE_WORKING_SET_H_
77