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

Side by Side Diff: chromeos/dbus/cros_disks_client.cc

Issue 12527007: chromeos: Fix malfunctioning CrosDisksClientStubImpl::Unmount (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename variable Created 7 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 | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chromeos/dbus/cros_disks_client.h" 5 #include "chromeos/dbus/cros_disks_client.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/chromeos/chromeos_version.h" 10 #include "base/chromeos/chromeos_version.h"
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 408
409 virtual ~CrosDisksClientStubImpl() {} 409 virtual ~CrosDisksClientStubImpl() {}
410 410
411 // CrosDisksClient overrides: 411 // CrosDisksClient overrides:
412 virtual void Mount(const std::string& source_path, 412 virtual void Mount(const std::string& source_path,
413 const std::string& source_format, 413 const std::string& source_format,
414 const std::string& mount_label, 414 const std::string& mount_label,
415 MountType type, 415 MountType type,
416 const MountCallback& callback, 416 const MountCallback& callback,
417 const ErrorCallback& error_callback) OVERRIDE { 417 const ErrorCallback& error_callback) OVERRIDE {
418 // Already mounted path.
419 if (mounted_paths_.count(source_path) != 0) {
420 FinishMount(MOUNT_ERROR_PATH_ALREADY_MOUNTED, source_path, type,
421 std::string(), callback);
422 return;
423 }
424
425 // This stub implementation only accepts archive mount requests. 418 // This stub implementation only accepts archive mount requests.
426 if (type != MOUNT_TYPE_ARCHIVE) { 419 if (type != MOUNT_TYPE_ARCHIVE) {
427 FinishMount(MOUNT_ERROR_INTERNAL, source_path, type, std::string(), 420 FinishMount(MOUNT_ERROR_INTERNAL, source_path, type, std::string(),
428 callback); 421 callback);
429 return; 422 return;
430 } 423 }
431 424
432 const base::FilePath mounted_path = GetArchiveMountPoint().Append( 425 const base::FilePath mounted_path = GetArchiveMountPoint().Append(
433 base::FilePath::FromUTF8Unsafe(mount_label)); 426 base::FilePath::FromUTF8Unsafe(mount_label));
434 427
428 // Already mounted path.
429 if (mounted_to_source_path_map_.count(mounted_path.value()) != 0) {
430 FinishMount(MOUNT_ERROR_PATH_ALREADY_MOUNTED, source_path, type,
431 std::string(), callback);
432 return;
433 }
434
435 // Perform fake mount. 435 // Perform fake mount.
436 base::PostTaskAndReplyWithResult( 436 base::PostTaskAndReplyWithResult(
437 base::WorkerPool::GetTaskRunner(true /* task_is_slow */), 437 base::WorkerPool::GetTaskRunner(true /* task_is_slow */),
438 FROM_HERE, 438 FROM_HERE,
439 base::Bind(&PerformFakeMount, 439 base::Bind(&PerformFakeMount,
440 source_path, 440 source_path,
441 mounted_path), 441 mounted_path),
442 base::Bind(&CrosDisksClientStubImpl::ContinueMount, 442 base::Bind(&CrosDisksClientStubImpl::ContinueMount,
443 weak_ptr_factory_.GetWeakPtr(), 443 weak_ptr_factory_.GetWeakPtr(),
444 source_path, 444 source_path,
445 type, 445 type,
446 callback, 446 callback,
447 mounted_path)); 447 mounted_path));
448 } 448 }
449 449
450 virtual void Unmount(const std::string& device_path, 450 virtual void Unmount(const std::string& device_path,
451 UnmountOptions options, 451 UnmountOptions options,
452 const UnmountCallback& callback, 452 const UnmountCallback& callback,
453 const UnmountCallback& error_callback) OVERRIDE { 453 const UnmountCallback& error_callback) OVERRIDE {
454 // Not mounted. 454 // Not mounted.
455 if (mounted_paths_.count(device_path) == 0) { 455 if (mounted_to_source_path_map_.count(device_path) == 0) {
456 base::MessageLoopProxy::current()->PostTask( 456 base::MessageLoopProxy::current()->PostTask(
457 FROM_HERE, base::Bind(error_callback, device_path)); 457 FROM_HERE, base::Bind(error_callback, device_path));
458 return; 458 return;
459 } 459 }
460 460
461 const base::FilePath mounted_path = mounted_paths_[device_path]; 461 mounted_to_source_path_map_.erase(device_path);
462 mounted_paths_.erase(device_path);
463 462
464 // Remove the directory created in Mount(). 463 // Remove the directory created in Mount().
465 base::WorkerPool::PostTask( 464 base::WorkerPool::PostTaskAndReply(
466 FROM_HERE, 465 FROM_HERE,
467 base::Bind(base::IgnoreResult(&file_util::Delete), 466 base::Bind(base::IgnoreResult(&file_util::Delete),
468 mounted_path, 467 base::FilePath::FromUTF8Unsafe(device_path),
469 true /* recursive */), 468 true /* recursive */),
469 base::Bind(callback, device_path),
470 true /* task_is_slow */); 470 true /* task_is_slow */);
471
472 base::MessageLoopProxy::current()->PostTask(
473 FROM_HERE, base::Bind(callback, device_path));
474 } 471 }
475 472
476 virtual void EnumerateAutoMountableDevices( 473 virtual void EnumerateAutoMountableDevices(
477 const EnumerateAutoMountableDevicesCallback& callback, 474 const EnumerateAutoMountableDevicesCallback& callback,
478 const ErrorCallback& error_callback) OVERRIDE { 475 const ErrorCallback& error_callback) OVERRIDE {
479 std::vector<std::string> device_paths; 476 std::vector<std::string> device_paths;
480 base::MessageLoopProxy::current()->PostTask( 477 base::MessageLoopProxy::current()->PostTask(
481 FROM_HERE, base::Bind(callback, device_paths)); 478 FROM_HERE, base::Bind(callback, device_paths));
482 } 479 }
483 480
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 // Part of Mount() implementation. 533 // Part of Mount() implementation.
537 void ContinueMount(const std::string& source_path, 534 void ContinueMount(const std::string& source_path,
538 MountType type, 535 MountType type,
539 const MountCallback& callback, 536 const MountCallback& callback,
540 const base::FilePath& mounted_path, 537 const base::FilePath& mounted_path,
541 MountError mount_error) { 538 MountError mount_error) {
542 if (mount_error != MOUNT_ERROR_NONE) { 539 if (mount_error != MOUNT_ERROR_NONE) {
543 FinishMount(mount_error, source_path, type, std::string(), callback); 540 FinishMount(mount_error, source_path, type, std::string(), callback);
544 return; 541 return;
545 } 542 }
546 mounted_paths_[source_path] = mounted_path; 543 mounted_to_source_path_map_[mounted_path.value()] = source_path;
547 FinishMount(MOUNT_ERROR_NONE, source_path, type, 544 FinishMount(MOUNT_ERROR_NONE, source_path, type,
548 mounted_path.AsUTF8Unsafe(), callback); 545 mounted_path.AsUTF8Unsafe(), callback);
549 } 546 }
550 547
551 // Runs |callback| and sends MountCompleted signal. 548 // Runs |callback| and sends MountCompleted signal.
552 // Part of Mount() implementation. 549 // Part of Mount() implementation.
553 void FinishMount(MountError error, 550 void FinishMount(MountError error,
554 const std::string& source_path, 551 const std::string& source_path,
555 MountType type, 552 MountType type,
556 const std::string& mounted_path, 553 const std::string& mounted_path,
557 const MountCallback& callback) { 554 const MountCallback& callback) {
558 base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback); 555 base::MessageLoopProxy::current()->PostTask(FROM_HERE, callback);
559 if (!mount_completed_handler_.is_null()) { 556 if (!mount_completed_handler_.is_null()) {
560 base::MessageLoopProxy::current()->PostTask( 557 base::MessageLoopProxy::current()->PostTask(
561 FROM_HERE, 558 FROM_HERE,
562 base::Bind(mount_completed_handler_, 559 base::Bind(mount_completed_handler_,
563 error, source_path, type, mounted_path)); 560 error, source_path, type, mounted_path));
564 } 561 }
565 } 562 }
566 563
567 // Source path to mounted path map. 564 // Mounted path to source path map.
568 std::map<std::string, base::FilePath> mounted_paths_; 565 std::map<std::string, std::string> mounted_to_source_path_map_;
569 566
570 MountEventHandler mount_event_handler_; 567 MountEventHandler mount_event_handler_;
571 MountCompletedHandler mount_completed_handler_; 568 MountCompletedHandler mount_completed_handler_;
572 569
573 base::WeakPtrFactory<CrosDisksClientStubImpl> weak_ptr_factory_; 570 base::WeakPtrFactory<CrosDisksClientStubImpl> weak_ptr_factory_;
574 571
575 DISALLOW_COPY_AND_ASSIGN(CrosDisksClientStubImpl); 572 DISALLOW_COPY_AND_ASSIGN(CrosDisksClientStubImpl);
576 }; 573 };
577 574
578 } // namespace 575 } // namespace
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 } 762 }
766 763
767 // static 764 // static
768 base::FilePath CrosDisksClient::GetRemovableDiskMountPoint() { 765 base::FilePath CrosDisksClient::GetRemovableDiskMountPoint() {
769 return base::FilePath(base::chromeos::IsRunningOnChromeOS() ? 766 return base::FilePath(base::chromeos::IsRunningOnChromeOS() ?
770 FILE_PATH_LITERAL("/media/removable") : 767 FILE_PATH_LITERAL("/media/removable") :
771 FILE_PATH_LITERAL("/tmp/chromeos/media/removable")); 768 FILE_PATH_LITERAL("/tmp/chromeos/media/removable"));
772 } 769 }
773 770
774 } // namespace chromeos 771 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698