| // Copyright 2025 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_STARTUP_FOCUS_MATCH_CANDIDATE_H_ |
| #define CHROME_BROWSER_UI_STARTUP_FOCUS_MATCH_CANDIDATE_H_ |
| |
| #include <optional> |
| #include <string> |
| |
| #include "base/memory/raw_ref.h" |
| #include "base/time/time.h" |
| |
| class BrowserWindowInterface; |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| namespace focus { |
| |
| struct Selector; |
| |
| // Represents a tab or app window that matches focus criteria and may be |
| // focused. Contains all necessary information to focus the candidate and sort |
| // by priority. Uses references to guarantee non-null browser_window and |
| // web_contents. |
| struct MatchCandidate { |
| MatchCandidate(BrowserWindowInterface& browser_window, |
| int tab_index, |
| content::WebContents& web_contents, |
| base::Time last_active_time, |
| const std::string& matched_url, |
| const std::optional<std::string>& app_id); |
| MatchCandidate(const MatchCandidate& other) = delete; |
| MatchCandidate& operator=(const MatchCandidate& other) = delete; |
| MatchCandidate(MatchCandidate&& other) noexcept; |
| MatchCandidate& operator=(MatchCandidate&& other) noexcept; |
| ~MatchCandidate(); |
| |
| bool operator<(const MatchCandidate& other) const; |
| |
| raw_ref<BrowserWindowInterface> browser_window; |
| int tab_index; |
| raw_ref<content::WebContents> web_contents; |
| base::Time last_active_time; |
| std::string matched_url; |
| std::optional<std::string> app_id; |
| }; |
| |
| // Creates a MatchCandidate if the given WebContents matches the selector. |
| // Returns std::nullopt if there's no match. |
| std::optional<MatchCandidate> MatchTab(const Selector& selector, |
| BrowserWindowInterface& browser_window, |
| int tab_index, |
| content::WebContents& web_contents); |
| |
| // Creates a MatchCandidate if the given browser window is an app that matches |
| // the selector's app_id. Returns std::nullopt if there's no match. |
| std::optional<MatchCandidate> MatchApp(const Selector& selector, |
| BrowserWindowInterface& browser_window); |
| |
| } // namespace focus |
| |
| #endif // CHROME_BROWSER_UI_STARTUP_FOCUS_MATCH_CANDIDATE_H_ |