// Copyright 2020 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_LOCAL_DISCOVERY_FAKE_SERVICE_DISCOVERY_DEVICE_LISTER_H_ #define CHROME_BROWSER_LOCAL_DISCOVERY_FAKE_SERVICE_DISCOVERY_DEVICE_LISTER_H_ #include <set> #include <string> #include <vector> #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/task/task_runner.h" #include "chrome/browser/local_discovery/service_discovery_client.h" #include "chrome/browser/local_discovery/service_discovery_device_lister.h" namespace local_discovery { // This is a thin wrapper around Delegate that defers callbacks until the actual // delegate is initialized and then calls all deferred callbacks. Once the // actual delegate is initialized, this just becomes a simple passthrough. class DeferringDelegate : public ServiceDiscoveryDeviceLister::Delegate { … }; // A fake ServiceDiscoveryDeviceLister. This provides an implementation of // ServiceDiscoveryDeviceLister that tests can use to trigger the addition and // removal of devices. // // There's some hackery here to handle constructor order constraints. There's a // circular dependency in that device lister delegate implementations need their // device lister set to be supplied at construction time, and each device lister // needs to know about its delegate for callbacks. Thus, a DeferringDelegate is // used to queue callbacks triggered before the class has the delegate // reference, and those queued callbacks are invoked when the delegate is set. class FakeServiceDiscoveryDeviceLister final : public ServiceDiscoveryDeviceLister { … }; } // namespace local_discovery #endif // CHROME_BROWSER_LOCAL_DISCOVERY_FAKE_SERVICE_DISCOVERY_DEVICE_LISTER_H_