123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // Copyright 2015 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_CONTROLLER_IMPL_H_
- #define COMPONENTS_BACKGROUND_SYNC_BACKGROUND_SYNC_CONTROLLER_IMPL_H_
- #include "base/memory/raw_ptr.h"
- #include "content/public/browser/background_sync_controller.h"
- #include <stdint.h>
- #include <set>
- #include "base/time/time.h"
- #include "build/build_config.h"
- #include "components/background_sync/background_sync_delegate.h"
- #include "components/background_sync/background_sync_metrics.h"
- #include "components/content_settings/core/browser/content_settings_observer.h"
- #include "components/keep_alive_registry/keep_alive_types.h"
- #include "components/keep_alive_registry/scoped_keep_alive.h"
- #include "components/keyed_service/core/keyed_service.h"
- #include "content/public/browser/background_sync_registration.h"
- #include "content/public/browser/browser_thread.h"
- #include "third_party/blink/public/mojom/background_sync/background_sync.mojom-forward.h"
- namespace content {
- struct BackgroundSyncParameters;
- class BrowserContext;
- } // namespace content
- namespace url {
- class Origin;
- } // namespace url
- class BackgroundSyncControllerImpl : public content::BackgroundSyncController,
- public KeyedService,
- public content_settings::Observer {
- public:
- static const char kFieldTrialName[];
- static const char kDisabledParameterName[];
- static const char kKeepBrowserAwakeParameterName[];
- static const char kSkipPermissionsCheckParameterName[];
- static const char kMaxAttemptsParameterName[];
- static const char kRelyOnAndroidNetworkDetection[];
- static const char kMaxAttemptsWithNotificationPermissionParameterName[];
- static const char kInitialRetryParameterName[];
- static const char kRetryDelayFactorParameterName[];
- static const char kMinSyncRecoveryTimeName[];
- static const char kMaxSyncEventDurationName[];
- static const char kMinPeriodicSyncEventsInterval[];
- BackgroundSyncControllerImpl(
- content::BrowserContext* browser_context,
- std::unique_ptr<background_sync::BackgroundSyncDelegate> delegate);
- BackgroundSyncControllerImpl(const BackgroundSyncControllerImpl&) = delete;
- BackgroundSyncControllerImpl& operator=(const BackgroundSyncControllerImpl&) =
- delete;
- ~BackgroundSyncControllerImpl() override;
- // content::BackgroundSyncController overrides.
- void GetParameterOverrides(
- content::BackgroundSyncParameters* parameters) override;
- void NotifyOneShotBackgroundSyncRegistered(const url::Origin& origin,
- bool can_fire,
- bool is_reregistered) override;
- void NotifyPeriodicBackgroundSyncRegistered(const url::Origin& origin,
- int min_interval,
- bool is_reregistered) override;
- void NotifyOneShotBackgroundSyncCompleted(
- const url::Origin& origin,
- blink::ServiceWorkerStatusCode status_code,
- int num_attempts,
- int max_attempts) override;
- void NotifyPeriodicBackgroundSyncCompleted(
- const url::Origin& origin,
- blink::ServiceWorkerStatusCode status_code,
- int num_attempts,
- int max_attempts) override;
- void ScheduleBrowserWakeUpWithDelay(
- blink::mojom::BackgroundSyncType sync_type,
- base::TimeDelta delay) override;
- void CancelBrowserWakeup(blink::mojom::BackgroundSyncType sync_type) override;
- base::TimeDelta GetNextEventDelay(
- const content::BackgroundSyncRegistration& registration,
- content::BackgroundSyncParameters* parameters,
- base::TimeDelta time_till_soonest_scheduled_event_for_origin) override;
- std::unique_ptr<BackgroundSyncEventKeepAlive>
- CreateBackgroundSyncEventKeepAlive() override;
- void NoteSuspendedPeriodicSyncOrigins(
- std::set<url::Origin> suspended_origins) override;
- void NoteRegisteredPeriodicSyncOrigins(
- std::set<url::Origin> registered_origins) override;
- void AddToTrackedOrigins(const url::Origin& origin) override;
- void RemoveFromTrackedOrigins(const url::Origin& origin) override;
- // content_settings::Observer overrides.
- void OnContentSettingChanged(
- const ContentSettingsPattern& primary_pattern,
- const ContentSettingsPattern& secondary_pattern,
- ContentSettingsTypeSet content_type_set) override;
- bool IsOriginTracked(const url::Origin& origin) {
- return periodic_sync_origins_.find(origin) != periodic_sync_origins_.end();
- }
- private:
- // Once we've identified the minimum number of hours between each periodicsync
- // event for an origin, every delay calculated for the origin should be a
- // multiple of the same.
- base::TimeDelta SnapToMaxOriginFrequency(int64_t min_interval,
- int64_t min_gap_for_origin);
- // Returns an updated delay for a Periodic Background Sync registration -- one
- // that ensures the |min_gap_for_origin|.
- base::TimeDelta ApplyMinGapForOrigin(
- base::TimeDelta delay,
- base::TimeDelta time_till_next_scheduled_event_for_origin,
- base::TimeDelta min_gap_for_origin);
- bool IsContentSettingBlocked(const url::Origin& origin);
- // KeyedService implementation.
- void Shutdown() override;
- raw_ptr<content::BrowserContext> browser_context_;
- std::unique_ptr<background_sync::BackgroundSyncDelegate> delegate_;
- std::unique_ptr<BackgroundSyncMetrics> background_sync_metrics_;
- std::set<url::Origin> periodic_sync_origins_;
- };
- #endif // COMPONENTS_BACKGROUND_SYNC_BACKGROUND_SYNC_CONTROLLER_IMPL_H_
|