1
2// Copyright 2014 The Chromium Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5
6#include "base/lazy_instance.h"
7#include "chrome/browser/extensions/api/image_writer_private/removable_storage_provider.h"
8#include "content/public/browser/browser_thread.h"
9
10namespace extensions {
11
12// A device list to be returned when testing.
13static base::LazyInstance<scoped_refptr<StorageDeviceList> > g_test_device_list;
14
15// TODO(haven): Udev code may be duplicated in the Chrome codebase.
16// https://code.google.com/p/chromium/issues/detail?id=284898
17
18void RemovableStorageProvider::GetAllDevices(DeviceListReadyCallback callback) {
19  if (g_test_device_list.Get().get() != NULL) {
20    content::BrowserThread::PostTask(
21        content::BrowserThread::FILE,
22        FROM_HERE,
23        base::Bind(callback, g_test_device_list.Get(), true));
24    return;
25  }
26
27  scoped_refptr<StorageDeviceList> device_list(new StorageDeviceList);
28
29  // We need to do some file i/o to get the device block size
30  content::BrowserThread::PostTaskAndReplyWithResult(
31      content::BrowserThread::FILE,
32      FROM_HERE,
33      base::Bind(PopulateDeviceList, device_list),
34      base::Bind(callback, device_list));
35}
36
37void RemovableStorageProvider::SetDeviceListForTesting(
38    scoped_refptr<StorageDeviceList> device_list) {
39  g_test_device_list.Get() = device_list;
40}
41
42void RemovableStorageProvider::ClearDeviceListForTesting() {
43  g_test_device_list.Get() = NULL;
44}
45
46}  // namespace extensions
47