Make sure webrtc::VideoSource is released when WebRtcVideoTrackAdapter is destroyed.
[chromium-blink-merge.git] / components / dom_distiller / core / distilled_content_store.h
blob4ccacf0caa6a892c605f7a8c754cc4f1d773e346
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.
5 #ifndef COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
6 #define COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_STORE_H_
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"
13 namespace dom_distiller {
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;
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;
29 DistilledContentStore() {};
30 virtual ~DistilledContentStore() {};
31 private:
32 DISALLOW_COPY_AND_ASSIGN(DistilledContentStore);
35 // This content store keeps anything put in it around forever. Its memory use
36 // then may grow very large.
38 // TODO(cjhopman): Do something about unbound memory growth.
39 class InMemoryContentStore : public DistilledContentStore {
40 public:
41 InMemoryContentStore();
42 virtual ~InMemoryContentStore();
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;
51 // Synchronously saves the content.
52 void InjectContent(const ArticleEntry& entry,
53 const DistilledArticleProto& proto);
55 private:
56 typedef base::hash_map<std::string, DistilledArticleProto> ContentMap;
57 ContentMap cache_;
59 } // dom_distiller
61 #endif // COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_CONTENT_CACHE_H_