blob: ae8767ea600df6bc8a586cbc4b67be85781204fe [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package chrome.conflicts;
// Describes a module. A module is valid only if at least one of |basename| or
// |code_id| is specified, although both may be specified. A module must exactly
// match all specified fields in order to be considered a match.
// Next id: 5
message Module {
// The basename of the module. This is case insensitive. If this is not
// specified then |code_id| must be specified. On the client this actually
// corresponds to the SHA1 hash of the basename, which has been first made
// lowercase.
optional string basename = 1;
optional bytes basename_hash = 3;
// Code ID. This is equivalent to the string generated by formatting
// the FileHeader.TimeDateStamp and OptionalHeader.SizeOfImage with the
// formatting string %08X%x. Comparison is case insensitive. If this is not
// specified then |basename| must be specified. On the client this actually
// corresponds to the SHA1 hash of the code id, which has first been made
// lowercase.
optional string code_id = 2;
optional bytes code_id_hash = 4;
}
// A module group is a collection of one or more modules with shared publisher
// and/or installation directory information.
// Next id: 6
message ModuleGroup {
// Publisher information. If specified then the modules in this group will
// only match if they are signed by the specified publisher. This corresponds
// to the OU specified in the signature. On the client this actually
// corresponds to the SHA1 of the case-sensitive publisher information.
optional string publisher = 1;
optional bytes publisher_hash = 4;
// The directory in which the modules are found. This may use environment
// variables such as %LOCALAPPDATA%, %SYSTEMROOT%, etc. This is case
// insensitive. If not specified then any path will be accepted. On the
// client this actually corresponds to the SHA1 of the case-insensitive path.
optional string directory = 2;
optional bytes directory_hash = 5;
// A list of modules.
repeated Module modules = 3;
}
// Describes a whitelist of modules that will always be allowed to load, and for
// which there is no associated user messaging.
// Next id: 2
message ModuleWhitelist {
// A collection of modules, grouped by publisher/installation path
// information.
repeated ModuleGroup module_groups = 1;
}
// The user message to display when a blacklisted module is matched at runtime.
// Next id: 3
enum BlacklistMessageType {
// The user will be presented with a message to uninstall the software. This
// message will only be displayed if a matching software entry with
// uninstallation registry entries can be found. This is the default action
// that is applied to all modules that are not specifically whitelisted.
// It's presence in this list allows a module to remain blacklisted, but be
// allowed to load. If this is specified then |message_url| should be empty
// and is otherwise ignored.
UNINSTALL = 0;
// The user will be presented with a message about the incompatibility of
// the related software, and provided with a link to follow for further
// information. The URL is specified via |message_url| in an associated
// BlacklistAction.
FURTHER_INFORMATION = 1;
// The user will be presented with a message about the incompatiblity of
// the related software, and provided with a link to follow in order to
// upgrade the software to a compatible version. The URL is specified via
// |message_url| in an associated BlacklistAction.
SUGGEST_UPGRADE = 2;
};
// The actions to take when a blacklisted module is encountered.
// Next id: 4
message BlacklistAction {
// Indicates whether or not this module should be allowed to load. This can be
// used to explicitly allow modules to load that when blocked cause problems,
// but otherwise to allow messaging to encourage users to remove them.
optional bool allow_load = 1;
// The URL associated with the user message. See BlacklistMessageType for full
// details.
optional BlacklistMessageType message_type = 2;
optional string message_url = 3;
}
// Describes a group in the module blacklist. Modules not whitelisted are
// blacklisted by default, but fine-grained control over the user messaging is
// possible using an explicit blacklist entry.
// Next id: 3
message BlacklistModuleGroup {
// The action to take when modules in this group are encountered.
optional BlacklistAction action = 1;
// The group of modules itself.
optional ModuleGroup modules = 2;
}
// Describes a blacklist of modules that are to be handled specially when
// encountered.
// Next id: 2
message ModuleBlacklist {
repeated BlacklistModuleGroup module_groups = 1;
}
// The entire module list itself consists of a whitelist and a blacklist.
// Next id: 3
message ModuleList {
// The whitelisted modules.
optional ModuleWhitelist whitelist = 1;
// The blacklisted modules, and the associated actions to take upon
// encountering them.
optional ModuleBlacklist blacklist = 2;
}