Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / components / dom_distiller / core / distilled_content_store.h
1 // Copyright 2014 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 COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
6 #define COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
7
8 #include "base/bind.h"
9 #include "base/containers/hash_tables.h"
10 #include "components/dom_distiller/core/article_entry.h"
11 #include "components/dom_distiller/core/proto/distilled_article.pb.h"
12
13 namespace dom_distiller {
14
15 // This is a simple interface for saving and loading of distilled content for an
16 // ArticleEntry.
17 class DistilledContentStore {
18  public:
19   typedef base::Callback<
20       void(bool /* success */, scoped_ptr<DistilledArticleProto>)> LoadCallback;
21   typedef base::Callback<void(bool /* success */)> SaveCallback;
22
23   virtual void SaveContent(const ArticleEntry& entry,
24                            const DistilledArticleProto& proto,
25                            SaveCallback callback) = 0;
26   virtual void LoadContent(const ArticleEntry& entry,
27                            LoadCallback callback) const = 0;
28
29   DistilledContentStore() {};
30   virtual ~DistilledContentStore() {};
31  private:
32   DISALLOW_COPY_AND_ASSIGN(DistilledContentStore);
33 };
34
35 // This content store keeps anything put in it around forever. Its memory use
36 // then may grow very large.
37 //
38 // TODO(cjhopman): Do something about unbound memory growth.
39 class InMemoryContentStore : public DistilledContentStore {
40  public:
41   InMemoryContentStore();
42   virtual ~InMemoryContentStore();
43
44   // DistilledContentStore implementation
45   virtual void SaveContent(const ArticleEntry& entry,
46                            const DistilledArticleProto& proto,
47                            SaveCallback callback) OVERRIDE;
48   virtual void LoadContent(const ArticleEntry& entry,
49                            LoadCallback callback) const OVERRIDE;
50
51   // Synchronously saves the content.
52   void InjectContent(const ArticleEntry& entry,
53                      const DistilledArticleProto& proto);
54
55  private:
56   typedef base::hash_map<std::string, DistilledArticleProto> ContentMap;
57   ContentMap cache_;
58 };
59 }  // dom_distiller
60
61 #endif  // COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_CACHE_H_