distilled_content_store.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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
13namespace dom_distiller {
14
15// This is a simple interface for saving and loading of distilled content for an
16// ArticleEntry.
17class 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.
39class 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_
62