Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ | |
| 6 #define STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ | |
| 7 | |
| 8 #include <stdint.h> | |
| 9 | |
| 10 #include "base/basictypes.h" | |
| 11 | |
| 12 namespace storage { | |
| 13 | |
| 14 enum IPCBlobItemRequestStrategy { | |
| 15 IPC_BLOB_ITEM_REQUEST_STRATEGY_UNKNOWN = 0, | |
| 16 IPC_BLOB_ITEM_REQUEST_STRATEGY_IPC, | |
| 17 IPC_BLOB_ITEM_REQUEST_STRATEGY_SHARED_MEMORY, | |
| 18 IPC_BLOB_ITEM_REQUEST_STRATEGY_FILE | |
| 19 }; | |
| 20 | |
| 21 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
| |
| 22 IPC_BLOB_CREATION_CANCEL_UNKNOWN = 0, | |
| 23 IPC_BLOB_CREATION_CANCEL_OUT_OF_MEMORY, | |
| 24 IPC_BLOB_CREATION_CANCEL_FILE_WRITE_FAILED | |
| 25 }; | |
| 26 | |
| 27 // This class is serialized over IPC to request bytes from a blob item. | |
| 28 struct BlobItemBytesRequest { | |
| 29 // not using std::numeric_limits<T>::max() because of non-C++11 builds. | |
| 30 static const size_t kInvalidIndex = SIZE_MAX; | |
| 31 static const uint64_t kInvalidSize = kuint64max; | |
| 32 | |
| 33 static BlobItemBytesRequest CreateIPCRequest(size_t request_number, | |
| 34 size_t renderer_item_index, | |
| 35 uint64_t renderer_item_offset, | |
| 36 uint64_t size) { | |
| 37 return BlobItemBytesRequest( | |
| 38 request_number, IPC_BLOB_ITEM_REQUEST_STRATEGY_IPC, renderer_item_index, | |
| 39 renderer_item_offset, size, kInvalidIndex, kInvalidSize); | |
| 40 } | |
| 41 | |
| 42 static BlobItemBytesRequest CreateSharedMemoryRequest( | |
| 43 size_t request_number, size_t renderer_item_index, | |
| 44 uint64_t renderer_item_offset, uint64_t size, size_t handle_index, | |
| 45 uint64_t handle_offset) { | |
| 46 return BlobItemBytesRequest(request_number, | |
| 47 IPC_BLOB_ITEM_REQUEST_STRATEGY_SHARED_MEMORY, | |
| 48 renderer_item_index, renderer_item_offset, size, | |
| 49 handle_index, handle_offset); | |
| 50 } | |
| 51 | |
| 52 static BlobItemBytesRequest CreateFileRequest(size_t request_number, | |
| 53 size_t renderer_item_index, | |
| 54 uint64_t renderer_item_offset, | |
| 55 uint64_t size, | |
| 56 size_t handle_index, | |
| 57 uint64_t handle_offset) { | |
| 58 return BlobItemBytesRequest(request_number, | |
| 59 IPC_BLOB_ITEM_REQUEST_STRATEGY_FILE, | |
| 60 renderer_item_index, renderer_item_offset, size, | |
| 61 handle_index, handle_offset); | |
| 62 } | |
| 63 | |
| 64 BlobItemBytesRequest() | |
| 65 : request_number(kInvalidIndex), | |
| 66 transport_strategy(IPC_BLOB_ITEM_REQUEST_STRATEGY_UNKNOWN), | |
| 67 renderer_item_index(kInvalidIndex), | |
| 68 renderer_item_offset(kInvalidSize), | |
| 69 size(kInvalidSize), | |
| 70 handle_index(kInvalidIndex), | |
| 71 handle_offset(kInvalidSize) {} | |
| 72 ~BlobItemBytesRequest() {} | |
| 73 | |
| 74 BlobItemBytesRequest(size_t request_number, | |
| 75 IPCBlobItemRequestStrategy transport_strategy, | |
| 76 size_t renderer_item_index, | |
| 77 uint64_t renderer_item_offset, uint64_t size, | |
| 78 size_t handle_index, uint64_t handle_offset) | |
| 79 : request_number(request_number), | |
| 80 transport_strategy(transport_strategy), | |
| 81 renderer_item_index(renderer_item_index), | |
| 82 renderer_item_offset(renderer_item_offset), | |
| 83 size(size), | |
| 84 handle_index(handle_index), | |
| 85 handle_offset(handle_offset) {} | |
| 86 | |
| 87 size_t request_number; | |
| 88 IPCBlobItemRequestStrategy transport_strategy; | |
| 89 size_t renderer_item_index; | |
| 90 uint64_t renderer_item_offset; | |
| 91 uint64_t size; | |
| 92 size_t handle_index; | |
| 93 uint64_t handle_offset; | |
| 94 }; | |
| 95 | |
| 96 #if defined(UNIT_TEST) | |
| 97 inline bool operator==(const BlobItemBytesRequest& a, | |
| 98 const BlobItemBytesRequest& b) { | |
| 99 return a.request_number == b.request_number && | |
| 100 a.transport_strategy == b.transport_strategy && | |
| 101 a.renderer_item_index == b.renderer_item_index && | |
| 102 a.renderer_item_offset == b.renderer_item_offset && a.size == b.size && | |
| 103 a.handle_index == b.handle_index && a.handle_offset == b.handle_offset; | |
| 104 } | |
| 105 | |
| 106 inline bool operator!=(const BlobItemBytesRequest& a, | |
| 107 const BlobItemBytesRequest& b) { | |
| 108 return !(a == b); | |
| 109 } | |
| 110 | |
| 111 inline ::std::ostream& operator<<(::std::ostream& os, | |
| 112 const BlobItemBytesRequest& request) { | |
| 113 return os << "{ request_number: " << request.request_number | |
| 114 << ", transport_strategy: " << request.transport_strategy | |
| 115 << ", renderer_item_index: " << request.renderer_item_index | |
| 116 << ", renderer_item_offset: " << request.renderer_item_offset | |
| 117 << ", size: " << request.size | |
| 118 << ", handle_index: " << request.handle_index | |
| 119 << ", handle_offset: " << request.handle_offset << " }"; | |
| 120 } | |
| 121 #endif // defined(UNIT_TEST) | |
| 122 | |
| 123 } // namespace storage | |
| 124 | |
| 125 #endif // STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ | |
| OLD | NEW |