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
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_DOM_DISTILLER_CORE_FAKE_DISTILLER_H_
6#define COMPONENTS_DOM_DISTILLER_CORE_FAKE_DISTILLER_H_
7
8#include "base/callback.h"
9#include "components/dom_distiller/core/article_distillation_update.h"
10#include "components/dom_distiller/core/article_entry.h"
11#include "components/dom_distiller/core/distiller.h"
12#include "testing/gmock/include/gmock/gmock.h"
13#include "url/gurl.h"
14
15class GURL;
16
17namespace dom_distiller {
18namespace test {
19
20class MockDistillerFactory : public DistillerFactory {
21 public:
22  MockDistillerFactory();
23  virtual ~MockDistillerFactory();
24  MOCK_METHOD0(CreateDistillerImpl, Distiller*());
25  virtual scoped_ptr<Distiller> CreateDistiller() OVERRIDE {
26    return scoped_ptr<Distiller>(CreateDistillerImpl());
27  }
28};
29
30class FakeDistiller : public Distiller {
31 public:
32  // If execute_callback is true, when DistillPage is called, a task will
33  // immediately be posted to execute the callback with a simple
34  // DistilledArticleProto.
35  explicit FakeDistiller(bool execute_callback);
36  // TODO(yfriedman): Drop execute_callback from this and give the option of
37  // "auto-distilling" or calling the provided closure.
38  explicit FakeDistiller(bool execute_callback,
39                         const base::Closure& distillation_initiated_callback);
40  virtual ~FakeDistiller();
41  MOCK_METHOD0(Die, void());
42
43  virtual void DistillPage(
44      const GURL& url,
45      scoped_ptr<DistillerPage> distiller_page,
46      const DistillationFinishedCallback& article_callback,
47      const DistillationUpdateCallback& page_callback) OVERRIDE;
48
49  void RunDistillerCallback(scoped_ptr<DistilledArticleProto> proto);
50  void RunDistillerUpdateCallback(const ArticleDistillationUpdate& update);
51
52  GURL GetUrl() { return url_; }
53
54  DistillationFinishedCallback GetArticleCallback() {
55    return article_callback_;
56  }
57
58 private:
59  void PostDistillerCallback(scoped_ptr<DistilledArticleProto> proto);
60  void RunDistillerCallbackInternal(scoped_ptr<DistilledArticleProto> proto);
61
62  bool execute_callback_;
63  GURL url_;
64  DistillationFinishedCallback article_callback_;
65  DistillationUpdateCallback page_callback_;
66  bool destruction_allowed_;
67  // Used to notify when distillation is complete.
68  base::Closure distillation_initiated_callback_;
69};
70
71}  // namespace test
72}  // namespace dom_distiller
73
74#endif  // COMPONENTS_DOM_DISTILLER_CORE_FAKE_DISTILLER_H_
75