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

Side by Side Diff: components/nacl/loader/nacl_ipc_adapter.h

Issue 1010183002: SFI NaCl: Batch-open resource files (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address all comments Created 5 years, 7 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
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 #ifndef CHROME_NACL_NACL_IPC_ADAPTER_H_ 5 #ifndef CHROME_NACL_NACL_IPC_ADAPTER_H_
6 #define CHROME_NACL_NACL_IPC_ADAPTER_H_ 6 #define CHROME_NACL_NACL_IPC_ADAPTER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <queue> 9 #include <queue>
10 #include <string> 10 #include <string>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 #pragma pack(pop) 73 #pragma pack(pop)
74 74
75 typedef base::Callback<void(IPC::PlatformFileForTransit, base::FilePath)> 75 typedef base::Callback<void(IPC::PlatformFileForTransit, base::FilePath)>
76 ResolveFileTokenReplyCallback; 76 ResolveFileTokenReplyCallback;
77 77
78 typedef base::Callback<void(uint64_t, // file_token_lo 78 typedef base::Callback<void(uint64_t, // file_token_lo
79 uint64_t, // file_token_hi 79 uint64_t, // file_token_hi
80 ResolveFileTokenReplyCallback)> 80 ResolveFileTokenReplyCallback)>
81 ResolveFileTokenCallback; 81 ResolveFileTokenCallback;
82 82
83 typedef base::Callback<void(const IPC::Message&,
84 IPC::PlatformFileForTransit,
85 base::FilePath)> OpenResourceReplyCallback;
86
87 typedef base::Callback<bool(const IPC::Message&,
88 const std::string&, // key
89 OpenResourceReplyCallback)> OpenResourceCallback;
90
83 // Creates an adapter, using the thread associated with the given task 91 // Creates an adapter, using the thread associated with the given task
84 // runner for posting messages. In normal use, the task runner will post to 92 // runner for posting messages. In normal use, the task runner will post to
85 // the I/O thread of the process. 93 // the I/O thread of the process.
86 // 94 //
87 // If you use this constructor, you MUST call ConnectChannel after the 95 // If you use this constructor, you MUST call ConnectChannel after the
88 // NaClIPCAdapter is constructed, or the NaClIPCAdapter's channel will not be 96 // NaClIPCAdapter is constructed, or the NaClIPCAdapter's channel will not be
89 // connected. 97 // connected.
90 // 98 //
91 // |resolve_file_token_cb| is an optional callback to be invoked for 99 // |resolve_file_token_cb| is an optional callback to be invoked for
92 // resolving file tokens received from the renderer. When the file token 100 // resolving file tokens received from the renderer. When the file token
93 // is resolved, the ResolveFileTokenReplyCallback passed inside the 101 // is resolved, the ResolveFileTokenReplyCallback passed inside the
94 // ResolveFileTokenCallback will be invoked. 102 // ResolveFileTokenCallback will be invoked. |open_resource_cb| is also an
103 // optional callback to be invoked for intercepting open_resource IRT calls.
104 // |open_resource_cb| may immediately call a OpenResourceReplyCallback
105 // function to send a pre-opened resource descriptor to the untrusted side.
106 // OpenResourceCallback returns true when OpenResourceReplyCallback is called.
95 NaClIPCAdapter( 107 NaClIPCAdapter(
96 const IPC::ChannelHandle& handle, 108 const IPC::ChannelHandle& handle,
97 base::TaskRunner* runner, 109 base::TaskRunner* runner,
98 ResolveFileTokenCallback resolve_file_token_cb); 110 ResolveFileTokenCallback resolve_file_token_cb,
111 OpenResourceCallback open_resource_cb);
99 112
100 // Initializes with a given channel that's already created for testing 113 // Initializes with a given channel that's already created for testing
101 // purposes. This function will take ownership of the given channel. 114 // purposes. This function will take ownership of the given channel.
102 NaClIPCAdapter(scoped_ptr<IPC::Channel> channel, base::TaskRunner* runner); 115 NaClIPCAdapter(scoped_ptr<IPC::Channel> channel, base::TaskRunner* runner);
103 116
104 // Connect the channel. This must be called after the constructor that accepts 117 // Connect the channel. This must be called after the constructor that accepts
105 // an IPC::ChannelHandle, and causes the Channel to be connected on the IO 118 // an IPC::ChannelHandle, and causes the Channel to be connected on the IO
106 // thread. 119 // thread.
107 void ConnectChannel(); 120 void ConnectChannel();
108 121
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 183
171 // When we send a synchronous message (from untrusted to trusted), we store 184 // When we send a synchronous message (from untrusted to trusted), we store
172 // its type here, so that later we can associate the reply with its type 185 // its type here, so that later we can associate the reply with its type
173 // for scanning. 186 // for scanning.
174 typedef std::map<int, uint32> PendingSyncMsgMap; 187 typedef std::map<int, uint32> PendingSyncMsgMap;
175 PendingSyncMsgMap pending_sync_msgs_; 188 PendingSyncMsgMap pending_sync_msgs_;
176 }; 189 };
177 190
178 ~NaClIPCAdapter() override; 191 ~NaClIPCAdapter() override;
179 192
180 void OnFileTokenResolved(const IPC::Message& orig_msg, 193 void SaveOpenResourceMessage(const IPC::Message& orig_msg,
181 IPC::PlatformFileForTransit ipc_fd, 194 IPC::PlatformFileForTransit ipc_fd,
182 base::FilePath file_path); 195 base::FilePath file_path);
183 196
184 bool RewriteMessage(const IPC::Message& msg, uint32_t type); 197 bool RewriteMessage(const IPC::Message& msg, uint32_t type);
185 198
186 // Returns 0 if nothing is waiting. 199 // Returns 0 if nothing is waiting.
187 int LockedReceive(NaClImcTypedMsgHdr* msg); 200 int LockedReceive(NaClImcTypedMsgHdr* msg);
188 201
189 // Sends a message that we know has been completed to the Chrome process. 202 // Sends a message that we know has been completed to the Chrome process.
190 bool SendCompleteMessage(const char* buffer, size_t buffer_len); 203 bool SendCompleteMessage(const char* buffer, size_t buffer_len);
191 204
192 // Clears the LockedData.to_be_sent_ structure in a way to make sure that 205 // Clears the LockedData.to_be_sent_ structure in a way to make sure that
193 // the memory is deleted. std::string can sometimes hold onto the buffer 206 // the memory is deleted. std::string can sometimes hold onto the buffer
194 // for future use which we don't want. 207 // for future use which we don't want.
195 void ClearToBeSent(); 208 void ClearToBeSent();
196 209
197 void ConnectChannelOnIOThread(); 210 void ConnectChannelOnIOThread();
198 void CloseChannelOnIOThread(); 211 void CloseChannelOnIOThread();
199 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message); 212 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message);
200 213
201 // Saves the message to forward to NaCl. This method assumes that the caller 214 // Saves the message to forward to NaCl. This method assumes that the caller
202 // holds the lock for locked_data_. 215 // holds the lock for locked_data_.
203 void SaveMessage(const IPC::Message& message, 216 void SaveMessage(const IPC::Message& message,
204 RewrittenMessage* rewritten_message); 217 RewrittenMessage* rewritten_message);
205 218
206 base::Lock lock_; 219 base::Lock lock_;
207 base::ConditionVariable cond_var_; 220 base::ConditionVariable cond_var_;
208 221
209 scoped_refptr<base::TaskRunner> task_runner_; 222 scoped_refptr<base::TaskRunner> task_runner_;
210 223
211 ResolveFileTokenCallback resolve_file_token_cb_; 224 ResolveFileTokenCallback resolve_file_token_cb_;
225 OpenResourceCallback open_resource_cb_;
212 226
213 // To be accessed inside of lock_ only. 227 // To be accessed inside of lock_ only.
214 LockedData locked_data_; 228 LockedData locked_data_;
215 229
216 // To be accessed on the I/O thread (via task runner) only. 230 // To be accessed on the I/O thread (via task runner) only.
217 IOThreadData io_thread_data_; 231 IOThreadData io_thread_data_;
218 232
219 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter); 233 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter);
220 }; 234 };
221 235
222 // Export TranslatePepperFileReadWriteOpenFlags for testing. 236 // Export TranslatePepperFileReadWriteOpenFlags for testing.
223 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags); 237 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags);
224 238
225 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_ 239 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_
OLDNEW
« no previous file with comments | « components/nacl/browser/nacl_process_host.cc ('k') | components/nacl/loader/nacl_ipc_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698