Chromium Code Reviews| Index: storage/common/fileapi/blob_item_bytes_request.h |
| diff --git a/storage/common/fileapi/blob_item_bytes_request.h b/storage/common/fileapi/blob_item_bytes_request.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..317434b3730c67f66008e3d142e55d4787b35906 |
| --- /dev/null |
| +++ b/storage/common/fileapi/blob_item_bytes_request.h |
| @@ -0,0 +1,125 @@ |
| +// 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 STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ |
| +#define STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ |
| + |
| +#include <stdint.h> |
| + |
| +#include "base/basictypes.h" |
| + |
| +namespace storage { |
| + |
| +enum IPCBlobItemRequestStrategy { |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_UNKNOWN = 0, |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_IPC, |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_SHARED_MEMORY, |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_FILE |
| +}; |
| + |
| +enum IPCBlobCreationCancelCode { |
|
kinuko
2015/05/25 08:32:03
Not yet used?
dmurph
2015/06/13 00:13:10
No not yet, this is for the IPC messages that will
|
| + IPC_BLOB_CREATION_CANCEL_UNKNOWN = 0, |
| + IPC_BLOB_CREATION_CANCEL_OUT_OF_MEMORY, |
| + IPC_BLOB_CREATION_CANCEL_FILE_WRITE_FAILED |
| +}; |
| + |
| +// This class is serialized over IPC to request bytes from a blob item. |
| +struct BlobItemBytesRequest { |
| + // not using std::numeric_limits<T>::max() because of non-C++11 builds. |
| + static const size_t kInvalidIndex = SIZE_MAX; |
| + static const uint64_t kInvalidSize = kuint64max; |
| + |
| + static BlobItemBytesRequest CreateIPCRequest(size_t request_number, |
| + size_t renderer_item_index, |
| + uint64_t renderer_item_offset, |
| + uint64_t size) { |
| + return BlobItemBytesRequest( |
| + request_number, IPC_BLOB_ITEM_REQUEST_STRATEGY_IPC, renderer_item_index, |
| + renderer_item_offset, size, kInvalidIndex, kInvalidSize); |
| + } |
| + |
| + static BlobItemBytesRequest CreateSharedMemoryRequest( |
| + size_t request_number, size_t renderer_item_index, |
| + uint64_t renderer_item_offset, uint64_t size, size_t handle_index, |
| + uint64_t handle_offset) { |
| + return BlobItemBytesRequest(request_number, |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_SHARED_MEMORY, |
| + renderer_item_index, renderer_item_offset, size, |
| + handle_index, handle_offset); |
| + } |
| + |
| + static BlobItemBytesRequest CreateFileRequest(size_t request_number, |
| + size_t renderer_item_index, |
| + uint64_t renderer_item_offset, |
| + uint64_t size, |
| + size_t handle_index, |
| + uint64_t handle_offset) { |
| + return BlobItemBytesRequest(request_number, |
| + IPC_BLOB_ITEM_REQUEST_STRATEGY_FILE, |
| + renderer_item_index, renderer_item_offset, size, |
| + handle_index, handle_offset); |
| + } |
| + |
| + BlobItemBytesRequest() |
| + : request_number(kInvalidIndex), |
| + transport_strategy(IPC_BLOB_ITEM_REQUEST_STRATEGY_UNKNOWN), |
| + renderer_item_index(kInvalidIndex), |
| + renderer_item_offset(kInvalidSize), |
| + size(kInvalidSize), |
| + handle_index(kInvalidIndex), |
| + handle_offset(kInvalidSize) {} |
| + ~BlobItemBytesRequest() {} |
| + |
| + BlobItemBytesRequest(size_t request_number, |
| + IPCBlobItemRequestStrategy transport_strategy, |
| + size_t renderer_item_index, |
| + uint64_t renderer_item_offset, uint64_t size, |
| + size_t handle_index, uint64_t handle_offset) |
| + : request_number(request_number), |
| + transport_strategy(transport_strategy), |
| + renderer_item_index(renderer_item_index), |
| + renderer_item_offset(renderer_item_offset), |
| + size(size), |
| + handle_index(handle_index), |
| + handle_offset(handle_offset) {} |
| + |
| + size_t request_number; |
| + IPCBlobItemRequestStrategy transport_strategy; |
| + size_t renderer_item_index; |
| + uint64_t renderer_item_offset; |
| + uint64_t size; |
| + size_t handle_index; |
| + uint64_t handle_offset; |
| +}; |
| + |
| +#if defined(UNIT_TEST) |
| +inline bool operator==(const BlobItemBytesRequest& a, |
| + const BlobItemBytesRequest& b) { |
| + return a.request_number == b.request_number && |
| + a.transport_strategy == b.transport_strategy && |
| + a.renderer_item_index == b.renderer_item_index && |
| + a.renderer_item_offset == b.renderer_item_offset && a.size == b.size && |
| + a.handle_index == b.handle_index && a.handle_offset == b.handle_offset; |
| +} |
| + |
| +inline bool operator!=(const BlobItemBytesRequest& a, |
| + const BlobItemBytesRequest& b) { |
| + return !(a == b); |
| +} |
| + |
| +inline ::std::ostream& operator<<(::std::ostream& os, |
| + const BlobItemBytesRequest& request) { |
| + return os << "{ request_number: " << request.request_number |
| + << ", transport_strategy: " << request.transport_strategy |
| + << ", renderer_item_index: " << request.renderer_item_index |
| + << ", renderer_item_offset: " << request.renderer_item_offset |
| + << ", size: " << request.size |
| + << ", handle_index: " << request.handle_index |
| + << ", handle_offset: " << request.handle_offset << " }"; |
| +} |
| +#endif // defined(UNIT_TEST) |
| + |
| +} // namespace storage |
| + |
| +#endif // STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ |