| Index: content/common/push_messaging.mojom
 | 
| diff --git a/content/common/push_messaging.mojom b/content/common/push_messaging.mojom
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..ae843a2834682583c91d2a39be83a71068be1612
 | 
| --- /dev/null
 | 
| +++ b/content/common/push_messaging.mojom
 | 
| @@ -0,0 +1,161 @@
 | 
| +// 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 "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;
 | 
| +};
 | 
| +
 | 
| +// Push registration success/error codes for internal use & reporting in UMA.
 | 
| +// Enum values can be added, but must never be renumbered or deleted and reused.
 | 
| +enum PushRegistrationStatus {
 | 
| +  // New successful registration (there was not yet a registration cached in
 | 
| +  // Service Worker storage, so the browser successfully registered with the
 | 
| +  // push service. This is likely to be a new push registration, though it's
 | 
| +  // possible that the push service had its own cache (for example if Chrome's
 | 
| +  // app data was cleared, we might have forgotten about a registration that the
 | 
| +  // push service still stores).
 | 
| +  SUCCESS_FROM_PUSH_SERVICE = 0,
 | 
| +
 | 
| +  // Registration failed because there is no Service Worker.
 | 
| +  NO_SERVICE_WORKER = 1,
 | 
| +
 | 
| +  // Registration failed because the push service is not available.
 | 
| +  SERVICE_NOT_AVAILABLE = 2,
 | 
| +
 | 
| +  // Registration failed because the maximum number of registratons has been
 | 
| +  // reached.
 | 
| +  LIMIT_REACHED = 3,
 | 
| +
 | 
| +  // Registration failed because permission was denied.
 | 
| +  PERMISSION_DENIED = 4,
 | 
| +
 | 
| +  // Registration failed in the push service implemented by the embedder.
 | 
| +  SERVICE_ERROR = 5,
 | 
| +
 | 
| +  // Registration failed because no sender id was provided by the page.
 | 
| +  NO_SENDER_ID = 6,
 | 
| +
 | 
| +  // Registration succeeded, but we failed to persist it.
 | 
| +  STORAGE_ERROR = 7,
 | 
| +
 | 
| +  // A successful registration was already cached in Service Worker storage.
 | 
| +  SUCCESS_FROM_CACHE = 8,
 | 
| +
 | 
| +  // Registration failed due to a network error.
 | 
| +  NETWORK_ERROR = 9,
 | 
| +
 | 
| +  // Registration failed because the push service is not available in incognito,
 | 
| +  // but we tell JS that permission was denied to not reveal incognito.
 | 
| +  INCOGNITO_PERMISSION_DENIED = 10,
 | 
| +
 | 
| +  // Registration failed because the public key could not be retrieved.
 | 
| +  PUBLIC_KEY_UNAVAILABLE = 11,
 | 
| +
 | 
| +  // Registration failed because the manifest could not be retrieved or was
 | 
| +  // empty.
 | 
| +  MANIFEST_EMPTY_OR_MISSING = 12,
 | 
| +
 | 
| +  // Registration failed because a subscription with a different sender id
 | 
| +  // already exists.
 | 
| +  SENDER_ID_MISMATCH = 13,
 | 
| +
 | 
| +  // NOTE: Do not renumber these as that would confuse interpretation of
 | 
| +  // previously logged data. When making changes, also update the enum list
 | 
| +  // in tools/metrics/histograms/histograms.xml to keep it in sync, and
 | 
| +  // update LAST below.
 | 
| +
 | 
| +  LAST = SENDER_ID_MISMATCH
 | 
| +};
 | 
| +
 | 
| +enum PushErrorType {
 | 
| +  ABORT = 0,
 | 
| +  NETWORK = 1,
 | 
| +  NOT_ALLOWED = 2,
 | 
| +  NOT_FOUND = 3,
 | 
| +  NOT_SUPPORTED = 4,
 | 
| +  UNKNOWN = 5,
 | 
| +  INVALID_STATE = 6,
 | 
| +  LAST = INVALID_STATE
 | 
| +};
 | 
| +
 | 
| +// Push getregistration success/error codes for internal use & reporting in UMA.
 | 
| +// Enum values can be added, but must never be renumbered or deleted and reused.
 | 
| +enum PushGetRegistrationStatus {
 | 
| +  // Getting the registration was successful.
 | 
| +  SUCCESS = 0,
 | 
| +
 | 
| +  // Getting the registration failed because the push service is not available.
 | 
| +  SERVICE_NOT_AVAILABLE = 1,
 | 
| +
 | 
| +  // Getting the registration failed because we failed to read from storage.
 | 
| +  STORAGE_ERROR = 2,
 | 
| +
 | 
| +  // Getting the registration failed because there is no push registration.
 | 
| +  REGISTRATION_NOT_FOUND = 3,
 | 
| +
 | 
| +  // Getting the registration failed because the push service isn't available in
 | 
| +  // incognito, but we tell JS registration not found to not reveal incognito.
 | 
| +  INCOGNITO_REGISTRATION_NOT_FOUND = 4,
 | 
| +
 | 
| +  // Registration failed because the public key could not be retrieved.
 | 
| +  PUBLIC_KEY_UNAVAILABLE = 5,
 | 
| +
 | 
| +  // NOTE: Do not renumber these as that would confuse interpretation of
 | 
| +  // previously logged data. When making changes, also update the enum list
 | 
| +  // in tools/metrics/histograms/histograms.xml to keep it in sync, and
 | 
| +  // update LAST below.
 | 
| +
 | 
| +  LAST = PUBLIC_KEY_UNAVAILABLE
 | 
| +};
 | 
| +
 | 
| +enum PushPermissionStatus {
 | 
| +  GRANTED = 0,
 | 
| +  DENIED = 1,
 | 
| +  PROMPT = 2,
 | 
| +  LAST = PROMPT
 | 
| +};
 | 
| +
 | 
| +interface PushMessaging {
 | 
| +  Subscribe(int32 render_frame_id,
 | 
| +            int64 service_worker_registration_id,
 | 
| +            PushSubscriptionOptions options)
 | 
| +           => (PushRegistrationStatus status,
 | 
| +               url.mojom.Url? endpoint,
 | 
| +               PushSubscriptionOptions? options,
 | 
| +               array<uint8>? p256dh,
 | 
| +               array<uint8>? auth);
 | 
| +
 | 
| +  // It returns |did_unsubscribe| if is_success is true, and returns
 | 
| +  // |error_type| and |error_message| if is_success is false.
 | 
| +  Unsubscribe(int64 service_worker_registration_id)
 | 
| +             => (bool is_success,
 | 
| +                 bool did_unsubscribe,
 | 
| +                 PushErrorType error_type,
 | 
| +                 string? error_message);
 | 
| +
 | 
| +  GetSubscription(int64 service_worker_registration_id)
 | 
| +                 => (PushGetRegistrationStatus status,
 | 
| +                     url.mojom.Url? endpoint,
 | 
| +                     PushSubscriptionOptions? options,
 | 
| +                     array<uint8>? p256dh,
 | 
| +                     array<uint8>? auth);
 | 
| +
 | 
| +  // It returns |status| if |is_success| is true and returns |error| if
 | 
| +  // |is_success| is false.
 | 
| +  GetPermissionStatus(int64 service_worker_registration_id,
 | 
| +                      bool user_visible)
 | 
| +                     => (bool is_success,
 | 
| +                         // |status| is meaningful when (is_success == true)
 | 
| +                         PushPermissionStatus status,
 | 
| +                         // |error| is meaningful when (is_success == false)
 | 
| +                         PushErrorType error);
 | 
| +};
 | 
| 
 |