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
相关推荐
蜡笔小新星15 分钟前
Flask项目框架
开发语言·前端·经验分享·后端·python·学习·flask
Fantasywt4 小时前
THREEJS 片元着色器实现更自然的呼吸灯效果
前端·javascript·着色器
IT、木易4 小时前
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
开发语言·前端·javascript·ecmascript
Dream it possible!5 小时前
LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)
c++·算法·leetcode
My Li.6 小时前
c++的介绍
开发语言·c++
张拭心7 小时前
2024 总结,我的停滞与觉醒
android·前端
念九_ysl7 小时前
深入解析Vue3单文件组件:原理、场景与实战
前端·javascript·vue.js
Jenna的海糖7 小时前
vue3如何配置环境和打包
前端·javascript·vue.js
星之卡比*7 小时前
前端知识点---库和包的概念
前端·harmonyos·鸿蒙
灵感__idea7 小时前
Vuejs技术内幕:数据响应式之3.x版
前端·vue.js·源码阅读