blob: e7b946944711b7d4581bd077674450021f51bda2 [file] [log] [blame]
// Copyright 2014 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_RESOURCES_CHROMEOS_ZIP_ARCHIVER_CPP_REQUEST_H_
#define CHROME_BROWSER_RESOURCES_CHROMEOS_ZIP_ARCHIVER_CPP_REQUEST_H_
#include <cstdint>
#include <string>
#include "ppapi/cpp/var_array_buffer.h"
#include "ppapi/cpp/var_dictionary.h"
// Defines the protocol messsage used to communicate between JS and NaCL.
// This must be consistent with the JS side js/request.js.
namespace request {
// Defines request keys. The keys should be unique and must be the same as the
// keys defined on the JS side.
namespace key {
// Mandatory keys for all unpacking requests.
const char kOperation[] = "operation"; // Should be a request::Operation.
const char kFileSystemId[] = "file_system_id"; // Should be a string.
const char kRequestId[] = "request_id"; // Should be a string.
// Optional keys unique to unpacking operations.
const char kMetadata[] = "metadata"; // Should be a pp:VarDictionary.
const char kArchiveSize[] =
"archive_size"; // Should be a string as int64_t is not support by pp::Var.
const char kIndex[] = "index"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kEncoding[] = "encoding"; // Should be a string.
const char kOpenRequestId[] = "open_request_id"; // Should be a string, just
// like kRequestId.
const char kReadFileData[] = "read_file_data"; // Should be a
// pp::VarArrayBuffer.
const char kHasMoreData[] = "has_more_data"; // Should be a bool.
const char kPassphrase[] = "passphrase"; // Should be a string.
// Mandatory keys for all packing requests.
const char kCompressorId[] = "compressor_id"; // Should be an int.
// Optional keys unique to packing operations.
const char kEntryId[] = "entry_id"; // Should be an int.
const char kPathname[] = "pathname"; // Should be a string.
const char kFileSize[] = "file_size"; // Should be a string.
const char kIsDirectory[] = "is_directory"; // Should be a bool.
// Local time in milliseconds since UNIX epoch, as a string.
const char kModificationTime[] = "modification_time";
const char kHasError[] = "has_error"; // Should be a bool.
// Optional keys used for both packing and unpacking operations.
const char kError[] = "error"; // Should be a string.
const char kChunkBuffer[] = "chunk_buffer"; // Should be a pp::VarArrayBuffer.
const char kOffset[] = "offset"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kLength[] = "length"; // Should be a string as int64_t is not
// supported by pp::Var.
const char kSrcFile[] = "src_file"; // Should be a string.
const char kSrcLine[] = "src_line"; // Should be a string.
const char kSrcFunc[] = "src_func"; // Should be a string.
const char kMessage[] = "message"; // Should be a string.
} // namespace key
// Defines request operations. These operations must be the same as the
// operations defined on the JS side (js/request.js).
enum Operation {
// Unpack operations.
READ_METADATA = 0,
READ_METADATA_DONE = 1,
READ_CHUNK = 2,
READ_CHUNK_DONE = 3,
READ_CHUNK_ERROR = 4,
READ_PASSPHRASE = 5,
READ_PASSPHRASE_DONE = 6,
READ_PASSPHRASE_ERROR = 7,
CLOSE_VOLUME = 8,
OPEN_FILE = 9,
OPEN_FILE_DONE = 10,
CLOSE_FILE = 11,
CLOSE_FILE_DONE = 12,
READ_FILE = 13,
READ_FILE_DONE = 14,
CONSOLE_LOG = 15,
CONSOLE_DEBUG = 16,
// Pack operations.
CREATE_ARCHIVE = 17,
CREATE_ARCHIVE_DONE = 18,
ADD_TO_ARCHIVE = 19,
ADD_TO_ARCHIVE_DONE = 20,
READ_FILE_CHUNK = 21,
READ_FILE_CHUNK_DONE = 22,
WRITE_CHUNK = 23,
WRITE_CHUNK_DONE = 24,
CLOSE_ARCHIVE = 25,
CLOSE_ARCHIVE_DONE = 26,
CANCEL_ARCHIVE = 27,
CANCEL_ARCHIVE_DONE = 28,
RELEASE_COMPRESSOR = 29,
// Errors.
FILE_SYSTEM_ERROR = -1, // Errors specific to a file system.
COMPRESSOR_ERROR = -2 // Errors specific to a compressor.
};
// Operations greater than or equal to this value are for packing.
const int MINIMUM_PACK_REQUEST_VALUE = 17;
// Return true if the given operation is related to packing.
bool IsPackRequest(int operation);
// Creates a response to READ_METADATA request.
pp::VarDictionary CreateReadMetadataDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const pp::VarDictionary& metadata);
// Creates a request for a file chunk from JavaScript.
pp::VarDictionary CreateReadChunkRequest(const std::string& file_system_id,
const std::string& request_id,
int64_t offset,
int64_t length);
// Creates a request for a passphrase for a file from JavaScript.
pp::VarDictionary CreateReadPassphraseRequest(const std::string& file_system_id,
const std::string& request_id);
// Creates a response to OPEN_FILE request.
pp::VarDictionary CreateOpenFileDoneResponse(const std::string& file_system_id,
const std::string& request_id);
// Creates a response to CLOSE_FILE request.
pp::VarDictionary CreateCloseFileDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const std::string& open_request_id);
// Creates a response to READ_FILE request.
pp::VarDictionary CreateReadFileDoneResponse(
const std::string& file_system_id,
const std::string& request_id,
const pp::VarArrayBuffer& array_buffer,
bool has_more_data);
pp::VarDictionary CreateCreateArchiveDoneResponse(int compressor_id);
pp::VarDictionary CreateReadFileChunkRequest(int compressor_id, int64_t length);
pp::VarDictionary CreateWriteChunkRequest(
int compressor_id,
const pp::VarArrayBuffer& array_buffer,
int64_t offset,
int64_t length);
pp::VarDictionary CreateAddToArchiveDoneResponse(int compressor_id);
pp::VarDictionary CreateCloseArchiveDoneResponse(int compressor_id);
pp::VarDictionary CreateCancelArchiveDoneResponse(int compressor_id);
// Creates a file system error.
pp::VarDictionary CreateFileSystemError(const std::string& file_system_id,
const std::string& request_id,
const std::string& error);
pp::VarDictionary CreateConsoleLog(const std::string& file_system_id,
const std::string& request_id,
const std::string& src_file,
int src_line,
const std::string& src_func,
const std::string& message);
// Creates a compressor error.
pp::VarDictionary CreateCompressorError(int compressor_id,
const std::string& error);
// Obtains a int64_t from a string value inside dictionary based on a
// request::Key.
int64_t GetInt64FromString(const pp::VarDictionary& dictionary,
const std::string& request_key);
} // namespace request
#endif // CHROME_BROWSER_RESOURCES_CHROMEOS_ZIP_ARCHIVER_CPP_REQUEST_H_