1. StorageBucketManager
인터페이스
[SecureContext ]interface mixin { [NavigatorStorageBuckets SameObject ]readonly attribute StorageBucketManager storageBuckets ; };Navigator includes NavigatorStorageBuckets ;WorkerNavigator includes NavigatorStorageBuckets ;
각 환경 설정 객체는 연관된 StorageBucketManager
객체를 가진다.
storageBuckets getter
단계는 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에 큐에 넣는다:
-
r를 shelf, name, options로 버킷 열기를 실행한 결과로 둔다.
-
r가 failure이면,
TypeError로 p를 reject하기 위해 스토리지 작업을 큐에 넣는다. -
그렇지 않으면, r로 p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
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이면 다음을 수행한다: -
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이 주어졌을 때 버킷 가져오기 또는 만료시키기를 하려면, 다음 단계를 실행한다:
-
shelf의 버킷 맵[name]이 존재하면 이를 bucket으로 둔다. 그렇지 않으면 null을 반환한다.
-
bucket의 만료 시간이 null이 아니고 관련 설정 객체의 현재 벽시계 시간보다 전이면 다음을 수행한다:
-
bucket의 removed를 true로 설정한다.
-
null을 반환한다.
-
-
bucket을 반환한다.
1.2. 버킷 삭제
delete(name) 메서드
단계는 다음과 같다:
-
shelf를 environment가 주어졌을 때 로컬 스토리지 선반 획득을 실행한 결과로 둔다.
-
shelf가 failure이면,
TypeError로 거부된 promise를 반환한다. -
p를 새 promise로 둔다.
-
name으로 버킷 이름 검증을 수행한 결과가 failure이면,
InvalidCharacterError로 p를 reject한다. -
그렇지 않으면, 다음 단계를 storage bucket manager에 큐에 넣는다:
-
shelf와 name으로 버킷 제거를 실행한다.
-
p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
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를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
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 스토리지 버킷과 병합한다.
persist() 메서드 단계는 다음과 같다:
-
p를 새 promise로 둔다.
-
다음 단계를 병렬로 실행한다:
-
bucket의 removed 플래그가 true이면,
InvalidStateError로 p를 reject하기 위해 스토리지 작업을 큐에 넣는다. -
bucket의 버킷 모드가
"persistent"이면 persisted를 true로 둔다. -
그렇지 않으면,
-
permission을
"persistent-storage"와 environment로 현재 권한 상태 가져오기를 수행한 결과로 둔다. -
permission이 "
granted"이면, bucket의 버킷 모드를"persistent"로 설정하고 persisted를 true로 설정한다. -
그렇지 않으면, persisted를 false로 설정한다.
-
-
persisted로 p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
p를 반환한다.
persisted() 메서드 단계는 다음과 같다:
-
p를 새 promise로 둔다.
-
그렇지 않으면, 다음 단계를 병렬로 실행한다:
-
bucket의 removed 플래그가 true이면,
InvalidStateError로 p를 reject하기 위해 스토리지 작업을 큐에 넣는다. -
bucket의 버킷 모드가
"persistent"이면 persistent를 true로, 그렇지 않으면 false로 둔다. -
persistent로 p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
p를 반환한다.
2.2. 할당량
스토리지 버킷은 할당량 값을 가지며, 이는 number-or-null이고 초기값은 null이다. 버킷이 사용할 수 있는 사용량의 상한을 바이트 단위로 지정한다. 사용자 에이전트는 실현되는 스토리지 공간을 추가로 제한할 수 있다.
스토리지 버킷의 스토리지 사용량은 모든 스토리지 병이 사용하는 바이트 수에 대한 구현 정의의 대략적인 추정치이다.
estimate() 메서드 단계는 다음과 같다:
-
shelf를 environment로 로컬 스토리지 선반 획득을 실행한 결과로 둔다.
-
shelf가 failure이면,
TypeError로 거부된 promise를 반환한다. -
bucket의 removed 플래그가 true이면,
InvalidStateError로 거부된 promise를 반환한다. -
p를 새 promise로 둔다.
-
그렇지 않으면, 다음 단계를 병렬로 실행한다:
-
quota를 shelf에 대한 스토리지 할당량으로 둔다.
-
bucket의 할당량 값이 null이 아니면, quota를 그 값으로 설정한다.
-
usage를 bucket에 대한 스토리지 사용량으로 둔다.
-
dictionary를
StorageEstimatedictionary로 새로 만들며, 그usage멤버는 usage이고quota멤버는 quota이다. -
dictionary로 p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
p를 반환한다.
2.3. 만료
스토리지 버킷은 만료 시간을 가지며, 이는 null이거나 벽시계상의 순간이고 초기값은 null이다. 버킷 수명의 상한을 지정한다.
버킷 가져오기 또는
만료시키기 알고리즘은 keys()
또는 open()이
호출될 때 만료된 버킷을 제거한다.
사용자 에이전트는 스토리지 압박에 직면하면, 버킷 모드가
"best-effort"인 버킷을 그 만료 시간 전에 제거할 수 있다.
사용자 에이전트는 만료에 도달했을 때 버킷 모드와 관계없이
open()
또는 keys()가
호출되기 전에 어떤 버킷이든 제거할 수 있다
setExpires(expires) 메서드 단계는
다음과 같다:
-
p를 새 promise로 둔다.
-
그렇지 않으면, 다음 단계를 병렬로 실행한다:
-
bucket의 removed 플래그가 true이면,
InvalidStateError로 p를 reject하기 위해 스토리지 작업을 큐에 넣는다. -
그렇지 않으면, bucket의 만료 시간을 Unix epoch 이후 expires 밀리초로 설정한다.
-
p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
p를 반환한다.
expires() 메서드 단계는 다음과 같다:
-
p를 새 promise로 둔다.
-
그렇지 않으면, 다음 단계를 병렬로 실행한다:
-
bucket의 removed 플래그가 true이면,
InvalidStateError로 p를 reject하기 위해 스토리지 작업을 큐에 넣는다. -
그렇지 않으면, expiration을 bucket의 만료 시간으로 둔다.
-
expiration으로 p를 resolve하기 위해 스토리지 작업을 큐에 넣는다.
-
-
p를 반환한다.
2.4. 스토리지 엔드포인트 사용
스토리지 엔드포인트, 즉 스토리지 병은 아래에 설명된 대로 접근할 수 있다.
2.4.1. Indexed Database 사용
IDBFactory
메서드는 storageKey가 아니라 storage bottle map을 받도록 해야 한다.
StorageBucket은
IDBFactory
객체를 가지며, 초기값은 null이다. indexedDB
getter 단계는 다음과 같다:
2.4.2. CacheStorage 사용
StorageBucket은
CacheStorage
객체를 가지며, 초기값은 null이다. caches getter
단계는 다음과 같다:
-
this의
caches가 null이면, 다음 단계를 실행한다:-
bottle map을 bucket과
"cacheStorage"로 로컬 스토리지 병 맵 획득을 수행한 결과로 둔다. -
cacheStorage를
CacheStorage객체로 둔다. -
cacheStorage에 대한 관련 이름-캐시 맵을 bottle map으로 설정한다.
2.4.3. 버킷 파일 시스템 사용
[Storage]는 주어진 (기본이 아닌) 버킷에 대한 bottle map을 검색하는 도우미를 정의해야 한다.
[FS]는 bottle map이 주어졌을 때 OPFS를 검색하는 도우미를 정의해야 한다.
getDirectory() 단계는 다음과 같다:
-
map을 this의 스토리지 버킷과
"fileSystem"으로 로컬 스토리지 병 맵 획득을 수행한 결과로 둔다. -
map으로
getDirectory를 수행한 결과를 반환한다.
2.5. Clear Site Data 통합
Clear Site Data § 3.1 Clear-Site-Data HTTP 응답 헤더 필드를 갱신한다.
- "
storage:bucket-name" -
타입 문자열이 "
storage:"로 시작하면,:뒤의 나머지 문자는 특정 응답 URL의 출처에 있는 특정 스토리지 버킷을 참조하는 것으로 취급된다.
아래 단계를 Clear Site Data § 4.1 구문 분석의 알고리즘에 추가한다.
버킷이 있는 Clear-Site-Data 헤더 구문 분석을 하려면, 다음 단계를 실행한다:
-
header의 각 type에 대해, 다음 단계를 실행한다:
-
type이
"storage:"로 시작하지 않으면, 이 단계를 중단한다. -
bucket name을 type의 8부터 끝까지의 코드 단위 부분 문자열로 둔다.
-
bucket name으로 버킷 이름 검증을 수행한 결과가 failure이면, 이 단계를 중단한다.
-
(
"storage-bucket", bucket name)으로 구성된 튜플을 types에 추가한다
-
아래 단계를 Clear Site Data § 4.2 응답에 대한 데이터 지우기의 알고리즘에 추가한다.
bucket name이 주어졌을 때 버킷이 있는 데이터 지우기를 하려면, 다음 단계를 실행한다:
-
shelf를 environment가 주어졌을 때 로컬 스토리지 선반 획득을 실행한 결과로 둔다.
-
types의 각 type에 대해, 다음 단계를 실행한다: