当前位置: 首页 > article >正文

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 函数参数 id 的 id

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

// 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

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


http://www.kler.cn/a/393805.html

相关文章:

  • npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
  • redis bind 127.0.0.1和bind 10.34.56.78的区别
  • vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录
  • WebGIS三维地图框架--Cesium
  • GxtWaitCursor:Qt下基于RAII的鼠标等待光标类
  • TCP/IP协议,TCP和UDP区别
  • Docker入门系列——Docker-Compose
  • 【OpenGL】OpenGL简介
  • 大数据微服务方案
  • ROS2-python服务service和client节点(实现加法运算)
  • linux命令详解,openssl+历史命令详解
  • JDBC概述
  • 移动端【01】面试系统的MVVM重构实践
  • 重构代码之替换参数为显式方法
  • axios如何给某一个请求设置请求头信息
  • 让SQL更优雅!深入浅出【公用表表达式(CTE)】语法及实战案例
  • llama-cpp模型轻量化部署与量化
  • HTTP的了解
  • [智能车摄像头是一种安装在汽车上用于辅助驾驶和提高安全性的重要设备]
  • caozha-CEPCS(新冠肺炎疫情防控系统)
  • odoo-040 odoo17前端的js方法调用后端py方法action报错
  • Java与HTML中的标题、文本和图像
  • 排序算法 - 冒泡
  • Kubernetes实现故障转移和微服务弹性伸缩
  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • 本地启动浏览器,并禁用web安全性,解决本地启动时,服务端强制要求https协议导致请求不通的问题