| Index: chrome/browser/chromeos/extensions/zip_file_creator.h
|
| diff --git a/chrome/browser/chromeos/extensions/zip_file_creator.h b/chrome/browser/chromeos/extensions/zip_file_creator.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6885111f6c9a1ca088f1694e3bf776521dbd7b15
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/extensions/zip_file_creator.h
|
| @@ -0,0 +1,96 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_EXTENSIONS_ZIP_FILE_CREATOR_H_
|
| +#define CHROME_BROWSER_EXTENSIONS_ZIP_FILE_CREATOR_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "base/file_path.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| +#include "content/public/browser/browser_thread.h"
|
| +#include "content/public/browser/utility_process_host_client.h"
|
| +
|
| +namespace extensions {
|
| +
|
| +// ZipFileCreator creates a ZIP file from a specified list of files and
|
| +// directories under a common parent directory. This is done in a sandboxed
|
| +// subprocess to protect the browser process from handling arbitrary input data
|
| +// from untrusted sources.
|
| +//
|
| +// Lifetime management:
|
| +//
|
| +// This class is ref-counted by each call it makes to itself on another thread,
|
| +// and by UtilityProcessHost.
|
| +//
|
| +// Additionally, we hold a reference to our own client so that it lives at least
|
| +// long enough to receive the result of zip file creation.
|
| +//
|
| +//
|
| +// NOTE: This class should only be used on the file thread.
|
| +class ZipFileCreator : public content::UtilityProcessHostClient {
|
| + public:
|
| + class Delegate {
|
| + public:
|
| + virtual void OnZipSuccess() = 0;
|
| + virtual void OnZipFailure() = 0;
|
| +
|
| + protected:
|
| + virtual ~Delegate() {}
|
| + };
|
| +
|
| + // Creates a zip file from the specified list of files and directories.
|
| + ZipFileCreator(Delegate* delegate,
|
| + const FilePath& dir_path,
|
| + const FilePath& dest_path,
|
| + const std::vector<FilePath>& file_paths);
|
| +
|
| + // Start creating the zip file. The client is called with the results.
|
| + void Start();
|
| +
|
| + private:
|
| + class ProcessHostClient;
|
| +
|
| + friend class ProcessHostClient;
|
| + friend class ZipFileCreatorTest;
|
| +
|
| + virtual ~ZipFileCreator();
|
| +
|
| + // Starts the utility process that creates the zip file.
|
| + void StartProcessOnIOThread();
|
| +
|
| + // UtilityProcessHostClient
|
| + virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
|
| + virtual void OnProcessCrashed(int exit_code) OVERRIDE;
|
| +
|
| + // IPC message handlers.
|
| + void OnCreateZipFileSucceeded();
|
| + void OnCreateZipFileFailed();
|
| +
|
| + void ReportFailure();
|
| + void ReportSuccess();
|
| +
|
| + // Our delegate's thread. This is the thread we respond on.
|
| + content::BrowserThread::ID thread_identifier_;
|
| +
|
| + // Our delegate.
|
| + Delegate* delegate_;
|
| +
|
| + // The common parent directory for the input and output files.
|
| + FilePath dir_path_;
|
| +
|
| + // The output zip file.
|
| + FilePath dest_path_;
|
| +
|
| + // The list of files and directories.
|
| + std::vector<FilePath> file_paths_;
|
| +
|
| + // Whether we've received a response from the utility process yet.
|
| + bool got_response_;
|
| +};
|
| +
|
| +} // namespace extensions
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_ZIP_FILE_CREATOR_H_
|
|
|