Home | History | Annotate | Download | only in extensions
      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:
     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 
     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