// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_CROSAPI_CPP_GURL_OS_HANDLER_UTILS_H_
#define CHROMEOS_CROSAPI_CPP_GURL_OS_HANDLER_UTILS_H_
#include <string_view>
#include <vector>
#include "url/gurl.h"
// Utility functions for handling Lacros's system URLs and converting them to
// Ash URLs.
//
// Lacros makes the syntax and semantics of internal URLs a bit more complex.
// Depending on context, a URL may use the os:// scheme to refer to pages that
// live in Ash. For example, such URLs are recognized in the ChromeOS launcher
// and in the Lacros omnibox. They are converted to regular chrome:// URLs
// before being sent to Ash for navigation. They are also sanitized by stripping
// away certain components.
//
// NOTE:
// The os://scheme is intentionally not registered as a proper scheme and hence
// we cannot rely on the GURL / url library for parsing and canonicalization.
namespace crosapi {
namespace gurl_os_handler_utils {
// Convert a Lacros URL to the corresponding Ash URL.
// Example: os://settings/network?query => chrome://os-settings/network?query
COMPONENT_EXPORT(CROSAPI)
GURL GetAshUrlFromLacrosUrl(GURL url);
// Sanitize an Ash URL by stripping away certain parts.
// Example: chrome://os-settings/network#ref => chrome://os-settings/network
COMPONENT_EXPORT(CROSAPI)
GURL SanitizeAshUrl(const GURL& url);
// Determines if a given Ash URL matches any of the given URLs in the list.
COMPONENT_EXPORT(CROSAPI)
bool IsAshUrlInList(const GURL& url, const std::vector<GURL>& list);
// Returns true when the URL is an internal os:// url.
COMPONENT_EXPORT(CROSAPI) bool HasOsScheme(const GURL& url);
// Returns true when the passed scheme string matches the "os" scheme.
COMPONENT_EXPORT(CROSAPI) bool IsOsScheme(std::string_view scheme);
} // namespace gurl_os_handler_utils
} // namespace crosapi
#endif // CHROMEOS_CROSAPI_CPP_GURL_OS_HANDLER_UTILS_H_