OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "sandbox/src/crosscall_server.h" | 8 #include "sandbox/src/crosscall_server.h" |
9 #include "sandbox/src/crosscall_params.h" | 9 #include "sandbox/src/crosscall_params.h" |
10 #include "sandbox/src/crosscall_client.h" | 10 #include "sandbox/src/crosscall_client.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 } | 169 } |
170 // The size is always computed from the parameter minus the next | 170 // The size is always computed from the parameter minus the next |
171 // parameter, this works because the message has an extra parameter slot | 171 // parameter, this works because the message has an extra parameter slot |
172 *size = param_info_[index].size_; | 172 *size = param_info_[index].size_; |
173 *type = param_info_[index].type_; | 173 *type = param_info_[index].type_; |
174 | 174 |
175 return param_info_[index].offset_ + reinterpret_cast<char*>(this); | 175 return param_info_[index].offset_ + reinterpret_cast<char*>(this); |
176 } | 176 } |
177 | 177 |
178 // Covers common case for 32 bit integers. | 178 // Covers common case for 32 bit integers. |
179 bool CrossCallParamsEx::GetParameter32(size_t index, void* param) { | 179 bool CrossCallParamsEx::GetParameter32(size_t index, uint32* param) { |
180 size_t size = 0; | 180 size_t size = 0; |
181 ArgType type; | 181 ArgType type; |
182 void* start = GetRawParameter(index, &size, &type); | 182 void* start = GetRawParameter(index, &size, &type); |
183 if ((NULL == start) || (4 != size) || (ULONG_TYPE != type)) { | 183 if ((NULL == start) || (4 != size) || (ULONG_TYPE != type)) { |
184 return false; | 184 return false; |
185 } | 185 } |
186 // Copy the 4 bytes. | 186 // Copy the 4 bytes. |
187 *(reinterpret_cast<uint32*>(param)) = *(reinterpret_cast<uint32*>(start)); | 187 *(reinterpret_cast<uint32*>(param)) = *(reinterpret_cast<uint32*>(start)); |
188 return true; | 188 return true; |
189 } | 189 } |
190 | 190 |
| 191 bool CrossCallParamsEx::GetParameterVoidPtr(size_t index, void** param) { |
| 192 size_t size = 0; |
| 193 ArgType type; |
| 194 void* start = GetRawParameter(index, &size, &type); |
| 195 if ((NULL == start) || (sizeof(void*) != size) || (VOIDPTR_TYPE != type)) { |
| 196 return false; |
| 197 } |
| 198 *param = *(reinterpret_cast<void**>(start)); |
| 199 return true; |
| 200 } |
| 201 |
191 // Covers the common case of reading a string. Note that the string is not | 202 // Covers the common case of reading a string. Note that the string is not |
192 // scanned for invalid characters. | 203 // scanned for invalid characters. |
193 bool CrossCallParamsEx::GetParameterStr(size_t index, std::wstring* string) { | 204 bool CrossCallParamsEx::GetParameterStr(size_t index, std::wstring* string) { |
194 size_t size = 0; | 205 size_t size = 0; |
195 ArgType type; | 206 ArgType type; |
196 void* start = GetRawParameter(index, &size, &type); | 207 void* start = GetRawParameter(index, &size, &type); |
197 if (WCHAR_TYPE != type) { | 208 if (WCHAR_TYPE != type) { |
198 return false; | 209 return false; |
199 } | 210 } |
200 | 211 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 for (; it != ipc_calls_.end(); ++it) { | 256 for (; it != ipc_calls_.end(); ++it) { |
246 if (it->params.Matches(ipc)) { | 257 if (it->params.Matches(ipc)) { |
247 *callback = it->callback; | 258 *callback = it->callback; |
248 return this; | 259 return this; |
249 } | 260 } |
250 } | 261 } |
251 return NULL; | 262 return NULL; |
252 } | 263 } |
253 | 264 |
254 } // namespace sandbox | 265 } // namespace sandbox |
OLD | NEW |