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

Side by Side Diff: content/child/fileapi/webfilesystem_impl.cc

Issue 102603014: FileAPI: Fix memory leak in WebFileSystemImpl (won't commit) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | tools/valgrind/memcheck/suppressions.txt » ('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 "content/child/fileapi/webfilesystem_impl.h" 5 #include "content/child/fileapi/webfilesystem_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/lazy_instance.h" 8 #include "base/lazy_instance.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 24 matching lines...) Expand all
35 35
36 namespace content { 36 namespace content {
37 37
38 namespace { 38 namespace {
39 39
40 base::LazyInstance<base::ThreadLocalPointer<WebFileSystemImpl> >::Leaky 40 base::LazyInstance<base::ThreadLocalPointer<WebFileSystemImpl> >::Leaky
41 g_webfilesystem_tls = LAZY_INSTANCE_INITIALIZER; 41 g_webfilesystem_tls = LAZY_INSTANCE_INITIALIZER;
42 42
43 class WaitableCallbackResults { 43 class WaitableCallbackResults {
44 public: 44 public:
45 static WaitableCallbackResults* MaybeCreate( 45 static scoped_ptr<WaitableCallbackResults> MaybeCreate(
46 const WebFileSystemCallbacks& callbacks) { 46 const WebFileSystemCallbacks& callbacks) {
47 if (callbacks.shouldBlockUntilCompletion()) 47 if (callbacks.shouldBlockUntilCompletion())
48 return new WaitableCallbackResults; 48 return make_scoped_ptr(new WaitableCallbackResults);
49 return NULL; 49 return scoped_ptr<WaitableCallbackResults>();
50 } 50 }
51 ~WaitableCallbackResults() {} 51 ~WaitableCallbackResults() {}
52 52
53 void SetResultsAndSignal(const base::Closure& results_closure) { 53 void SetResultsAndSignal(const base::Closure& results_closure) {
54 results_closure_ = results_closure; 54 results_closure_ = results_closure;
55 event_->Signal(); 55 event_.Signal();
56 } 56 }
57 57
58 void WaitAndRun() { 58 void WaitAndRun() {
59 { 59 {
60 blink::WebHeap::SafePointScope safe_point; 60 blink::WebHeap::SafePointScope safe_point;
61 event_->Wait(); 61 event_.Wait();
62 } 62 }
63 DCHECK(!results_closure_.is_null()); 63 DCHECK(!results_closure_.is_null());
64 results_closure_.Run(); 64 results_closure_.Run();
65 } 65 }
66 66
67 private: 67 private:
68 WaitableCallbackResults() : event_(new base::WaitableEvent(true, false)) {} 68 WaitableCallbackResults() : event_(true, false) {}
kinuko 2014/03/05 15:23:32 oops.
69 69
70 base::WaitableEvent* event_; 70 base::WaitableEvent event_;
71 base::Closure results_closure_; 71 base::Closure results_closure_;
72 DISALLOW_COPY_AND_ASSIGN(WaitableCallbackResults); 72 DISALLOW_COPY_AND_ASSIGN(WaitableCallbackResults);
73 }; 73 };
74 74
75 void DidReceiveSnapshotFile(int request_id) { 75 void DidReceiveSnapshotFile(int request_id) {
76 if (ChildThread::current()) 76 if (ChildThread::current())
77 ChildThread::current()->Send( 77 ChildThread::current()->Send(
78 new FileSystemHostMsg_DidReceiveSnapshotFile(request_id)); 78 new FileSystemHostMsg_DidReceiveSnapshotFile(request_id));
79 } 79 }
80 80
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 325
326 void WebFileSystemImpl::OnWorkerRunLoopStopped() { 326 void WebFileSystemImpl::OnWorkerRunLoopStopped() {
327 delete this; 327 delete this;
328 } 328 }
329 329
330 void WebFileSystemImpl::openFileSystem( 330 void WebFileSystemImpl::openFileSystem(
331 const blink::WebURL& storage_partition, 331 const blink::WebURL& storage_partition,
332 blink::WebFileSystemType type, 332 blink::WebFileSystemType type,
333 WebFileSystemCallbacks callbacks) { 333 WebFileSystemCallbacks callbacks) {
334 int callbacks_id = RegisterCallbacks(callbacks); 334 int callbacks_id = RegisterCallbacks(callbacks);
335 WaitableCallbackResults* waitable_results = 335 scoped_ptr<WaitableCallbackResults> waitable_results =
336 WaitableCallbackResults::MaybeCreate(callbacks); 336 WaitableCallbackResults::MaybeCreate(callbacks);
337 CallDispatcherOnMainThread( 337 CallDispatcherOnMainThread(
338 main_thread_loop_.get(), 338 main_thread_loop_.get(),
339 &FileSystemDispatcher::OpenFileSystem, 339 &FileSystemDispatcher::OpenFileSystem,
340 MakeTuple(GURL(storage_partition), 340 MakeTuple(GURL(storage_partition),
341 static_cast<fileapi::FileSystemType>(type), 341 static_cast<fileapi::FileSystemType>(type),
342 base::Bind(&OpenFileSystemCallbackAdapter, 342 base::Bind(&OpenFileSystemCallbackAdapter,
343 CurrentWorkerId(), callbacks_id, 343 CurrentWorkerId(), callbacks_id,
344 base::Unretained(waitable_results)), 344 waitable_results.get()),
345 base::Bind(&StatusCallbackAdapter, 345 base::Bind(&StatusCallbackAdapter,
346 CurrentWorkerId(), callbacks_id, 346 CurrentWorkerId(), callbacks_id,
347 base::Unretained(waitable_results))), 347 waitable_results.get())),
348 make_scoped_ptr(waitable_results)); 348 waitable_results.Pass());
nhiroki 2014/03/05 15:16:08 Hmm... |waitable_results| can be passed before cal
kinuko 2014/03/05 15:23:32 Was about to comment about it. You could keep a ra
349 } 349 }
350 350
351 void WebFileSystemImpl::resolveURL( 351 void WebFileSystemImpl::resolveURL(
352 const blink::WebURL& filesystem_url, 352 const blink::WebURL& filesystem_url,
353 WebFileSystemCallbacks callbacks) { 353 WebFileSystemCallbacks callbacks) {
354 int callbacks_id = RegisterCallbacks(callbacks); 354 int callbacks_id = RegisterCallbacks(callbacks);
355 WaitableCallbackResults* waitable_results = 355 scoped_ptr<WaitableCallbackResults> waitable_results =
356 WaitableCallbackResults::MaybeCreate(callbacks); 356 WaitableCallbackResults::MaybeCreate(callbacks);
357 CallDispatcherOnMainThread( 357 CallDispatcherOnMainThread(
358 main_thread_loop_.get(), 358 main_thread_loop_.get(),
359 &FileSystemDispatcher::ResolveURL, 359 &FileSystemDispatcher::ResolveURL,
360 MakeTuple(GURL(filesystem_url), 360 MakeTuple(GURL(filesystem_url),
361 base::Bind(&ResolveURLCallbackAdapter, 361 base::Bind(&ResolveURLCallbackAdapter,
362 CurrentWorkerId(), callbacks_id, 362 CurrentWorkerId(), callbacks_id,
363 base::Unretained(waitable_results)), 363 waitable_results.get()),
364 base::Bind(&StatusCallbackAdapter, 364 base::Bind(&StatusCallbackAdapter,
365 CurrentWorkerId(), callbacks_id, 365 CurrentWorkerId(), callbacks_id,
366 base::Unretained(waitable_results))), 366 waitable_results.get())),
367 make_scoped_ptr(waitable_results)); 367 waitable_results.Pass());
368 } 368 }
369 369
370 void WebFileSystemImpl::deleteFileSystem( 370 void WebFileSystemImpl::deleteFileSystem(
371 const blink::WebURL& storage_partition, 371 const blink::WebURL& storage_partition,
372 blink::WebFileSystemType type, 372 blink::WebFileSystemType type,
373 WebFileSystemCallbacks callbacks) { 373 WebFileSystemCallbacks callbacks) {
374 int callbacks_id = RegisterCallbacks(callbacks); 374 int callbacks_id = RegisterCallbacks(callbacks);
375 WaitableCallbackResults* waitable_results = 375 scoped_ptr<WaitableCallbackResults> waitable_results =
376 WaitableCallbackResults::MaybeCreate(callbacks); 376 WaitableCallbackResults::MaybeCreate(callbacks);
377 CallDispatcherOnMainThread( 377 CallDispatcherOnMainThread(
378 main_thread_loop_.get(), 378 main_thread_loop_.get(),
379 &FileSystemDispatcher::DeleteFileSystem, 379 &FileSystemDispatcher::DeleteFileSystem,
380 MakeTuple(GURL(storage_partition), 380 MakeTuple(GURL(storage_partition),
381 static_cast<fileapi::FileSystemType>(type), 381 static_cast<fileapi::FileSystemType>(type),
382 base::Bind(&StatusCallbackAdapter, 382 base::Bind(&StatusCallbackAdapter,
383 CurrentWorkerId(), callbacks_id, 383 CurrentWorkerId(), callbacks_id,
384 base::Unretained(waitable_results))), 384 waitable_results.get())),
385 make_scoped_ptr(waitable_results)); 385 waitable_results.Pass());
386 } 386 }
387 387
388 void WebFileSystemImpl::move( 388 void WebFileSystemImpl::move(
389 const blink::WebURL& src_path, 389 const blink::WebURL& src_path,
390 const blink::WebURL& dest_path, 390 const blink::WebURL& dest_path,
391 WebFileSystemCallbacks callbacks) { 391 WebFileSystemCallbacks callbacks) {
392 int callbacks_id = RegisterCallbacks(callbacks); 392 int callbacks_id = RegisterCallbacks(callbacks);
393 WaitableCallbackResults* waitable_results = 393 scoped_ptr<WaitableCallbackResults> waitable_results =
394 WaitableCallbackResults::MaybeCreate(callbacks); 394 WaitableCallbackResults::MaybeCreate(callbacks);
395 CallDispatcherOnMainThread( 395 CallDispatcherOnMainThread(
396 main_thread_loop_.get(), 396 main_thread_loop_.get(),
397 &FileSystemDispatcher::Move, 397 &FileSystemDispatcher::Move,
398 MakeTuple(GURL(src_path), GURL(dest_path), 398 MakeTuple(GURL(src_path), GURL(dest_path),
399 base::Bind(&StatusCallbackAdapter, 399 base::Bind(&StatusCallbackAdapter,
400 CurrentWorkerId(), callbacks_id, 400 CurrentWorkerId(), callbacks_id,
401 base::Unretained(waitable_results))), 401 waitable_results.get())),
402 make_scoped_ptr(waitable_results)); 402 waitable_results.Pass());
403 } 403 }
404 404
405 void WebFileSystemImpl::copy( 405 void WebFileSystemImpl::copy(
406 const blink::WebURL& src_path, 406 const blink::WebURL& src_path,
407 const blink::WebURL& dest_path, 407 const blink::WebURL& dest_path,
408 WebFileSystemCallbacks callbacks) { 408 WebFileSystemCallbacks callbacks) {
409 int callbacks_id = RegisterCallbacks(callbacks); 409 int callbacks_id = RegisterCallbacks(callbacks);
410 WaitableCallbackResults* waitable_results = 410 scoped_ptr<WaitableCallbackResults> waitable_results =
411 WaitableCallbackResults::MaybeCreate(callbacks); 411 WaitableCallbackResults::MaybeCreate(callbacks);
412 CallDispatcherOnMainThread( 412 CallDispatcherOnMainThread(
413 main_thread_loop_.get(), 413 main_thread_loop_.get(),
414 &FileSystemDispatcher::Copy, 414 &FileSystemDispatcher::Copy,
415 MakeTuple(GURL(src_path), GURL(dest_path), 415 MakeTuple(GURL(src_path), GURL(dest_path),
416 base::Bind(&StatusCallbackAdapter, 416 base::Bind(&StatusCallbackAdapter,
417 CurrentWorkerId(), callbacks_id, 417 CurrentWorkerId(), callbacks_id,
418 base::Unretained(waitable_results))), 418 waitable_results.get())),
419 make_scoped_ptr(waitable_results)); 419 waitable_results.Pass());
420 } 420 }
421 421
422 void WebFileSystemImpl::remove( 422 void WebFileSystemImpl::remove(
423 const blink::WebURL& path, 423 const blink::WebURL& path,
424 WebFileSystemCallbacks callbacks) { 424 WebFileSystemCallbacks callbacks) {
425 int callbacks_id = RegisterCallbacks(callbacks); 425 int callbacks_id = RegisterCallbacks(callbacks);
426 WaitableCallbackResults* waitable_results = 426 scoped_ptr<WaitableCallbackResults> waitable_results =
427 WaitableCallbackResults::MaybeCreate(callbacks); 427 WaitableCallbackResults::MaybeCreate(callbacks);
428 CallDispatcherOnMainThread( 428 CallDispatcherOnMainThread(
429 main_thread_loop_.get(), 429 main_thread_loop_.get(),
430 &FileSystemDispatcher::Remove, 430 &FileSystemDispatcher::Remove,
431 MakeTuple(GURL(path), false /* recursive */, 431 MakeTuple(GURL(path), false /* recursive */,
432 base::Bind(&StatusCallbackAdapter, 432 base::Bind(&StatusCallbackAdapter,
433 CurrentWorkerId(), callbacks_id, 433 CurrentWorkerId(), callbacks_id,
434 base::Unretained(waitable_results))), 434 waitable_results.get())),
435 make_scoped_ptr(waitable_results)); 435 waitable_results.Pass());
436 } 436 }
437 437
438 void WebFileSystemImpl::removeRecursively( 438 void WebFileSystemImpl::removeRecursively(
439 const blink::WebURL& path, 439 const blink::WebURL& path,
440 WebFileSystemCallbacks callbacks) { 440 WebFileSystemCallbacks callbacks) {
441 int callbacks_id = RegisterCallbacks(callbacks); 441 int callbacks_id = RegisterCallbacks(callbacks);
442 WaitableCallbackResults* waitable_results = 442 scoped_ptr<WaitableCallbackResults> waitable_results =
443 WaitableCallbackResults::MaybeCreate(callbacks); 443 WaitableCallbackResults::MaybeCreate(callbacks);
444 CallDispatcherOnMainThread( 444 CallDispatcherOnMainThread(
445 main_thread_loop_.get(), 445 main_thread_loop_.get(),
446 &FileSystemDispatcher::Remove, 446 &FileSystemDispatcher::Remove,
447 MakeTuple(GURL(path), true /* recursive */, 447 MakeTuple(GURL(path), true /* recursive */,
448 base::Bind(&StatusCallbackAdapter, 448 base::Bind(&StatusCallbackAdapter,
449 CurrentWorkerId(), callbacks_id, 449 CurrentWorkerId(), callbacks_id,
450 base::Unretained(waitable_results))), 450 waitable_results.get())),
451 make_scoped_ptr(waitable_results)); 451 waitable_results.Pass());
452 } 452 }
453 453
454 void WebFileSystemImpl::readMetadata( 454 void WebFileSystemImpl::readMetadata(
455 const blink::WebURL& path, 455 const blink::WebURL& path,
456 WebFileSystemCallbacks callbacks) { 456 WebFileSystemCallbacks callbacks) {
457 int callbacks_id = RegisterCallbacks(callbacks); 457 int callbacks_id = RegisterCallbacks(callbacks);
458 WaitableCallbackResults* waitable_results = 458 scoped_ptr<WaitableCallbackResults> waitable_results =
459 WaitableCallbackResults::MaybeCreate(callbacks); 459 WaitableCallbackResults::MaybeCreate(callbacks);
460 CallDispatcherOnMainThread( 460 CallDispatcherOnMainThread(
461 main_thread_loop_.get(), 461 main_thread_loop_.get(),
462 &FileSystemDispatcher::ReadMetadata, 462 &FileSystemDispatcher::ReadMetadata,
463 MakeTuple(GURL(path), 463 MakeTuple(GURL(path),
464 base::Bind(&ReadMetadataCallbackAdapter, 464 base::Bind(&ReadMetadataCallbackAdapter,
465 CurrentWorkerId(), callbacks_id, 465 CurrentWorkerId(), callbacks_id,
466 base::Unretained(waitable_results)), 466 waitable_results.get()),
467 base::Bind(&StatusCallbackAdapter, 467 base::Bind(&StatusCallbackAdapter,
468 CurrentWorkerId(), callbacks_id, 468 CurrentWorkerId(), callbacks_id,
469 base::Unretained(waitable_results))), 469 waitable_results.get())),
470 make_scoped_ptr(waitable_results)); 470 waitable_results.Pass());
471 } 471 }
472 472
473 void WebFileSystemImpl::createFile( 473 void WebFileSystemImpl::createFile(
474 const blink::WebURL& path, 474 const blink::WebURL& path,
475 bool exclusive, 475 bool exclusive,
476 WebFileSystemCallbacks callbacks) { 476 WebFileSystemCallbacks callbacks) {
477 int callbacks_id = RegisterCallbacks(callbacks); 477 int callbacks_id = RegisterCallbacks(callbacks);
478 WaitableCallbackResults* waitable_results = 478 scoped_ptr<WaitableCallbackResults> waitable_results =
479 WaitableCallbackResults::MaybeCreate(callbacks); 479 WaitableCallbackResults::MaybeCreate(callbacks);
480 CallDispatcherOnMainThread( 480 CallDispatcherOnMainThread(
481 main_thread_loop_.get(), 481 main_thread_loop_.get(),
482 &FileSystemDispatcher::CreateFile, 482 &FileSystemDispatcher::CreateFile,
483 MakeTuple(GURL(path), exclusive, 483 MakeTuple(GURL(path), exclusive,
484 base::Bind(&StatusCallbackAdapter, 484 base::Bind(&StatusCallbackAdapter,
485 CurrentWorkerId(), callbacks_id, 485 CurrentWorkerId(), callbacks_id,
486 base::Unretained(waitable_results))), 486 waitable_results.get())),
487 make_scoped_ptr(waitable_results)); 487 waitable_results.Pass());
488 } 488 }
489 489
490 void WebFileSystemImpl::createDirectory( 490 void WebFileSystemImpl::createDirectory(
491 const blink::WebURL& path, 491 const blink::WebURL& path,
492 bool exclusive, 492 bool exclusive,
493 WebFileSystemCallbacks callbacks) { 493 WebFileSystemCallbacks callbacks) {
494 int callbacks_id = RegisterCallbacks(callbacks); 494 int callbacks_id = RegisterCallbacks(callbacks);
495 WaitableCallbackResults* waitable_results = 495 scoped_ptr<WaitableCallbackResults> waitable_results =
496 WaitableCallbackResults::MaybeCreate(callbacks); 496 WaitableCallbackResults::MaybeCreate(callbacks);
497 CallDispatcherOnMainThread( 497 CallDispatcherOnMainThread(
498 main_thread_loop_.get(), 498 main_thread_loop_.get(),
499 &FileSystemDispatcher::CreateDirectory, 499 &FileSystemDispatcher::CreateDirectory,
500 MakeTuple(GURL(path), exclusive, false /* recursive */, 500 MakeTuple(GURL(path), exclusive, false /* recursive */,
501 base::Bind(&StatusCallbackAdapter, 501 base::Bind(&StatusCallbackAdapter,
502 CurrentWorkerId(), callbacks_id, 502 CurrentWorkerId(), callbacks_id,
503 base::Unretained(waitable_results))), 503 waitable_results.get())),
504 make_scoped_ptr(waitable_results)); 504 waitable_results.Pass());
505 } 505 }
506 506
507 void WebFileSystemImpl::fileExists( 507 void WebFileSystemImpl::fileExists(
508 const blink::WebURL& path, 508 const blink::WebURL& path,
509 WebFileSystemCallbacks callbacks) { 509 WebFileSystemCallbacks callbacks) {
510 int callbacks_id = RegisterCallbacks(callbacks); 510 int callbacks_id = RegisterCallbacks(callbacks);
511 WaitableCallbackResults* waitable_results = 511 scoped_ptr<WaitableCallbackResults> waitable_results =
512 WaitableCallbackResults::MaybeCreate(callbacks); 512 WaitableCallbackResults::MaybeCreate(callbacks);
513 CallDispatcherOnMainThread( 513 CallDispatcherOnMainThread(
514 main_thread_loop_.get(), 514 main_thread_loop_.get(),
515 &FileSystemDispatcher::Exists, 515 &FileSystemDispatcher::Exists,
516 MakeTuple(GURL(path), false /* directory */, 516 MakeTuple(GURL(path), false /* directory */,
517 base::Bind(&StatusCallbackAdapter, 517 base::Bind(&StatusCallbackAdapter,
518 CurrentWorkerId(), callbacks_id, 518 CurrentWorkerId(), callbacks_id,
519 base::Unretained(waitable_results))), 519 waitable_results.get())),
520 make_scoped_ptr(waitable_results)); 520 waitable_results.Pass());
521 } 521 }
522 522
523 void WebFileSystemImpl::directoryExists( 523 void WebFileSystemImpl::directoryExists(
524 const blink::WebURL& path, 524 const blink::WebURL& path,
525 WebFileSystemCallbacks callbacks) { 525 WebFileSystemCallbacks callbacks) {
526 int callbacks_id = RegisterCallbacks(callbacks); 526 int callbacks_id = RegisterCallbacks(callbacks);
527 WaitableCallbackResults* waitable_results = 527 scoped_ptr<WaitableCallbackResults> waitable_results =
528 WaitableCallbackResults::MaybeCreate(callbacks); 528 WaitableCallbackResults::MaybeCreate(callbacks);
529 CallDispatcherOnMainThread( 529 CallDispatcherOnMainThread(
530 main_thread_loop_.get(), 530 main_thread_loop_.get(),
531 &FileSystemDispatcher::Exists, 531 &FileSystemDispatcher::Exists,
532 MakeTuple(GURL(path), true /* directory */, 532 MakeTuple(GURL(path), true /* directory */,
533 base::Bind(&StatusCallbackAdapter, 533 base::Bind(&StatusCallbackAdapter,
534 CurrentWorkerId(), callbacks_id, 534 CurrentWorkerId(), callbacks_id,
535 base::Unretained(waitable_results))), 535 waitable_results.get())),
536 make_scoped_ptr(waitable_results)); 536 waitable_results.Pass());
537 } 537 }
538 538
539 void WebFileSystemImpl::readDirectory( 539 void WebFileSystemImpl::readDirectory(
540 const blink::WebURL& path, 540 const blink::WebURL& path,
541 WebFileSystemCallbacks callbacks) { 541 WebFileSystemCallbacks callbacks) {
542 int callbacks_id = RegisterCallbacks(callbacks); 542 int callbacks_id = RegisterCallbacks(callbacks);
543 WaitableCallbackResults* waitable_results = 543 scoped_ptr<WaitableCallbackResults> waitable_results =
544 WaitableCallbackResults::MaybeCreate(callbacks); 544 WaitableCallbackResults::MaybeCreate(callbacks);
545 CallDispatcherOnMainThread( 545 CallDispatcherOnMainThread(
546 main_thread_loop_.get(), 546 main_thread_loop_.get(),
547 &FileSystemDispatcher::ReadDirectory, 547 &FileSystemDispatcher::ReadDirectory,
548 MakeTuple(GURL(path), 548 MakeTuple(GURL(path),
549 base::Bind(&ReadDirectoryCallbackAdapater, 549 base::Bind(&ReadDirectoryCallbackAdapater,
550 CurrentWorkerId(), callbacks_id, 550 CurrentWorkerId(), callbacks_id,
551 base::Unretained(waitable_results)), 551 waitable_results.get()),
552 base::Bind(&StatusCallbackAdapter, 552 base::Bind(&StatusCallbackAdapter,
553 CurrentWorkerId(), callbacks_id, 553 CurrentWorkerId(), callbacks_id,
554 base::Unretained(waitable_results))), 554 waitable_results.get())),
555 make_scoped_ptr(waitable_results)); 555 waitable_results.Pass());
556 } 556 }
557 557
558 void WebFileSystemImpl::createFileWriter( 558 void WebFileSystemImpl::createFileWriter(
559 const WebURL& path, 559 const WebURL& path,
560 blink::WebFileWriterClient* client, 560 blink::WebFileWriterClient* client,
561 WebFileSystemCallbacks callbacks) { 561 WebFileSystemCallbacks callbacks) {
562 int callbacks_id = RegisterCallbacks(callbacks); 562 int callbacks_id = RegisterCallbacks(callbacks);
563 WaitableCallbackResults* waitable_results = 563 scoped_ptr<WaitableCallbackResults> waitable_results =
564 WaitableCallbackResults::MaybeCreate(callbacks); 564 WaitableCallbackResults::MaybeCreate(callbacks);
565 CallDispatcherOnMainThread( 565 CallDispatcherOnMainThread(
566 main_thread_loop_.get(), 566 main_thread_loop_.get(),
567 &FileSystemDispatcher::ReadMetadata, 567 &FileSystemDispatcher::ReadMetadata,
568 MakeTuple(GURL(path), 568 MakeTuple(GURL(path),
569 base::Bind(&CreateFileWriterCallbackAdapter, 569 base::Bind(&CreateFileWriterCallbackAdapter,
570 CurrentWorkerId(), callbacks_id, 570 CurrentWorkerId(), callbacks_id,
571 base::Unretained(waitable_results), 571 waitable_results.get(),
572 main_thread_loop_, GURL(path), client), 572 main_thread_loop_, GURL(path), client),
573 base::Bind(&StatusCallbackAdapter, 573 base::Bind(&StatusCallbackAdapter,
574 CurrentWorkerId(), callbacks_id, 574 CurrentWorkerId(), callbacks_id,
575 base::Unretained(waitable_results))), 575 waitable_results.get())),
576 make_scoped_ptr(waitable_results)); 576 waitable_results.Pass());
577 } 577 }
578 578
579 void WebFileSystemImpl::createSnapshotFileAndReadMetadata( 579 void WebFileSystemImpl::createSnapshotFileAndReadMetadata(
580 const blink::WebURL& path, 580 const blink::WebURL& path,
581 WebFileSystemCallbacks callbacks) { 581 WebFileSystemCallbacks callbacks) {
582 int callbacks_id = RegisterCallbacks(callbacks); 582 int callbacks_id = RegisterCallbacks(callbacks);
583 WaitableCallbackResults* waitable_results = 583 scoped_ptr<WaitableCallbackResults> waitable_results =
584 WaitableCallbackResults::MaybeCreate(callbacks); 584 WaitableCallbackResults::MaybeCreate(callbacks);
585 CallDispatcherOnMainThread( 585 CallDispatcherOnMainThread(
586 main_thread_loop_.get(), 586 main_thread_loop_.get(),
587 &FileSystemDispatcher::CreateSnapshotFile, 587 &FileSystemDispatcher::CreateSnapshotFile,
588 MakeTuple(GURL(path), 588 MakeTuple(GURL(path),
589 base::Bind(&CreateSnapshotFileCallbackAdapter, 589 base::Bind(&CreateSnapshotFileCallbackAdapter,
590 CurrentWorkerId(), callbacks_id, 590 CurrentWorkerId(), callbacks_id,
591 base::Unretained(waitable_results), 591 waitable_results.get(),
592 main_thread_loop_), 592 main_thread_loop_),
593 base::Bind(&StatusCallbackAdapter, 593 base::Bind(&StatusCallbackAdapter,
594 CurrentWorkerId(), callbacks_id, 594 CurrentWorkerId(), callbacks_id,
595 base::Unretained(waitable_results))), 595 waitable_results.get())),
596 make_scoped_ptr(waitable_results)); 596 waitable_results.Pass());
597 } 597 }
598 598
599 int WebFileSystemImpl::RegisterCallbacks( 599 int WebFileSystemImpl::RegisterCallbacks(
600 const WebFileSystemCallbacks& callbacks) { 600 const WebFileSystemCallbacks& callbacks) {
601 DCHECK(CalledOnValidThread()); 601 DCHECK(CalledOnValidThread());
602 int id = next_callbacks_id_++; 602 int id = next_callbacks_id_++;
603 callbacks_[id] = callbacks; 603 callbacks_[id] = callbacks;
604 return id; 604 return id;
605 } 605 }
606 606
607 WebFileSystemCallbacks WebFileSystemImpl::GetAndUnregisterCallbacks( 607 WebFileSystemCallbacks WebFileSystemImpl::GetAndUnregisterCallbacks(
608 int callbacks_id) { 608 int callbacks_id) {
609 DCHECK(CalledOnValidThread()); 609 DCHECK(CalledOnValidThread());
610 CallbacksMap::iterator found = callbacks_.find(callbacks_id); 610 CallbacksMap::iterator found = callbacks_.find(callbacks_id);
611 DCHECK(found != callbacks_.end()); 611 DCHECK(found != callbacks_.end());
612 WebFileSystemCallbacks callbacks = found->second; 612 WebFileSystemCallbacks callbacks = found->second;
613 callbacks_.erase(found); 613 callbacks_.erase(found);
614 return callbacks; 614 return callbacks;
615 } 615 }
616 616
617 } // namespace content 617 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | tools/valgrind/memcheck/suppressions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698