// Copyright 2015 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 SERVICES_ASSET_BUNDLE_ASSET_UNPACKER_JOB_H_
#define SERVICES_ASSET_BUNDLE_ASSET_UNPACKER_JOB_H_

#include "base/files/scoped_temp_dir.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/task_runner.h"
#include "mojo/data_pipe_utils/data_pipe_utils.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/services/asset_bundle/interfaces/asset_bundle.mojom.h"

namespace mojo {
namespace asset_bundle {

class AssetUnpackerJob {
 public:
  AssetUnpackerJob(InterfaceRequest<AssetBundle> asset_bundle,
                   scoped_refptr<base::TaskRunner> worker_runner);
  ~AssetUnpackerJob();

  void Unpack(ScopedDataPipeConsumerHandle zipped_assets);

 private:
  void OnZippedAssetsAvailable(const base::FilePath& zip_path, bool success);
  void OnUnzippedAssetsAvailable(scoped_ptr<base::ScopedTempDir> temp_dir);

  InterfaceRequest<AssetBundle> asset_bundle_;
  scoped_refptr<base::TaskRunner> worker_runner_;
  base::WeakPtrFactory<AssetUnpackerJob> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(AssetUnpackerJob);
};

}  // namespace asset_bundle
}  // namespace mojo

#endif  // SERVICES_ASSET_BUNDLE_ASSET_UNPACKER_JOB_H_
