syntax = "proto3";

package googlechrome.lighthouse;

// This comment required for Lightrider import compatibility # header

import "google/protobuf/struct.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";

// This comment required for LightRider import compatibility # suffix

// Canonical list of errors created by Lighthouse.
enum LighthouseError {
  // No error in Lighthouse; the results are reliable.
  NO_ERROR = 0;
  // An uncategorized error occurred, likely a JavaScript exception.
  UNKNOWN_ERROR = 1;
  // The trace did not contain any screenshot events.
  NO_SPEEDLINE_FRAMES = 2;
  // No visual change between the beginning and end of load.
  SPEEDINDEX_OF_ZERO = 3;
  // The trace did not contain any screenshot events.
  NO_SCREENSHOTS = 4;
  // The computed speedindex results are non-finite.
  INVALID_SPEEDLINE = 5;
  // The trace did not contain a TracingStartedInPage event.
  NO_TRACING_STARTED = 6;
  // The trace did not contain a navigationStart event.
  NO_NAVSTART = 7;
  // The trace did not contain a firstContentfulPaint event.
  NO_FCP = 8;
  // The trace did not contain a domContentLoaded event.
  NO_DCL = 9;
  // No network request could be identified as the primary HTML document.
  NO_DOCUMENT_REQUEST = 10;
  // The HTML document's network request failed due to Chrome-internal reasons
  // (canceled, blocked, etc).
  FAILED_DOCUMENT_REQUEST = 11;
  // The HTML document's network request completed, but returned an HTTP status
  // code of 4xx or 5xx.
  ERRORED_DOCUMENT_REQUEST = 12;
  // Chromium's tracing controller did not manage to begin tracing across
  // processes. Typically fixed by restarting Chromium.
  TRACING_ALREADY_STARTED = 13;
  // The trace data wasn't parsed correctly.
  PARSING_PROBLEM = 14;
  // The trace data failed to stream over the protocol.
  READ_FAILED = 15;
  // Used when security error prevents page load.
  INSECURE_DOCUMENT_REQUEST = 16;
  // Used when protocol command times out.
  PROTOCOL_TIMEOUT = 17;
  // Used when the page is not responding after maxWaitForLoad.
  PAGE_HUNG = 18;
  // DNS failure on main document (no resolution, timed out, etc)
  DNS_FAILURE = 19;
  // A timeout in the initial connection to the debugger protocol.
  CRI_TIMEOUT = 20;
  // The page requested was not HTML.
  NOT_HTML = 21;
  // The trace did not contain a ResourceSendRequest event.
  NO_RESOURCE_REQUEST = 22;
  // Used when any Chrome interstitial error prevents page load.
  CHROME_INTERSTITIAL_ERROR = 23;
  // The page has crashed and will no longer respond to 99% of CDP commmands.
  TARGET_CRASHED = 24;
}

