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 |