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