// Copyright 2023 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. module dlp_internals.mojom; import "url/mojom/url.mojom"; // Represents the type of the data source object. // See ui/base/data_transfer_policy/data_transfer_endpoint.h // for EndpointType enum. enum EndpointType { kDefault = 0, kUrl = 1, kClipboardHistory = 2, kUnknownVm = 3, kArc = 4, kBorealis = 5, kCrostini = 6, kPluginVm = 7, }; struct DataTransferEndpoint { // Represents the object type. EndpointType type; // The URL of the data endpoint. It always has a value // if the object type is URL, otherwise it's empty. url.mojom.Url? url; }; // Represents DLP content restrictions. // See chrome/browser/chromeos/policy/dlp/dlp_content_restriction_set.h // for DlpContentRestriction enum. enum ContentRestriction { kScreenshot = 0, kPrivacyScreen = 1, kPrint = 2, kScreenShare = 3, }; // Represents the enforcement level of DLP restrictions. // See components/enterprise/data_controls/core/rule.h for Level enum. enum Level { kNotSet = 0, kReport = 1, kWarn = 2, kBlock = 3, kAllow = 4, }; struct ContentRestrictionInfo { // Restriction enforced. ContentRestriction restriction; // Enforcement level of the restriction. Level level; // The url that caused the restriction to be enforced. url.mojom.Url url; }; struct RenderFrameHostInfo { // Last committed URL. url.mojom.Url last_committed_url; // An array of content restrictions info. array restrictions_info; }; struct WebContentsInfo { // Last committed URL. url.mojom.Url last_committed_url; // An array of content restrictions info. array restrictions_info; // An array of DLP info for all the frames in this WebContents object. array frames_info; }; // Represents DLP policy event destination. // See components/enterprise/data_controls/dlp_policy_event.proto // for DlpPolicyEventDestination. struct EventDestination { // Represents DLP policy components. // See components/enterprise/data_controls/component.h for Component enum. enum Component { kUndefinedComponent = 0, kArc = 1, kCrostini = 2, kPluginVm = 3, kUsb = 4, kDrive = 5, kOnedrive = 6, }; // Either |url| or |component| should be set. string? url_pattern; Component? component; }; // Represents DLP policy event. // See components/enterprise/data_controls/dlp_policy_event.proto // for DlpPolicyEvent. struct DlpEvent { // The restriction that was triggered. enum Restriction { kUndefinedRestriction = 0, kClipboard = 1, kScreenshot = 2, kScreencast = 3, kPrinting = 4, kEprivacy = 5, kFiles = 6, }; // The mode of the applied restriction. enum Mode { kUndefinedMode = 0, kBlock = 1, kReport = 2, kWarn = 3, kWarnProceed = 4, }; // Type of user session from which the event is reported. enum UserType { kUndefinedUserType = 0, kRegular = 1, kManagedGuest = 2, kKiosk = 3, }; string? source_pattern; EventDestination? destination; Restriction? restriction; Mode? mode; int64? timestamp_micro; UserType? user_type; string? content_name; string? triggered_rule_name; string? triggered_rule_id; }; // Represents the database entry of a single file. struct FileDatabaseEntry { uint64? inode; uint64? crtime; string? source_url; string? referrer_url; }; // Observer interface to receive updates about DLP reporting events. // This interface is implement in Javascript in chrome://dlp-internals WebUI. interface ReportingObserver { // Called when an event is reported. OnReportEvent(DlpEvent event); }; // Browser interface for the page. Consists of calls for data and hooks for // interactivity. interface PageHandler { // Get information about clipboard data source. GetClipboardDataSource() => (DataTransferEndpoint? source); // Returns content restrictions information for all the tracked WebContents. GetContentRestrictionsInfo() => (array web_contents_info); // Allows the caller to observe reporting events. ObserveReporting(pending_remote observer); // Returns files' database entries. GetFilesDatabaseEntries() => (array db_entries); // Returns the inode number of the requested file only if the file is in // MyFiles/Downloads directory. GetFileInode(string file_name) => (uint64 inode); };