chromium/ui/base/clipboard/file_info.h

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_BASE_CLIPBOARD_FILE_INFO_H_
#define UI_BASE_CLIPBOARD_FILE_INFO_H_

#include <string>
#include <string_view>

#include "base/component_export.h"
#include "base/files/file_path.h"

namespace ui {

// struct that bundles a file's path with an optional display name.
struct COMPONENT_EXPORT(UI_BASE_FILE_INFO) FileInfo {};

// Returns UTF8 file:// URL. |file_path| is expected to be an absolute path, and
// will be encoded as one regardless. E.g. '/path' and 'path' both encode as
// 'file:///path'.
std::string COMPONENT_EXPORT(UI_BASE_FILE_INFO)
    FilePathToFileURL(const base::FilePath& file_path);

// Returns a list of ui::FileInfo from the text/uri-list CRLF-separated file://
// URLs in |uri_list| as per
// https://www.iana.org/assignments/media-types/text/uri-list
// URLs which cannot be parsed are ignored.
std::vector<FileInfo> COMPONENT_EXPORT(UI_BASE_FILE_INFO)
    URIListToFileInfos(std::string_view uri_list);

// Returns UTF8 text/uri-list CRLF-separated file:// URLs from filenames.
std::string COMPONENT_EXPORT(UI_BASE_FILE_INFO)
    FileInfosToURIList(const std::vector<FileInfo>& filenames);

}  // namespace ui

#endif  // UI_BASE_CLIPBOARD_FILE_INFO_H_