/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIDOMMozMobileICCInfo;
interface nsIDOMMozMobileConnectionInfo;
interface nsIDOMMozMobileNetworkInfo;
interface nsIDOMMozMobileCFInfo;
interface nsIDOMDOMRequest;
interface nsIDOMWindow;

[scriptable, uuid(d09099b0-a25a-11e2-9e96-0800200c9a66)]
interface nsIMobileConnectionListener : nsISupports
{
  void notifyVoiceChanged();
  void notifyDataChanged();
  void notifyCardStateChanged();
  void notifyIccInfoChanged();
  void notifyUssdReceived(in DOMString message,
                          in boolean sessionEnded);
  void notifyDataError(in DOMString message);
  void notifyCFStateChange(in boolean success,
                           in unsigned short action,
                           in unsigned short reason,
                           in DOMString number,
                           in unsigned short timeSeconds,
                           in unsigned short serviceClass);
};

/**
 * XPCOM component (in the content process) that provides the mobile
 * network information.
 */
[scriptable, uuid(b9605230-a25a-11e2-9e96-0800200c9a66)]
interface nsIMobileConnectionProvider : nsISupports
{
  /**
   * Called when a content process registers receiving unsolicited messages from
   * RadioInterfaceLayer in the chrome process. Only a content process that has
   * the 'mobileconnection' permission is allowed to register.
   */
  void registerMobileConnectionMsg(in nsIMobileConnectionListener listener);
  void unregisterMobileConnectionMsg(in nsIMobileConnectionListener listener);

  readonly attribute DOMString cardState;
  readonly attribute long retryCount;
  readonly attribute nsIDOMMozMobileICCInfo iccInfo;
  readonly attribute nsIDOMMozMobileConnectionInfo voiceConnectionInfo;
  readonly attribute nsIDOMMozMobileConnectionInfo dataConnectionInfo;
  readonly attribute DOMString networkSelectionMode;

  nsIDOMDOMRequest getNetworks(in nsIDOMWindow window);
  nsIDOMDOMRequest selectNetwork(in nsIDOMWindow window, in nsIDOMMozMobileNetworkInfo network);
  nsIDOMDOMRequest selectNetworkAutomatically(in nsIDOMWindow window);

  nsIDOMDOMRequest sendMMI(in nsIDOMWindow window, in DOMString mmi);
  nsIDOMDOMRequest cancelMMI(in nsIDOMWindow window);

  nsIDOMDOMRequest getCallForwardingOption(in nsIDOMWindow   window,
                                           in unsigned short reason);
  nsIDOMDOMRequest setCallForwardingOption(in nsIDOMWindow          window,
                                           in nsIDOMMozMobileCFInfo CFInfo);

  nsIDOMDOMRequest getCallBarringOption(in nsIDOMWindow window,
                                        in jsval        option);
  nsIDOMDOMRequest setCallBarringOption(in nsIDOMWindow window,
                                        in jsval        option);

  nsIDOMDOMRequest setCallWaitingOption(in nsIDOMWindow   window,
                                        in bool enabled);
  nsIDOMDOMRequest getCallWaitingOption(in nsIDOMWindow   window);
};
