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

module content.mojom;

import "content/public/common/push_messaging_status.mojom";
import "url/mojo/url.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;
  string sender_info;
};

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

enum PushPermissionStatus {
  GRANTED = 0,
  DENIED = 1,
  PROMPT = 2,
  LAST = PROMPT
};

interface PushMessaging {
  Subscribe(int32 render_frame_id,
            int64 service_worker_registration_id,
            PushSubscriptionOptions options,
            bool user_gesture)
           => (PushRegistrationStatus status,
               url.mojom.Url? endpoint,
               PushSubscriptionOptions? options,
               array<uint8>? p256dh,
               array<uint8>? auth);

  // 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,
                     url.mojom.Url? endpoint,
                     PushSubscriptionOptions? options,
                     array<uint8>? p256dh,
                     array<uint8>? auth);

  // We use the value of |error_type| as a flag. If |error_type| == NONE, it
  // means no error and returns |status|. Else, it means there is an error and
  // returns |error_type|.
  GetPermissionStatus(int64 service_worker_registration_id,
                      bool user_visible)
                     => (PushErrorType error_type,
                         PushPermissionStatus status);
};
