blob: 86e64c713f5ef216a982935f641a417b9cc38612 [file] [log] [blame]
// 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_CONTENT_CONTENT_BOOKMARK_PARSER_H_
#define COMPONENTS_USER_DATA_IMPORTER_CONTENT_CONTENT_BOOKMARK_PARSER_H_
#include "components/user_data_importer/common/importer_data_types.h"
#include "components/user_data_importer/mojom/bookmark_html_parser.mojom.h"
#include "components/user_data_importer/utility/bookmark_parser.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace base {
class File;
class FilePath;
}
namespace user_data_importer {
namespace mojom {
class BookmarkHtmlParser;
}
// Content implementation of the BookmarkParser interface. This class reads the
// bookmarks HTML file contents and then launches, on the utility process, the
// actual parsing of the file contents, which are from an untrusted data source.
//
// Can be created on any sequence (e.g. on a UI thread), but there after, must
// be used and destroyed on the same background sequence.
class ContentBookmarkParser : public BookmarkParser {
public:
ContentBookmarkParser();
~ContentBookmarkParser() override;
// BookmarkParser:
// Reads the file contents and then launches the actual parsing on the utility
// process. Preferably, this method should be called on the background thread.
void Parse(const base::FilePath& file,
BookmarkParsingCallback callback) override;
// Same as the Parse() above, but reads from a base::File.
void Parse(base::File file, BookmarkParsingCallback callback);
void SetServiceForTesting(
mojo::PendingRemote<user_data_importer::mojom::BookmarkHtmlParser>
parser);
private:
void ParseImpl(std::string raw_html,
BookmarkParser::BookmarkParsingCallback callback);
void OnParseFinished(
BookmarkParser::BookmarkParsingCallback callback,
user_data_importer::BookmarkParser::ParsedBookmarks parsed_bookmarks);
// The utility process host used to run the parser.
mojo::Remote<mojom::BookmarkHtmlParser> html_parser_remote_;
// HTML parser to use for testing. If set, `html_parser_remote_` will be bound
// to this instead of being launched in a utility process.
mojo::PendingRemote<mojom::BookmarkHtmlParser> html_parser_for_testing_;
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<ContentBookmarkParser> weak_ptr_factory_{this};
};
} // namespace user_data_importer
#endif // COMPONENTS_USER_DATA_IMPORTER_CONTENT_CONTENT_BOOKMARK_PARSER_H_