OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ | 5 #ifndef COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ |
6 #define COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ | 6 #define COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ |
7 | 7 |
| 8 #include <memory> |
8 #include <string> | 9 #include <string> |
9 #include <vector> | 10 #include <vector> |
10 | 11 |
11 #include "base/callback.h" | 12 #include "base/callback.h" |
12 #include "base/macros.h" | 13 #include "base/macros.h" |
13 #include "base/memory/scoped_ptr.h" | |
14 #include "base/memory/scoped_vector.h" | 14 #include "base/memory/scoped_vector.h" |
15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
16 #include "components/dom_distiller/core/article_entry.h" | 16 #include "components/dom_distiller/core/article_entry.h" |
17 #include "components/dom_distiller/core/distilled_page_prefs.h" | 17 #include "components/dom_distiller/core/distilled_page_prefs.h" |
18 #include "components/dom_distiller/core/distiller_page.h" | 18 #include "components/dom_distiller/core/distiller_page.h" |
19 | 19 |
20 class GURL; | 20 class GURL; |
21 | 21 |
22 namespace syncer { | 22 namespace syncer { |
23 class SyncableService; | 23 class SyncableService; |
(...skipping 22 matching lines...) Expand all Loading... |
46 virtual syncer::SyncableService* GetSyncableService() const = 0; | 46 virtual syncer::SyncableService* GetSyncableService() const = 0; |
47 | 47 |
48 // Distill the article at |url| and add the resulting entry to the DOM | 48 // Distill the article at |url| and add the resulting entry to the DOM |
49 // distiller list. |article_cb| is always invoked, and the bool argument to it | 49 // distiller list. |article_cb| is always invoked, and the bool argument to it |
50 // represents whether the article is available offline. | 50 // represents whether the article is available offline. |
51 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. | 51 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. |
52 // The provided |distiller_page| is only used if there is not already a | 52 // The provided |distiller_page| is only used if there is not already a |
53 // distillation task in progress for the given |url|. | 53 // distillation task in progress for the given |url|. |
54 virtual const std::string AddToList( | 54 virtual const std::string AddToList( |
55 const GURL& url, | 55 const GURL& url, |
56 scoped_ptr<DistillerPage> distiller_page, | 56 std::unique_ptr<DistillerPage> distiller_page, |
57 const ArticleAvailableCallback& article_cb) = 0; | 57 const ArticleAvailableCallback& article_cb) = 0; |
58 | 58 |
59 // Returns whether an article stored has the given entry id. | 59 // Returns whether an article stored has the given entry id. |
60 virtual bool HasEntry(const std::string& entry_id) = 0; | 60 virtual bool HasEntry(const std::string& entry_id) = 0; |
61 | 61 |
62 // Returns the source URL given an entry ID. If the entry ID article has | 62 // Returns the source URL given an entry ID. If the entry ID article has |
63 // multiple pages, this will return the URL of the first page. Returns an | 63 // multiple pages, this will return the URL of the first page. Returns an |
64 // empty string if there is no entry associated with the given entry ID. | 64 // empty string if there is no entry associated with the given entry ID. |
65 virtual std::string GetUrlForEntry(const std::string& entry_id) = 0; | 65 virtual std::string GetUrlForEntry(const std::string& entry_id) = 0; |
66 | 66 |
67 // Gets the full list of entries. | 67 // Gets the full list of entries. |
68 virtual std::vector<ArticleEntry> GetEntries() const = 0; | 68 virtual std::vector<ArticleEntry> GetEntries() const = 0; |
69 | 69 |
70 // Removes the specified entry from the dom distiller store. | 70 // Removes the specified entry from the dom distiller store. |
71 virtual scoped_ptr<ArticleEntry> RemoveEntry(const std::string& entry_id) = 0; | 71 virtual std::unique_ptr<ArticleEntry> RemoveEntry( |
| 72 const std::string& entry_id) = 0; |
72 | 73 |
73 // Request to view an article by entry id. Returns a null pointer if no entry | 74 // Request to view an article by entry id. Returns a null pointer if no entry |
74 // with |entry_id| exists. The ViewerHandle should be destroyed before the | 75 // with |entry_id| exists. The ViewerHandle should be destroyed before the |
75 // ViewRequestDelegate. The request will be cancelled when the handle is | 76 // ViewRequestDelegate. The request will be cancelled when the handle is |
76 // destroyed (or when this service is destroyed), which also ensures that | 77 // destroyed (or when this service is destroyed), which also ensures that |
77 // the |delegate| is not called after that. | 78 // the |delegate| is not called after that. |
78 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. | 79 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. |
79 // The provided |distiller_page| is only used if there is not already a | 80 // The provided |distiller_page| is only used if there is not already a |
80 // distillation task in progress for the given |entry_id|. | 81 // distillation task in progress for the given |entry_id|. |
81 virtual scoped_ptr<ViewerHandle> ViewEntry( | 82 virtual std::unique_ptr<ViewerHandle> ViewEntry( |
82 ViewRequestDelegate* delegate, | 83 ViewRequestDelegate* delegate, |
83 scoped_ptr<DistillerPage> distiller_page, | 84 std::unique_ptr<DistillerPage> distiller_page, |
84 const std::string& entry_id) = 0; | 85 const std::string& entry_id) = 0; |
85 | 86 |
86 // Request to view an article by url. | 87 // Request to view an article by url. |
87 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. | 88 // Use CreateDefaultDistillerPage() to create a default |distiller_page|. |
88 // The provided |distiller_page| is only used if there is not already a | 89 // The provided |distiller_page| is only used if there is not already a |
89 // distillation task in progress for the given |url|. | 90 // distillation task in progress for the given |url|. |
90 virtual scoped_ptr<ViewerHandle> ViewUrl( | 91 virtual std::unique_ptr<ViewerHandle> ViewUrl( |
91 ViewRequestDelegate* delegate, | 92 ViewRequestDelegate* delegate, |
92 scoped_ptr<DistillerPage> distiller_page, | 93 std::unique_ptr<DistillerPage> distiller_page, |
93 const GURL& url) = 0; | 94 const GURL& url) = 0; |
94 | 95 |
95 // Creates a default DistillerPage. | 96 // Creates a default DistillerPage. |
96 virtual scoped_ptr<DistillerPage> CreateDefaultDistillerPage( | 97 virtual std::unique_ptr<DistillerPage> CreateDefaultDistillerPage( |
97 const gfx::Size& render_view_size) = 0; | 98 const gfx::Size& render_view_size) = 0; |
98 virtual scoped_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle( | 99 virtual std::unique_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle( |
99 scoped_ptr<SourcePageHandle> handle) = 0; | 100 std::unique_ptr<SourcePageHandle> handle) = 0; |
100 | 101 |
101 virtual void AddObserver(DomDistillerObserver* observer) = 0; | 102 virtual void AddObserver(DomDistillerObserver* observer) = 0; |
102 virtual void RemoveObserver(DomDistillerObserver* observer) = 0; | 103 virtual void RemoveObserver(DomDistillerObserver* observer) = 0; |
103 | 104 |
104 // Returns the DistilledPagePrefs owned by the instance of | 105 // Returns the DistilledPagePrefs owned by the instance of |
105 // DomDistillerService. | 106 // DomDistillerService. |
106 virtual DistilledPagePrefs* GetDistilledPagePrefs() = 0; | 107 virtual DistilledPagePrefs* GetDistilledPagePrefs() = 0; |
107 | 108 |
108 protected: | 109 protected: |
109 DomDistillerServiceInterface() {} | 110 DomDistillerServiceInterface() {} |
110 | 111 |
111 private: | 112 private: |
112 DISALLOW_COPY_AND_ASSIGN(DomDistillerServiceInterface); | 113 DISALLOW_COPY_AND_ASSIGN(DomDistillerServiceInterface); |
113 }; | 114 }; |
114 | 115 |
115 // Provide a view of the article list and ways of interacting with it. | 116 // Provide a view of the article list and ways of interacting with it. |
116 class DomDistillerService : public DomDistillerServiceInterface { | 117 class DomDistillerService : public DomDistillerServiceInterface { |
117 public: | 118 public: |
118 DomDistillerService(scoped_ptr<DomDistillerStoreInterface> store, | 119 DomDistillerService( |
119 scoped_ptr<DistillerFactory> distiller_factory, | 120 std::unique_ptr<DomDistillerStoreInterface> store, |
120 scoped_ptr<DistillerPageFactory> distiller_page_factory, | 121 std::unique_ptr<DistillerFactory> distiller_factory, |
121 scoped_ptr<DistilledPagePrefs> distilled_page_prefs); | 122 std::unique_ptr<DistillerPageFactory> distiller_page_factory, |
| 123 std::unique_ptr<DistilledPagePrefs> distilled_page_prefs); |
122 ~DomDistillerService() override; | 124 ~DomDistillerService() override; |
123 | 125 |
124 // DomDistillerServiceInterface implementation. | 126 // DomDistillerServiceInterface implementation. |
125 syncer::SyncableService* GetSyncableService() const override; | 127 syncer::SyncableService* GetSyncableService() const override; |
126 const std::string AddToList( | 128 const std::string AddToList( |
127 const GURL& url, | 129 const GURL& url, |
128 scoped_ptr<DistillerPage> distiller_page, | 130 std::unique_ptr<DistillerPage> distiller_page, |
129 const ArticleAvailableCallback& article_cb) override; | 131 const ArticleAvailableCallback& article_cb) override; |
130 bool HasEntry(const std::string& entry_id) override; | 132 bool HasEntry(const std::string& entry_id) override; |
131 std::string GetUrlForEntry(const std::string& entry_id) override; | 133 std::string GetUrlForEntry(const std::string& entry_id) override; |
132 std::vector<ArticleEntry> GetEntries() const override; | 134 std::vector<ArticleEntry> GetEntries() const override; |
133 scoped_ptr<ArticleEntry> RemoveEntry(const std::string& entry_id) override; | 135 std::unique_ptr<ArticleEntry> RemoveEntry( |
134 scoped_ptr<ViewerHandle> ViewEntry(ViewRequestDelegate* delegate, | 136 const std::string& entry_id) override; |
135 scoped_ptr<DistillerPage> distiller_page, | 137 std::unique_ptr<ViewerHandle> ViewEntry( |
136 const std::string& entry_id) override; | 138 ViewRequestDelegate* delegate, |
137 scoped_ptr<ViewerHandle> ViewUrl(ViewRequestDelegate* delegate, | 139 std::unique_ptr<DistillerPage> distiller_page, |
138 scoped_ptr<DistillerPage> distiller_page, | 140 const std::string& entry_id) override; |
139 const GURL& url) override; | 141 std::unique_ptr<ViewerHandle> ViewUrl( |
140 scoped_ptr<DistillerPage> CreateDefaultDistillerPage( | 142 ViewRequestDelegate* delegate, |
| 143 std::unique_ptr<DistillerPage> distiller_page, |
| 144 const GURL& url) override; |
| 145 std::unique_ptr<DistillerPage> CreateDefaultDistillerPage( |
141 const gfx::Size& render_view_size) override; | 146 const gfx::Size& render_view_size) override; |
142 scoped_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle( | 147 std::unique_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle( |
143 scoped_ptr<SourcePageHandle> handle) override; | 148 std::unique_ptr<SourcePageHandle> handle) override; |
144 void AddObserver(DomDistillerObserver* observer) override; | 149 void AddObserver(DomDistillerObserver* observer) override; |
145 void RemoveObserver(DomDistillerObserver* observer) override; | 150 void RemoveObserver(DomDistillerObserver* observer) override; |
146 DistilledPagePrefs* GetDistilledPagePrefs() override; | 151 DistilledPagePrefs* GetDistilledPagePrefs() override; |
147 | 152 |
148 private: | 153 private: |
149 void CancelTask(TaskTracker* task); | 154 void CancelTask(TaskTracker* task); |
150 void AddDistilledPageToList(const ArticleEntry& entry, | 155 void AddDistilledPageToList(const ArticleEntry& entry, |
151 const DistilledArticleProto* article_proto, | 156 const DistilledArticleProto* article_proto, |
152 bool distillation_succeeded); | 157 bool distillation_succeeded); |
153 | 158 |
154 TaskTracker* CreateTaskTracker(const ArticleEntry& entry); | 159 TaskTracker* CreateTaskTracker(const ArticleEntry& entry); |
155 | 160 |
156 TaskTracker* GetTaskTrackerForEntry(const ArticleEntry& entry) const; | 161 TaskTracker* GetTaskTrackerForEntry(const ArticleEntry& entry) const; |
157 TaskTracker* GetTaskTrackerForUrl(const GURL& url) const; | 162 TaskTracker* GetTaskTrackerForUrl(const GURL& url) const; |
158 | 163 |
159 // Gets the task tracker for the given |url| or |entry|. If no appropriate | 164 // Gets the task tracker for the given |url| or |entry|. If no appropriate |
160 // tracker exists, this will create one and put it in the |TaskTracker| | 165 // tracker exists, this will create one and put it in the |TaskTracker| |
161 // parameter passed into this function, initialize it, and add it to | 166 // parameter passed into this function, initialize it, and add it to |
162 // |tasks_|. If a |TaskTracker| needed to be created, these functions will | 167 // |tasks_|. If a |TaskTracker| needed to be created, these functions will |
163 // return true. | 168 // return true. |
164 bool GetOrCreateTaskTrackerForUrl(const GURL& url, | 169 bool GetOrCreateTaskTrackerForUrl(const GURL& url, |
165 TaskTracker** task_tracker); | 170 TaskTracker** task_tracker); |
166 bool GetOrCreateTaskTrackerForEntry(const ArticleEntry& entry, | 171 bool GetOrCreateTaskTrackerForEntry(const ArticleEntry& entry, |
167 TaskTracker** task_tracker); | 172 TaskTracker** task_tracker); |
168 | 173 |
169 scoped_ptr<DomDistillerStoreInterface> store_; | 174 std::unique_ptr<DomDistillerStoreInterface> store_; |
170 scoped_ptr<DistilledContentStore> content_store_; | 175 std::unique_ptr<DistilledContentStore> content_store_; |
171 scoped_ptr<DistillerFactory> distiller_factory_; | 176 std::unique_ptr<DistillerFactory> distiller_factory_; |
172 scoped_ptr<DistillerPageFactory> distiller_page_factory_; | 177 std::unique_ptr<DistillerPageFactory> distiller_page_factory_; |
173 scoped_ptr<DistilledPagePrefs> distilled_page_prefs_; | 178 std::unique_ptr<DistilledPagePrefs> distilled_page_prefs_; |
174 | 179 |
175 typedef ScopedVector<TaskTracker> TaskList; | 180 typedef ScopedVector<TaskTracker> TaskList; |
176 TaskList tasks_; | 181 TaskList tasks_; |
177 | 182 |
178 DISALLOW_COPY_AND_ASSIGN(DomDistillerService); | 183 DISALLOW_COPY_AND_ASSIGN(DomDistillerService); |
179 }; | 184 }; |
180 | 185 |
181 } // namespace dom_distiller | 186 } // namespace dom_distiller |
182 | 187 |
183 #endif // COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ | 188 #endif // COMPONENTS_DOM_DISTILLER_CORE_DOM_DISTILLER_SERVICE_H_ |
OLD | NEW |