chromium/components/subresource_filter/core/mojom/subresource_filter.mojom

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module subresource_filter.mojom;

import "mojo/public/mojom/base/file.mojom";
import "mojo/public/mojom/base/time.mojom";

enum ActivationLevel {
  kDisabled,
  kDryRun,
  kEnabled
};

// Enumerates which ads violations are recorded for a page.
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused. Please update the enum named
// AdsViolations in enums.xml when adding a new entry here.
enum AdsViolation {
    kMobileAdDensityByHeightAbove30,
    kHeavyAdsInterventionAtHostLimit,
    kLargeStickyAd,
    kOverlayPopupAd,
};

struct ActivationState {
  // The degree to which subresource filtering is activated for the page load.
  ActivationLevel activation_level = kDisabled;

  // Even when subresource filtering is activated at the page level, a document
  // in the current frame (and/or ancestors thereof) may still match special
  // filtering rules that specifically disable using certain types of rules for
  // filtering subresources of that document (and/or of documents in descendent
  // frames). See proto::ActivationType for details.
  //
  // |filtering_disabled_for_document| indicates whether the document in this
  // frame is subject to an allowlist rule with DOCUMENT activation type.
  //
  // |generic_blocking_rules_disabled| indicates whether the document in this
  // frame is subject to an allowlist rule with GENERICBLOCK activation type, and
  // is only defined if |filtering_disabled_for_document| is false.
  bool filtering_disabled_for_document = false;
  bool generic_blocking_rules_disabled = false;

  // Whether or not extended performance measurements are enabled for the
  // current page load (across all frames).
  bool measure_performance = false;

  // Whether or not to log messages in the devtools console.
  bool enable_logging = false;
};

// Contains statistics and performance metrics collected by the
// DocumentSubresourceFilter.
struct DocumentLoadStatistics {
  // The number of subresource loads that went through the
  // DocumentSubresouceFilter filtering methods.
  int32 num_loads_total = 0;

  // Statistics on the number of subresource loads that were evaluated, were
  // matched by filtering rules, and were disallowed, respectively, during the
  // lifetime of a DocumentSubresourceFilter.
  int32 num_loads_evaluated = 0;
  int32 num_loads_matching_rules = 0;
  int32 num_loads_disallowed = 0;

  // Total time spent in GetLoadPolicy() calls evaluating subresource loads.
  mojo_base.mojom.TimeDelta evaluation_total_wall_duration;
  mojo_base.mojom.TimeDelta evaluation_total_cpu_duration;
};

// Subresource filter implemented by the renderer.
interface SubresourceFilterRulesetObserver {
  // Sends a read-only mode file handle with the ruleset data to a renderer
  // process, containing the subresource filtering rules to be consulted for all
  // subsequent document loads that have subresource filtering activated.
  SetRulesetForProcess(mojo_base.mojom.File ruleset_file);
};