Adds V8 bindings for optional properties of Geolocation Coordinates object.

This fixes http://b/issue?id=2049677.
diff --git a/V8Binding/V8Binding.derived.mk b/V8Binding/V8Binding.derived.mk
index edb4c5a..a988986 100644
--- a/V8Binding/V8Binding.derived.mk
+++ b/V8Binding/V8Binding.derived.mk
@@ -85,6 +85,7 @@
 	bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp \
 	bindings/v8/custom/V8ClientRectListCustom.cpp \
 	bindings/v8/custom/V8ClipboardCustom.cpp \
+	bindings/v8/custom/V8CoordinatesCustom.cpp \
 	bindings/v8/custom/V8CustomBinding.cpp \
 	bindings/v8/custom/V8CustomEventListener.cpp \
 	bindings/v8/custom/V8CustomPositionCallback.cpp \
diff --git a/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp b/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp
new file mode 100644
index 0000000..09522ba
--- /dev/null
+++ b/WebCore/bindings/v8/custom/V8CoordinatesCustom.cpp
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+
+#include "V8Coordinates.h"
+#include "V8Binding.h"
+#include "V8CustomBinding.h"
+#include "V8Proxy.h"
+
+#include "Coordinates.h"
+
+namespace WebCore {
+
+    ACCESSOR_GETTER(CoordinatesAltitude) {
+        INC_STATS("DOM.Coordinates.altitude._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideAltitude())
+            return v8::Null();
+        return v8::Number::New(imp->altitude());
+    }
+
+    ACCESSOR_GETTER(CoordinatesAltitudeAccuracy) {
+        INC_STATS("DOM.Coordinates.altitudeAccuracy._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideAltitudeAccuracy())
+            return v8::Null();
+        return v8::Number::New(imp->altitudeAccuracy());
+    }
+
+    ACCESSOR_GETTER(CoordinatesHeading) {
+        INC_STATS("DOM.Coordinates.heading._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideHeading())
+            return v8::Null();
+        return v8::Number::New(imp->heading());
+    }
+
+    ACCESSOR_GETTER(CoordinatesSpeed) {
+        INC_STATS("DOM.Coordinates.speed._get");
+        v8::Handle<v8::Object> holder = info.Holder();
+        Coordinates* imp = V8DOMWrapper::convertToNativeObject<Coordinates>(V8ClassIndex::COORDINATES, holder);
+        if (!imp->canProvideSpeed())
+            return v8::Null();
+        return v8::Number::New(imp->speed());
+    }
+
+} // namespace WebCore
diff --git a/WebCore/bindings/v8/custom/V8CustomBinding.h b/WebCore/bindings/v8/custom/V8CustomBinding.h
index 60f0d82..22b4a94 100644
--- a/WebCore/bindings/v8/custom/V8CustomBinding.h
+++ b/WebCore/bindings/v8/custom/V8CustomBinding.h
@@ -523,6 +523,10 @@
 
         DECLARE_CALLBACK(GeolocationGetCurrentPosition);
         DECLARE_CALLBACK(GeolocationWatchPosition);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesAltitude);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesAltitudeAccuracy);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesHeading);
+        DECLARE_PROPERTY_ACCESSOR_GETTER(CoordinatesSpeed);
 
 #undef DECLARE_INDEXED_ACCESS_CHECK
 #undef DECLARE_NAMED_ACCESS_CHECK
diff --git a/WebCore/page/Coordinates.idl b/WebCore/page/Coordinates.idl
index 2bdd5e9..f6c82b5 100644
--- a/WebCore/page/Coordinates.idl
+++ b/WebCore/page/Coordinates.idl
@@ -28,13 +28,11 @@
     interface Coordinates {
         readonly attribute double latitude;
         readonly attribute double longitude;
-        readonly attribute double accuracy;
-#if !defined(V8_BINDING)        
         readonly attribute [Custom] double altitude;
+        readonly attribute double accuracy;
         readonly attribute [Custom] double altitudeAccuracy;
         readonly attribute [Custom] double heading;
         readonly attribute [Custom] double speed;
-#endif
 
 #if defined(LANGUAGE_JAVASCRIPT) && LANGUAGE_JAVASCRIPT
         [DontEnum] DOMString toString();