Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Side by Side Diff: ppapi/proxy/nacl_message_scanner.cc

Issue 1512733003: PNaCl: Use Chrome IPC to talk to the linker process, instead of SRPC (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Rebase Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ppapi/nacl_irt/irt_pnacl_translator_link.cc ('k') | ppapi/proxy/ppapi_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ppapi/proxy/nacl_message_scanner.h" 5 #include "ppapi/proxy/nacl_message_scanner.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 if (results->pp_resource && !results->nested_msg_callback.is_null()) { 136 if (results->pp_resource && !results->nested_msg_callback.is_null()) {
137 SerializedHandle* handle = NULL; 137 SerializedHandle* handle = NULL;
138 if (results->handles.size() == 1) 138 if (results->handles.size() == 1)
139 handle = &results->handles[0]; 139 handle = &results->handles[0];
140 results->nested_msg_callback.Run(results->pp_resource, param, handle); 140 results->nested_msg_callback.Run(results->pp_resource, param, handle);
141 } 141 }
142 if (results->new_msg) 142 if (results->new_msg)
143 IPC::WriteParam(results->new_msg.get(), param); 143 IPC::WriteParam(results->new_msg.get(), param);
144 } 144 }
145 145
146 template <class T>
147 void ScanParam(const std::vector<T>& vec, ScanningResults* results) {
148 if (results->new_msg)
149 IPC::WriteParam(results->new_msg.get(), static_cast<int>(vec.size()));
150 for (const T& element : vec) {
151 ScanParam(element, results);
152 }
153 }
154
146 // Overload to match all other types. If we need to rewrite the message, write 155 // Overload to match all other types. If we need to rewrite the message, write
147 // the parameter. 156 // the parameter.
148 template <class T> 157 template <class T>
149 void ScanParam(const T& param, ScanningResults* results) { 158 void ScanParam(const T& param, ScanningResults* results) {
150 if (results->new_msg) 159 if (results->new_msg)
151 IPC::WriteParam(results->new_msg.get(), param); 160 IPC::WriteParam(results->new_msg.get(), param);
152 } 161 }
153 162
154 // These just break apart the given tuple and run ScanParam over each param. 163 // These just break apart the given tuple and run ScanParam over each param.
155 // The idea is to scan elements in the tuple which require special handling, 164 // The idea is to scan elements in the tuple which require special handling,
(...skipping 29 matching lines...) Expand all
185 } 194 }
186 bool ScanMessage(ScanningResults* results) { 195 bool ScanMessage(ScanningResults* results) {
187 typename base::TupleTypes<typename MessageType::Schema::Param>::ValueTuple 196 typename base::TupleTypes<typename MessageType::Schema::Param>::ValueTuple
188 params; 197 params;
189 if (!MessageType::Read(msg_, &params)) 198 if (!MessageType::Read(msg_, &params))
190 return false; 199 return false;
191 ScanTuple(params, results); 200 ScanTuple(params, results);
192 return true; 201 return true;
193 } 202 }
194 203
204 bool ScanSyncMessage(ScanningResults* results) {
205 typename base::TupleTypes<typename MessageType::Schema::SendParam>
206 ::ValueTuple params;
207 if (!MessageType::ReadSendParam(msg_, &params))
208 return false;
209 // If we need to rewrite the message, write the message id first.
210 if (results->new_msg) {
211 results->new_msg->set_sync();
212 int id = IPC::SyncMessage::GetMessageId(*msg_);
213 results->new_msg->WriteInt(id);
214 }
215 ScanTuple(params, results);
216 return true;
217 }
218
195 bool ScanReply(ScanningResults* results) { 219 bool ScanReply(ScanningResults* results) {
196 typename base::TupleTypes<typename MessageType::Schema::ReplyParam> 220 typename base::TupleTypes<typename MessageType::Schema::ReplyParam>
197 ::ValueTuple params; 221 ::ValueTuple params;
198 if (!MessageType::ReadReplyParam(msg_, &params)) 222 if (!MessageType::ReadReplyParam(msg_, &params))
199 return false; 223 return false;
200 // If we need to rewrite the message, write the message id first. 224 // If we need to rewrite the message, write the message id first.
201 if (results->new_msg) { 225 if (results->new_msg) {
202 results->new_msg->set_reply(); 226 results->new_msg->set_reply();
203 int id = IPC::SyncMessage::GetMessageId(*msg_); 227 int id = IPC::SyncMessage::GetMessageId(*msg_);
204 results->new_msg->WriteInt(id); 228 results->new_msg->WriteInt(id);
205 } 229 }
206 ScanTuple(params, results); 230 ScanTuple(params, results);
207 return true; 231 return true;
208 } 232 }
209 // TODO(dmichael): Add ScanSyncMessage for outgoing sync messages, if we ever
210 // need to scan those.
211 233
212 private: 234 private:
213 const MessageType* msg_; 235 const MessageType* msg_;
214 }; 236 };
215 237
216 } // namespace 238 } // namespace
217 239
218 #define CASE_FOR_MESSAGE(MESSAGE_TYPE) \ 240 #define CASE_FOR_MESSAGE(MESSAGE_TYPE) \
219 case MESSAGE_TYPE::ID: { \ 241 case MESSAGE_TYPE::ID: { \
220 MessageScannerImpl<MESSAGE_TYPE> scanner(&msg); \ 242 MessageScannerImpl<MESSAGE_TYPE> scanner(&msg); \
221 if (rewrite_msg) \ 243 if (rewrite_msg) \
222 results.new_msg.reset( \ 244 results.new_msg.reset( \
223 new IPC::Message(msg.routing_id(), msg.type(), \ 245 new IPC::Message(msg.routing_id(), msg.type(), \
224 IPC::Message::PRIORITY_NORMAL)); \ 246 IPC::Message::PRIORITY_NORMAL)); \
225 if (!scanner.ScanMessage(&results)) \ 247 if (!scanner.ScanMessage(&results)) \
226 return false; \ 248 return false; \
227 break; \ 249 break; \
228 } 250 }
251 #define CASE_FOR_SYNC_MESSAGE(MESSAGE_TYPE) \
252 case MESSAGE_TYPE::ID: { \
253 MessageScannerImpl<MESSAGE_TYPE> scanner(&msg); \
254 if (rewrite_msg) \
255 results.new_msg.reset( \
256 new IPC::Message(msg.routing_id(), msg.type(), \
257 IPC::Message::PRIORITY_NORMAL)); \
258 if (!scanner.ScanSyncMessage(&results)) \
259 return false; \
260 break; \
261 }
229 #define CASE_FOR_REPLY(MESSAGE_TYPE) \ 262 #define CASE_FOR_REPLY(MESSAGE_TYPE) \
230 case MESSAGE_TYPE::ID: { \ 263 case MESSAGE_TYPE::ID: { \
231 MessageScannerImpl<MESSAGE_TYPE> scanner(&msg); \ 264 MessageScannerImpl<MESSAGE_TYPE> scanner(&msg); \
232 if (rewrite_msg) \ 265 if (rewrite_msg) \
233 results.new_msg.reset( \ 266 results.new_msg.reset( \
234 new IPC::Message(msg.routing_id(), msg.type(), \ 267 new IPC::Message(msg.routing_id(), msg.type(), \
235 IPC::Message::PRIORITY_NORMAL)); \ 268 IPC::Message::PRIORITY_NORMAL)); \
236 if (!scanner.ScanReply(&results)) \ 269 if (!scanner.ScanReply(&results)) \
237 return false; \ 270 return false; \
238 break; \ 271 break; \
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 // that there are no handles, we can cancel the rewriting by clearing the 357 // that there are no handles, we can cancel the rewriting by clearing the
325 // results.new_msg pointer. 358 // results.new_msg pointer.
326 ScanningResults results; 359 ScanningResults results;
327 results.nested_msg_callback = 360 results.nested_msg_callback =
328 base::Bind(&NaClMessageScanner::AuditNestedMessage, 361 base::Bind(&NaClMessageScanner::AuditNestedMessage,
329 base::Unretained(this)); 362 base::Unretained(this));
330 switch (type) { 363 switch (type) {
331 CASE_FOR_MESSAGE(PpapiMsg_PPBAudio_NotifyAudioStreamCreated) 364 CASE_FOR_MESSAGE(PpapiMsg_PPBAudio_NotifyAudioStreamCreated)
332 CASE_FOR_MESSAGE(PpapiMsg_PPPMessaging_HandleMessage) 365 CASE_FOR_MESSAGE(PpapiMsg_PPPMessaging_HandleMessage)
333 CASE_FOR_MESSAGE(PpapiPluginMsg_ResourceReply) 366 CASE_FOR_MESSAGE(PpapiPluginMsg_ResourceReply)
367 CASE_FOR_SYNC_MESSAGE(PpapiMsg_PnaclTranslatorLink)
334 CASE_FOR_REPLY(PpapiHostMsg_OpenResource) 368 CASE_FOR_REPLY(PpapiHostMsg_OpenResource)
335 CASE_FOR_REPLY(PpapiHostMsg_PPBGraphics3D_Create) 369 CASE_FOR_REPLY(PpapiHostMsg_PPBGraphics3D_Create)
336 CASE_FOR_REPLY(PpapiHostMsg_PPBGraphics3D_CreateTransferBuffer) 370 CASE_FOR_REPLY(PpapiHostMsg_PPBGraphics3D_CreateTransferBuffer)
337 CASE_FOR_REPLY(PpapiHostMsg_PPBImageData_CreateSimple) 371 CASE_FOR_REPLY(PpapiHostMsg_PPBImageData_CreateSimple)
338 CASE_FOR_REPLY(PpapiHostMsg_ResourceSyncCall) 372 CASE_FOR_REPLY(PpapiHostMsg_ResourceSyncCall)
339 CASE_FOR_REPLY(PpapiHostMsg_SharedMemory_CreateSharedMemory) 373 CASE_FOR_REPLY(PpapiHostMsg_SharedMemory_CreateSharedMemory)
340 default: 374 default:
341 // Do nothing for messages we don't know. 375 // Do nothing for messages we don't know.
342 break; 376 break;
343 } 377 }
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 fio_it->second->SetMaxWrittenOffset(offset_it->second); 558 fio_it->second->SetMaxWrittenOffset(offset_it->second);
525 } 559 }
526 } 560 }
527 break; 561 break;
528 } 562 }
529 } 563 }
530 } 564 }
531 565
532 } // namespace proxy 566 } // namespace proxy
533 } // namespace ppapi 567 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/nacl_irt/irt_pnacl_translator_link.cc ('k') | ppapi/proxy/ppapi_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698