Chromium 中chrome.system.storage扩展接口定义c++

一、chrome.system.storage

您可以使用 chrome.system.storage API 查询存储设备信息,并在连接和分离可移动存储设备时收到通知。

权限

system.storage

类型

EjectDeviceResultCode

枚举

"success"

移除命令成功执行 - 应用可以提示用户移除设备。

"in_use"

设备正被其他应用使用。移除失败;在其他应用完成对设备的操作之前,用户不得移除设备。

"no_such_device"

没有已知的此类设备。

"failure"

移除命令失败。

StorageAvailableCapacityInfo

属性
  • availableCapacity

    number

    存储设备的可用容量(以字节为单位)。

  • id

    字符串

    getAvailableCapacity 函数参数 idid

StorageUnitInfo

属性
  • 容量

    number

    存储空间总量(以字节为单位)。

  • id

    字符串

    唯一标识存储设备的临时 ID。此 ID 在单个应用的同一运行时内保持不变。它不是应用的不同运行之间或不同应用之间的永久性标识符。

  • name

    字符串

    存储单元的名称。

  • 类型

    StorageUnitType

    存储单元的媒体类型。

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
相关推荐
jokerest1235 分钟前
web——sqliabs靶场——第五关——报错注入和布尔盲注
前端
風清掦6 分钟前
C/C++每日一练:编写一个查找子串的位置函数
c语言·c++·算法
WolvenSec19 分钟前
C/C++逆向:结构体逆向分析
c语言·开发语言·c++·网络安全
A charmer24 分钟前
算法每日双题精讲——滑动窗口(最大连续1的个数 III,将 x 减到 0 的最小操作数)
c++·算法·leetcode
谢尔登29 分钟前
前端开发调试之 PC 端调试
开发语言·前端
每天吃饭的羊31 分钟前
在循环中只set一次
开发语言·前端·javascript
娅娅梨3 小时前
C++ 错题本 MAC环境下 unique_lock try_lock_for函数爆红问题
开发语言·c++·macos
_默_3 小时前
adminPage-vue3依赖DetailsModule版本说明:V1.2.1——1) - 新增span与labelSpan属性
前端·javascript·vue.js·npm·开源
也无晴也无风雨5 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang6 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js