Chromium Code Reviews| 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" |
|
mtomasz
2017/04/10 07:15:08
Let's rename files in a separate CL.
|
| +#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_); |
| } |