#ifndef CONTENT_TEST_TEST_BACKGROUND_SYNC_MANAGER_H_
#define CONTENT_TEST_TEST_BACKGROUND_SYNC_MANAGER_H_
#include <stdint.h>
#include <memory>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/ref_counted.h"
#include "base/time/time.h"
#include "content/browser/background_sync/background_sync_manager.h"
#include "content/browser/service_worker/service_worker_registry.h"
namespace url {
class Origin;
}
namespace content {
struct BackgroundSyncParameters;
class DevToolsBackgroundServicesContextImpl;
class ServiceWorkerContextWrapper;
class ServiceWorkerVersion;
class TestBackgroundSyncManager : public BackgroundSyncManager {
public:
using DispatchSyncCallback =
base::RepeatingCallback<void(scoped_refptr<ServiceWorkerVersion>,
ServiceWorkerVersion::StatusCallback)>;
TestBackgroundSyncManager(
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context,
scoped_refptr<DevToolsBackgroundServicesContextImpl> devtools_context);
TestBackgroundSyncManager(const TestBackgroundSyncManager&) = delete;
TestBackgroundSyncManager& operator=(const TestBackgroundSyncManager&) =
delete;
~TestBackgroundSyncManager() override;
void DoInit();
void ResumeBackendOperation();
void ClearDelayedTask();
void set_corrupt_backend(bool corrupt_backend) {
corrupt_backend_ = corrupt_backend;
}
void set_delay_backend(bool delay_backend) { delay_backend_ = delay_backend; }
void set_dispatch_sync_callback(const DispatchSyncCallback& callback) {
dispatch_sync_callback_ = callback;
}
void set_dispatch_periodic_sync_callback(
const DispatchSyncCallback& callback) {
dispatch_periodic_sync_callback_ = callback;
}
void set_has_main_frame_window_client(bool value) {
has_main_frame_window_client_ = value;
}
bool last_chance() const { return last_chance_; }
const BackgroundSyncParameters* background_sync_parameters() const {
return parameters_.get();
}
void DispatchPeriodicSyncEvent(
const std::string& tag,
scoped_refptr<ServiceWorkerVersion> active_version,
ServiceWorkerVersion::StatusCallback callback) override;
base::TimeDelta GetSoonestWakeupDelta(
blink::mojom::BackgroundSyncType sync_type,
base::Time last_browser_wakeup_for_periodic_sync) override;
void FireReadyEvents(blink::mojom::BackgroundSyncType sync_type,
bool reschedule,
base::OnceClosure callback,
std::unique_ptr<BackgroundSyncEventKeepAlive> keepalive =
nullptr) override;
void SuspendFiringEvents() { dont_fire_sync_events_ = true; }
void ResumeFiringEvents() { dont_fire_sync_events_ = false; }
protected:
void StoreDataInBackend(
int64_t sw_registration_id,
const url::Origin& origin,
const std::string& key,
const std::string& data,
ServiceWorkerRegistry::StatusCallback callback) override;
void GetDataFromBackend(
const std::string& key,
ServiceWorkerRegistry::GetUserDataForAllRegistrationsCallback callback)
override;
void DispatchSyncEvent(
const std::string& tag,
scoped_refptr<ServiceWorkerVersion> active_version,
bool last_chance,
ServiceWorkerVersion::StatusCallback callback) override;
void HasMainFrameWindowClient(const blink::StorageKey& key,
BoolCallback callback) override;
private:
void StoreDataInBackendContinue(
int64_t sw_registration_id,
const url::Origin& origin,
const std::string& key,
const std::string& data,
ServiceWorkerRegistry::StatusCallback callback);
void GetDataFromBackendContinue(
const std::string& key,
ServiceWorkerRegistry::GetUserDataForAllRegistrationsCallback callback);
bool corrupt_backend_ = false;
bool delay_backend_ = false;
bool has_main_frame_window_client_ = true;
bool last_chance_ = false;
bool dont_fire_sync_events_ = false;
base::OnceClosure continuation_;
DispatchSyncCallback dispatch_sync_callback_;
DispatchSyncCallback dispatch_periodic_sync_callback_;
base::TimeDelta soonest_one_shot_sync_wakeup_delta_;
base::TimeDelta soonest_periodic_sync_wakeup_delta_;
};
}
#endif