[email protected] | 7e856dde | 2014-03-15 00:34:05 | [diff] [blame] | 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 CHROME_BROWSER_DOM_DISTILLER_LAZY_DOM_DISTILLER_SERVICE_H_ |
| 6 | #define CHROME_BROWSER_DOM_DISTILLER_LAZY_DOM_DISTILLER_SERVICE_H_ |
| 7 | |
| 8 | #include "components/dom_distiller/core/dom_distiller_service.h" |
| 9 | #include "components/dom_distiller/core/task_tracker.h" |
| 10 | #include "content/public/browser/notification_observer.h" |
| 11 | #include "content/public/browser/notification_registrar.h" |
| 12 | |
| 13 | namespace content { |
| 14 | class NotificationSource; |
| 15 | class NotificationDetails; |
| 16 | } // namespace content |
| 17 | |
| 18 | class Profile; |
| 19 | |
| 20 | namespace dom_distiller { |
| 21 | |
| 22 | class DomDistillerServiceFactory; |
| 23 | |
| 24 | // A class which helps with lazy instantiation of the DomDistillerService, using |
| 25 | // the BrowserContextKeyedServiceFactory for it. This class will delete itself |
| 26 | // when the profile is destroyed. |
| 27 | class LazyDomDistillerService : public DomDistillerServiceInterface, |
| 28 | public content::NotificationObserver { |
| 29 | public: |
| 30 | LazyDomDistillerService(Profile* profile, |
| 31 | const DomDistillerServiceFactory* service_factory); |
| 32 | virtual ~LazyDomDistillerService(); |
| 33 | |
| 34 | public: |
| 35 | // DomDistillerServiceInterface implementation: |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 36 | virtual syncer::SyncableService* GetSyncableService() const override; |
[email protected] | 7e856dde | 2014-03-15 00:34:05 | [diff] [blame] | 37 | virtual const std::string AddToList( |
| 38 | const GURL& url, |
[email protected] | 2ea5fc1 | 2014-04-28 08:14:01 | [diff] [blame] | 39 | scoped_ptr<DistillerPage> distiller_page, |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 40 | const ArticleAvailableCallback& article_cb) override; |
| 41 | virtual bool HasEntry(const std::string& entry_id) override; |
| 42 | virtual std::string GetUrlForEntry(const std::string& entry_id) override; |
| 43 | virtual std::vector<ArticleEntry> GetEntries() const override; |
[email protected] | 2ea5fc1 | 2014-04-28 08:14:01 | [diff] [blame] | 44 | virtual scoped_ptr<ArticleEntry> RemoveEntry( |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 45 | const std::string& entry_id) override; |
[email protected] | 2ea5fc1 | 2014-04-28 08:14:01 | [diff] [blame] | 46 | virtual scoped_ptr<ViewerHandle> ViewEntry( |
| 47 | ViewRequestDelegate* delegate, |
| 48 | scoped_ptr<DistillerPage> distiller_page, |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 49 | const std::string& entry_id) override; |
[email protected] | 2ea5fc1 | 2014-04-28 08:14:01 | [diff] [blame] | 50 | virtual scoped_ptr<ViewerHandle> ViewUrl( |
| 51 | ViewRequestDelegate* delegate, |
| 52 | scoped_ptr<DistillerPage> distiller_page, |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 53 | const GURL& url) override; |
[email protected] | 2ba6b28 | 2014-07-18 14:26:11 | [diff] [blame] | 54 | virtual scoped_ptr<DistillerPage> CreateDefaultDistillerPage( |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 55 | const gfx::Size& render_view_size) override; |
[email protected] | d289bd7 | 2014-05-28 01:24:12 | [diff] [blame] | 56 | virtual scoped_ptr<DistillerPage> CreateDefaultDistillerPageWithHandle( |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 57 | scoped_ptr<SourcePageHandle> handle) override; |
| 58 | virtual void AddObserver(DomDistillerObserver* observer) override; |
| 59 | virtual void RemoveObserver(DomDistillerObserver* observer) override; |
| 60 | virtual DistilledPagePrefs* GetDistilledPagePrefs() override; |
[email protected] | 7e856dde | 2014-03-15 00:34:05 | [diff] [blame] | 61 | |
| 62 | private: |
| 63 | // Accessor method for the backing service instance. |
| 64 | DomDistillerServiceInterface* instance() const; |
| 65 | |
| 66 | // content::NotificationObserver implementation: |
| 67 | virtual void Observe(int type, |
| 68 | const content::NotificationSource& source, |
mostynb | 01d8b10e | 2014-10-13 09:44:44 | [diff] [blame^] | 69 | const content::NotificationDetails& details) override; |
[email protected] | 7e856dde | 2014-03-15 00:34:05 | [diff] [blame] | 70 | |
| 71 | // The Profile to use when retrieving the DomDistillerService and also the |
| 72 | // profile to listen for destruction of. |
| 73 | Profile* profile_; |
| 74 | |
| 75 | // A BrowserContextKeyedServiceFactory for the DomDistillerService. |
| 76 | const DomDistillerServiceFactory* service_factory_; |
| 77 | |
| 78 | // Used to track when the profile is shut down. |
| 79 | content::NotificationRegistrar registrar_; |
| 80 | |
| 81 | DISALLOW_COPY_AND_ASSIGN(LazyDomDistillerService); |
| 82 | }; |
| 83 | |
| 84 | } // namespace dom_distiller |
| 85 | |
| 86 | #endif // CHROME_BROWSER_DOM_DISTILLER_LAZY_DOM_DISTILLER_SERVICE_H_ |