1// Copyright (c) 2012 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_EXTENSIONS_API_PAGE_CAPTURE_PAGE_CAPTURE_API_H_
6#define CHROME_BROWSER_EXTENSIONS_API_PAGE_CAPTURE_PAGE_CAPTURE_API_H_
7
8#include <string>
9
10#include "base/memory/ref_counted.h"
11#include "chrome/browser/extensions/chrome_extension_function.h"
12#include "chrome/common/extensions/api/page_capture.h"
13#include "storage/common/blob/shareable_file_reference.h"
14
15namespace base {
16class FilePath;
17}
18
19namespace content {
20class WebContents;
21}
22
23namespace extensions {
24
25class PageCaptureSaveAsMHTMLFunction : public ChromeAsyncExtensionFunction {
26 public:
27  PageCaptureSaveAsMHTMLFunction();
28
29  // Test specific delegate used to test that the temporary file gets deleted.
30  class TestDelegate {
31   public:
32    // Called on the UI thread when the temporary file that contains the
33    // generated data has been created.
34    virtual void OnTemporaryFileCreated(const base::FilePath& temp_file) = 0;
35  };
36  static void SetTestDelegate(TestDelegate* delegate);
37
38 private:
39  virtual ~PageCaptureSaveAsMHTMLFunction();
40  virtual bool RunAsync() OVERRIDE;
41  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
42
43  // Called on the file thread.
44  void CreateTemporaryFile();
45
46  // Called on the UI thread.
47  void TemporaryFileCreated(bool success);
48  void ReturnFailure(const std::string& error);
49  void ReturnSuccess(int64 file_size);
50
51  // Callback called once the MHTML generation is done.
52  void MHTMLGenerated(int64 mhtml_file_size);
53
54  // Returns the WebContents we are associated with, NULL if it's been closed.
55  content::WebContents* GetWebContents();
56
57  scoped_ptr<extensions::api::page_capture::SaveAsMHTML::Params> params_;
58
59  // The path to the temporary file containing the MHTML data.
60  base::FilePath mhtml_path_;
61
62  // The file containing the MHTML.
63  scoped_refptr<storage::ShareableFileReference> mhtml_file_;
64
65  DECLARE_EXTENSION_FUNCTION("pageCapture.saveAsMHTML", PAGECAPTURE_SAVEASMHTML)
66};
67
68}  // namespace extensions
69
70#endif  // CHROME_BROWSER_EXTENSIONS_API_PAGE_CAPTURE_PAGE_CAPTURE_API_H_
71