| Index: components/dom_distiller/core/dom_distiller_service.h
 | 
| diff --git a/components/dom_distiller/core/dom_distiller_service.h b/components/dom_distiller/core/dom_distiller_service.h
 | 
| index 630b184e5eb5e2fda8e5054fbfb5b649c4ad335b..8f4ea70f7bed5f4a69d685deb205e92a9977e02e 100644
 | 
| --- a/components/dom_distiller/core/dom_distiller_service.h
 | 
| +++ b/components/dom_distiller/core/dom_distiller_service.h
 | 
| @@ -30,42 +30,73 @@ class TaskTracker;
 | 
|  class ViewerHandle;
 | 
|  class ViewRequestDelegate;
 | 
|  
 | 
| -// Provide a view of the article list and ways of interacting with it.
 | 
| -class DomDistillerService {
 | 
| +// Service for interacting with the Dom Distiller.
 | 
| +// Construction, destruction, and usage of this service must happen on the same
 | 
| +// thread. Callbacks will be called on that same thread.
 | 
| +class DomDistillerServiceInterface {
 | 
|   public:
 | 
|    typedef base::Callback<void(bool)> ArticleAvailableCallback;
 | 
| +  virtual ~DomDistillerServiceInterface() {}
 | 
|  
 | 
| -  DomDistillerService(scoped_ptr<DomDistillerStoreInterface> store,
 | 
| -                      scoped_ptr<DistillerFactory> distiller_factory);
 | 
| -  ~DomDistillerService();
 | 
| -
 | 
| -  syncer::SyncableService* GetSyncableService() const;
 | 
| +  virtual syncer::SyncableService* GetSyncableService() const = 0;
 | 
|  
 | 
|    // Distill the article at |url| and add the resulting entry to the DOM
 | 
| -  // distiller list. |article_cb| is invoked with true if article is
 | 
| -  // available offline.
 | 
| -  const std::string AddToList(const GURL& url,
 | 
| -                              const ArticleAvailableCallback& article_cb);
 | 
| +  // distiller list. |article_cb| is always invoked, and the bool argument to it
 | 
| +  // represents whether the article is available offline.
 | 
| +  virtual const std::string AddToList(
 | 
| +      const GURL& url,
 | 
| +      const ArticleAvailableCallback& article_cb) = 0;
 | 
|  
 | 
|    // Gets the full list of entries.
 | 
| -  std::vector<ArticleEntry> GetEntries() const;
 | 
| +  virtual std::vector<ArticleEntry> GetEntries() const = 0;
 | 
|  
 | 
|    // Removes the specified entry from the dom distiller store.
 | 
| -  scoped_ptr<ArticleEntry> RemoveEntry(const std::string& entry_id);
 | 
| +  virtual scoped_ptr<ArticleEntry> RemoveEntry(const std::string& entry_id) = 0;
 | 
|  
 | 
|    // Request to view an article by entry id. Returns a null pointer if no entry
 | 
|    // with |entry_id| exists. The ViewerHandle should be destroyed before the
 | 
|    // ViewRequestDelegate. The request will be cancelled when the handle is
 | 
| -  // destroyed (or when this service is destroyed).
 | 
| -  scoped_ptr<ViewerHandle> ViewEntry(ViewRequestDelegate* delegate,
 | 
| -                                     const std::string& entry_id);
 | 
| +  // destroyed (or when this service is destroyed), which also ensures that
 | 
| +  // the |delegate| is not called after that.
 | 
| +  virtual scoped_ptr<ViewerHandle> ViewEntry(ViewRequestDelegate* delegate,
 | 
| +                                             const std::string& entry_id) = 0;
 | 
|  
 | 
|    // Request to view an article by url.
 | 
| -  scoped_ptr<ViewerHandle> ViewUrl(ViewRequestDelegate* delegate,
 | 
| -                                   const GURL& url);
 | 
| +  virtual scoped_ptr<ViewerHandle> ViewUrl(ViewRequestDelegate* delegate,
 | 
| +                                           const GURL& url) = 0;
 | 
|  
 | 
| -  void AddObserver(DomDistillerObserver* observer);
 | 
| -  void RemoveObserver(DomDistillerObserver* observer);
 | 
| +  virtual void AddObserver(DomDistillerObserver* observer) = 0;
 | 
| +  virtual void RemoveObserver(DomDistillerObserver* observer) = 0;
 | 
| +
 | 
| + protected:
 | 
| +  DomDistillerServiceInterface() {}
 | 
| +
 | 
| + private:
 | 
| +  DISALLOW_COPY_AND_ASSIGN(DomDistillerServiceInterface);
 | 
| +};
 | 
| +
 | 
| +// Provide a view of the article list and ways of interacting with it.
 | 
| +class DomDistillerService : public DomDistillerServiceInterface {
 | 
| + public:
 | 
| +  DomDistillerService(scoped_ptr<DomDistillerStoreInterface> store,
 | 
| +                      scoped_ptr<DistillerFactory> distiller_factory);
 | 
| +  virtual ~DomDistillerService();
 | 
| +
 | 
| +  // DomDistillerServiceInterface implementation.
 | 
| +  virtual syncer::SyncableService* GetSyncableService() const OVERRIDE;
 | 
| +  virtual const std::string AddToList(
 | 
| +      const GURL& url,
 | 
| +      const ArticleAvailableCallback& article_cb) OVERRIDE;
 | 
| +  virtual std::vector<ArticleEntry> GetEntries() const OVERRIDE;
 | 
| +  virtual scoped_ptr<ArticleEntry> RemoveEntry(const std::string& entry_id)
 | 
| +      OVERRIDE;
 | 
| +  virtual scoped_ptr<ViewerHandle> ViewEntry(ViewRequestDelegate* delegate,
 | 
| +                                             const std::string& entry_id)
 | 
| +      OVERRIDE;
 | 
| +  virtual scoped_ptr<ViewerHandle> ViewUrl(ViewRequestDelegate* delegate,
 | 
| +                                           const GURL& url) OVERRIDE;
 | 
| +  virtual void AddObserver(DomDistillerObserver* observer) OVERRIDE;
 | 
| +  virtual void RemoveObserver(DomDistillerObserver* observer) OVERRIDE;
 | 
|  
 | 
|   private:
 | 
|    void CancelTask(TaskTracker* task);
 | 
| 
 |