chromium/third_party/blink/public/mojom/push_messaging/push_messaging.mojom

// 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.

module blink.mojom;

import "third_party/blink/public/mojom/push_messaging/push_messaging_status.mojom";
import "url/mojom/url.mojom";
import "mojo/public/mojom/base/time.mojom";

// TODO(heke): The type-mapping struct and enums are duplicately defined. Need
// to remove/replace those defined in content or blink namespace.

struct PushSubscriptionOptions {
  bool user_visible_only;
  array<uint8> application_server_key;
};

struct PushSubscription {
  url.mojom.Url endpoint;
  mojo_base.mojom.Time? expirationTime;
  PushSubscriptionOptions options;
  array<uint8> p256dh;
  array<uint8> auth;
};

enum PushErrorType {
  ABORT = 0,
  NETWORK = 1,
  NONE = 2,
  NOT_ALLOWED = 3,
  NOT_FOUND = 4,
  NOT_SUPPORTED = 5,
  INVALID_STATE = 6,
};

interface PushMessaging {
  Subscribe(int64 service_worker_registration_id,
            PushSubscriptionOptions options,
            bool user_gesture)
           => (PushRegistrationStatus status, PushSubscription? subscription);

  // We use the value of |error_type| as a flag. If |error_type| == NONE, it
  // means no error and returns |did_unsubscribe|. Else, it means there is an
  // error and returns |error_type| and |error_message|.
  Unsubscribe(int64 service_worker_registration_id)
             => (PushErrorType error_type,
                 bool did_unsubscribe,
                 string? error_message);

  GetSubscription(int64 service_worker_registration_id)
                 => (PushGetRegistrationStatus status,
                     PushSubscription? subscription);
};