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)
メソッドの手順は次のとおりです:
-
environment を this の関連する設定オブジェクトとします。
-
shelf を、environment を与えて ローカルストレージ棚を取得するを実行した結果とします。
-
shelf が failure である場合、
TypeErrorで 拒否された promise を返します。 -
name を指定してバケット名を検証する結果が failure である場合、
TypeErrorで 拒否された promise を返します。 -
p を新しい promiseとします。
-
次の手順をstorage bucket managerに キューに入れます:
-
r を、shelf、name、 および options を指定してバケットを開くを実行した結果とします。
-
r が failure である場合、
TypeErrorで p を拒否するために、ストレージタスクをキューに入れます。 -
それ以外の場合、r で p を 解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
shelf 上で、バケット name および任意の options を指定して バケットを開くには、 次の手順を実行します:
-
expires を undefined とします。
-
options["
expires"] が存在する場合:-
expires を options["
expires"] に設定します。 -
Unix epoch の expires ミリ秒後が、 関連する設定オブジェクトの現在の壁時計時刻より前である場合、failure を返します。
-
-
quota を undefined とします。
-
options["
quota"] が存在する場合:-
quota を options["
quota"] に設定します。 -
quota が 0 以下である場合、failure を返します。
-
-
persisted を false とします。
-
options["
persisted"] が true である場合:-
permission を、
"persistent-storage"を使用する許可を要求する結果とします。 -
permission が "
granted" である場合、 persisted を true に設定します。
-
-
bucket を、shelf と name を指定して バケットを取得または期限切れにするを実行した結果とします。
-
bucket が null である場合:
-
persisted が true である場合、bucket のバケットモード を
"persistent"に設定します。 -
bucket の有効期限を、Unix epoch の expires ミリ秒後に設定します。
-
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) メソッドの
手順は次のとおりです:
-
environment を this の関連する設定オブジェクトとします。
-
shelf を、environment を与えて ローカルストレージ棚を取得するを実行した結果とします。
-
shelf が failure である場合、
TypeErrorで 拒否された promise を返します。 -
p を新しい promiseとします。
-
name を指定してバケット名を検証する結果が failure である場合、
InvalidCharacterErrorで p を拒否します。 -
それ以外の場合、次の手順をstorage bucket managerに キューに入れます:
-
shelf と name を指定してバケットを 削除するを実行します。
-
p を解決するために、ストレージタスクをキューに入れます。
-
-
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に キューに入れます:
-
shelf のバケット マップ内の各 key について、次の手順を実行します:
-
bucket を、shelf と key を指定して バケットを取得または期限切れにするを実行した結果とします。
-
bucket が非 null である場合、key を keys に 付加します。
-
-
keys で p を 解決するために、ストレージタスクをキューに入れます。
-
-
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 フラグを持ち、これは boolean で、初期値は false です。 ストレージバケットが削除されたとき true に設定されます。
StorageBucket
は、バケットマップ内で
ストレージバケットに対応付けられるキーである、DOMString
オブジェクト name を持ちます。
2.1. 永続性
すでに バケットモードを定義しているStorage § 4.5 Storage buckets と統合します。
persist() メソッドの手順は次のとおりです:
-
bucket を this のストレージ バケットとします。
-
environment を this の関連する設定オブジェクトとします。
-
p を新しい promiseとします。
-
次の手順を並列に実行します:
-
bucket のremoved フラグが true である場合、
InvalidStateErrorで p を拒否するために、ストレージタスクをキューに入れます。 -
bucket のバケット モードが
"persistent"である場合、persisted を true とします。 -
それ以外の場合、
-
permission を、
"persistent-storage"および environment で現在の許可状態を取得する結果とします。 -
permission が "
granted" である場合、 bucket のバケットモードを"persistent"に設定し、 persisted を true に設定します。 -
それ以外の場合、persisted を false に設定します。
-
-
persisted で p を 解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
persisted() メソッドの手順は次のとおりです:
-
p を新しい promiseとします。
-
bucket を this のストレージ バケットとします。
-
それ以外の場合、これらの手順を並列に実行します:
-
bucket のremoved フラグが true である場合、
InvalidStateErrorで p を拒否するために、ストレージタスクをキューに入れます。 -
bucket のバケット モードが
"persistent"である場合は persistent を true とし、 それ以外の場合は false とします。 -
persistent で p を 解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
2.2. クォータ
ストレージバケットは、クォータ 値、すなわち number-or-null を持ち、初期値は null です。 バケットが使用できるバイト単位の使用量の上限を指定します。ユーザーエージェントは、実現されるストレージ空間をさらに制限してもよいです。
ストレージバケットの ストレージ使用量は、そのすべてのストレージボトルで 使用されるバイト数の実装定義の概算です。
estimate() メソッドの手順は次のとおりです:
-
environment を this の関連する設定オブジェクトとします。
-
shelf を、environment で ローカルストレージ棚を取得するを実行した結果とします。
-
shelf が failure である場合、
TypeErrorで 拒否された promise を返します。 -
bucket を this のストレージ バケットとします。
-
bucket のremoved フラグが true である場合、
InvalidStateErrorで 拒否された promise を返します。 -
p を新しい promiseとします。
-
それ以外の場合、次の手順を並列に実行します:
-
quota を shelf のストレージクォータとします。
-
bucket のクォータ 値が非 null である場合、quota をそれに設定します。
-
usage を bucket のストレージ使用量とします。
-
usageメンバーが usage で、quotaメンバーが quota である新しいStorageEstimate辞書を dictionary とします。 -
dictionary で p を 解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
2.3. 有効期限
ストレージバケットは、有効期限時刻を持ち、これは null または 壁時計上の時点であり、 初期値は null です。 バケットの寿命の上限を指定します。
バケットを取得または期限切れにする
アルゴリズムは、keys()
または open()
が呼び出されたとき、期限切れのバケットを削除します。
ユーザーエージェントは、ストレージ圧力に直面した場合、バケットモードが
"best-effort" であるバケットを、その有効期限時刻より前に消去してもよいです。
ユーザーエージェントは、バケットモードにかかわらず、
有効期限に達した場合、open()
または keys()
が呼び出される前に任意のバケットを削除してもよいです。
setExpires(expires) メソッドの手順は
次のとおりです:
-
p を新しい promiseとします。
-
bucket を this のストレージ バケットとします。
-
それ以外の場合、これらの手順を並列に実行します:
-
bucket のremoved フラグが true である場合、
InvalidStateErrorで p を拒否するために、ストレージタスクをキューに入れます。 -
それ以外の場合、bucket の有効期限時刻を、 Unix epoch の expires ミリ秒後に設定します。
-
p を解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
expires() メソッドの手順は次のとおりです:
-
p を新しい promiseとします。
-
bucket を this のストレージ バケットとします。
-
それ以外の場合、これらの手順を並列に実行します:
-
bucket のremoved フラグが true である場合、
InvalidStateErrorで p を拒否するために、ストレージタスクをキューに入れます。 -
それ以外の場合、expiration を bucket の有効期限時刻とします。
-
expiration で p を 解決するために、ストレージタスクをキューに入れます。
-
-
p を返します。
2.4. ストレージエンドポイントの使用
ストレージエンドポイント、すなわちストレージボトルには、以下で説明するようにアクセスできます。
2.4.1. Indexed Database の使用
IDBFactory
メソッドは storageKey ではなくストレージボトルマップを取る必要があります。
StorageBucket
は IDBFactory
オブジェクトを持ち、初期値は null です。indexedDB
取得子の手順は次のとおりです:
-
this の
indexedDBが null である場合、次の手順を実行します:-
bottle map を、bucket と
"indexedDB"で ローカルストレージボトルマップを取得する結果とします。 -
indexedDB を
IDBFactoryオブジェクトとします。 -
indexedDB のストレージボトルマップを bottle map に設定します。
2.4.2. CacheStorage の使用
StorageBucket
は CacheStorage
オブジェクトを持ち、初期値は null です。caches 取得子の
手順は次のとおりです:
-
this の
cachesが null である場合、次の手順を実行します:-
bottle map を、bucket と
"cacheStorage"で ローカルストレージボトル マップを取得する結果とします。 -
cacheStorage を
CacheStorageオブジェクトとします。 -
cacheStorage の関連する名前からキャッシュへのマップを bottle map に設定します。
2.4.3. Bucket File System の使用
[Storage] は、指定された(非デフォルトの)バケットのボトルマップを取得するための ヘルパーを定義する必要があります。
[FS] は、ボトルマップを指定して OPFS を取得するためのヘルパーを定義する必要があります。
getDirectory() の手順は次のとおりです:
-
map を、this のストレージ バケットと
"fileSystem"で ローカルストレージボトルマップを取得する結果とします。 -
map で
getDirectoryを実行した結果を返します。
2.5. Clear Site Data 統合
Clear Site Data § 3.1 The Clear-Site-Data HTTP Response Header Field を更新します。
- "
storage:bucket-name" -
型文字列が "
storage:" で始まる場合、:の後の残りの文字は、 特定の応答の URL のオリジン内の特定のストレージ バケットを参照するものとして扱われます。
以下の手順を Clear Site Data § 4.1 Parsing のアルゴリズムに追加します。
バケット付き Clear-Site-Data ヘッダーを解析するには、次の手順を実行します:
-
header 内の各 type について、次の手順を実行します:
-
type が
"storage:"で始まらない場合、これらの手順を中止します。 -
bucket name を、type の 8 から終端までの 符号単位部分文字列とします。
-
bucket name でバケット名を検証する結果が failure である場合、これらの手順を中止します。
-
(
"storage-bucket", bucket name) からなる タプルを types に付加します。
-
以下の手順を Clear Site Data § 4.2 Clear data for response のアルゴリズムに追加します。
bucket name を指定してバケット付きでデータを消去するには、 次の手順を実行します:
-
environment を this の関連する設定オブジェクトとします。
-
shelf を、environment を与えて ローカルストレージ棚を取得するを実行した結果とします。
-
types 内の各 type について、次の手順を実行します: