• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 #pragma once
8 
9 #include <string>
10 
11 #include "base/file_path.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/string16.h"
14 #include "content/browser/browser_thread.h"
15 
16 
17 // Manages packing an extension on the file thread and reporting the result
18 // back to the UI.
19 class PackExtensionJob : public base::RefCountedThreadSafe<PackExtensionJob> {
20  public:
21 
22   // Interface for people who want to use PackExtensionJob to implement.
23   class Client {
24    public:
25     virtual void OnPackSuccess(const FilePath& crx_file,
26                                const FilePath& key_file) = 0;
27     virtual void OnPackFailure(const std::string& message) = 0;
28 
29    protected:
~Client()30     virtual ~Client() {}
31   };
32 
33   PackExtensionJob(Client* client,
34                    const FilePath& root_directory,
35                    const FilePath& key_file);
36 
37   // Starts the packing job.
38   void Start();
39 
40   // The client should call this when it is destroyed to prevent
41   // PackExtensionJob from attempting to access it.
42   void ClearClient();
43 
44   // The standard packing success message.
45   static string16 StandardSuccessMessage(const FilePath& crx_file,
46                                          const FilePath& key_file);
47 
set_asynchronous(bool async)48   void set_asynchronous(bool async) { asynchronous_ = async; }
49 
50  private:
51   friend class base::RefCountedThreadSafe<PackExtensionJob>;
52 
53   virtual ~PackExtensionJob();
54 
55   // If |asynchronous_| is false, this is run on whichever thread calls it.
56   void Run();
57   void ReportSuccessOnClientThread();
58   void ReportFailureOnClientThread(const std::string& error);
59 
60   BrowserThread::ID client_thread_id_;
61   Client* client_;
62   FilePath root_directory_;
63   FilePath key_file_;
64   FilePath crx_file_out_;
65   FilePath key_file_out_;
66   bool asynchronous_;
67 
68   DISALLOW_COPY_AND_ASSIGN(PackExtensionJob);
69 };
70 
71 #endif  // CHROME_BROWSER_EXTENSIONS_PACK_EXTENSION_JOB_H_
72