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_UI_WEBUI_EXTENSIONS_PACK_EXTENSION_HANDLER_H_
6#define CHROME_BROWSER_UI_WEBUI_EXTENSIONS_PACK_EXTENSION_HANDLER_H_
7
8#include <string>
9
10#include "base/files/file_path.h"
11#include "chrome/browser/browsing_data/browsing_data_remover.h"
12#include "chrome/browser/extensions/pack_extension_job.h"
13#include "chrome/browser/plugins/plugin_data_remover_helper.h"
14#include "content/public/browser/web_ui_message_handler.h"
15#include "ui/shell_dialogs/select_file_dialog.h"
16
17namespace content {
18class WebUIDataSource;
19}
20
21namespace extensions {
22
23// Clear browser data handler page UI handler.
24class PackExtensionHandler : public content::WebUIMessageHandler,
25                             public ui::SelectFileDialog::Listener,
26                             public PackExtensionJob::Client {
27 public:
28  PackExtensionHandler();
29  virtual ~PackExtensionHandler();
30
31  void GetLocalizedValues(content::WebUIDataSource* source);
32
33  // WebUIMessageHandler implementation.
34  virtual void RegisterMessages() OVERRIDE;
35
36  // ExtensionPackJob::Client implementation.
37  virtual void OnPackSuccess(const base::FilePath& crx_file,
38                             const base::FilePath& key_file) OVERRIDE;
39
40  virtual void OnPackFailure(const std::string& error,
41                             ExtensionCreator::ErrorType) OVERRIDE;
42
43 private:
44  // SelectFileDialog::Listener implementation.
45  virtual void FileSelected(const base::FilePath& path,
46                            int index, void* params) OVERRIDE;
47  virtual void MultiFilesSelected(
48      const std::vector<base::FilePath>& files, void* params) OVERRIDE;
49  virtual void FileSelectionCanceled(void* params) OVERRIDE {}
50
51  // JavaScript callback to start packing an extension.
52  void HandlePackMessage(const base::ListValue* args);
53
54  // JavaScript callback to show a file browse dialog.
55  // |args[0]| must be a string that specifies the file dialog type: file or
56  // folder.
57  // |args[1]| must be a string that specifies the operation to perform: load
58  // or pem.
59  void HandleSelectFilePathMessage(const base::ListValue* args);
60
61  // A function to ask the page to show an alert.
62  void ShowAlert(const std::string& message);
63
64  // Used to package the extension.
65  scoped_refptr<PackExtensionJob> pack_job_;
66
67  // Returned by the SelectFileDialog machinery. Used to initiate the selection
68  // dialog.
69  scoped_refptr<ui::SelectFileDialog> load_extension_dialog_;
70
71  // Path to root directory of extension.
72  base::FilePath extension_path_;
73
74  // Path to private key file, or null if none specified.
75  base::FilePath private_key_path_;
76
77  // Path to the last used folder to load an extension.
78  base::FilePath last_used_path_;
79
80  DISALLOW_COPY_AND_ASSIGN(PackExtensionHandler);
81};
82
83}  // namespace extensions
84
85#endif  // CHROME_BROWSER_UI_WEBUI_EXTENSIONS_PACK_EXTENSION_HANDLER_H_
86