// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file contains a subclass of VolumeMountWatcherWin to expose some
// functionality for testing.

#ifndef COMPONENTS_STORAGE_MONITOR_TEST_VOLUME_MOUNT_WATCHER_WIN_H_
#define COMPONENTS_STORAGE_MONITOR_TEST_VOLUME_MOUNT_WATCHER_WIN_H_

#include <stdint.h>

#include <memory>
#include <string>
#include <vector>

#include "base/macros.h"
#include "base/strings/string16.h"
#include "base/synchronization/waitable_event.h"
#include "components/storage_monitor/volume_mount_watcher_win.h"

namespace base {
class FilePath;
}

namespace storage_monitor {

class TestVolumeMountWatcherWin : public VolumeMountWatcherWin {
 public:
  TestVolumeMountWatcherWin();
  ~TestVolumeMountWatcherWin() override;

  static bool GetDeviceRemovable(const base::FilePath& device_path,
                                 bool* removable);

  void AddDeviceForTesting(const base::FilePath& device_path,
                           const std::string& device_id,
                           const base::string16& device_name,
                           uint64_t total_size_in_bytes);

  void SetAttachedDevicesFake();

  const std::vector<base::FilePath>& devices_checked() const {
      return devices_checked_;
  }

  void BlockDeviceCheckForTesting();

  void ReleaseDeviceCheck();

  // VolumeMountWatcherWin:
  void DeviceCheckComplete(const base::FilePath& device_path) override;
  GetAttachedDevicesCallbackType GetAttachedDevicesCallback() const override;
  GetDeviceDetailsCallbackType GetDeviceDetailsCallback() const override;

 private:
  std::vector<base::FilePath> devices_checked_;
  std::unique_ptr<base::WaitableEvent> device_check_complete_event_;
  bool attached_devices_fake_;

  DISALLOW_COPY_AND_ASSIGN(TestVolumeMountWatcherWin);
};

}  // namespace storage_monitor

#endif  // COMPONENTS_STORAGE_MONITOR_TEST_VOLUME_MOUNT_WATCHER_WIN_H_
