chromium/chrome/browser/ui/search_engine_choice/search_engine_choice_tab_helper.h

// Copyright 2023 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_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_TAB_HELPER_H_
#define CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_TAB_HELPER_H_

#include <optional>

#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "ui/gfx/geometry/size.h"

namespace content {
class WebContents;
}

class Browser;

// Helper class which watches `web_contents` to determine whether there is an
// appropriate opportunity to show the SearchEngineChoiceDialogView.
class SearchEngineChoiceTabHelper
    : public content::WebContentsObserver,
      public content::WebContentsUserData<SearchEngineChoiceTabHelper> {};

// Implemented in
// `chrome/browser/ui/views/search_engine_choice/search_engine_choice_dialog_view.cc`
// because there isn't a dependency between `chrome/browser/ui/` and
// `chrome/browser/ui/views/`.
// `boundary_dimensions_for_test` can be set to specify an upper bound for
// dialog's width and height. Leaving it empty will make the dialog use the
// window size as upper bound.
// `zoom_factor_for_test` can be set to specify the zoom factor needed. This is
// used to be able to display the full content of the dialog in screenshot
// tests. Leaving it empty will make the dialog use a zoom of 1.;
void ShowSearchEngineChoiceDialog(
    Browser& browser,
    std::optional<gfx::Size> boundary_dimensions_for_test = std::nullopt,
    std::optional<double> zoom_factor_for_test_ = std::nullopt);

// Implemented in
// `chrome/browser/ui/views/search_engine_choice/search_engine_choice_dialog_view.cc`
// because there isn't a dependency between `chrome/browser/ui/` and
// `chrome/browser/ui/views/`.
// Returns whether the smallest height variant of the search engine choice
// dialog can fit in the browser window or not.
bool CanWindowHeightFitSearchEngineChoiceDialog(Browser& browser);

#endif  // CHROME_BROWSER_UI_SEARCH_ENGINE_CHOICE_SEARCH_ENGINE_CHOICE_TAB_HELPER_H_