1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// Copyright 2025 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_USER_DATA_IMPORTER_UTILITY_BOOKMARK_PARSER_H_
#define COMPONENTS_USER_DATA_IMPORTER_UTILITY_BOOKMARK_PARSER_H_
#include "base/functional/callback.h"
#include "base/types/expected.h"
#include "components/favicon_base/favicon_usage_data.h"
#include "components/user_data_importer/common/imported_bookmark_entry.h"
#include "components/user_data_importer/common/importer_data_types.h"
namespace base {
class FilePath;
}
namespace user_data_importer {
// Interface for opening and parsing an HTML file containing bookmarks.
class BookmarkParser {
public:
// Result of a successful invocation of `ParseBookmarks` below.
struct ParsedBookmarks {
ParsedBookmarks();
~ParsedBookmarks();
// Moveable, but not copyable.
ParsedBookmarks(ParsedBookmarks&&);
ParsedBookmarks& operator=(ParsedBookmarks&&);
ParsedBookmarks(const ParsedBookmarks&) = delete;
ParsedBookmarks& operator=(const ParsedBookmarks&) = delete;
// List of standard bookmarks and folders.
std::vector<ImportedBookmarkEntry> bookmarks;
// Safari includes Reading List entries in bookmarks.html.
std::vector<ImportedBookmarkEntry> reading_list;
// Firefox includes Search Engines entries in bookmarks.html.
std::vector<SearchEngineInfo> search_engines;
// Favicons usage data list.
favicon_base::FaviconUsageDataList favicons;
};
// Failure reason for an unsuccessful invocation of `ParseBookmarks` below.
enum class BookmarkParsingError {
// Failed to read file, e.g. no such file exists.
kFailedToReadFile,
// The file was larger than the maximum supported by this manager.
kTooBig,
// The file could not be parsed (e.g., bad syntax).
kParsingFailed,
// The operation did not complete within the allotted time.
kTimedOut,
// Generic error.
kOther
};
virtual ~BookmarkParser() = default;
using BookmarkParsingResult =
base::expected<ParsedBookmarks, BookmarkParsingError>;
using BookmarkParsingCallback =
base::OnceCallback<void(BookmarkParsingResult)>;
// Opens the file at the given FilePath, treating it as an HTML file matching
// the Netscape bookmarks format:
// https://learn.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa753582(v=vs.85)
// Parses the document and extracts bookmarks and reading list entries.
// Invokes `callback` with the result of parsing.
virtual void Parse(const base::FilePath& bookmarks_html,
BookmarkParsingCallback callback) = 0;
};
// Returns a suitable concrete BookmarkParser instance. See implementations in
// ios_bookmark_parser.mm and content_bookmark_parser.cc.
std::unique_ptr<BookmarkParser> MakeBookmarkParser();
} // namespace user_data_importer
#endif // COMPONENTS_USER_DATA_IMPORTER_UTILITY_BOOKMARK_PARSER_H_
|