Commit 069bd649 authored by Josh Nohle's avatar Josh Nohle Committed by Commit Bot

[Nearby] Fake scheduler: Fix factory instances; enforce start/stop

Support move semantics needed for expiration scheduler instances in
fake scheduler factory. Also, only allow fake scheduler callback to be
invoked if scheduler is running.

Note: I switch to std::map because I couldn't get base::flat_map to
cooperate with move semantics.

Bug: b/154864199
Change-Id: Ieef6474e9b1c8733dcb741a34f0ce3981b25fe46
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2309799
Commit-Queue: Josh Nohle <nohle@chromium.org>
Reviewed-by: default avatarJames Vecore <vecore@google.com>
Cr-Commit-Position: refs/heads/master@{#790562}
parent 7414a0ed
...@@ -37,11 +37,16 @@ size_t FakeNearbyShareScheduler::GetNumConsecutiveFailures() const { ...@@ -37,11 +37,16 @@ size_t FakeNearbyShareScheduler::GetNumConsecutiveFailures() const {
return num_consecutive_failures_; return num_consecutive_failures_;
} }
void FakeNearbyShareScheduler::OnStart() {} void FakeNearbyShareScheduler::OnStart() {
can_invoke_request_callback_ = true;
}
void FakeNearbyShareScheduler::OnStop() {} void FakeNearbyShareScheduler::OnStop() {
can_invoke_request_callback_ = false;
}
void FakeNearbyShareScheduler::InvokeRequestCallback() { void FakeNearbyShareScheduler::InvokeRequestCallback() {
DCHECK(can_invoke_request_callback_);
NotifyOfRequest(); NotifyOfRequest();
} }
......
...@@ -43,6 +43,7 @@ class FakeNearbyShareScheduler : public NearbyShareScheduler { ...@@ -43,6 +43,7 @@ class FakeNearbyShareScheduler : public NearbyShareScheduler {
void OnStart() override; void OnStart() override;
void OnStop() override; void OnStop() override;
bool can_invoke_request_callback_ = false;
size_t num_immediate_requests_ = 0; size_t num_immediate_requests_ = 0;
std::vector<bool> handled_results_; std::vector<bool> handled_results_;
base::Optional<base::Time> last_success_time_; base::Optional<base::Time> last_success_time_;
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
FakeNearbyShareSchedulerFactory::ExpirationInstance::ExpirationInstance() = FakeNearbyShareSchedulerFactory::ExpirationInstance::ExpirationInstance() =
default; default;
FakeNearbyShareSchedulerFactory::ExpirationInstance::ExpirationInstance(
ExpirationInstance&&) = default;
FakeNearbyShareSchedulerFactory::ExpirationInstance::~ExpirationInstance() = FakeNearbyShareSchedulerFactory::ExpirationInstance::~ExpirationInstance() =
default; default;
...@@ -37,6 +40,8 @@ FakeNearbyShareSchedulerFactory::CreateExpirationSchedulerInstance( ...@@ -37,6 +40,8 @@ FakeNearbyShareSchedulerFactory::CreateExpirationSchedulerInstance(
std::move(on_request_callback)); std::move(on_request_callback));
instance.fake_scheduler = scheduler.get(); instance.fake_scheduler = scheduler.get();
pref_name_to_expiration_instance_.emplace(pref_name, std::move(instance));
return scheduler; return scheduler;
} }
...@@ -58,7 +63,7 @@ FakeNearbyShareSchedulerFactory::CreateOnDemandSchedulerInstance( ...@@ -58,7 +63,7 @@ FakeNearbyShareSchedulerFactory::CreateOnDemandSchedulerInstance(
std::make_unique<FakeNearbyShareScheduler>(std::move(callback)); std::make_unique<FakeNearbyShareScheduler>(std::move(callback));
instance.fake_scheduler = scheduler.get(); instance.fake_scheduler = scheduler.get();
pref_name_to_on_demand_instance_.insert_or_assign(pref_name, instance); pref_name_to_on_demand_instance_.emplace(pref_name, instance);
return scheduler; return scheduler;
} }
...@@ -83,7 +88,7 @@ FakeNearbyShareSchedulerFactory::CreatePeriodicSchedulerInstance( ...@@ -83,7 +88,7 @@ FakeNearbyShareSchedulerFactory::CreatePeriodicSchedulerInstance(
std::make_unique<FakeNearbyShareScheduler>(std::move(callback)); std::make_unique<FakeNearbyShareScheduler>(std::move(callback));
instance.fake_scheduler = scheduler.get(); instance.fake_scheduler = scheduler.get();
pref_name_to_periodic_instance_.insert_or_assign(pref_name, instance); pref_name_to_periodic_instance_.emplace(pref_name, instance);
return scheduler; return scheduler;
} }
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
#ifndef CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_ #ifndef CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_
#define CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_ #define CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_
#include <map>
#include <memory> #include <memory>
#include <string> #include <string>
#include "base/containers/flat_map.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/nearby_sharing/scheduling/fake_nearby_share_scheduler.h" #include "chrome/browser/nearby_sharing/scheduling/fake_nearby_share_scheduler.h"
...@@ -27,6 +27,7 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory { ...@@ -27,6 +27,7 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
public: public:
struct ExpirationInstance { struct ExpirationInstance {
ExpirationInstance(); ExpirationInstance();
ExpirationInstance(ExpirationInstance&&);
~ExpirationInstance(); ~ExpirationInstance();
FakeNearbyShareScheduler* fake_scheduler = nullptr; FakeNearbyShareScheduler* fake_scheduler = nullptr;
...@@ -58,17 +59,17 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory { ...@@ -58,17 +59,17 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
FakeNearbyShareSchedulerFactory(); FakeNearbyShareSchedulerFactory();
~FakeNearbyShareSchedulerFactory() override; ~FakeNearbyShareSchedulerFactory() override;
const base::flat_map<std::string, ExpirationInstance>& const std::map<std::string, ExpirationInstance>&
pref_name_to_expiration_instance() const { pref_name_to_expiration_instance() const {
return pref_name_to_expiration_instance_; return pref_name_to_expiration_instance_;
} }
const base::flat_map<std::string, OnDemandInstance>& const std::map<std::string, OnDemandInstance>&
pref_name_to_on_demand_instance() const { pref_name_to_on_demand_instance() const {
return pref_name_to_on_demand_instance_; return pref_name_to_on_demand_instance_;
} }
const base::flat_map<std::string, PeriodicInstance>& const std::map<std::string, PeriodicInstance>&
pref_name_to_periodic_instance() const { pref_name_to_periodic_instance() const {
return pref_name_to_periodic_instance_; return pref_name_to_periodic_instance_;
} }
...@@ -100,11 +101,9 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory { ...@@ -100,11 +101,9 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
NearbyShareScheduler::OnRequestCallback callback, NearbyShareScheduler::OnRequestCallback callback,
const base::Clock* clock) override; const base::Clock* clock) override;
base::flat_map<std::string, ExpirationInstance> std::map<std::string, ExpirationInstance> pref_name_to_expiration_instance_;
pref_name_to_expiration_instance_; std::map<std::string, OnDemandInstance> pref_name_to_on_demand_instance_;
base::flat_map<std::string, OnDemandInstance> std::map<std::string, PeriodicInstance> pref_name_to_periodic_instance_;
pref_name_to_on_demand_instance_;
base::flat_map<std::string, PeriodicInstance> pref_name_to_periodic_instance_;
}; };
#endif // CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_ #endif // CHROME_BROWSER_NEARBY_SHARING_SCHEDULING_FAKE_NEARBY_SHARE_SCHEDULER_FACTORY_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment