一、chrome.system.storage
您可以使用 chrome.system.storage
API 查询存储设备信息,并在连接和分离可移动存储设备时收到通知。
权限
system.storage
类型
EjectDeviceResultCode
枚举
"success"
移除命令成功执行 - 应用可以提示用户移除设备。
"in_use"
设备正被其他应用使用。移除失败;在其他应用完成对设备的操作之前,用户不得移除设备。
"no_such_device"
没有已知的此类设备。
"failure"
移除命令失败。
StorageAvailableCapacityInfo
属性
-
availableCapacity
number
存储设备的可用容量(以字节为单位)。
-
id
字符串
getAvailableCapacity 函数参数
id
的id
。
StorageUnitInfo
属性
-
容量
number
存储空间总量(以字节为单位)。
-
id
字符串
唯一标识存储设备的临时 ID。此 ID 在单个应用的同一运行时内保持不变。它不是应用的不同运行之间或不同应用之间的永久性标识符。
-
name
字符串
存储单元的名称。
-
类型
存储单元的媒体类型。
StorageUnitType
枚举
"fixed"
存储具有固定介质,例如或 SSD。
"removable"
存储空间可移动,例如U 盘。
"unknown"
存储类型未知。
方法
ejectDevice()
<ph type="x-smartling-placeholder"></ph> 承诺
chrome.system.storage.ejectDevice(
id: string,
callback?: function,
)
弹出可移动存储设备。
参数
-
id
字符串
-
callback
函数(可选)
callback
参数如下所示:(result: EjectDeviceResultCode) => void
chrome.system.storage | API | Chrome for Developers
二、chrome.system.storage api接口定义c++:
1、system_storage.idl
extensions\common\api\system_storage.idl
cpp
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.system.storage</code> API to query storage device
// information and be notified when a removable storage device is attached and
// detached.
namespace system.storage {
enum StorageUnitType {
// The storage has fixed media, e.g. hard disk or SSD.
fixed,
// The storage is removable, e.g. USB flash drive.
removable,
// The storage type is unknown.
unknown
};
dictionary StorageUnitInfo {
// The transient ID that uniquely identifies the storage device.
// This ID will be persistent within the same run of a single application.
// It will not be a persistent identifier between different runs of an
// application, or between different applications.
DOMString id;
// The name of the storage unit.
DOMString name;
// The media type of the storage unit.
StorageUnitType type;
// The total amount of the storage space, in bytes.
double capacity;
};
dictionary StorageAvailableCapacityInfo {
// A copied |id| of getAvailableCapacity function parameter |id|.
DOMString id;
// The available capacity of the storage device, in bytes.
double availableCapacity;
};
[inline_doc] enum EjectDeviceResultCode {
// The ejection command is successful -- the application can prompt the user
// to remove the device.
success,
// The device is in use by another application. The ejection did not
// succeed; the user should not remove the device until the other
// application is done with the device.
in_use,
// There is no such device known.
no_such_device,
// The ejection command failed.
failure
};
callback EjectDeviceCallback = void (EjectDeviceResultCode result);
callback StorageInfoCallback = void (StorageUnitInfo[] info);
callback GetAvailableCapacityCallback = void (
StorageAvailableCapacityInfo info);
interface Functions {
// Get the storage information from the system. The argument passed to the
// callback is an array of StorageUnitInfo objects.
[supportsPromises] static void getInfo(StorageInfoCallback callback);
// Ejects a removable storage device.
[supportsPromises] static void ejectDevice(DOMString id,
EjectDeviceCallback callback);
// Get the available capacity of a specified |id| storage device.
// The |id| is the transient device ID from StorageUnitInfo.
[supportsPromises] static void getAvailableCapacity(
DOMString id,
GetAvailableCapacityCallback callback);
};
interface Events {
// Fired when a new removable storage is attached to the system.
static void onAttached(StorageUnitInfo info);
// Fired when a removable storage is detached from the system.
static void onDetached(DOMString id);
};
};
2、system_storage.idl 自动生成c++文件:
out\Debug\gen\extensions\common\api\system_storage.cc
out\Debug\gen\extensions\common\api\system_storage.h
3、chrome.system.storage api c++定义
extensions\browser\api\system_storage\system_storage_api.h
extensions\browser\api\system_storage\system_storage_api.cc
cpp
namespace extensions {
// Implementation of the systeminfo.storage.get API. It is an asynchronous
// call relative to browser UI thread.
class SystemStorageGetInfoFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("system.storage.getInfo", SYSTEM_STORAGE_GETINFO)
SystemStorageGetInfoFunction() = default;
private:
~SystemStorageGetInfoFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
void OnGetStorageInfoCompleted(bool success);
};
class SystemStorageEjectDeviceFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("system.storage.ejectDevice",
SYSTEM_STORAGE_EJECTDEVICE)
protected:
~SystemStorageEjectDeviceFunction() override = default;
// ExtensionFunction:
ResponseAction Run() override;
private:
void OnStorageMonitorInit(const std::string& transient_device_id);
// Eject device request handler.
void HandleResponse(storage_monitor::StorageMonitor::EjectStatus status);
};
class SystemStorageGetAvailableCapacityFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("system.storage.getAvailableCapacity",
SYSTEM_STORAGE_GETAVAILABLECAPACITY)
SystemStorageGetAvailableCapacityFunction();
private:
void OnStorageMonitorInit(const std::string& transient_id);
void OnQueryCompleted(const std::string& transient_id,
double available_capacity);
~SystemStorageGetAvailableCapacityFunction() override;
// ExtensionFunction:
ResponseAction Run() override;
scoped_refptr<base::SequencedTaskRunner> query_runner_;
};
} // namespace extensions