[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();