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 {
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() {
DCHECK(can_invoke_request_callback_);
NotifyOfRequest();
}
......
......@@ -43,6 +43,7 @@ class FakeNearbyShareScheduler : public NearbyShareScheduler {
void OnStart() override;
void OnStop() override;
bool can_invoke_request_callback_ = false;
size_t num_immediate_requests_ = 0;
std::vector<bool> handled_results_;
base::Optional<base::Time> last_success_time_;
......
......@@ -9,6 +9,9 @@
FakeNearbyShareSchedulerFactory::ExpirationInstance::ExpirationInstance() =
default;
FakeNearbyShareSchedulerFactory::ExpirationInstance::ExpirationInstance(
ExpirationInstance&&) = default;
FakeNearbyShareSchedulerFactory::ExpirationInstance::~ExpirationInstance() =
default;
......@@ -37,6 +40,8 @@ FakeNearbyShareSchedulerFactory::CreateExpirationSchedulerInstance(
std::move(on_request_callback));
instance.fake_scheduler = scheduler.get();
pref_name_to_expiration_instance_.emplace(pref_name, std::move(instance));
return scheduler;
}
......@@ -58,7 +63,7 @@ FakeNearbyShareSchedulerFactory::CreateOnDemandSchedulerInstance(
std::make_unique<FakeNearbyShareScheduler>(std::move(callback));
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;
}
......@@ -83,7 +88,7 @@ FakeNearbyShareSchedulerFactory::CreatePeriodicSchedulerInstance(
std::make_unique<FakeNearbyShareScheduler>(std::move(callback));
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;
}
......@@ -5,10 +5,10 @@
#ifndef 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 <string>
#include "base/containers/flat_map.h"
#include "base/optional.h"
#include "base/time/time.h"
#include "chrome/browser/nearby_sharing/scheduling/fake_nearby_share_scheduler.h"
......@@ -27,6 +27,7 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
public:
struct ExpirationInstance {
ExpirationInstance();
ExpirationInstance(ExpirationInstance&&);
~ExpirationInstance();
FakeNearbyShareScheduler* fake_scheduler = nullptr;
......@@ -58,17 +59,17 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
FakeNearbyShareSchedulerFactory();
~FakeNearbyShareSchedulerFactory() override;
const base::flat_map<std::string, ExpirationInstance>&
const std::map<std::string, ExpirationInstance>&
pref_name_to_expiration_instance() const {
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 {
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 {
return pref_name_to_periodic_instance_;
}
......@@ -100,11 +101,9 @@ class FakeNearbyShareSchedulerFactory : public NearbyShareSchedulerFactory {
NearbyShareScheduler::OnRequestCallback callback,
const base::Clock* clock) override;
base::flat_map<std::string, ExpirationInstance>
pref_name_to_expiration_instance_;
base::flat_map<std::string, OnDemandInstance>
pref_name_to_on_demand_instance_;
base::flat_map<std::string, PeriodicInstance> pref_name_to_periodic_instance_;
std::map<std::string, ExpirationInstance> pref_name_to_expiration_instance_;
std::map<std::string, OnDemandInstance> pref_name_to_on_demand_instance_;
std::map<std::string, PeriodicInstance> pref_name_to_periodic_instance_;
};
#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