// Copyright (c) 2012 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.

// Use <code>chrome.pushMessaging</code> to enable apps and extensions to
// receive message data sent through
// <a href="cloudMessaging.html">Google Cloud Messaging</a>.
namespace pushMessaging {

  dictionary Message {
    // The subchannel the message was sent on;
    // only values 0-3 are valid.
    long subchannelId;

    // The payload associated with the message, if any. This should not contain
    // any personally identifiable information.
    DOMString payload;
  };

  dictionary ChannelIdResult {
    // The channel ID for this app to use for push messaging.
    DOMString channelId;
  };

  callback ChannelIdCallback = void (ChannelIdResult channelId);

  interface Functions {
    // Retrieves the channel ID associated with this app or extension.
    // Typically an app or extension will want to send this value
    // to its application server so the server can use it
    // to trigger push messages back to the app or extension.
    // If the interactive flag is set, we will ask the user to log in
    // when they are not already logged in.
    static void getChannelId(optional boolean interactive,
                             ChannelIdCallback callback);
  };

  interface Events {
    // Fired when a push message has been received.
    // |message| : The details associated with the message.
    static void onMessage(Message message);
  };
};
