Blame dom/geolocation/nsGeoPosition.h

Packit f0b94e
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
Packit f0b94e
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
Packit f0b94e
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit f0b94e
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit f0b94e
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit f0b94e
Packit f0b94e
#ifndef nsGeoPosition_h
Packit f0b94e
#define nsGeoPosition_h
Packit f0b94e
Packit f0b94e
#include "nsIDOMGeoPositionCoords.h"
Packit f0b94e
#include "nsIDOMGeoPosition.h"
Packit f0b94e
#include "nsString.h"
Packit f0b94e
#include "mozilla/Attributes.h"
Packit f0b94e
#include "nsCycleCollectionParticipant.h"
Packit f0b94e
#include "nsWrapperCache.h"
Packit f0b94e
#include "mozilla/dom/Nullable.h"
Packit f0b94e
#include "js/TypeDecls.h"
Packit f0b94e
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
// nsGeoPositionCoords
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
Packit f0b94e
/**
Packit f0b94e
 * Simple object that holds a single point in space.
Packit f0b94e
 */
Packit f0b94e
class nsGeoPositionCoords final : public nsIDOMGeoPositionCoords {
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_THREADSAFE_ISUPPORTS
Packit f0b94e
  NS_DECL_NSIDOMGEOPOSITIONCOORDS
Packit f0b94e
Packit f0b94e
  nsGeoPositionCoords(double aLat, double aLong, double aAlt, double aHError,
Packit f0b94e
                      double aVError, double aHeading, double aSpeed);
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  ~nsGeoPositionCoords();
Packit f0b94e
  const double mLat, mLong, mAlt, mHError, mVError, mHeading, mSpeed;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
// nsGeoPosition
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
Packit f0b94e
class nsGeoPosition final : public nsIDOMGeoPosition {
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_THREADSAFE_ISUPPORTS
Packit f0b94e
  NS_DECL_NSIDOMGEOPOSITION
Packit f0b94e
Packit f0b94e
  nsGeoPosition(double aLat, double aLong, double aAlt, double aHError,
Packit f0b94e
                double aVError, double aHeading, double aSpeed,
Packit f0b94e
                long long aTimestamp);
Packit f0b94e
Packit f0b94e
  nsGeoPosition(nsIDOMGeoPositionCoords* aCoords, long long aTimestamp);
Packit f0b94e
Packit f0b94e
  nsGeoPosition(nsIDOMGeoPositionCoords* aCoords, DOMTimeStamp aTimestamp);
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  ~nsGeoPosition();
Packit f0b94e
  long long mTimestamp;
Packit f0b94e
  RefPtr<nsIDOMGeoPositionCoords> mCoords;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
// WebIDL wrappers for the classes above
Packit f0b94e
////////////////////////////////////////////////////
Packit f0b94e
Packit f0b94e
namespace mozilla {
Packit f0b94e
namespace dom {
Packit f0b94e
Packit f0b94e
class Coordinates;
Packit f0b94e
Packit f0b94e
class Position final : public nsISupports, public nsWrapperCache {
Packit f0b94e
  ~Position();
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
Packit f0b94e
  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Position)
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  Position(nsISupports* aParent, nsIDOMGeoPosition* aGeoPosition);
Packit f0b94e
Packit f0b94e
  nsISupports* GetParentObject() const;
Packit f0b94e
Packit f0b94e
  virtual JSObject* WrapObject(JSContext* aCx,
Packit f0b94e
                               JS::Handle<JSObject*> aGivenProto) override;
Packit f0b94e
Packit f0b94e
  Coordinates* Coords();
Packit f0b94e
Packit f0b94e
  uint64_t Timestamp() const;
Packit f0b94e
Packit f0b94e
  nsIDOMGeoPosition* GetWrappedGeoPosition() { return mGeoPosition; }
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  RefPtr<Coordinates> mCoordinates;
Packit f0b94e
  nsCOMPtr<nsISupports> mParent;
Packit f0b94e
  nsCOMPtr<nsIDOMGeoPosition> mGeoPosition;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
class Coordinates final : public nsISupports, public nsWrapperCache {
Packit f0b94e
  ~Coordinates();
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
Packit f0b94e
  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Coordinates)
Packit f0b94e
Packit f0b94e
 public:
Packit f0b94e
  Coordinates(Position* aPosition, nsIDOMGeoPositionCoords* aCoords);
Packit f0b94e
Packit f0b94e
  Position* GetParentObject() const;
Packit f0b94e
Packit f0b94e
  virtual JSObject* WrapObject(JSContext* aCx,
Packit f0b94e
                               JS::Handle<JSObject*> aGivenProto) override;
Packit f0b94e
Packit f0b94e
  double Latitude() const;
Packit f0b94e
Packit f0b94e
  double Longitude() const;
Packit f0b94e
Packit f0b94e
  Nullable<double> GetAltitude() const;
Packit f0b94e
Packit f0b94e
  double Accuracy() const;
Packit f0b94e
Packit f0b94e
  Nullable<double> GetAltitudeAccuracy() const;
Packit f0b94e
Packit f0b94e
  Nullable<double> GetHeading() const;
Packit f0b94e
Packit f0b94e
  Nullable<double> GetSpeed() const;
Packit f0b94e
Packit f0b94e
 private:
Packit f0b94e
  RefPtr<Position> mPosition;
Packit f0b94e
  nsCOMPtr<nsIDOMGeoPositionCoords> mCoords;
Packit f0b94e
};
Packit f0b94e
Packit f0b94e
}  // namespace dom
Packit f0b94e
}  // namespace mozilla
Packit f0b94e
Packit f0b94e
#endif /* nsGeoPosition_h */