| 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 #include "content/renderer/pepper/resource_converter.h" | 5 #include "content/renderer/pepper/resource_converter.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 } | 84 } |
| 85 | 85 |
| 86 // Given a V8 value containing a DOMFileSystem, creates a resource host and | 86 // Given a V8 value containing a DOMFileSystem, creates a resource host and |
| 87 // returns the resource information for serialization. | 87 // returns the resource information for serialization. |
| 88 // On error, false. | 88 // On error, false. |
| 89 bool DOMFileSystemToResource( | 89 bool DOMFileSystemToResource( |
| 90 PP_Instance instance, | 90 PP_Instance instance, |
| 91 RendererPpapiHost* host, | 91 RendererPpapiHost* host, |
| 92 const blink::WebDOMFileSystem& dom_file_system, | 92 const blink::WebDOMFileSystem& dom_file_system, |
| 93 int* pending_renderer_id, | 93 int* pending_renderer_id, |
| 94 scoped_ptr<IPC::Message>* create_message, | 94 std::unique_ptr<IPC::Message>* create_message, |
| 95 scoped_ptr<IPC::Message>* browser_host_create_message) { | 95 std::unique_ptr<IPC::Message>* browser_host_create_message) { |
| 96 DCHECK(!dom_file_system.isNull()); | 96 DCHECK(!dom_file_system.isNull()); |
| 97 | 97 |
| 98 PP_FileSystemType file_system_type = | 98 PP_FileSystemType file_system_type = |
| 99 WebFileSystemTypeToPPAPI(dom_file_system.type()); | 99 WebFileSystemTypeToPPAPI(dom_file_system.type()); |
| 100 GURL root_url = dom_file_system.rootURL(); | 100 GURL root_url = dom_file_system.rootURL(); |
| 101 | 101 |
| 102 // Raw external file system access is not allowed, but external file system | 102 // Raw external file system access is not allowed, but external file system |
| 103 // access through fileapi is allowed. (Without this check, there would be a | 103 // access through fileapi is allowed. (Without this check, there would be a |
| 104 // CHECK failure in FileRefResource.) | 104 // CHECK failure in FileRefResource.) |
| 105 if ((file_system_type == PP_FILESYSTEMTYPE_EXTERNAL) && | 105 if ((file_system_type == PP_FILESYSTEMTYPE_EXTERNAL) && |
| 106 (!root_url.is_valid())) { | 106 (!root_url.is_valid())) { |
| 107 return false; | 107 return false; |
| 108 } | 108 } |
| 109 | 109 |
| 110 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( | 110 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( |
| 111 scoped_ptr<ppapi::host::ResourceHost>(new PepperFileSystemHost( | 111 std::unique_ptr<ppapi::host::ResourceHost>(new PepperFileSystemHost( |
| 112 host, instance, 0, root_url, file_system_type))); | 112 host, instance, 0, root_url, file_system_type))); |
| 113 if (*pending_renderer_id == 0) | 113 if (*pending_renderer_id == 0) |
| 114 return false; | 114 return false; |
| 115 | 115 |
| 116 create_message->reset( | 116 create_message->reset( |
| 117 new PpapiPluginMsg_FileSystem_CreateFromPendingHost(file_system_type)); | 117 new PpapiPluginMsg_FileSystem_CreateFromPendingHost(file_system_type)); |
| 118 | 118 |
| 119 browser_host_create_message->reset( | 119 browser_host_create_message->reset( |
| 120 new PpapiHostMsg_FileSystem_CreateFromRenderer(root_url.spec(), | 120 new PpapiHostMsg_FileSystem_CreateFromRenderer(root_url.spec(), |
| 121 file_system_type)); | 121 file_system_type)); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 // blink::WebMediaStreamTrack track = host->track(); | 156 // blink::WebMediaStreamTrack track = host->track(); |
| 157 // *dom_video_track = track.toV8Value(); | 157 // *dom_video_track = track.toV8Value(); |
| 158 return false; | 158 return false; |
| 159 } | 159 } |
| 160 | 160 |
| 161 bool DOMMediaStreamTrackToResource( | 161 bool DOMMediaStreamTrackToResource( |
| 162 PP_Instance instance, | 162 PP_Instance instance, |
| 163 RendererPpapiHost* host, | 163 RendererPpapiHost* host, |
| 164 const blink::WebDOMMediaStreamTrack& dom_media_stream_track, | 164 const blink::WebDOMMediaStreamTrack& dom_media_stream_track, |
| 165 int* pending_renderer_id, | 165 int* pending_renderer_id, |
| 166 scoped_ptr<IPC::Message>* create_message) { | 166 std::unique_ptr<IPC::Message>* create_message) { |
| 167 DCHECK(!dom_media_stream_track.isNull()); | 167 DCHECK(!dom_media_stream_track.isNull()); |
| 168 *pending_renderer_id = 0; | 168 *pending_renderer_id = 0; |
| 169 #if defined(ENABLE_WEBRTC) | 169 #if defined(ENABLE_WEBRTC) |
| 170 const blink::WebMediaStreamTrack track = dom_media_stream_track.component(); | 170 const blink::WebMediaStreamTrack track = dom_media_stream_track.component(); |
| 171 const std::string id = track.source().id().utf8(); | 171 const std::string id = track.source().id().utf8(); |
| 172 | 172 |
| 173 if (track.source().getType() == blink::WebMediaStreamSource::TypeVideo) { | 173 if (track.source().getType() == blink::WebMediaStreamSource::TypeVideo) { |
| 174 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( | 174 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( |
| 175 scoped_ptr<ppapi::host::ResourceHost>( | 175 std::unique_ptr<ppapi::host::ResourceHost>( |
| 176 new PepperMediaStreamVideoTrackHost(host, instance, 0, track))); | 176 new PepperMediaStreamVideoTrackHost(host, instance, 0, track))); |
| 177 if (*pending_renderer_id == 0) | 177 if (*pending_renderer_id == 0) |
| 178 return false; | 178 return false; |
| 179 | 179 |
| 180 create_message->reset( | 180 create_message->reset( |
| 181 new PpapiPluginMsg_MediaStreamVideoTrack_CreateFromPendingHost(id)); | 181 new PpapiPluginMsg_MediaStreamVideoTrack_CreateFromPendingHost(id)); |
| 182 return true; | 182 return true; |
| 183 } else if (track.source().getType() == | 183 } else if (track.source().getType() == |
| 184 blink::WebMediaStreamSource::TypeAudio) { | 184 blink::WebMediaStreamSource::TypeAudio) { |
| 185 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( | 185 *pending_renderer_id = host->GetPpapiHost()->AddPendingResourceHost( |
| 186 scoped_ptr<ppapi::host::ResourceHost>( | 186 std::unique_ptr<ppapi::host::ResourceHost>( |
| 187 new PepperMediaStreamAudioTrackHost(host, instance, 0, track))); | 187 new PepperMediaStreamAudioTrackHost(host, instance, 0, track))); |
| 188 if (*pending_renderer_id == 0) | 188 if (*pending_renderer_id == 0) |
| 189 return false; | 189 return false; |
| 190 | 190 |
| 191 create_message->reset( | 191 create_message->reset( |
| 192 new PpapiPluginMsg_MediaStreamAudioTrack_CreateFromPendingHost(id)); | 192 new PpapiPluginMsg_MediaStreamAudioTrack_CreateFromPendingHost(id)); |
| 193 return true; | 193 return true; |
| 194 } | 194 } |
| 195 #endif | 195 #endif |
| 196 return false; | 196 return false; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 216 v8::Context::Scope context_scope(context); | 216 v8::Context::Scope context_scope(context); |
| 217 v8::HandleScope handle_scope(context->GetIsolate()); | 217 v8::HandleScope handle_scope(context->GetIsolate()); |
| 218 RendererPpapiHost* host = RendererPpapiHost::GetForPPInstance(instance_); | 218 RendererPpapiHost* host = RendererPpapiHost::GetForPPInstance(instance_); |
| 219 | 219 |
| 220 *was_resource = false; | 220 *was_resource = false; |
| 221 | 221 |
| 222 blink::WebDOMFileSystem dom_file_system = | 222 blink::WebDOMFileSystem dom_file_system = |
| 223 blink::WebDOMFileSystem::fromV8Value(val); | 223 blink::WebDOMFileSystem::fromV8Value(val); |
| 224 if (!dom_file_system.isNull()) { | 224 if (!dom_file_system.isNull()) { |
| 225 int pending_renderer_id; | 225 int pending_renderer_id; |
| 226 scoped_ptr<IPC::Message> create_message; | 226 std::unique_ptr<IPC::Message> create_message; |
| 227 scoped_ptr<IPC::Message> browser_host_create_message; | 227 std::unique_ptr<IPC::Message> browser_host_create_message; |
| 228 if (!DOMFileSystemToResource(instance_, | 228 if (!DOMFileSystemToResource(instance_, |
| 229 host, | 229 host, |
| 230 dom_file_system, | 230 dom_file_system, |
| 231 &pending_renderer_id, | 231 &pending_renderer_id, |
| 232 &create_message, | 232 &create_message, |
| 233 &browser_host_create_message)) { | 233 &browser_host_create_message)) { |
| 234 return false; | 234 return false; |
| 235 } | 235 } |
| 236 DCHECK(create_message); | 236 DCHECK(create_message); |
| 237 DCHECK(browser_host_create_message); | 237 DCHECK(browser_host_create_message); |
| 238 scoped_refptr<HostResourceVar> result_var = | 238 scoped_refptr<HostResourceVar> result_var = |
| 239 CreateResourceVarWithBrowserHost( | 239 CreateResourceVarWithBrowserHost( |
| 240 pending_renderer_id, *create_message, *browser_host_create_message); | 240 pending_renderer_id, *create_message, *browser_host_create_message); |
| 241 *result = result_var->GetPPVar(); | 241 *result = result_var->GetPPVar(); |
| 242 *was_resource = true; | 242 *was_resource = true; |
| 243 return true; | 243 return true; |
| 244 } | 244 } |
| 245 | 245 |
| 246 blink::WebDOMMediaStreamTrack dom_media_stream_track = | 246 blink::WebDOMMediaStreamTrack dom_media_stream_track = |
| 247 blink::WebDOMMediaStreamTrack::fromV8Value(val); | 247 blink::WebDOMMediaStreamTrack::fromV8Value(val); |
| 248 if (!dom_media_stream_track.isNull()) { | 248 if (!dom_media_stream_track.isNull()) { |
| 249 int pending_renderer_id; | 249 int pending_renderer_id; |
| 250 scoped_ptr<IPC::Message> create_message; | 250 std::unique_ptr<IPC::Message> create_message; |
| 251 if (!DOMMediaStreamTrackToResource(instance_, | 251 if (!DOMMediaStreamTrackToResource(instance_, |
| 252 host, | 252 host, |
| 253 dom_media_stream_track, | 253 dom_media_stream_track, |
| 254 &pending_renderer_id, | 254 &pending_renderer_id, |
| 255 &create_message)) { | 255 &create_message)) { |
| 256 return false; | 256 return false; |
| 257 } | 257 } |
| 258 DCHECK(create_message); | 258 DCHECK(create_message); |
| 259 scoped_refptr<HostResourceVar> result_var = | 259 scoped_refptr<HostResourceVar> result_var = |
| 260 CreateResourceVar(pending_renderer_id, *create_message); | 260 CreateResourceVar(pending_renderer_id, *create_message); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 const IPC::Message& create_message, | 347 const IPC::Message& create_message, |
| 348 const IPC::Message& browser_host_create_message) { | 348 const IPC::Message& browser_host_create_message) { |
| 349 scoped_refptr<HostResourceVar> result = | 349 scoped_refptr<HostResourceVar> result = |
| 350 CreateResourceVar(pending_renderer_id, create_message); | 350 CreateResourceVar(pending_renderer_id, create_message); |
| 351 browser_host_create_messages_.push_back(browser_host_create_message); | 351 browser_host_create_messages_.push_back(browser_host_create_message); |
| 352 browser_vars_.push_back(result); | 352 browser_vars_.push_back(result); |
| 353 return result; | 353 return result; |
| 354 } | 354 } |
| 355 | 355 |
| 356 } // namespace content | 356 } // namespace content |
| OLD | NEW |