1. StorageBucketManager
接口
[SecureContext ]interface mixin { [NavigatorStorageBuckets SameObject ]readonly attribute StorageBucketManager storageBuckets ; };Navigator includes NavigatorStorageBuckets ;WorkerNavigator includes NavigatorStorageBuckets ;
每个环境设置对象都有一个关联的 StorageBucketManager
对象。
storageBuckets 获取器的
步骤是返回 this 的相关设置对象的 StorageBucketManager
对象。
用户代理有一个关联的 storage bucket manager,它是
启动新的并行队列的结果。
[Exposed =(Window ,Worker ),SecureContext ]interface {StorageBucketManager Promise <StorageBucket >open (DOMString ,name optional StorageBucketOptions = {});options Promise <sequence <DOMString >>keys ();Promise <undefined >delete (DOMString ); };name dictionary {StorageBucketOptions boolean =persisted false ;unsigned long long ;quota DOMHighResTimeStamp ; };expires
1.1. 创建存储桶
open(name, options)
方法步骤为:
-
令 shelf 为以 environment 为给定值运行 获取本地存储货架的结果。
-
如果 shelf 是 failure,则返回一个以
TypeError拒绝的 promise。 -
如果以 name 运行验证存储桶名称的结果是 failure,则返回一个以
TypeError拒绝的 promise。 -
令 p 为一个新的 promise。
-
将以下步骤入队到 storage bucket manager:
-
返回 p。
要为 shelf,给定存储桶 name 和可选的 options,打开存储桶,运行以下 步骤:
-
令 expires 为 undefined。
-
如果 options["
expires"] 存在,则: -
令 quota 为 undefined。
-
如果 options["
quota"] 存在,则:-
将 quota 设为 options["
quota"]。 -
如果 quota 小于或等于零,则返回 failure。
-
-
令 persisted 为 false。
-
如果 options["
persisted"] 为 true,则: -
令 bucket 为以 shelf 和 name 运行 获取或过期存储桶的结果。
-
如果 bucket 为 null,则:
-
如果 persisted 为 true,则将 bucket 的存储桶模式 设为
"persistent"。 -
令 storageBucket 为一个新的
StorageBucket。 -
将 storageBucket 的存储桶 设为 bucket。
-
返回 storageBucket。
要给定字符串 name 验证存储桶 名称,运行以下步骤:
-
如果 name 包含任何不是 码点中的 ASCII 小写字母、ASCII 数字、 U+005F (_),或 U+002D(-),则返回 failure。
-
如果 name 的码点长度为 0 或超过 64,则返回 failure。
-
如果 name 以 U+005F (_) 或 U+002D(-) 开头,则返回 failure。
-
返回。
要在 shelf 上,给定字符串 name,获取或过期 存储桶,运行以下步骤:
-
如果存在,则令 bucket 为 shelf 的存储桶 映射[name]。否则返回 null。
-
如果 bucket 的过期时间非 null,并且早于相关设置对象的当前墙上时间,则:
-
将 bucket 的removed 设为 true。
-
返回 null。
-
-
返回 bucket。
1.2. 删除存储桶
delete(name) 方法
步骤为:
-
令 shelf 为以 environment 为给定值运行 获取本地存储货架的结果。
-
如果 shelf 是 failure,则返回一个以
TypeError拒绝的 promise。 -
令 p 为一个新的 promise。
-
如果以 name 运行验证存储桶名称的结果是 failure,则用
InvalidCharacterError拒绝 p。 -
否则,将以下步骤入队到 storage bucket manager:
-
返回 p。
要在 shelf 上,给定存储桶 name,移除存储桶, 运行以下步骤:
[IndexedDB-3] 需要定义当数据因配额被逐出时如何发生删除。
[FS] 需要定义当数据因配额被逐出时 Bucket File System 如何发生删除。
[Service-Workers] 需要定义当数据因配额被逐出时,CacheStorage 和 Service Workers 如何发生删除。
1.3. 枚举存储桶
keys() 方法步骤为:
-
令 shelf 为运行获取本地存储货架的结果。
-
如果 shelf 是 failure,则返回一个以
TypeError拒绝的 promise。 -
令 p 为一个新的 promise。
-
令 keys 为一个新的列表。
-
将以下步骤入队到 storage bucket manager:
-
返回 p。
2. StorageBucket
接口
[Exposed =(Window ,Worker ),SecureContext ]interface {StorageBucket readonly attribute DOMString name ; [Exposed =Window ]Promise <boolean >persist ();Promise <boolean >persisted ();Promise <StorageEstimate >estimate ();Promise <undefined >setExpires (DOMHighResTimeStamp );expires Promise <DOMHighResTimeStamp ?>expires (); [SameObject ]readonly attribute IDBFactory indexedDB ; [SameObject ]readonly attribute CacheStorage caches ;Promise <FileSystemDirectoryHandle >getDirectory (); };
StorageBucket
有一个关联的存储桶。
存储桶有一个关联的 removed 标志,它是一个布尔值,初始为 false。当一个 存储桶被删除时将其设为 true。
StorageBucket
有一个 DOMString
对象 name,它是存储桶映射中映射到
存储桶的键。
2.1. 持久性
与已经定义 存储桶模式的 Storage § 4.5 Storage buckets 合并。
persist() 方法步骤为:
-
令 p 为一个新的 promise。
-
并行运行以下步骤:
-
如果 bucket 的removed 标志为 true,则排入一个存储任务,以用
InvalidStateError拒绝 p。 -
如果 bucket 的存储桶 模式是
"persistent",则令 persisted 为 true。 -
否则,
-
-
返回 p。
persisted() 方法步骤为:
2.2. 配额
存储桶有一个 配额 值,是一个 number-or-null,初始为 null。 指定可由该存储桶使用的以字节为单位的使用上限。用户代理可以进一步限制实际可用的存储空间。
存储桶的 存储使用量是其所有存储瓶所使用字节数的 由实现定义的粗略估计。
estimate() 方法步骤为:
-
令 shelf 为以 environment 运行获取本地存储货架的结果。
-
如果 shelf 是 failure,则返回一个以
TypeError拒绝的 promise。 -
如果 bucket 的removed 标志为 true,则返回一个以
InvalidStateError拒绝的 promise。 -
令 p 为一个新的 promise。
-
否则,并行运行以下步骤:
-
返回 p。
2.3. 过期
存储桶有一个 过期时间,它要么是 null,要么是时刻 在墙上时钟上的值,初始为 null。 指定存储桶生命周期的上限。
获取或过期
存储桶算法会在调用 keys()
或 open()
时移除已过期的存储桶。
当面临存储压力时,用户代理可以在存储桶模式为
"best-effort" 的存储桶达到其过期时间之前清除它们。
无论存储桶模式如何,当达到过期时间时,
用户代理可以在调用 open()
或 keys()
之前移除任何存储桶
setExpires(expires) 方法步骤
为:
expires() 方法步骤为:
2.4. 使用存储端点
存储端点,即存储瓶,可以按如下所述访问。
2.4.1. 使用 Indexed Database
IDBFactory
方法需要接受一个存储瓶映射,而不是 storageKey。
StorageBucket
有一个 IDBFactory
对象,初始为 null。indexedDB
获取器步骤为:
2.4.2. 使用 CacheStorage
StorageBucket
有一个 CacheStorage
对象,初始为 null。caches 获取器
步骤为:
2.4.3. 使用 Bucket File System
[Storage] 需要定义辅助工具来检索给定(非默认)存储桶的 瓶映射。
[FS] 需要定义辅助工具来在给定瓶映射的情况下检索 OPFS。
getDirectory() 步骤为:
-
返回以 map 运行
getDirectory的结果。
2.5. Clear Site Data 集成
更新 Clear Site Data § 3.1 The Clear-Site-Data HTTP Response Header Field。
将以下步骤添加到 Clear Site Data § 4.1 Parsing 中的算法。
要解析带存储桶的 Clear-Site-Data 标头,执行以下步骤:
-
对于 header 中的每个 type,执行以下步骤:
-
如果 type 不以
"storage:"开头,则中止这些 步骤。 -
令 bucket name 为 type 中从 8 到结尾的按位置取码元子字符串。
-
如果以 bucket name 运行验证存储桶名称的结果是 failure,则中止这些步骤。
-
向 types 附加一个由 (
"storage-bucket", bucket name) 组成的元组
-
将以下步骤添加到 Clear Site Data § 4.2 Clear data for response 中的算法。