media_router_factory.cc 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright 2020 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. #include "weblayer/browser/media/media_router_factory.h"
  5. #include "base/android/jni_android.h"
  6. #include "base/no_destructor.h"
  7. #include "components/media_router/browser/android/media_router_android.h"
  8. #include "components/media_router/browser/android/media_router_dialog_controller_android.h"
  9. #include "components/media_router/browser/media_router_dialog_controller.h"
  10. #include "content/public/browser/browser_context.h"
  11. #include "weblayer/browser/java/jni/MediaRouterClientImpl_jni.h"
  12. namespace weblayer {
  13. // static
  14. MediaRouterFactory* MediaRouterFactory::GetInstance() {
  15. static base::NoDestructor<MediaRouterFactory> instance;
  16. return instance.get();
  17. }
  18. // static
  19. bool MediaRouterFactory::IsFeatureEnabled() {
  20. static bool enabled = Java_MediaRouterClientImpl_isMediaRouterEnabled(
  21. base::android::AttachCurrentThread());
  22. return enabled;
  23. }
  24. // static
  25. void MediaRouterFactory::DoPlatformInitIfNeeded() {
  26. static bool init_done = false;
  27. if (init_done)
  28. return;
  29. Java_MediaRouterClientImpl_initialize(base::android::AttachCurrentThread());
  30. media_router::MediaRouterDialogController::SetGetOrCreate(
  31. base::BindRepeating([](content::WebContents* web_contents) {
  32. DCHECK(web_contents);
  33. // This call does nothing if the controller already exists.
  34. media_router::MediaRouterDialogControllerAndroid::CreateForWebContents(
  35. web_contents);
  36. return static_cast<media_router::MediaRouterDialogController*>(
  37. media_router::MediaRouterDialogControllerAndroid::FromWebContents(
  38. web_contents));
  39. }));
  40. init_done = true;
  41. }
  42. MediaRouterFactory::MediaRouterFactory() = default;
  43. MediaRouterFactory::~MediaRouterFactory() = default;
  44. content::BrowserContext* MediaRouterFactory::GetBrowserContextToUse(
  45. content::BrowserContext* context) const {
  46. return context;
  47. }
  48. KeyedService* MediaRouterFactory::BuildServiceInstanceFor(
  49. content::BrowserContext* context) const {
  50. media_router::MediaRouterBase* media_router =
  51. new media_router::MediaRouterAndroid();
  52. media_router->Initialize();
  53. return media_router;
  54. }
  55. } // namespace weblayer