| OLD | NEW |
| 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 ResolveFileTokenCallback; | 124 ResolveFileTokenCallback; |
| 125 | 125 |
| 126 // Sets a callback to be invoked for resolving file tokens received from the | 126 // Sets a callback to be invoked for resolving file tokens received from the |
| 127 // renderer. When the file token is resolved, the | 127 // renderer. When the file token is resolved, the |
| 128 // ResolveFileTokenReplyCallback passed inside the ResolveFileTokenCallback | 128 // ResolveFileTokenReplyCallback passed inside the ResolveFileTokenCallback |
| 129 // will be invoked. | 129 // will be invoked. |
| 130 void set_resolve_file_token_callback(ResolveFileTokenCallback cb) { | 130 void set_resolve_file_token_callback(ResolveFileTokenCallback cb) { |
| 131 resolve_file_token_cb_ = cb; | 131 resolve_file_token_cb_ = cb; |
| 132 } | 132 } |
| 133 | 133 |
| 134 typedef base::Callback<void(const IPC::Message&, |
| 135 IPC::PlatformFileForTransit, |
| 136 base::FilePath)> OpenResourceReplyCallback; |
| 137 |
| 138 typedef base::Callback<bool(const IPC::Message&, |
| 139 const std::string&, // key |
| 140 OpenResourceReplyCallback)> OpenResourceCallback; |
| 141 |
| 142 // Sets a callback to be invoked for intercepting open_resource IRT calls. |
| 143 // The callback may immediately call a OpenResourceReplyCallback function to |
| 144 // send a pre-opened resrouce descriptor to the untrusted side. |
| 145 // OpenResourceCallback returns true when OpenResourceReplyCallback is called. |
| 146 void set_open_resource_callback(OpenResourceCallback cb) { |
| 147 open_resource_cb_ = cb; |
| 148 } |
| 149 |
| 134 private: | 150 private: |
| 135 friend class base::RefCountedThreadSafe<NaClIPCAdapter>; | 151 friend class base::RefCountedThreadSafe<NaClIPCAdapter>; |
| 136 | 152 |
| 137 class RewrittenMessage; | 153 class RewrittenMessage; |
| 138 | 154 |
| 139 // This is the data that must only be accessed inside the lock. This struct | 155 // This is the data that must only be accessed inside the lock. This struct |
| 140 // just separates it so it's easier to see. | 156 // just separates it so it's easier to see. |
| 141 struct LockedData { | 157 struct LockedData { |
| 142 LockedData(); | 158 LockedData(); |
| 143 ~LockedData(); | 159 ~LockedData(); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 173 // for scanning. | 189 // for scanning. |
| 174 typedef std::map<int, uint32> PendingSyncMsgMap; | 190 typedef std::map<int, uint32> PendingSyncMsgMap; |
| 175 PendingSyncMsgMap pending_sync_msgs_; | 191 PendingSyncMsgMap pending_sync_msgs_; |
| 176 }; | 192 }; |
| 177 | 193 |
| 178 ~NaClIPCAdapter() override; | 194 ~NaClIPCAdapter() override; |
| 179 | 195 |
| 180 void OnFileTokenResolved(const IPC::Message& orig_msg, | 196 void OnFileTokenResolved(const IPC::Message& orig_msg, |
| 181 IPC::PlatformFileForTransit ipc_fd, | 197 IPC::PlatformFileForTransit ipc_fd, |
| 182 base::FilePath file_path); | 198 base::FilePath file_path); |
| 199 void OnFileTokenResolvedLocked(const IPC::Message& orig_msg, |
| 200 IPC::PlatformFileForTransit ipc_fd, |
| 201 base::FilePath file_path); |
| 183 | 202 |
| 184 bool RewriteMessage(const IPC::Message& msg, uint32_t type); | 203 bool RewriteMessage(const IPC::Message& msg, uint32_t type); |
| 185 | 204 |
| 186 // Returns 0 if nothing is waiting. | 205 // Returns 0 if nothing is waiting. |
| 187 int LockedReceive(NaClImcTypedMsgHdr* msg); | 206 int LockedReceive(NaClImcTypedMsgHdr* msg); |
| 188 | 207 |
| 189 // Sends a message that we know has been completed to the Chrome process. | 208 // Sends a message that we know has been completed to the Chrome process. |
| 190 bool SendCompleteMessage(const char* buffer, size_t buffer_len); | 209 bool SendCompleteMessage(const char* buffer, size_t buffer_len); |
| 191 | 210 |
| 192 // Clears the LockedData.to_be_sent_ structure in a way to make sure that | 211 // 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 | 212 // the memory is deleted. std::string can sometimes hold onto the buffer |
| 194 // for future use which we don't want. | 213 // for future use which we don't want. |
| 195 void ClearToBeSent(); | 214 void ClearToBeSent(); |
| 196 | 215 |
| 197 void ConnectChannelOnIOThread(); | 216 void ConnectChannelOnIOThread(); |
| 198 void CloseChannelOnIOThread(); | 217 void CloseChannelOnIOThread(); |
| 199 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message); | 218 void SendMessageOnIOThread(scoped_ptr<IPC::Message> message); |
| 200 | 219 |
| 201 // Saves the message to forward to NaCl. This method assumes that the caller | 220 // Saves the message to forward to NaCl. This method assumes that the caller |
| 202 // holds the lock for locked_data_. | 221 // holds the lock for locked_data_. |
| 203 void SaveMessage(const IPC::Message& message, | 222 void SaveMessage(const IPC::Message& message, |
| 204 RewrittenMessage* rewritten_message); | 223 RewrittenMessage* rewritten_message); |
| 205 | 224 |
| 206 base::Lock lock_; | 225 base::Lock lock_; |
| 207 base::ConditionVariable cond_var_; | 226 base::ConditionVariable cond_var_; |
| 208 | 227 |
| 209 scoped_refptr<base::TaskRunner> task_runner_; | 228 scoped_refptr<base::TaskRunner> task_runner_; |
| 210 | 229 |
| 211 ResolveFileTokenCallback resolve_file_token_cb_; | 230 ResolveFileTokenCallback resolve_file_token_cb_; |
| 231 OpenResourceCallback open_resource_cb_; |
| 212 | 232 |
| 213 // To be accessed inside of lock_ only. | 233 // To be accessed inside of lock_ only. |
| 214 LockedData locked_data_; | 234 LockedData locked_data_; |
| 215 | 235 |
| 216 // To be accessed on the I/O thread (via task runner) only. | 236 // To be accessed on the I/O thread (via task runner) only. |
| 217 IOThreadData io_thread_data_; | 237 IOThreadData io_thread_data_; |
| 218 | 238 |
| 219 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter); | 239 DISALLOW_COPY_AND_ASSIGN(NaClIPCAdapter); |
| 220 }; | 240 }; |
| 221 | 241 |
| 222 // Export TranslatePepperFileReadWriteOpenFlags for testing. | 242 // Export TranslatePepperFileReadWriteOpenFlags for testing. |
| 223 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags); | 243 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags); |
| 224 | 244 |
| 225 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_ | 245 #endif // CHROME_NACL_NACL_IPC_ADAPTER_H_ |
| OLD | NEW |