OLD | NEW |
| (Empty) |
1 // Copyright 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 #include "chrome/browser/extensions/api/system_storage/system_storage_api.h" | |
6 | |
7 using storage_monitor::StorageMonitor; | |
8 | |
9 namespace extensions { | |
10 | |
11 using api::system_storage::StorageUnitInfo; | |
12 namespace EjectDevice = api::system_storage::EjectDevice; | |
13 namespace GetAvailableCapacity = api::system_storage::GetAvailableCapacity; | |
14 | |
15 SystemStorageGetInfoFunction::SystemStorageGetInfoFunction() { | |
16 } | |
17 | |
18 SystemStorageGetInfoFunction::~SystemStorageGetInfoFunction() { | |
19 } | |
20 | |
21 bool SystemStorageGetInfoFunction::RunAsync() { | |
22 StorageInfoProvider::Get()->StartQueryInfo( | |
23 base::Bind(&SystemStorageGetInfoFunction::OnGetStorageInfoCompleted, | |
24 this)); | |
25 return true; | |
26 } | |
27 | |
28 void SystemStorageGetInfoFunction::OnGetStorageInfoCompleted(bool success) { | |
29 if (success) { | |
30 results_ = api::system_storage::GetInfo::Results::Create( | |
31 StorageInfoProvider::Get()->storage_unit_info_list()); | |
32 } else { | |
33 SetError("Error occurred when querying storage information."); | |
34 } | |
35 | |
36 SendResponse(success); | |
37 } | |
38 | |
39 SystemStorageEjectDeviceFunction::~SystemStorageEjectDeviceFunction() { | |
40 } | |
41 | |
42 bool SystemStorageEjectDeviceFunction::RunAsync() { | |
43 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
44 | |
45 scoped_ptr<EjectDevice::Params> params(EjectDevice::Params::Create(*args_)); | |
46 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
47 | |
48 StorageMonitor::GetInstance()->EnsureInitialized(base::Bind( | |
49 &SystemStorageEjectDeviceFunction::OnStorageMonitorInit, | |
50 this, | |
51 params->id)); | |
52 return true; | |
53 } | |
54 | |
55 void SystemStorageEjectDeviceFunction::OnStorageMonitorInit( | |
56 const std::string& transient_device_id) { | |
57 DCHECK(StorageMonitor::GetInstance()->IsInitialized()); | |
58 StorageMonitor* monitor = StorageMonitor::GetInstance(); | |
59 std::string device_id_str = | |
60 StorageMonitor::GetInstance()->GetDeviceIdForTransientId( | |
61 transient_device_id); | |
62 | |
63 if (device_id_str == "") { | |
64 HandleResponse(StorageMonitor::EJECT_NO_SUCH_DEVICE); | |
65 return; | |
66 } | |
67 | |
68 monitor->EjectDevice( | |
69 device_id_str, | |
70 base::Bind(&SystemStorageEjectDeviceFunction::HandleResponse, | |
71 this)); | |
72 } | |
73 | |
74 void SystemStorageEjectDeviceFunction::HandleResponse( | |
75 StorageMonitor::EjectStatus status) { | |
76 api::system_storage:: EjectDeviceResultCode result = | |
77 api::system_storage::EJECT_DEVICE_RESULT_CODE_FAILURE; | |
78 switch (status) { | |
79 case StorageMonitor::EJECT_OK: | |
80 result = api::system_storage::EJECT_DEVICE_RESULT_CODE_SUCCESS; | |
81 break; | |
82 case StorageMonitor::EJECT_IN_USE: | |
83 result = api::system_storage::EJECT_DEVICE_RESULT_CODE_IN_USE; | |
84 break; | |
85 case StorageMonitor::EJECT_NO_SUCH_DEVICE: | |
86 result = api::system_storage:: | |
87 EJECT_DEVICE_RESULT_CODE_NO_SUCH_DEVICE; | |
88 break; | |
89 case StorageMonitor::EJECT_FAILURE: | |
90 result = api::system_storage::EJECT_DEVICE_RESULT_CODE_FAILURE; | |
91 } | |
92 | |
93 SetResult(new base::StringValue( | |
94 api::system_storage::ToString(result))); | |
95 SendResponse(true); | |
96 } | |
97 | |
98 SystemStorageGetAvailableCapacityFunction:: | |
99 SystemStorageGetAvailableCapacityFunction() { | |
100 } | |
101 | |
102 SystemStorageGetAvailableCapacityFunction:: | |
103 ~SystemStorageGetAvailableCapacityFunction() { | |
104 } | |
105 | |
106 bool SystemStorageGetAvailableCapacityFunction::RunAsync() { | |
107 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | |
108 | |
109 scoped_ptr<GetAvailableCapacity::Params> params( | |
110 GetAvailableCapacity::Params::Create(*args_)); | |
111 EXTENSION_FUNCTION_VALIDATE(params.get()); | |
112 | |
113 StorageMonitor::GetInstance()->EnsureInitialized(base::Bind( | |
114 &SystemStorageGetAvailableCapacityFunction::OnStorageMonitorInit, | |
115 this, | |
116 params->id)); | |
117 return true; | |
118 } | |
119 | |
120 void SystemStorageGetAvailableCapacityFunction::OnStorageMonitorInit( | |
121 const std::string& transient_id) { | |
122 content::BrowserThread::PostTaskAndReplyWithResult( | |
123 content::BrowserThread::FILE, | |
124 FROM_HERE, | |
125 base::Bind( | |
126 &StorageInfoProvider::GetStorageFreeSpaceFromTransientIdOnFileThread, | |
127 StorageInfoProvider::Get(), transient_id), | |
128 base::Bind( | |
129 &SystemStorageGetAvailableCapacityFunction::OnQueryCompleted, | |
130 this, transient_id)); | |
131 } | |
132 | |
133 void SystemStorageGetAvailableCapacityFunction::OnQueryCompleted( | |
134 const std::string& transient_id, double available_capacity) { | |
135 bool success = available_capacity >= 0; | |
136 if (success) { | |
137 api::system_storage::StorageAvailableCapacityInfo result; | |
138 result.id = transient_id; | |
139 result.available_capacity = available_capacity; | |
140 SetResult(result.ToValue().release()); | |
141 } else { | |
142 SetError("Error occurred when querying available capacity."); | |
143 } | |
144 SendResponse(success); | |
145 } | |
146 | |
147 } // namespace extensions | |
OLD | NEW |