Home | History | Annotate | Download | only in imageburner
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_DEVICE_HANDLER_H_
      6 #define CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_DEVICE_HANDLER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/callback.h"
     12 #include "chromeos/dbus/cros_disks_client.h"
     13 #include "chromeos/disks/disk_mount_manager.h"
     14 
     15 namespace chromeos {
     16 namespace imageburner {
     17 
     18 // This is the implementation for the communication between BurnManager
     19 // and DiskMountManager.
     20 // The main reason this is NOT merged into BurnManager is to improve
     21 // testability, since both BurnManager and DiskMountManager are singleton
     22 // in real usage.
     23 class BurnDeviceHandler : public disks::DiskMountManager::Observer {
     24  public:
     25   // Triggered when a burnable device is added or removed.
     26   typedef base::Callback<void(const disks::DiskMountManager::Disk& disk)>
     27       DiskCallback;
     28 
     29   // This class takes the pointer of DiskMountManager to improve testability,
     30   // although it is singleton in the real usage.
     31   explicit BurnDeviceHandler(disks::DiskMountManager* disk_mount_manager);
     32   virtual ~BurnDeviceHandler();
     33 
     34   // |add_callback| will be called when a new burnable device is added with
     35   // the device's information.
     36   // |remove_callback| will be called when a burnable device is removed.
     37   // Note: This class is designed to connect to only one BurnManager,
     38   // so it supports only single callback for each add and remove intentionally
     39   // (rather than ObserverList).
     40   void SetCallbacks(const DiskCallback& add_callback,
     41                     const DiskCallback& remove_callback);
     42 
     43   // Returns devices on which we can burn recovery image.
     44   std::vector<disks::DiskMountManager::Disk> GetBurnableDevices();
     45 
     46   // DiskMountManager::Observer overrides.
     47   virtual void OnDiskEvent(
     48       disks::DiskMountManager::DiskEvent event,
     49       const disks::DiskMountManager::Disk* disk) OVERRIDE;
     50   virtual void OnDeviceEvent(
     51       disks::DiskMountManager::DeviceEvent event,
     52       const std::string& device_path) OVERRIDE;
     53   virtual void OnMountEvent(
     54       disks::DiskMountManager::MountEvent event,
     55       MountError error_code,
     56       const disks::DiskMountManager::MountPointInfo& mount_info) OVERRIDE;
     57   virtual void OnFormatEvent(
     58       disks::DiskMountManager::FormatEvent event,
     59       FormatError error_code,
     60       const std::string& device_path) OVERRIDE;
     61 
     62  private:
     63   disks::DiskMountManager* disk_mount_manager_;  // Not owned by this class.
     64   DiskCallback add_callback_;
     65   DiskCallback remove_callback_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(BurnDeviceHandler);
     68 };
     69 
     70 }  // namespace imageburner
     71 }  // namespace chromeos
     72 
     73 #endif  // CHROME_BROWSER_CHROMEOS_IMAGEBURNER_BURN_DEVICE_HANDLER_H_
     74