- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / pack_extension_job.h
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_PACK_EXTENSION_JOB_H_
6 #define CHROME_BROWSER_EXTENSIONS_PACK_EXTENSION_JOB_H_
7
8 #include <string>
9
10 #include "base/files/file_path.h"
11 #include "base/memory/ref_counted.h"
12 #include "base/strings/string16.h"
13 #include "chrome/browser/extensions/extension_creator.h"
14 #include "content/public/browser/browser_thread.h"
15
16 namespace extensions {
17
18 // Manages packing an extension on the file thread and reporting the result
19 // back to the UI.
20 class PackExtensionJob : public base::RefCountedThreadSafe<PackExtensionJob> {
21  public:
22   // Interface for people who want to use PackExtensionJob to implement.
23   class Client {
24    public:
25     virtual void OnPackSuccess(const base::FilePath& crx_file,
26                                const base::FilePath& key_file) = 0;
27     virtual void OnPackFailure(const std::string& message,
28                                ExtensionCreator::ErrorType error_type) = 0;
29
30    protected:
31     virtual ~Client() {}
32   };
33
34   PackExtensionJob(Client* client,
35                    const base::FilePath& root_directory,
36                    const base::FilePath& key_file,
37                    int run_flags);
38
39   // Starts the packing job.
40   void Start();
41
42   // The client should call this when it is destroyed to prevent
43   // PackExtensionJob from attempting to access it.
44   void ClearClient();
45
46   // The standard packing success message.
47   static string16 StandardSuccessMessage(const base::FilePath& crx_file,
48                                          const base::FilePath& key_file);
49
50   void set_asynchronous(bool async) { asynchronous_ = async; }
51
52  private:
53   friend class base::RefCountedThreadSafe<PackExtensionJob>;
54
55   virtual ~PackExtensionJob();
56
57   // If |asynchronous_| is false, this is run on whichever thread calls it.
58   void Run();
59   void ReportSuccessOnClientThread();
60   void ReportFailureOnClientThread(const std::string& error,
61                                    ExtensionCreator::ErrorType error_type);
62
63   content::BrowserThread::ID client_thread_id_;
64   Client* client_;
65   base::FilePath root_directory_;
66   base::FilePath key_file_;
67   base::FilePath crx_file_out_;
68   base::FilePath key_file_out_;
69   bool asynchronous_;
70   int run_flags_;  // Bitset of ExtensionCreator::RunFlags values - we always
71                    // assume kRequireModernManifestVersion, though.
72
73   DISALLOW_COPY_AND_ASSIGN(PackExtensionJob);
74 };
75
76 }  // namespace extensions
77
78 #endif  // CHROME_BROWSER_EXTENSIONS_PACK_EXTENSION_JOB_H_