1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/nearby_sharing/scheduling/nearby_share_scheduler_factory.h"
6 
7 #include <utility>
8 
9 #include "chrome/browser/nearby_sharing/scheduling/nearby_share_on_demand_scheduler.h"
10 #include "chrome/browser/nearby_sharing/scheduling/nearby_share_periodic_scheduler.h"
11 
12 // static
13 NearbyShareSchedulerFactory* NearbyShareSchedulerFactory::test_factory_ =
14     nullptr;
15 
16 // static
17 std::unique_ptr<NearbyShareScheduler>
CreateExpirationScheduler(NearbyShareExpirationScheduler::ExpirationTimeFunctor expiration_time_functor,bool retry_failures,bool require_connectivity,const std::string & pref_name,PrefService * pref_service,NearbyShareScheduler::OnRequestCallback on_request_callback,const base::Clock * clock)18 NearbyShareSchedulerFactory::CreateExpirationScheduler(
19     NearbyShareExpirationScheduler::ExpirationTimeFunctor
20         expiration_time_functor,
21     bool retry_failures,
22     bool require_connectivity,
23     const std::string& pref_name,
24     PrefService* pref_service,
25     NearbyShareScheduler::OnRequestCallback on_request_callback,
26     const base::Clock* clock) {
27   if (test_factory_) {
28     return test_factory_->CreateExpirationSchedulerInstance(
29         std::move(expiration_time_functor), retry_failures,
30         require_connectivity, pref_name, pref_service,
31         std::move(on_request_callback), clock);
32   }
33 
34   return std::make_unique<NearbyShareExpirationScheduler>(
35       std::move(expiration_time_functor), retry_failures, require_connectivity,
36       pref_name, pref_service, std::move(on_request_callback), clock);
37 }
38 
39 // static
40 std::unique_ptr<NearbyShareScheduler>
CreateOnDemandScheduler(bool retry_failures,bool require_connectivity,const std::string & pref_name,PrefService * pref_service,NearbyShareScheduler::OnRequestCallback callback,const base::Clock * clock)41 NearbyShareSchedulerFactory::CreateOnDemandScheduler(
42     bool retry_failures,
43     bool require_connectivity,
44     const std::string& pref_name,
45     PrefService* pref_service,
46     NearbyShareScheduler::OnRequestCallback callback,
47     const base::Clock* clock) {
48   if (test_factory_) {
49     return test_factory_->CreateOnDemandSchedulerInstance(
50         retry_failures, require_connectivity, pref_name, pref_service,
51         std::move(callback), clock);
52   }
53 
54   return std::make_unique<NearbyShareOnDemandScheduler>(
55       retry_failures, require_connectivity, pref_name, pref_service,
56       std::move(callback), clock);
57 }
58 
59 // static
60 std::unique_ptr<NearbyShareScheduler>
CreatePeriodicScheduler(base::TimeDelta request_period,bool retry_failures,bool require_connectivity,const std::string & pref_name,PrefService * pref_service,NearbyShareScheduler::OnRequestCallback callback,const base::Clock * clock)61 NearbyShareSchedulerFactory::CreatePeriodicScheduler(
62     base::TimeDelta request_period,
63     bool retry_failures,
64     bool require_connectivity,
65     const std::string& pref_name,
66     PrefService* pref_service,
67     NearbyShareScheduler::OnRequestCallback callback,
68     const base::Clock* clock) {
69   if (test_factory_) {
70     return test_factory_->CreatePeriodicSchedulerInstance(
71         request_period, retry_failures, require_connectivity, pref_name,
72         pref_service, std::move(callback), clock);
73   }
74 
75   return std::make_unique<NearbySharePeriodicScheduler>(
76       request_period, retry_failures, require_connectivity, pref_name,
77       pref_service, std::move(callback), clock);
78 }
79 
80 // static
SetFactoryForTesting(NearbyShareSchedulerFactory * test_factory)81 void NearbyShareSchedulerFactory::SetFactoryForTesting(
82     NearbyShareSchedulerFactory* test_factory) {
83   test_factory_ = test_factory;
84 }
85 
86 NearbyShareSchedulerFactory::~NearbyShareSchedulerFactory() = default;
87