Revert "[fuchsia] remove Scenic and GFX  dependencies in DesktopCapturer"

This reverts commit fe5be2eb4ff8dccd96257fb8cbf32500c636c358.

Reason for revert: This breaks the WebRTC roll into Chromium:

- https://chromium-review.googlesource.com/c/chromium/src/+/4688561
- https://ci.chromium.org/ui/p/chromium/builders/try/fuchsia-binary-size/399140/overview

Error:

[4273/4389] CXX obj/third_party/webrtc/modules/desktop_capture/desktop_capture/screen_capturer_fuchsia.o
FAILED: obj/third_party/webrtc/modules/desktop_capture/desktop_capture/screen_capturer_fuchsia.o
../../buildtools/reclient/rewrapper -cfg=../../buildtools/reclient_cfgs/chromium-browser-clang/rewra...(too long)
../../third_party/webrtc/modules/desktop_capture/screen_capturer_fuchsia.cc:59:10: error: use of undeclared identifier 'capturer'
59 |   return capturer(new ScreenCapturerFuchsia());
|          ^
../../third_party/webrtc/modules/desktop_capture/screen_capturer_fuchsia.cc:199:36: error: no type named 'InfoSyncPtr' in namespace 'fuchsia::ui::display::singleton'

Original change's description:
> [fuchsia] remove Scenic and GFX  dependencies in DesktopCapturer
>
> We previously used:
> - fuchsia.ui.scenic.Scenic/UsesFlatland to determine whether to use
>   Flatland; from now on it should always be the case, so this check is
>   no longer necessary.
> - fuchsia.ui.scenic.Scenic/GetDisplayInfo to get
>   fuchsia.ui.gfx.DisplayInfo. This has been migrated to
>   fuchsia.ui.display.singleton.Info/GetMetrics and
>   fuchsia.ui.display.singleton.Metrics.
>
> Bug: fuchsia:100303
> Change-Id: I147da9ffdf0ca49e1c5bde5d188e434fc660becc
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311860
> Reviewed-by: Emircan Uysaler <emircan@google.com>
> Reviewed-by: Alexander Cooper <alcooper@chromium.org>
> Commit-Queue: Caroline Liu <carolineliu@google.com>
> Cr-Commit-Position: refs/heads/main@{#40432}

Bug: fuchsia:100303, b/291393959
Change-Id: Iae70e568a8c9819e40e48069af8cea0d4ef2b6c5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311801
Owners-Override: Mirko Bonadei <mbonadei@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40436}
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
index 068cc2e..6f3e9d2 100644
--- a/modules/desktop_capture/BUILD.gn
+++ b/modules/desktop_capture/BUILD.gn
@@ -451,7 +451,8 @@
       "../../rtc_base:divide_round",
       "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sysmem",
       "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.composition",
-      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.display.singleton",
+      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.ui.scenic",
+      "//third_party/fuchsia-sdk/sdk/pkg/scenic_cpp",
       "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
     ]
   }
diff --git a/modules/desktop_capture/screen_capturer_fuchsia.cc b/modules/desktop_capture/screen_capturer_fuchsia.cc
index 1072b93..19c4c73 100644
--- a/modules/desktop_capture/screen_capturer_fuchsia.cc
+++ b/modules/desktop_capture/screen_capturer_fuchsia.cc
@@ -12,7 +12,7 @@
 
 #include <fuchsia/sysmem/cpp/fidl.h>
 #include <fuchsia/ui/composition/cpp/fidl.h>
-#include <fuchsia/ui/display/singleton/cpp/fidl.h>
+#include <fuchsia/ui/scenic/cpp/fidl.h>
 #include <lib/sys/cpp/component_context.h>
 
 #include <algorithm>
@@ -56,7 +56,17 @@
 
 std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
     const DesktopCaptureOptions& options) {
-  return capturer(new ScreenCapturerFuchsia());
+  if (ScreenCapturerFuchsia::CheckRequirements()) {
+    std::unique_ptr<ScreenCapturerFuchsia> capturer(
+        new ScreenCapturerFuchsia());
+    return capturer;
+  }
+  return nullptr;
+}
+
+ScreenCapturerFuchsia::ScreenCapturerFuchsia()
+    : component_context_(sys::ComponentContext::Create()) {
+  RTC_DCHECK(CheckRequirements());
 }
 
 ScreenCapturerFuchsia::~ScreenCapturerFuchsia() {
@@ -72,6 +82,26 @@
   }
 }
 
+// TODO(fxbug.dev/100303): Remove this function when Flatland is the only API.
+bool ScreenCapturerFuchsia::CheckRequirements() {
+  std::unique_ptr<sys::ComponentContext> component_context =
+      sys::ComponentContext::Create();
+  fuchsia::ui::scenic::ScenicSyncPtr scenic;
+  zx_status_t status = component_context->svc()->Connect(scenic.NewRequest());
+  if (status != ZX_OK) {
+    RTC_LOG(LS_ERROR) << "Failed to connect to Scenic: " << status;
+    return false;
+  }
+
+  bool scenic_uses_flatland = false;
+  scenic->UsesFlatland(&scenic_uses_flatland);
+  if (!scenic_uses_flatland) {
+    RTC_LOG(LS_ERROR) << "Screen capture not supported without Flatland.";
+  }
+
+  return scenic_uses_flatland;
+}
+
 void ScreenCapturerFuchsia::Start(Callback* callback) {
   RTC_DCHECK(!callback_);
   RTC_DCHECK(callback);
@@ -196,26 +226,24 @@
 }
 
 void ScreenCapturerFuchsia::SetupBuffers() {
-  fuchsia::ui::display::singleton::InfoSyncPtr display_info;
-  zx_status_t status =
-      component_context_->svc()->Connect(display_info.NewRequest());
+  fuchsia::ui::scenic::ScenicSyncPtr scenic;
+  zx_status_t status = component_context_->svc()->Connect(scenic.NewRequest());
   if (status != ZX_OK) {
     fatal_error_ = true;
-    RTC_LOG(LS_ERROR)
-        << "Failed to connect to fuchsia.ui.display.singleton.Info: " << status;
+    RTC_LOG(LS_ERROR) << "Failed to connect to Scenic: " << status;
     return;
   }
 
-  fuchsia::ui::display::singleton::Metrics metrics;
-  status = display_info->GetMetrics(&metrics);
+  fuchsia::ui::gfx::DisplayInfo display_info;
+  status = scenic->GetDisplayInfo(&display_info);
   if (status != ZX_OK) {
     fatal_error_ = true;
     RTC_LOG(LS_ERROR) << "Failed to connect to get display dimensions: "
                       << status;
     return;
   }
-  width_ = metrics.extent_in_px().width;
-  height_ = metrics.extent_in_px().height;
+  width_ = display_info.width_in_px;
+  height_ = display_info.height_in_px;
 
   status = component_context_->svc()->Connect(sysmem_allocator_.NewRequest());
   if (status != ZX_OK) {
diff --git a/modules/desktop_capture/screen_capturer_fuchsia.h b/modules/desktop_capture/screen_capturer_fuchsia.h
index 6e0f87c..4449309 100644
--- a/modules/desktop_capture/screen_capturer_fuchsia.h
+++ b/modules/desktop_capture/screen_capturer_fuchsia.h
@@ -29,6 +29,8 @@
   ScreenCapturerFuchsia();
   ~ScreenCapturerFuchsia() override;
 
+  static bool CheckRequirements();
+
   // DesktopCapturer interface.
   void Start(Callback* callback) override;
   void CaptureFrame() override;