// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_BACKGROUND_FETCH_STORAGE_DATABASE_TASK_H_ #define CONTENT_BROWSER_BACKGROUND_FETCH_STORAGE_DATABASE_TASK_H_ #include <memory> #include <set> #include <string> #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "content/browser/background_fetch/background_fetch.pb.h" #include "content/browser/background_fetch/background_fetch_registration_id.h" #include "mojo/public/cpp/bindings/associated_remote.h" #include "third_party/blink/public/common/service_worker/service_worker_status_code.h" #include "third_party/blink/public/mojom/background_fetch/background_fetch.mojom.h" #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h" namespace blink { class StorageKey; } // namespace blink namespace storage { class QuotaManagerProxy; } // namespace storage namespace content { class BackgroundFetchDataManager; class ChromeBlobStorageContext; class ServiceWorkerContextWrapper; // Note that this also handles non-error cases where the NONE is NONE. HandleBackgroundFetchErrorCallback; namespace background_fetch { class DatabaseTask; // A DatabaseTaskHost is the entity responsible for scheduling and running // DatabaseTasks, usually the BackgroundFetchDataManager. Note that a // DatabaseTask can be a DatabaseTaskHost, in order to run subtasks. class DatabaseTaskHost { … }; // A DatabaseTask is an asynchronous "transaction" that needs to read/write the // Service Worker Database. // // Only one DatabaseTask can run at once per StoragePartition, and no other code // reads/writes Background Fetch keys, so each task effectively has an exclusive // lock, except that core Service Worker code may delete all keys for a // ServiceWorkerRegistration or the entire database at any time. // // A DatabaseTask can also optionally run other DatabaseTasks as subtasks. This // allows us to re-use commonly used DatabaseTasks. Subtasks are started as soon // as they are added, and cannot outlive the parent DatabaseTask. class DatabaseTask : public DatabaseTaskHost { … }; } // namespace background_fetch } // namespace content #endif // CONTENT_BROWSER_BACKGROUND_FETCH_STORAGE_DATABASE_TASK_H_