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

Side by Side Diff: content/renderer/pepper/resource_converter.cc

Issue 635593004: PPAPI: Make V8VarConverter longer-lived (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge Created 6 years, 2 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 #include "content/renderer/pepper/resource_converter.h" 5 #include "content/renderer/pepper/resource_converter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "content/public/renderer/renderer_ppapi_host.h" 9 #include "content/public/renderer/renderer_ppapi_host.h"
10 #include "content/renderer/pepper/pepper_file_system_host.h" 10 #include "content/renderer/pepper/pepper_file_system_host.h"
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 return true; 190 return true;
191 } 191 }
192 #endif 192 #endif
193 return false; 193 return false;
194 } 194 }
195 195
196 } // namespace 196 } // namespace
197 197
198 ResourceConverter::~ResourceConverter() {} 198 ResourceConverter::~ResourceConverter() {}
199 199
200 ResourceConverterImpl::ResourceConverterImpl(PP_Instance instance, 200 ResourceConverterImpl::ResourceConverterImpl(PP_Instance instance)
201 RendererPpapiHost* host) 201 : instance_(instance) {}
202 : instance_(instance), host_(host) {}
203 202
204 ResourceConverterImpl::~ResourceConverterImpl() { 203 ResourceConverterImpl::~ResourceConverterImpl() {
205 // Verify Flush() was called. 204 // Verify Flush() was called.
206 DCHECK(browser_host_create_messages_.empty()); 205 DCHECK(browser_host_create_messages_.empty());
207 DCHECK(browser_vars_.empty()); 206 DCHECK(browser_vars_.empty());
208 } 207 }
209 208
210 bool ResourceConverterImpl::FromV8Value(v8::Handle<v8::Object> val, 209 bool ResourceConverterImpl::FromV8Value(v8::Handle<v8::Object> val,
211 v8::Handle<v8::Context> context, 210 v8::Handle<v8::Context> context,
212 PP_Var* result, 211 PP_Var* result,
213 bool* was_resource) { 212 bool* was_resource) {
214 v8::Context::Scope context_scope(context); 213 v8::Context::Scope context_scope(context);
215 v8::HandleScope handle_scope(context->GetIsolate()); 214 v8::HandleScope handle_scope(context->GetIsolate());
215 RendererPpapiHost* host = RendererPpapiHost::GetForPPInstance(instance_);
216 216
217 *was_resource = false; 217 *was_resource = false;
218 218
219 blink::WebDOMFileSystem dom_file_system = 219 blink::WebDOMFileSystem dom_file_system =
220 blink::WebDOMFileSystem::fromV8Value(val); 220 blink::WebDOMFileSystem::fromV8Value(val);
221 if (!dom_file_system.isNull()) { 221 if (!dom_file_system.isNull()) {
222 int pending_renderer_id; 222 int pending_renderer_id;
223 scoped_ptr<IPC::Message> create_message; 223 scoped_ptr<IPC::Message> create_message;
224 scoped_ptr<IPC::Message> browser_host_create_message; 224 scoped_ptr<IPC::Message> browser_host_create_message;
225 if (!DOMFileSystemToResource(instance_, 225 if (!DOMFileSystemToResource(instance_,
226 host_, 226 host,
227 dom_file_system, 227 dom_file_system,
228 &pending_renderer_id, 228 &pending_renderer_id,
229 &create_message, 229 &create_message,
230 &browser_host_create_message)) { 230 &browser_host_create_message)) {
231 return false; 231 return false;
232 } 232 }
233 DCHECK(create_message); 233 DCHECK(create_message);
234 DCHECK(browser_host_create_message); 234 DCHECK(browser_host_create_message);
235 scoped_refptr<HostResourceVar> result_var = 235 scoped_refptr<HostResourceVar> result_var =
236 CreateResourceVarWithBrowserHost( 236 CreateResourceVarWithBrowserHost(
237 pending_renderer_id, *create_message, *browser_host_create_message); 237 pending_renderer_id, *create_message, *browser_host_create_message);
238 *result = result_var->GetPPVar(); 238 *result = result_var->GetPPVar();
239 *was_resource = true; 239 *was_resource = true;
240 return true; 240 return true;
241 } 241 }
242 242
243 blink::WebDOMMediaStreamTrack dom_media_stream_track = 243 blink::WebDOMMediaStreamTrack dom_media_stream_track =
244 blink::WebDOMMediaStreamTrack::fromV8Value(val); 244 blink::WebDOMMediaStreamTrack::fromV8Value(val);
245 if (!dom_media_stream_track.isNull()) { 245 if (!dom_media_stream_track.isNull()) {
246 int pending_renderer_id; 246 int pending_renderer_id;
247 scoped_ptr<IPC::Message> create_message; 247 scoped_ptr<IPC::Message> create_message;
248 if (!DOMMediaStreamTrackToResource(instance_, 248 if (!DOMMediaStreamTrackToResource(instance_,
249 host_, 249 host,
250 dom_media_stream_track, 250 dom_media_stream_track,
251 &pending_renderer_id, 251 &pending_renderer_id,
252 &create_message)) { 252 &create_message)) {
253 return false; 253 return false;
254 } 254 }
255 DCHECK(create_message); 255 DCHECK(create_message);
256 scoped_refptr<HostResourceVar> result_var = 256 scoped_refptr<HostResourceVar> result_var =
257 CreateResourceVar(pending_renderer_id, *create_message); 257 CreateResourceVar(pending_renderer_id, *create_message);
258 *result = result_var->GetPPVar(); 258 *result = result_var->GetPPVar();
259 *was_resource = true; 259 *was_resource = true;
260 return true; 260 return true;
261 } 261 }
262 262
263 // The value was not convertible to a resource. Return true with 263 // The value was not convertible to a resource. Return true with
264 // |was_resource| set to false. As per the interface of FromV8Value, |result| 264 // |was_resource| set to false. As per the interface of FromV8Value, |result|
265 // may be left unmodified in this case. 265 // may be left unmodified in this case.
266 return true; 266 return true;
267 } 267 }
268 268
269 void ResourceConverterImpl::Reset() { 269 void ResourceConverterImpl::Reset() {
270 browser_host_create_messages_.clear(); 270 browser_host_create_messages_.clear();
271 browser_vars_.clear(); 271 browser_vars_.clear();
272 } 272 }
273 273
274 bool ResourceConverterImpl::NeedsFlush() { 274 bool ResourceConverterImpl::NeedsFlush() {
275 return !browser_host_create_messages_.empty(); 275 return !browser_host_create_messages_.empty();
276 } 276 }
277 277
278 void ResourceConverterImpl::Flush(const base::Callback<void(bool)>& callback) { 278 void ResourceConverterImpl::Flush(const base::Callback<void(bool)>& callback) {
279 host_->CreateBrowserResourceHosts( 279 RendererPpapiHost::GetForPPInstance(instance_)->CreateBrowserResourceHosts(
280 instance_, 280 instance_,
281 browser_host_create_messages_, 281 browser_host_create_messages_,
282 base::Bind(&FlushComplete, callback, browser_vars_)); 282 base::Bind(&FlushComplete, callback, browser_vars_));
283 browser_host_create_messages_.clear(); 283 browser_host_create_messages_.clear();
284 browser_vars_.clear(); 284 browser_vars_.clear();
285 } 285 }
286 286
287 bool ResourceConverterImpl::ToV8Value(const PP_Var& var, 287 bool ResourceConverterImpl::ToV8Value(const PP_Var& var,
288 v8::Handle<v8::Context> context, 288 v8::Handle<v8::Context> context,
289 v8::Handle<v8::Value>* result) { 289 v8::Handle<v8::Value>* result) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 const IPC::Message& create_message, 344 const IPC::Message& create_message,
345 const IPC::Message& browser_host_create_message) { 345 const IPC::Message& browser_host_create_message) {
346 scoped_refptr<HostResourceVar> result = 346 scoped_refptr<HostResourceVar> result =
347 CreateResourceVar(pending_renderer_id, create_message); 347 CreateResourceVar(pending_renderer_id, create_message);
348 browser_host_create_messages_.push_back(browser_host_create_message); 348 browser_host_create_messages_.push_back(browser_host_create_message);
349 browser_vars_.push_back(result); 349 browser_vars_.push_back(result);
350 return result; 350 return result;
351 } 351 }
352 352
353 } // namespace content 353 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/resource_converter.h ('k') | content/renderer/pepper/v8_var_converter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698