/* 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;

/**
 * XPCOM component (in the content process) that provides the mobile
 * network information.
 */
[scriptable, uuid(0fb90831-801d-4a84-a56f-7cbc77ba9d61)]
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. Note that content
   * doesn't need to unregister because the chrome process will remove it from
   * the registration list once the chrome receives a 'child-process-shutdown'
   * message.
   */
  void registerMobileConnectionMsg();

  readonly attribute DOMString cardState;
  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 getCardLock(in nsIDOMWindow window, in DOMString lockType);
  nsIDOMDOMRequest unlockCardLock(in nsIDOMWindow window, in jsval info);
  nsIDOMDOMRequest setCardLock(in nsIDOMWindow window, in jsval info);

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

  void sendStkResponse(in nsIDOMWindow window,
                       in jsval        command,
                       in jsval        response);
  void sendStkMenuSelection(in nsIDOMWindow   window,
                            in unsigned short itemIdentifier,
                            in boolean        helpRequested);
  void sendStkEventDownload(in nsIDOMWindow window,
                            in jsval        event);

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