// The overarching Lighthouse Response object (LHR)
// https://github.com/GoogleChrome/lighthouse/blob/main/types/lhr.d.ts
message LighthouseResult {
  // The timestamp of when the results were generated.
  google.protobuf.Timestamp fetch_time = 1;

  // The url requested to lightrider.
  string requested_url = 2;

  // The final analyzed URL, differs from requested_url when there were
  // redirects.
  string final_url = 3;

  // The version of Lighthouse with which these results were generated.
  string lighthouse_version = 4;

  // Message containing environment configuration for a LH run
  message Environment {
    // The user agent that was used by the network
    string network_user_agent = 1;

    // The user agent used by the host
    string host_user_agent = 2;

    // The benchmark index that indicates rough device class
    google.protobuf.DoubleValue benchmark_index = 3;

    // The version of libraries with which these results were generated. Ex:
    // axe-core.
    map<string, string> credits = 4;
  }

  // The environment that the audit was run in
  Environment environment = 5;

  // The user agent that was used to run the audit
  string user_agent = 6;

  // Any top level warnings that this run encountered
  // default is [] hence ListValue
  google.protobuf.ListValue run_warnings = 7;

  // Message containing a runtime error config
  message RuntimeError {
    // The text repr of the error type
    LighthouseError code = 1;

    // The error explanitory message
    string message = 2;
  }

  // A runtime error that was encountered during the run
  RuntimeError runtime_error = 8;

  // A map containing the results of the audits, keyed by audit id. Audits may
  // be referenced within more than one category.
  map<string, AuditResult> audits = 9;

  // A map containing the categories of audits, keyed by category id.
  map<string, LhrCategory> categories = 10;

  // A map containing groups that categories can belong to, keyed by group id
  map<string, CategoryGroup> category_groups = 11;

  // Message containing the configuration settings for the LH run
  // Next ID: 33
  message ConfigSettings {
    // The possible form factors an audit can be run in.
    // This enum served the emulated_form_factor field, but in v7, that field
    // was deprecated. Meanwhile in v7, the form_factor field was added and has
    // a mobile/desktop enum, so we simplify reuse, minus the `none` option.
    // See
    // https://github.com/GoogleChrome/lighthouse/blob/main/docs/emulation.md#changes-made-in-v7
    enum EmulatedFormFactor {
      UNKNOWN_FORM_FACTOR = 0;
      mobile = 1;
      desktop = 2;
      none = 3 [deprecated = true];
    }

    // Removed in v7. Do not use.
    EmulatedFormFactor emulated_form_factor = 1 [deprecated = true];

    // How Lighthouse should interpret this run in regards to scoring
    // performance metrics and skipping mobile-only tests in desktop.
    EmulatedFormFactor form_factor = 5;

    // The locale that was active during the audit
    string locale = 2;

    // List of the categories that were run, empty if all were run
    // nullable list of strings
    google.protobuf.Value only_categories = 3;

    // How Lighthouse was run, e.g. from the Chrome extension or from the npm
    // module
    string channel = 4;

    // Next ID: 7
    message ThrottlingSettings {
      // The round trip time in milliseconds.
      double rtt_ms = 1;

      // The network throughput in kilobits per second.
      double throughput_kbps = 2;

      // The network request latency in milliseconds.
      double request_latency_ms = 3;

      // The network download throughput in kilobits per second.
      double download_throughput_kbps = 4;

      // The network upload throughput in kilobits per second.
      double upload_throughput_kbps = 5;

      // The amount of slowdown applied to the cpu (1/<cpuSlowdownMultiplier>).
      double cpu_slowdown_multiplier = 6;
    }

    // The throttling config settings.
    ThrottlingSettings throttling = 7;

    // The method used to throttle the network.
    string throttling_method = 8;

    message ScreenEmulation {
      // Overriding width value in pixels (minimum 0, maximum 10000000).
      // 0 disables the override.
      double width = 1;
      // Overriding height value in pixels (minimum 0, maximum 10000000).
      // 0 disables the override.
      double height = 2;
      // Overriding device scale factor value. 0 disables the override.
      double deviceScaleFactor = 3;
      // Whether to emulate mobile device. This includes viewport meta tag,
      // overlay scrollbars, text autosizing and more.
      bool mobile = 4;
      // Whether screen emulation is disabled. If true, the other emulation
      // settings are ignored.
      bool disabled = 5;
    }

    // Screen emulation properties (width, height, dpr, mobile viewport) to
    // apply or an object of `{disabled: true}` if Lighthouse should avoid
    // applying screen emulation. If either emulation is applied outside of
    // Lighthouse, or it's being run on a mobile device, it typically should be
    // set to disabled. For desktop, we recommend applying consistent desktop
    // screen emulation.
    ScreenEmulation screen_emulation = 9;


    // Indicating whether Lighthouse should ignore status codes.
    bool ignore_status_code = 10;

    // The type(s) of report output to be produced.
    // Can be a string of 'json' | 'html' | 'csv'
    // Or an array of those strings
    google.protobuf.Value output = 11;

    // The maximum amount of time to wait for a page content render, in ms. If
    // no content is rendered within this limit, the run is aborted with an
    // error.
    int32 max_wait_for_fcp = 12;
    // The maximum amount of time to wait for a page to load, in ms.
    int32 max_wait_for_load = 13;
    // The number of milliseconds to wait after FCP until the page should be
    // considered loaded.
    int32 pause_after_fcp_ms = 14;
    // The number of milliseconds to wait after the load event until the page
    // should be considered loaded.
    int32 pause_after_load_ms = 15;
    // The number of milliseconds to wait between high priority network requests
    // or 3 simultaneous requests before the page should be considered loaded.
    int32 network_quiet_threshold_ms = 16;
    // The number of milliseconds to wait between long tasks until the page
    // should be considered loaded.
    int32 cpu_quiet_threshold_ms = 17;

    // User Agent string to apply, `false` to not change the host's UA string,
    // or `true` to use Lighthouse's default UA string.
    string emulated_user_agent = 18;

    // audit_mode and gather_mode are excluded from the proto, as they are boolean/string and niche enough that we don't want to deal with them.

    // Flag indicating that the browser storage should not be reset for the
    // audit.
    bool disable_storage_reset = 19;
    // Flag indicating that Lighthouse should pause after page load to wait for
    // the user's permission to continue the audit.
    bool debug_navigation = 20;
    // If set to true, gatherers should avoid any behavior that may be
    // destructive to the page state. (e.g. extra navigations, resizing the
    // viewport)
    bool use_passive_gathering = 21;
    // Disables collection of the full page screenshot, which can be rather
    // large and possibly leave the page in an undesirable state.
    bool disable_full_page_screenshot = 22;
    // If set to true, will skip the initial navigation to about:blank.
    bool skip_about_blank = 23;
    // The URL to use for the "blank" neutral page in between navigations.
    // Defaults to `about:blank`.
    string blank_page = 24;

    // List of URL patterns to block.
    repeated string blocked_url_patterns = 25;

    // Comma-delimited list of trace categories to include.
    string additional_trace_categories = 26;

    // If present, the run should only conduct this list of audits.
    repeated string only_audits = 27;
    // If present, the run should skip this list of audits.
    repeated string skip_audits = 28;

    // Flag indicating which kinds of browser storage should be reset for the audit.
    // Cookies are not cleared by default, so the user isn't logged out.
    // indexeddb, websql, and localstorage are not cleared by default to prevent
    // loss of potentially important data.
    // https://chromedevtools.github.io/debugger-protocol-viewer/tot/Storage/#type-StorageType
    repeated string clear_storage_types = 29;

    // List of extra HTTP Headers to include
    map<string, string> extra_headers = 30;

    // The budget.json object for LightWallet
    repeated google.protobuf.Struct budgets = 31 [deprecated = true];

    // Precomputed lantern estimates to use instead of observed analysis.
    google.protobuf.Struct precomputed_lantern_data = 32;
  }

  // The settings that were used to run this audit
  ConfigSettings config_settings = 12;

  // i18n info in version 1 message format
  I18n i18n = 13;

  // Message containing the performance timing data for the Lighthouse run
  message Timing {
    // Corresponds to:
    // https://www.w3.org/TR/performance-timeline-2/#dom-performanceentry
    message PerformanceEntry {
      string name = 1;
      string entry_type = 2;
      google.protobuf.DoubleValue start_time = 3;
      google.protobuf.DoubleValue duration = 4;

      // Whether timing entry was collected during artifact gathering.
      bool gather = 5;
    }

    // The total duration of Lighthouse's run
    google.protobuf.DoubleValue total = 1;

    // Corresponds to:
    // https://www.w3.org/TR/performance-timeline-2/#idl-def-performanceentrylist
    repeated PerformanceEntry entries = 2;
  }

  // The performance timing data for the Lighthouse run
  Timing timing = 14;

  // The Stack Pack data used by audits in this run.
  repeated StackPack stack_packs = 15;

  // Gather mode used to collect artifacts.
  string gather_mode = 16;

  // URL of the main document request of the final navigation.
  string main_document_url = 17;

  // URL displayed on the page after Lighthouse finishes.
  string final_displayed_url = 18;

  // Screenshot data of the full page, along with node rects relevant to the
  // audit results.
  google.protobuf.Value full_page_screenshot = 19;

  // Entity classification data.
  repeated LhrEntity entities = 20;
}

