chromium/content/browser/background_fetch/background_fetch.proto

// Copyright 2017 The Chromium Authors
// 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 content.proto;

// Stores per-registration (as opposed to per-request) data.
// https://wicg.github.io/background-fetch/#background-fetch-registration
//
// Next Tag: 9
message BackgroundFetchRegistration {
  enum BackgroundFetchResult {
    UNSET = 0;  // Default value.
    FAILURE = 1;
    SUCCESS = 2;
  }

  // This should be kept in sync with blink.mojom.BackgroundFetchFailureReason.
  enum BackgroundFetchFailureReason {
    NONE = 0;  // Default value.
    CANCELLED_FROM_UI = 1;
    CANCELLED_BY_DEVELOPER = 2;
    BAD_STATUS = 3;
    FETCH_ERROR = 4;
    SERVICE_WORKER_UNAVAILABLE = 5;
    QUOTA_EXCEEDED = 6;
    DOWNLOAD_TOTAL_EXCEEDED = 7;
  }

  // See definition of |unique_id| in BackgroundFetchRegistrationId.
  optional string unique_id = 1;

  // See definition of |developer_id| in BackgroundFetchRegistrationId.
  optional bytes developer_id = 2;

  optional uint64 upload_total = 3;
  optional uint64 uploaded = 4;
  optional uint64 download_total = 5;
  optional uint64 downloaded = 6;
  optional BackgroundFetchResult result = 7;
  optional BackgroundFetchFailureReason failure_reason = 8;
}

// TODO(crbug.com/40245169): Move ImageResource to generic place.
// Currently also being used within chrome/browser/web_applications
// https://w3c.github.io/manifest/#dom-imageresource
//
// Next Tag: 5
message ImageResource {
  optional string src = 1;

  // Next Tag: 3
  message Size {
    optional int32 width = 1;
    optional int32 height = 2;
  }

  repeated Size sizes = 2;
  optional bytes type = 3;

  // https://w3c.github.io/manifest/#purpose-member
  enum Purpose {
    ANY = 1;
    MONOCHROME = 2;
    MASKABLE = 3;
  }

  // blink::mojom::ManifestImageResource_Purpose enum.
  repeated Purpose purpose = 4;
}

// Developer provided options.
// https://wicg.github.io/background-fetch/#background-fetch-manager
//
// Next Tag: 3
message BackgroundFetchOptions {
  // The initial title provided by the developer. This can be updated,
  // and the most recent value is stored in BackgroundFetchUIOptions.
  optional string title = 1;

  repeated ImageResource icons = 2;

  optional uint64 download_total = 3;
}

// Keeps track of the version of the persisted data. If a breaking change
// needs to be made, increment `CURRENT`, and replace it with a descriptive
// name of the change. Don't directly check against `SV_CURRENT` as it can be
// changed.
// For example, if you want to enable a new key format for the SWDB, perform
// the following steps:
// 1. Add a new enum value (SV_ENABLE_NEW_KEY_FORMAT) and increment
//    `SV_CURRENT`
// 2. Migrate the old formats on database load (DatabaseMigrationTask).
// 3. Add a TODO with a bug to clean this up after 2 milestones or so.
//
// Next Value: 3
enum BackgroundFetchStorageVersion {
  // There was an error when trying to get the storage version.
  SV_ERROR = -1;
  // No storage version was found.
  SV_UNINITIALIZED = 0;

  // Migrate registered fetches to use the new Cache URL key format, to make
  // them unique, and allow for duplicate requests in a registration.
  SV_UNIQUE_CACHE_KEYS = 1;

  // Add new versions here.

  // Must be last.
  SV_CURRENT = 2;
}

// Stores information about the background fetch that will be persisted
// to disk. This information should be everything needed to reconstruct
// the state of an interrupted background fetch.
//
// Next Tag: 8
message BackgroundFetchMetadata {
  optional int64 creation_microseconds_since_unix_epoch = 1;
  optional string origin = 2 [deprecated = true];

  optional BackgroundFetchRegistration registration = 3;
  optional BackgroundFetchOptions options = 4;

  // Number of fetches initiated by the developer.
  optional int32 num_fetches = 5;

  // Serialized net::IsolationInfo associated with the Background Fetch.
  optional string isolation_info = 6;

  // Serialized storage key; this replaces origin
  optional string storage_key = 7;
}

// All the updateable options that show up in the UI (e.g. notification).
//
// Next Tag: 3
message BackgroundFetchUIOptions {
  optional string title = 1;

  // Raw bytes needed to deserialize into a PNG icon. Only used if the icon
  // has a max resolution of 256x256. This means this is at most ~256KB.
  optional bytes icon = 2;
}

// A background fetch request that is still in a pending state.
//
// Next Tag: 6
message BackgroundFetchPendingRequest {
  optional string unique_id = 1;
  optional int32 request_index = 2;
  optional string serialized_request = 3;
  optional uint64 request_body_size = 5;

  reserved 4;
}

// A background fetch request in the active state. This means that
// the DownloadManager started downloading the file.
//
// Next Tag: 7
message BackgroundFetchActiveRequest {
  optional string unique_id = 1;
  optional int32 request_index = 2;
  optional string serialized_request = 3;
  optional string download_guid = 4;
  optional uint64 request_body_size = 6;

  reserved 5;
}

// A background fetch request in the completed state. This means that
// the DownloadManager returned the download.
//
// Next Tag: 7
message BackgroundFetchCompletedRequest {
  optional string unique_id = 1;
  optional int32 request_index = 2;
  optional string serialized_request = 3;
  optional string download_guid = 4;
  optional BackgroundFetchRegistration.BackgroundFetchFailureReason
      failure_reason = 6;

  reserved 5;
}