[lacros] Desks: Support kMatchCurrentWorkspace to find browser.

This CL enables the codes that
BrowserFinder matches the already opened browser window on the
current workspace. Also DesksHelperLacros implements
chromeos::DesksHelper::BelongsToActiveDesk(window).
In lacros side, it will simply match workspace with the index
of the active desk.

Bug: 1250191
Change-Id: Ie5966288d3a6525954011643e806f0928175e066
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3067116
Reviewed-by: Ahmed Fakhry <afakhry@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Maksim Sisov <msisov@igalia.com>
Commit-Queue: Minju Kim <mkim@igalia.com>
Cr-Commit-Position: refs/heads/main@{#928988}
diff --git a/chrome/browser/ui/browser_finder.cc b/chrome/browser/ui/browser_finder.cc
index 57bed02..6e9c4e2e 100644
--- a/chrome/browser/ui/browser_finder.cc
+++ b/chrome/browser/ui/browser_finder.cc
@@ -40,7 +40,7 @@
 const uint32_t kMatchCanSupportWindowFeature = 1 << 1;
 const uint32_t kMatchNormal = 1 << 2;
 const uint32_t kMatchDisplayId = 1 << 3;
-#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_WIN) || defined(OS_CHROMEOS)
 const uint32_t kMatchCurrentWorkspace = 1 << 4;
 #endif
 
@@ -101,7 +101,7 @@
   if ((match_types & kMatchNormal) && !browser->is_type_normal())
     return false;
 
-#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_WIN) || defined(OS_CHROMEOS)
   // Note that |browser->window()| might be nullptr in tests.
   if ((match_types & kMatchCurrentWorkspace) &&
       (!browser->window() || !browser->window()->IsOnCurrentWorkspace())) {
@@ -151,7 +151,7 @@
     match_types |= kMatchOriginalProfile;
   if (display_id != display::kInvalidDisplayId)
     match_types |= kMatchDisplayId;
-#if defined(OS_WIN) || BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_WIN) || defined(OS_CHROMEOS)
   if (match_current_workspace)
     match_types |= kMatchCurrentWorkspace;
 #endif
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index ee55401e..f600e398 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -224,6 +224,7 @@
 #include "chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.h"
 #include "chromeos/ui/base/window_pin_type.h"
 #include "chromeos/ui/base/window_properties.h"
+#include "chromeos/ui/wm/desks/desks_helper.h"
 #endif
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -231,7 +232,6 @@
 #include "ash/public/cpp/metrics_util.h"
 #include "chrome/browser/ui/ash/window_properties.h"
 #include "chrome/grit/chrome_unscaled_resources.h"
-#include "chromeos/ui/wm/desks/desks_helper.h"
 #include "ui/compositor/throughput_tracker.h"
 #else
 #include "chrome/browser/ui/signin_view_controller.h"
@@ -1070,7 +1070,7 @@
   if (!native_win)
     return true;
 
-#if BUILDFLAG(IS_CHROMEOS_ASH)
+#if defined(OS_CHROMEOS)
   return chromeos::DesksHelper::Get(native_win)
       ->BelongsToActiveDesk(native_win);
 #elif defined(OS_WIN)
@@ -1102,7 +1102,7 @@
          workspace_guid == GUID_NULL;
 #else
   return true;
-#endif  // BUILDFLAG(IS_CHROMEOS_ASH)
+#endif  // defined(OS_CHROMEOS)
 }
 
 void BrowserView::SetTopControlsShownRatio(content::WebContents* web_contents,
diff --git a/chromeos/ui/wm/desks/lacros/desks_helper.cc b/chromeos/ui/wm/desks/lacros/desks_helper.cc
index bac8b25..6eec42c 100644
--- a/chromeos/ui/wm/desks/lacros/desks_helper.cc
+++ b/chromeos/ui/wm/desks/lacros/desks_helper.cc
@@ -10,6 +10,7 @@
 #include "ui/platform_window/extensions/desk_extension.h"
 #include "ui/platform_window/platform_window.h"
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_linux.h"
+#include "ui/views/widget/widget.h"
 
 namespace {
 
@@ -23,15 +24,27 @@
 
 class DesksHelperLacros : public chromeos::DesksHelper {
  public:
-  DesksHelperLacros(aura::Window* window) : window_(window) {}
+  explicit DesksHelperLacros(aura::Window* window) : window_(window) {}
   DesksHelperLacros(const DesksHelperLacros&) = delete;
   DesksHelperLacros& operator=(const DesksHelperLacros&) = delete;
   ~DesksHelperLacros() override = default;
 
   // chromeos::DesksHelper:
   bool BelongsToActiveDesk(aura::Window* window) override {
-    NOTIMPLEMENTED();
-    return false;
+    views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
+    DCHECK(widget);
+    // If the window is on all workspaces or unassigned, we should consider that
+    // the window belongs to active desk.
+    if (widget->IsVisibleOnAllWorkspaces())
+      return true;
+    const std::string& workspace = widget->GetWorkspace();
+    if (workspace.empty())
+      return true;
+
+    int desk_index;
+    if (!base::StringToInt(workspace, &desk_index))
+      return false;
+    return GetActiveDeskIndex() == desk_index;
   }
   int GetActiveDeskIndex() const override {
     return GetDeskExtension(window_)->GetActiveDeskIndex();