// Message containing a category
message CategoryGroup {
  // The human readable title of the group
  string title = 1;

  // The description of what the category is grouping
  string description = 2;
}

// Message containing a category of audits and their combined weighted score.
message LhrCategory {
  // the internal id of the category
  string id = 1;

  // The human-friendly name of the category.
  string title = 2;

  // A description of what this category is about (e.g. these help you validate
  // your seo).
  string description = 3;

  // The overall score of the category, the weighted average of all its audits,
  // from 0-1.
  // This value is nullable, so is a `Value` type
  google.protobuf.Value score = 4;

  // A description for manual audits within this category.
  string manual_description = 5;

  // A Category's reference to an AuditResult, with a weight for category
  // scoring.
  message AuditRef {
    // Matches a key in the top-level `audits` map.
    string id = 1;

    // The weight of the audit's score in the overall category score.
    google.protobuf.DoubleValue weight = 2;

    // The category group that the audit belongs to.
    string group = 3;

    // The conventional acronym for the audit/metric.
    string acronym = 4;

    // Any audit IDs closely relevant to this one.
    repeated string relevant_audits = 5;
  }

  // References to all the audit members and their weight in this category.
  repeated AuditRef audit_refs = 6;

  // List of gather modes this category is available in.
  repeated string supported_modes = 7;
}

