// 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;
}
