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
|
// 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 EXTENSIONS_COMMON_API_SCRIPTS_INTERNAL_SCRIPT_SERIALIZATION_H_
#define EXTENSIONS_COMMON_API_SCRIPTS_INTERNAL_SCRIPT_SERIALIZATION_H_
#include <memory>
#include <string>
#include "extensions/common/api/scripts_internal.h"
#include "extensions/common/user_script.h"
namespace extensions {
class Extension;
namespace script_serialization {
// Converts a list of file names into a list of `ScriptSource`s.
std::vector<api::scripts_internal::ScriptSource> GetSourcesFromFileNames(
std::vector<std::string> file_names);
// Serialized the given `user_script`. This is guaranteed to succeed (assuming
// `user_script` is valid).
api::scripts_internal::SerializedUserScript SerializeUserScript(
const UserScript& user_script);
// Additional options for parsing user scripts.
struct SerializedUserScriptParseOptions {
// If populated, used in the error message.
std::optional<int> index_for_error;
// If true, indicates the extension can execute scripts on every page without
// additional permission (this should only be true for special extensions like
// ChromeVox).
bool can_execute_script_everywhere = false;
// If true, `<all_urls>` match patterns will also match chrome:-scheme URLs.
bool all_urls_includes_chrome_urls = false;
};
// Attempts to deserialize `serialized_script` into a new `UserScript`. This can
// fail if `serialized_script` has invalid values for parsed types (e.g.,
// match patterns). `allowed_in_incognito` indicates if the corresponding
// extension (and thus, user script) is allowed in incognito mode.
// If `error_out` is provided, it will be populated on failure.
// If `wants_file_access_out` is provided, it will be populated with whether the
// extension wants file access according to the patterns in the serialized
// script.
// TODO(devlin): It'd be nice to use std::optional here, but UserScripts are
// currently passed by pointer a lot.
std::unique_ptr<UserScript> ParseSerializedUserScript(
const api::scripts_internal::SerializedUserScript& serialized_script,
const Extension& extension,
bool allowed_in_incognito,
std::u16string* error_out = nullptr,
bool* wants_file_access_out = nullptr,
SerializedUserScriptParseOptions parse_options = {});
} // namespace script_serialization
} // namespace extensions
#endif // EXTENSIONS_COMMON_API_SCRIPTS_INTERNAL_SCRIPT_SERIALIZATION_H_
|