/* 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 nsIURI;
interface nsIDOMWindow;
interface nsIDOMElement;
interface nsIDOMGeoPosition;
interface nsIGeolocationPrompt;

/**

 * Interface provides a way for a geolocation provider to
 * notify the system that a new location is available.
 */
[scriptable, uuid(B89D7227-9F04-4236-A582-25A3F2779D72)]
interface nsIGeolocationUpdate : nsISupports {

  /**
   * Notify the geolocation service that a new geolocation
   * has been discovered.
   * This must be called on the main thread
   */
  void update(in nsIDOMGeoPosition position);
};


/**
 * Interface provides location information to the nsGeolocator
 * via the nsIDOMGeolocationCallback interface.  After
 * startup is called, any geo location change should call
 * callback.update().
 */
[scriptable, uuid(d32b87b3-fe96-4f42-81ab-2f39f7ec43ff)]
interface nsIGeolocationProvider : nsISupports {

  /**
   * Start up the provider.  This is called before any other
   * method.  may be called multiple times.
   */
  void startup();

  /**
   * watch
   * When a location change is observed, notify the callback. The privacy
   * argument informs the provider whether the initiating request came from
   * a private context; it is up to the provider to use that information
   * in a sensible manner.
   */
  void watch(in nsIGeolocationUpdate callback, in boolean requestPrivate);

  /**
   * shutdown
   * Shuts down the location device.
   */
  void shutdown();

  /**
   * hint to provide to use any amount of power to provide a better result
   */
  void setHighAccuracy(in boolean enable);

};

%{C++
/*  
    This must be implemented by geolocation providers.  It
    must support nsIGeolocationProvider.
*/
#define NS_GEOLOCATION_PROVIDER_CONTRACTID "@mozilla.org/geolocation/provider;1"
%}
