blob: 944250550f16be03ff09e11cc2e66c26f261b18c [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_BACKGROUND_SYNC_BACKGROUND_SYNC_DELEGATE_H_
#define COMPONENTS_BACKGROUND_SYNC_BACKGROUND_SYNC_DELEGATE_H_
#include <set>
#include "base/callback.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "content/public/browser/background_sync_controller.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/mojom/background_sync/background_sync.mojom-forward.h"
#include "url/origin.h"
class HostContentSettingsMap;
class GURL;
namespace background_sync {
// Allows the component embedder to override the behavior of Background Sync
// component.
class BackgroundSyncDelegate {
public:
virtual ~BackgroundSyncDelegate() = default;
#if !defined(OS_ANDROID)
// Keeps the browser and profile alive to allow a one-shot Background Sync
// registration to finish firing one sync event.
virtual std::unique_ptr<
content::BackgroundSyncController::BackgroundSyncEventKeepAlive>
CreateBackgroundSyncEventKeepAlive() = 0;
#endif
// Gets the source_ID to log the UKM event for, and calls |callback| with that
// source_id, or with absl::nullopt if UKM recording is not allowed.
virtual void GetUkmSourceId(
const url::Origin& origin,
base::OnceCallback<void(absl::optional<ukm::SourceId>)> callback) = 0;
// Handles browser shutdown.
virtual void Shutdown() = 0;
// Returns the content settings map.
virtual HostContentSettingsMap* GetHostContentSettingsMap() = 0;
// Returns true if the profile associated with the delegate is off-the-record.
virtual bool IsProfileOffTheRecord() = 0;
// Notes the origins for which Periodic Background Sync is suspended.
virtual void NoteSuspendedPeriodicSyncOrigins(
std::set<url::Origin> suspended_origins) = 0;
// Gets the site engagement penalty to add to the Periodic Background Sync
// interval for the origin corresponding to |url|.
// The site engagement penalty is inversely proportional to the engagement
// level. The lower the engagement levels with the site, the less often
// periodic sync events will be fired.
// Returns 0 if the engagement level is blink::mojom::EngagementLevel::NONE.
virtual int GetSiteEngagementPenalty(const GURL& url) = 0;
#if defined(OS_ANDROID)
// Schedules the browser to be woken up when the device is online to process
// registrations of type |sync| after a minimum delay |delay|.
virtual void ScheduleBrowserWakeUpWithDelay(
blink::mojom::BackgroundSyncType sync_type,
base::TimeDelta delay) = 0;
// Cancels browser wakeup for registrations of type |sync_type|.
virtual void CancelBrowserWakeup(
blink::mojom::BackgroundSyncType sync_type) = 0;
// Whether Background Sync should be disabled.
virtual bool ShouldDisableBackgroundSync() = 0;
// Whether to disable Android network detection for connectivity checks.
virtual bool ShouldDisableAndroidNetworkDetection() = 0;
#endif
};
} // namespace background_sync
#endif // COMPONENTS_BACKGROUND_SYNC_BACKGROUND_SYNC_DELEGATE_H_