1 // Copyright (c) 2020 The Chromium Embedded Framework Authors. All rights 2 // reserved. Use of this source code is governed by a BSD-style license that 3 // can be found in the LICENSE file. 4 5 #ifndef CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_ 6 #define CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_ 7 #pragma once 8 9 #include "include/cef_media_router.h" 10 #include "libcef/browser/browser_context.h" 11 12 #include "components/media_router/common/mojom/media_router.mojom.h" 13 14 class CefRegistrationImpl; 15 16 // Implementation of the CefMediaRouter interface. May be created on any thread. 17 class CefMediaRouterImpl : public CefMediaRouter { 18 public: 19 CefMediaRouterImpl(); 20 21 CefMediaRouterImpl(const CefMediaRouterImpl&) = delete; 22 CefMediaRouterImpl& operator=(const CefMediaRouterImpl&) = delete; 23 24 // Called on the UI thread after object creation and before any other object 25 // methods are executed on the UI thread. 26 void Initialize(const CefBrowserContext::Getter& browser_context_getter, 27 CefRefPtr<CefCompletionCallback> callback); 28 29 // CefMediaRouter methods. 30 CefRefPtr<CefRegistration> AddObserver( 31 CefRefPtr<CefMediaObserver> observer) override; 32 CefRefPtr<CefMediaSource> GetSource(const CefString& urn) override; 33 void NotifyCurrentSinks() override; 34 void CreateRoute(CefRefPtr<CefMediaSource> source, 35 CefRefPtr<CefMediaSink> sink, 36 CefRefPtr<CefMediaRouteCreateCallback> callback) override; 37 void NotifyCurrentRoutes() override; 38 39 private: 40 void InitializeRegistrationInternal( 41 CefRefPtr<CefRegistrationImpl> registration); 42 void NotifyCurrentSinksInternal(); 43 void CreateRouteInternal(CefRefPtr<CefMediaSource> source, 44 CefRefPtr<CefMediaSink> sink, 45 CefRefPtr<CefMediaRouteCreateCallback> callback); 46 void NotifyCurrentRoutesInternal(); 47 48 void CreateRouteCallback(CefRefPtr<CefMediaRouteCreateCallback> callback, 49 const media_router::RouteRequestResult& result); 50 51 // If the context is fully initialized execute |callback|, otherwise 52 // store it until the context is fully initialized. 53 void StoreOrTriggerInitCallback(base::OnceClosure callback); 54 55 bool ValidContext() const; 56 57 // Only accessed on the UI thread. Will be non-null after Initialize(). 58 CefBrowserContext::Getter browser_context_getter_; 59 60 bool initialized_ = false; 61 std::vector<base::OnceClosure> init_callbacks_; 62 63 IMPLEMENT_REFCOUNTING(CefMediaRouterImpl); 64 }; 65 66 #endif // CEF_LIBCEF_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_IMPL_H_ 67