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 #include <ostream> |
| 10 |
| 11 #include "base/basictypes.h" |
| 12 #include "storage/common/blob_storage/blob_storage_constants.h" |
| 13 #include "storage/common/storage_common_export.h" |
| 14 |
| 15 namespace storage { |
| 16 |
| 17 // This class is serialized over IPC to request bytes from a blob item. |
| 18 struct STORAGE_COMMON_EXPORT BlobItemBytesRequest { |
| 19 // not using std::numeric_limits<T>::max() because of non-C++11 builds. |
| 20 static const size_t kInvalidIndex = SIZE_MAX; |
| 21 static const uint64_t kInvalidSize = kuint64max; |
| 22 |
| 23 static BlobItemBytesRequest CreateIPCRequest(size_t request_number, |
| 24 size_t renderer_item_index, |
| 25 size_t renderer_item_offset, |
| 26 size_t size) { |
| 27 return BlobItemBytesRequest(request_number, IPCBlobItemRequestStrategy::IPC, |
| 28 renderer_item_index, renderer_item_offset, size, |
| 29 kInvalidIndex, kInvalidSize); |
| 30 } |
| 31 |
| 32 static BlobItemBytesRequest CreateSharedMemoryRequest( |
| 33 size_t request_number, |
| 34 size_t renderer_item_index, |
| 35 size_t renderer_item_offset, |
| 36 size_t size, |
| 37 size_t handle_index, |
| 38 uint64_t handle_offset) { |
| 39 return BlobItemBytesRequest(request_number, |
| 40 IPCBlobItemRequestStrategy::SHARED_MEMORY, |
| 41 renderer_item_index, renderer_item_offset, size, |
| 42 handle_index, handle_offset); |
| 43 } |
| 44 |
| 45 static BlobItemBytesRequest CreateFileRequest(size_t request_number, |
| 46 size_t renderer_item_index, |
| 47 uint64_t renderer_item_offset, |
| 48 uint64_t size, |
| 49 size_t handle_index, |
| 50 uint64_t handle_offset) { |
| 51 return BlobItemBytesRequest( |
| 52 request_number, IPCBlobItemRequestStrategy::FILE, renderer_item_index, |
| 53 renderer_item_offset, size, handle_index, handle_offset); |
| 54 } |
| 55 |
| 56 BlobItemBytesRequest() |
| 57 : request_number(kInvalidIndex), |
| 58 transport_strategy(IPCBlobItemRequestStrategy::UNKNOWN), |
| 59 renderer_item_index(kInvalidIndex), |
| 60 renderer_item_offset(kInvalidSize), |
| 61 size(kInvalidSize), |
| 62 handle_index(kInvalidIndex), |
| 63 handle_offset(kInvalidSize) {} |
| 64 ~BlobItemBytesRequest() {} |
| 65 |
| 66 BlobItemBytesRequest(size_t request_number, |
| 67 IPCBlobItemRequestStrategy transport_strategy, |
| 68 size_t renderer_item_index, |
| 69 uint64_t renderer_item_offset, |
| 70 uint64_t size, |
| 71 size_t handle_index, |
| 72 uint64_t handle_offset) |
| 73 : request_number(request_number), |
| 74 transport_strategy(transport_strategy), |
| 75 renderer_item_index(renderer_item_index), |
| 76 renderer_item_offset(renderer_item_offset), |
| 77 size(size), |
| 78 handle_index(handle_index), |
| 79 handle_offset(handle_offset) {} |
| 80 |
| 81 size_t request_number; |
| 82 IPCBlobItemRequestStrategy transport_strategy; |
| 83 size_t renderer_item_index; |
| 84 uint64_t renderer_item_offset; |
| 85 uint64_t size; |
| 86 size_t handle_index; |
| 87 uint64_t handle_offset; |
| 88 }; |
| 89 |
| 90 #if defined(UNIT_TEST) |
| 91 STORAGE_COMMON_EXPORT inline bool operator==(const BlobItemBytesRequest& a, |
| 92 const BlobItemBytesRequest& b) { |
| 93 return a.request_number == b.request_number && |
| 94 a.transport_strategy == b.transport_strategy && |
| 95 a.renderer_item_index == b.renderer_item_index && |
| 96 a.renderer_item_offset == b.renderer_item_offset && a.size == b.size && |
| 97 a.handle_index == b.handle_index && a.handle_offset == b.handle_offset; |
| 98 } |
| 99 |
| 100 STORAGE_COMMON_EXPORT inline bool operator!=(const BlobItemBytesRequest& a, |
| 101 const BlobItemBytesRequest& b) { |
| 102 return !(a == b); |
| 103 } |
| 104 |
| 105 STORAGE_COMMON_EXPORT inline ::std::ostream& operator<<( |
| 106 ::std::ostream& os, |
| 107 const BlobItemBytesRequest& request) { |
| 108 os << "{ request_number: " << request.request_number |
| 109 << ", transport_strategy: " << static_cast<int>(request.transport_strategy) |
| 110 << ", renderer_item_index: " << request.renderer_item_index |
| 111 << ", renderer_item_offset: " << request.renderer_item_offset |
| 112 << ", size: " << request.size << ", handle_index: " << request.handle_index |
| 113 << ", handle_offset: " << request.handle_offset << " }"; |
| 114 return os; |
| 115 } |
| 116 #endif // defined(UNIT_TEST) |
| 117 |
| 118 } // namespace storage |
| 119 |
| 120 #endif // STORAGE_COMMON_FILEAPI_BLOB_ITEM_BYTES_REQUEST_H_ |
OLD | NEW |