| Index: ui/file_manager/zip_archiver/cpp/compressor.cc
|
| diff --git a/ui/file_manager/zip_archiver/cpp/compressor.cc b/ui/file_manager/zip_archiver/cpp/compressor.cc
|
| index 1d13d78a4a0330752368dcaf3be4cae450f8f326..17018f6cc09e99788a0a88cafff17c5aa1334c39 100644
|
| --- a/ui/file_manager/zip_archiver/cpp/compressor.cc
|
| +++ b/ui/file_manager/zip_archiver/cpp/compressor.cc
|
| @@ -8,9 +8,9 @@
|
| #include <ctime>
|
| #include <sstream>
|
|
|
| -#include "request.h"
|
| -#include "compressor_io_javascript_stream.h"
|
| #include "compressor_archive_libarchive.h"
|
| +#include "compressor_io_javascript_stream.h"
|
| +#include "request.h"
|
|
|
| namespace {
|
|
|
| @@ -20,10 +20,11 @@ class JavaScriptCompressorRequestor : public JavaScriptCompressorRequestorInterf
|
| explicit JavaScriptCompressorRequestor(Compressor* compressor) :
|
| compressor_(compressor) {}
|
|
|
| - virtual void WriteChunkRequest(int64_t length,
|
| + virtual void WriteChunkRequest(int64_t offset,
|
| + int64_t length,
|
| const pp::VarArrayBuffer& buffer) {
|
| - compressor_->message_sender()->SendWriteChunk(
|
| - compressor_->compressor_id(), buffer, length);
|
| + compressor_->message_sender()->SendWriteChunk(compressor_->compressor_id(),
|
| + buffer, offset, length);
|
| }
|
|
|
| virtual void ReadFileChunkRequest(int64_t length) {
|
| @@ -63,7 +64,12 @@ bool Compressor::Init() {
|
| }
|
|
|
| void Compressor::CreateArchive() {
|
| - compressor_archive_->CreateArchive();
|
| + if (!compressor_archive_->CreateArchive()) {
|
| + message_sender_->SendCompressorError(
|
| + compressor_id_,
|
| + compressor_archive_->error_message());
|
| + return;
|
| + }
|
| message_sender_->SendCreateArchiveDone(compressor_id_);
|
| }
|
|
|
| @@ -88,14 +94,18 @@ void Compressor::AddToArchiveCallback(int32_t,
|
| dictionary.Get(request::key::kIsDirectory).AsBool();
|
|
|
| PP_DCHECK(dictionary.Get(request::key::kModificationTime).is_string());
|
| - std::string strtime =
|
| - dictionary.Get(request::key::kModificationTime).AsString();
|
| - tm tm;
|
| - strptime(strtime.c_str(), "%m/%d/%Y %T", &tm);
|
| - time_t modification_time = mktime(&tm);
|
| -
|
| - compressor_archive_->AddToArchive(
|
| - pathname, file_size, modification_time, is_directory);
|
| + // Since modification_time is milliseconds, we hold the value in int64_t.
|
| + int64_t modification_time =
|
| + static_cast<int64_t>(request::GetInt64FromString(dictionary,
|
| + request::key::kModificationTime));
|
| +
|
| + if (!compressor_archive_->AddToArchive(
|
| + pathname, file_size, modification_time, is_directory)) {
|
| + message_sender_->SendCompressorError(
|
| + compressor_id_,
|
| + compressor_archive_->error_message());
|
| + return;
|
| + }
|
| message_sender_->SendAddToArchiveDone(compressor_id_);
|
| }
|
|
|
| @@ -126,7 +136,12 @@ void Compressor::CloseArchive(const pp::VarDictionary& dictionary) {
|
| // If an error has occurred, no more write chunk requests are sent and
|
| // CloseArchive() can be safely called in the main thread.
|
| if (has_error) {
|
| - compressor_archive_->CloseArchive(has_error);
|
| + if (!compressor_archive_->CloseArchive(has_error)) {
|
| + message_sender_->SendCompressorError(
|
| + compressor_id_,
|
| + compressor_archive_->error_message());
|
| + return;
|
| + }
|
| message_sender_->SendCloseArchiveDone(compressor_id_);
|
| } else {
|
| worker_.message_loop().PostWork(callback_factory_.NewCallback(
|
| @@ -135,6 +150,11 @@ void Compressor::CloseArchive(const pp::VarDictionary& dictionary) {
|
| }
|
|
|
| void Compressor::CloseArchiveCallback(int32_t, bool has_error) {
|
| - compressor_archive_->CloseArchive(has_error);
|
| + if (!compressor_archive_->CloseArchive(has_error)) {
|
| + message_sender_->SendCompressorError(
|
| + compressor_id_,
|
| + compressor_archive_->error_message());
|
| + return;
|
| + }
|
| message_sender_->SendCloseArchiveDone(compressor_id_);
|
| }
|
|
|