// The ways an audit score should be interpreted:
enum ScoreDisplayMode {
  // Unknown mode. This should not be used.
  SCORE_DISPLAY_MODE_UNSPECIFIED = 0;
  // Pass/fail audit (0 and 1 are the only possible scores).
  binary = 1;
  // Scores of 0-1, inclusive.
  numeric = 2;
  // Audit result score is determined by the metric savings and product score.
  // 1 - audit passed
  // 0.5 - audit failed and had no metric savings
  // 0 - audit failed and had metric savings
  metricSavings = 8;
  // The audit is an FYI only, and can't be interpreted as pass/fail. Score is
  // NaN and should be ignored.
  informative = 3;
  // The audit turned out to not apply to the page. Score is NaN and should be
  // ignored.
  not_applicable = 4;
  notApplicable = 7;
  // The audit exists only to tell you to review something yourself. Score is
  // NaN and should be ignored
  manual = 5;
  // There was an error while running the audit (check `error_message` for
  // details). Score is NaN and should be ignored.
  error = 6;
}

// Message containing the result of an individual Lighthouse audit.
message AuditResult {
  // The internal audit id
  string id = 1;

  // A brief description of the audit. The text can change depending on if the
  // audit passed or failed.
  string title = 2;

  // A more detailed description that describes why the audit is important and
  // links to Lighthouse documentation on the audit; markdown links supported.
  string description = 3;

  // The scored value determined by the audit, in the range `0-1`, or NaN if
  // `score_display_mode` indicates not scored.
  // This value is nullable, so is a `Value` type
  google.protobuf.Value score = 4;

  // The mode for how the score should be interpreted.
  ScoreDisplayMode score_display_mode = 5;

  // The human readable value that is displayed as the audit's result
  string display_value = 6;

  // An explanation of audit-related issues encountered on the test page.
  string explanation = 7;

  // Error message from any exception thrown while running this audit.
  string error_message = 8;

  // Extra information provided by some types of audits.  Given as an arbitrary
  // object.
  google.protobuf.Struct details = 9;

  // List of warnings associated with this audit
  // type of `Value` since this can be null
  google.protobuf.Value warnings = 10;

  // A numeric value that has a meaning specific to the audit, e.g. the number
  // of nodes in the DOM or the timestamp of a specific load event. More
  // information can be found in the audit details, if present.
  google.protobuf.DoubleValue numeric_value = 11;

  // The unit of the numeric_value field. Used to format the numeric value for
  // display.
  string numeric_unit = 12;

  // Stacktrace of error, if any occurred while processing the audit.
  string errorStack = 13;

  // Message containing the audit's MetricSavings.
  message MetricSavings {
    // Optional numeric value representing the audit's savings for the LCP
    // metric.
    optional google.protobuf.DoubleValue LCP = 1;

    // Optional numeric value representing the audit's savings for the FCP
    // metric.
    optional google.protobuf.DoubleValue FCP = 2;

    // Optional numeric value representing the audit's savings for the CLS
    // metric.
    optional google.protobuf.DoubleValue CLS = 3;

    // Optional numeric value representing the audit's savings for the TBT
    // metric.
    optional google.protobuf.DoubleValue TBT = 4;

    // Optional numeric value representing the audit's savings for the INP
    // metric.
    optional google.protobuf.DoubleValue INP = 5;
  }

  // The audit's MetricSavings.
  MetricSavings metricSavings = 14;

  // Message containing ScoringOptions.
  message ScoringOptions {
    // Scoring option's p10.
    google.protobuf.DoubleValue p10 = 1;

    // Scoring option's median.
    google.protobuf.DoubleValue median = 2;
  }

  // The audit's ScoringOption.
  ScoringOptions scoringOptions = 15;

  // An audit's guidance level.
  google.protobuf.DoubleValue guidanceLevel = 16;

  // Audits that this audit replaces.
  google.protobuf.Value replacesAudits = 17;
}

