// 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 COMPONENTS_OMNIBOX_BROWSER_PAGE_CLASSIFICATION_FUNCTIONS_H_
#define COMPONENTS_OMNIBOX_BROWSER_PAGE_CLASSIFICATION_FUNCTIONS_H_

#include "third_party/metrics_proto/omnibox_event.pb.h"

namespace omnibox {

// Return true, if supplied page classification is a new tab page.
bool IsNTPPage(::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is a search results page.
bool IsSearchResultsPage(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is neither a new tab page or
// search results page.
bool IsOtherWebPage(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is a Lens contextual searchbox.
bool IsLensContextualSearchbox(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is a Lens unimodal, multimodal,
// or contextual searchbox.
bool IsLensSearchbox(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is a Chrome Custom Tab.
bool IsCustomTab(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification is the Android Hub searchbox.
bool IsAndroidHub(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if page classification is a WebUI searchbox. This is specific
// to WebUI searchboxes that don't use the omnibox popup view (the WebUI
// Omnibox is not included in this).
bool IsWebUISearchbox(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Checks (and asserts in development builds) if Page Classification is
// obsolete and should not be used.
void CheckObsoletePageClass(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if supplied page classification supports most visited sites
// provider.
bool SupportsMostVisitedSites(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if page classification is a composebox.
bool IsComposebox(
    ::metrics::OmniboxEventProto::PageClassification classification);

// Return true, if page classification is the NTP realbox.
bool IsNTPRealbox(
    ::metrics::OmniboxEventProto::PageClassification classification);

}  // namespace omnibox

#endif  // COMPONENTS_OMNIBOX_BROWSER_PAGE_CLASSIFICATION_FUNCTIONS_H_
