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