// Message containing the i18n data for the LHR - Version 1
message I18n {
  // Message holding the formatted strings used in the renderer
  message RendererFormattedStrings {
    // The disclaimer shown below a performance metric value
    string variance_disclaimer = 1;

    // The heading for the estimated page load savings opportunity of an audit
    string opportunity_resource_column_label = 2;

    // The heading for the estimated page load savings of opportunitu audits
    string opportunity_savings_column_label = 3;

    // The error string shown next to an erroring audit
    string error_missing_audit_info = 4;

    // The label shown next to an audit or metric that has had an error
    string error_label = 5;

    // The label shown above a bulleted list of warnings
    string warning_header = 6;

    // The tooltip text on an expandable chevron icon
    string audit_group_expand_tooltip = 7;

    // The heading that is shown above a list of audits that are passing
    string passed_audits_group_title = 8;

    // The heading shown above a list of audits that do not apply to a page
    string not_applicable_audits_group_title = 9;

    // The heading shown above a list of audits that were not computerd in the
    // run
    string manual_audits_group_title = 10;

    // The label shown preceding important warnings that may have invalidated an
    // entire report
    string toplevel_warnings_message = 11;

    // The label that explains the score gauges scale (0-49, 50-89, 90-100)
    string scorescale_label = 12;

    // The label for values shown in the summary of critical request chains
    string crc_longest_duration_label = 13;

    // The label for the initial request in a critical request chain
    string crc_initial_navigation = 14;

    // The disclaimer shown under performance explaining that the network can
    // vary
    string ls_performance_category_description = 15;

    // The title of the lab data performance category
    string lab_data_title = 16;

    // The heading that is shown above a list of audits that have warnings
    string warning_audits_group_title = 17;

    // The label for the button to show all lines of a snippet
    string snippet_expand_button_label = 18;

    // The label for the button to show only a few lines of a snippet
    string snippet_collapse_button_label = 19;

    // This label is for a filter checkbox above a table of items
    string third_party_resources_label = 20;

    // Descriptive explanation for emulation setting when emulating a generic
    // desktop form factor, as opposed to a mobile-device like form factor.
    string runtime_desktop_emulation = 21;

    // Descriptive explanation for emulation setting when emulating a Nexus 5X
    // mobile device.
    string runtime_mobile_emulation = 22;

    // Descriptive explanation for emulation setting when no device emulation is
    // set.
    string runtime_no_emulation = 23;

    // Label for a row in a table that shows the estimated CPU power of the
    // machine running Lighthouse. Example row values: 532, 1492, 783.
    string runtime_settings_benchmark = 24;

    // Label for a row in a table that describes the CPU throttling conditions
    // that were used during a Lighthouse run, if any.
    string runtime_settings_CPU_throttling = 25;

    // Label for a row in a table that describes the kind of device that was
    // emulated for the Lighthouse run.  Example values for row elements: 'No
    // Emulation', 'Emulated Desktop', etc.
    string runtime_settings_device = 26;

    // Label for a row in a table that shows the time at which a Lighthouse run
    // was conducted; formatted as a timestamp, e.g. Jan 1, 1970 12:00 AM UTC.
    string runtime_settings_fetch_time = 27 [deprecated = true];

    // Label for a row in a table that describes the network throttling
    // conditions that were used during a Lighthouse run, if any.
    string runtime_settings_network_throttling = 28;

    // Title of the Runtime settings table in a Lighthouse report.  Runtime
    // settings are the environment configurations that a specific report used
    // at auditing time.
    string runtime_settings_title = 29 [deprecated = true];

    // Label for a row in a table that shows the User Agent that was detected on
    // the Host machine that ran Lighthouse.
    string runtime_settings_UA = 30 [deprecated = true];

    // Label for a row in a table that shows the User Agent that was used to
    // send out all network requests during the Lighthouse run.
    string runtime_settings_UA_network = 31;

    // Label for a row in a table that shows the URL that was audited during a
    // Lighthouse run.
    string runtime_settings_Url = 32 [deprecated = true];

    // Descriptive explanation for a runtime setting that is set to an unknown
    // value.
    string runtime_unknown = 33;

    // Option in a dropdown menu that copies the Lighthouse JSON object to the
    // system clipboard.
    string dropdown_copy_JSON = 34;

    // Option in a dropdown menu that toggles the themeing of the report between
    // Light(default) and Dark themes.
    string dropdown_dark_theme = 35;

    // Option in a dropdown menu that opens a full Lighthouse report in a print
    // dialog.
    string dropdown_print_expanded = 36;

    // Option in a dropdown menu that opens a small, summary report in a print
    // dialog.
    string dropdown_print_summary = 37;

    // Option in a dropdown menu that saves the current report as a new GitHub
    // Gist.
    string dropdown_save_gist = 38;

    // Option in a dropdown menu that saves the Lighthouse report HTML locally
    // to the system as a '.html' file.
    string dropdown_save_HTML = 39;

    // Option in a dropdown menu that saves the Lighthouse JSON object to the
    // local system as a '.json' file.
    string dropdown_save_JSON = 40;

    // Option in a dropdown menu that opens the current report in the Lighthouse
    // Viewer Application.
    string dropdown_viewer = 41;

    // Label for button to create an issue against the Lighthouse GitHub
    // project.
    string footer_issue = 42;

    // Descriptive explanation for environment throttling that was provided by
    // the runtime environment instead of provided by Lighthouse throttling.
    string throttling_provided = 43;

    // Label for a row in a table that shows in what tool Lighthouse is being
    // run (e.g. The lighthouse CLI, Chrome DevTools, Lightrider, WebPageTest,
    // etc).
    string runtime_settings_channel = 44 [deprecated = true];

    // Text link pointing to the Lighthouse scoring calculator. This link
    // immediately follows a sentence stating the performance score is
    // calculated from the perf metrics.
    string calculator_link = 45;

    // Label for a row in a table that shows the version of the Axe library used
    string runtime_settings_axe_version = 46;

    // Label for a button that opens the Treemap App
    string view_treemap_label = 47;

    // Label preceding a radio control for filtering the list of audits. The
    // radio choices are various performance metrics (FCP, LCP, TBT), and if
    // chosen, the audits in the report are hidden if they are not relevant to
    // the selected metric.
    string show_relevant_audits = 48;

    // Descriptive label that this analysis run was from a single pageload
    // of a browser (not a summary of hundreds of loads)
    string runtime_single_load = 49;

    // Descriptive explanation that this analysis run was from a single pageload
    // of a browser, whereas field data often summarizes hundreds+ of page loads
    string runtime_single_load_tooltip = 50;

    // Descriptive label that this analysis only considers the initial load of
    // the page, and no interaction beyond when the page had "fully loaded"
    string runtime_analysis_window = 51;

    // Label for an interactive control that will reveal or hide a group of
    // content. This control toggles between the text 'Show' and 'Hide'.
    string show = 52;

    // Label for an interactive control that will reveal or hide a group of
    // content. This control toggles between the text 'Show' and 'Hide'.
    string hide = 53;

    // Label for an interactive control that will reveal or hide a group of
    // content. This control toggles between the text 'Expand view' and
    // 'Collapse view'.
    string expand_view = 54;

    // Label for an interactive control that will reveal or hide a group of
    // content. This control toggles between the text 'Expand view' and
    // 'Collapse view'.
    string collapse_view = 55;

    // Label indicating that Lighthouse throttled the page to emulate a slow 4G
    // network connection.
    string runtime_slow_4g = 56;

    // Label indicating that Lighthouse throttled the page using custom
    // throttling settings.
    string runtime_custom = 57;

    // This label is for a button that will show the user a trace of the page.
    string view_trace_label = 58;

    // This label is for a button that will show the user a trace of the page.
    string view_original_trace_label = 59 [deprecated = true];

    // Label for a row in a table that shows the screen emulation used
    string runtime_settings_screen_emulation = 60;

    // Label for a row decorative chip indiciating entity is first-party.
    string first_party_chip_label = 61;

    // Label for a link tooltip indicating that it will be opened in a new tab
    // of the browser.
    string open_in_a_new_tab_tooltip = 62;

    // Label for a generic category for all resources that could not be
    // attributed against a 1st or 3rd party entity.
    string unattributable = 63;

    // This label is for a button that will show the user a trace of the page.
    string dropdown_view_unthrottled_trace = 64;

    // Descriptive label that this analysis considers some arbitrary period of
    // time containing user interactions
    string runtime_analysis_window_timespan = 65;

    // Descriptive label that this analysis considers a snapshot of the page at
    // a single point in time
    string runtime_analysis_window_snapshot = 66;

    // Message for PWA deprecation.
    string pwa_removal_message = 67;

    // Option in a dropdown menu that toggles the performance audits between
    // new insights from RPP and legacy perf audits.
    string dropdown_insights_toggle = 68;

    // Notice about upcoming planned changes to Lighthouse, to replace most
    // performance audits with a new set of "insight" audits.
    string insights_notice = 69;

    // Text for a button to try out "Performance insight audits", a new set of
    // performance advice that will replace performance audits.
    string try_insights = 70;

    // Text for a button for going back to normal "Performance audits", instead of
    // using the new set of performance insight audits that will replace performance
    // audits.
    string go_back_to_audits = 71;

    // Descriptive explanation used when an audit is not part of the calculated score.
    string unscored_label = 72;

    // Descriptive explanation used when an audit is not part of the calculated score.
    string unscored_title = 73;
  }

  // The message holding all formatted strings used in the renderer.
  RendererFormattedStrings renderer_formatted_strings = 1;

  // Holds all message paths used. The locale of the report has already be used
  // to translated the strings in this LighthouseResult, but this field can be
  // used to translate into another language.
  map<string, google.protobuf.ListValue> icu_message_paths = 2;
}

// Message containing Stack Pack information.
message StackPack {
  // The human readable id of the Stack Pack.
  string id = 1;

  // The user facing title of the Stack Pack.
  string title = 2;

  // The icon as a data url.
  string icon_data_URL = 3;

  // Map of audit-ids to Stack Pack descriptions.
  map<string, string> descriptions = 4;
}

// Message containing an Entity.
message LhrEntity {
  // Name of the entity.
  string name = 1;

  // An optional homepage URL of the entity.
  optional string homepage = 2;

  // An optional category name for the entity.
  optional string category = 3;

  // An optional flag indicating if the entity is the first party.
  optional bool is_first_party = 4;

  // An optional flag indicating if the entity is not recognized.
  optional bool is_unrecognized = 5;

  // A list of URL origin strings that belong to this entity.
  repeated string origins = 6;
}
