chromium/chrome/browser/ui/views/side_panel/companion/companion_utils.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_VIEWS_SIDE_PANEL_COMPANION_COMPANION_UTILS_H_
#define CHROME_BROWSER_UI_VIEWS_SIDE_PANEL_COMPANION_COMPANION_UTILS_H_

#include "url/gurl.h"

class Browser;
class PrefService;
class Profile;

namespace companion {

// Returns true if the companion feature is potentially enabled either via field
// trial or because user is enrolled in experiments. Runtime checks may prohibit
// Companion from showing up. Callers should check
// `IsCompanionAvailableForCurrentActiveTab` before showing companion in side
// panel or showing any pinned entries.
bool IsCompanionFeatureEnabled();

// Returns true if the companion entry points should be enabled for the state of
// the current active tab.
bool IsCompanionAvailableForCurrentActiveTab(const Browser* browser);

// Returns true if the companion entry points should be enabled for the given
// `url`.
bool IsCompanionAvailableForURL(const GURL& url);

// Returns true if the companion policy is enabled. The policy can change
// dynamically, so callers should not cache the returned results.
bool IsCompanionFeatureEnabledByPolicy(PrefService* pref_service);

// Returns true if companion side panel should be available for `browser`
// Takes into account the runtime checks such as companion field
// trial state, if browser is valid, DSE is Google, enterprise policies etc.
bool IsSearchInCompanionSidePanelSupported(const Browser* browser);

// Returns true if companion side panel should be available for `profile`
// Takes into account companion field trial state, profile type and if
// `include_runtime_checks` is true also performs checks like if DSE is
// Google, enterpise policies and if the user has successfully navigated
// to exps registration success page etc.
bool IsSearchInCompanionSidePanelSupportedForProfile(
    Profile* profile,
    bool include_runtime_checks = true);

// Returns true if necessary flags are enabled, browser is valid and default
// search engine is Google.
bool IsSearchWebInCompanionSidePanelSupported(const Browser* browser);

// Returns true if necessary flags are enabled, browser is valid, and DSE is
// Google.
bool IsSearchImageInCompanionSidePanelSupported(const Browser* browser);

// Return true if feature for enabling "new" badges on context menu items is
// enabled.
bool IsNewBadgeEnabledForSearchMenuItem(const Browser* browser);

// Updated the default value for the pref used to determine whether companion
// should be pinned to the toolbar by default.
void UpdateCompanionDefaultPinnedToToolbarState(Profile* profile);

// Returns true if feature for enabling the "contextual" Lens panel is enabled.
bool ShouldUseContextualLensPanelForImageSearch(const Browser* browser);

}  // namespace companion

#endif  // CHROME_BROWSER_UI_VIEWS_SIDE_PANEL_COMPANION_COMPANION_UTILS_H_