@@ -165,6 +165,15 @@ void NativeIOManager::OnHostReceiverDisconnect(NativeIOHost* host) {
165165 MaybeDeleteHost (host);
166166}
167167
168+ void NativeIOManager::DidDeleteHostData (NativeIOHost* host,
169+ base::PassKey<NativeIOHost>) {
170+ DCHECK_CALLED_ON_VALID_SEQUENCE (sequence_checker_);
171+ DCHECK (host != nullptr );
172+ DCHECK (!host->delete_all_data_in_progress ());
173+
174+ MaybeDeleteHost (host);
175+ }
176+
168177void NativeIOManager::MaybeDeleteHost (NativeIOHost* host) {
169178 DCHECK_CALLED_ON_VALID_SEQUENCE (sequence_checker_);
170179 DCHECK (host != nullptr );
@@ -177,18 +186,6 @@ void NativeIOManager::MaybeDeleteHost(NativeIOHost* host) {
177186 hosts_.erase (host->origin ());
178187}
179188
180- void NativeIOManager::OnDeleteOriginDataCompleted (
181- storage::QuotaClient::DeleteOriginDataCallback callback,
182- base::File::Error result,
183- NativeIOHost* host) {
184- DCHECK_CALLED_ON_VALID_SEQUENCE (sequence_checker_);
185- MaybeDeleteHost (host);
186- blink::mojom::QuotaStatusCode quota_result =
187- result == base::File::FILE_OK ? blink::mojom::QuotaStatusCode::kOk
188- : blink::mojom::QuotaStatusCode::kUnknown ;
189- std::move (callback).Run (quota_result);
190- }
191-
192189void NativeIOManager::DeleteOriginData (
193190 const url::Origin& origin,
194191 storage::QuotaClient::DeleteOriginDataCallback callback) {
@@ -224,12 +221,16 @@ void NativeIOManager::DeleteOriginData(
224221 DCHECK (insert_succeeded);
225222 }
226223
227- // base::Unretained is safe here because this NativeIOManager owns the
228- // NativeIOHost. So, the unretained NativeIOManager is guaranteed to outlive
229- // the NativeIOHost and the closure that it uses.
230- it->second ->DeleteAllData (
231- base::BindOnce (&NativeIOManager::OnDeleteOriginDataCompleted,
232- base::Unretained (this ), std::move (callback)));
224+ // DeleteAllData() will call DidDeleteHostData() asynchronously, which may
225+ // delete this entry from `hosts_`.
226+ it->second ->DeleteAllData (base::BindOnce (
227+ [](storage::mojom::QuotaClient::DeleteOriginDataCallback callback,
228+ base::File::Error error) {
229+ std::move (callback).Run ((error == base::File::FILE_OK)
230+ ? blink::mojom::QuotaStatusCode::kOk
231+ : blink::mojom::QuotaStatusCode::kUnknown );
232+ },
233+ std::move (callback)));
233234}
234235
235236void NativeIOManager::GetOriginsForType (
0 commit comments