media_router_base.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2015 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. #ifndef COMPONENTS_MEDIA_ROUTER_BROWSER_MEDIA_ROUTER_BASE_H_
  5. #define COMPONENTS_MEDIA_ROUTER_BROWSER_MEDIA_ROUTER_BASE_H_
  6. #include <memory>
  7. #include <string>
  8. #include <unordered_map>
  9. #include "base/callback_list.h"
  10. #include "base/gtest_prod_util.h"
  11. #include "components/media_router/browser/media_router.h"
  12. #include "components/media_router/common/media_route.h"
  13. #include "content/public/browser/presentation_service_delegate.h"
  14. #include "third_party/blink/public/mojom/presentation/presentation.mojom.h"
  15. namespace media_router {
  16. class MediaRouterBase : public MediaRouter {
  17. public:
  18. MediaRouterBase(const MediaRouterBase&) = delete;
  19. MediaRouterBase(MediaRouterBase&&) = delete;
  20. MediaRouterBase& operator=(const MediaRouterBase&) = delete;
  21. MediaRouterBase& operator=(MediaRouterBase&&) = delete;
  22. ~MediaRouterBase() override;
  23. // MediaRouter:
  24. base::CallbackListSubscription AddPresentationConnectionStateChangedCallback(
  25. const MediaRoute::Id& route_id,
  26. const content::PresentationConnectionStateChangedCallback& callback)
  27. override;
  28. protected:
  29. FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
  30. PresentationConnectionStateChangedCallback);
  31. FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
  32. PresentationConnectionStateChangedCallbackRemoved);
  33. FRIEND_TEST_ALL_PREFIXES(MediaRouterBaseTest, CreatePresentationIds);
  34. FRIEND_TEST_ALL_PREFIXES(MediaRouterBaseTest, NotifyCallbacks);
  35. FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest,
  36. ListenForConnectionStateChange);
  37. FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest, GetMediaRoutes);
  38. MediaRouterBase();
  39. // Generates a unique presentation ID.
  40. static std::string CreatePresentationId();
  41. void NotifyPresentationConnectionStateChange(
  42. const MediaRoute::Id& route_id,
  43. blink::mojom::PresentationConnectionState state);
  44. void NotifyPresentationConnectionClose(
  45. const MediaRoute::Id& route_id,
  46. blink::mojom::PresentationConnectionCloseReason reason,
  47. const std::string& message);
  48. using PresentationConnectionStateChangedCallbacks =
  49. base::RepeatingCallbackList<void(
  50. const content::PresentationConnectionStateChangeInfo&)>;
  51. std::unordered_map<
  52. MediaRoute::Id,
  53. std::unique_ptr<PresentationConnectionStateChangedCallbacks>>
  54. presentation_connection_state_callbacks_;
  55. private:
  56. friend class MediaRouterBaseTest;
  57. friend class MediaRouterMojoTest;
  58. // Called when a PresentationConnectionStateChangedCallback associated with
  59. // |route_id| is removed from |presentation_connection_state_callbacks_|.
  60. void OnPresentationConnectionStateCallbackRemoved(
  61. const MediaRoute::Id& route_id);
  62. };
  63. } // namespace media_router
  64. #endif // COMPONENTS_MEDIA_ROUTER_BROWSER_MEDIA_ROUTER_BASE_H_