Fix Geolocation error reporting in the test support
authorbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Sep 2012 02:30:01 +0000 (02:30 +0000)
committerbenjamin@webkit.org <benjamin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 25 Sep 2012 02:30:01 +0000 (02:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=97386

Source/WebCore:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

GeolocationController currently expose GeolocationError which can be either
PermissionDenied or PositionUnavailable.

In practice, only PositionUnavailable is supported and tested, only Chrome
somewhat expose PermissionDenied.
The correct way to deny the permission is through Geolocation::setIsAllowed().

This patch does some of the initial cleanup toward that goal, reducing how
far GeolocationError is spread.

* WebCore.exp.in:
* WebCore.xcodeproj/project.pbxproj:
Mac does not use GeolocationClientMock, it should not be compiled in WebCore.

* platform/mock/GeolocationClientMock.cpp:
(WebCore::GeolocationClientMock::GeolocationClientMock):
(WebCore::GeolocationClientMock::setPosition):
(WebCore::GeolocationClientMock::setPositionUnavailableError):
This method replace setError(). It is limited to PositionUnavailable errors.

(WebCore::GeolocationClientMock::reset):
(WebCore::GeolocationClientMock::controllerTimerFired):
(WebCore):
(WebCore::GeolocationClientMock::clearError):
* platform/mock/GeolocationClientMock.h:
(WebCore):
(GeolocationClientMock):

Source/WebKit/blackberry:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

* WebKitSupport/DumpRenderTreeSupport.cpp:
(DumpRenderTreeSupport::setMockGeolocationPositionUnavailableError):
* WebKitSupport/DumpRenderTreeSupport.h:
(DumpRenderTreeSupport):

Source/WebKit/chromium:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

* public/WebGeolocationClientMock.h:
(WebGeolocationClientMock):
* src/WebGeolocationClientMock.cpp:
(WebKit::WebGeolocationClientMock::setMockGeolocationPositionUnavailableError):

Source/WebKit/gtk:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

* WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
(DumpRenderTreeSupportGtk::setMockGeolocationPositionUnavailableError):
* WebCoreSupport/DumpRenderTreeSupportGtk.h:
(DumpRenderTreeSupportGtk):

Source/WebKit/mac:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

* WebView/WebView.mm:
(-[WebView _geolocationDidFailWithMessage:]):
* WebView/WebViewPrivate.h:

Source/WebKit/qt:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

* WebCoreSupport/DumpRenderTreeSupportQt.cpp:
(DumpRenderTreeSupportQt::setMockGeolocationPositionUnavailableError):
* WebCoreSupport/DumpRenderTreeSupportQt.h:

Tools:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.
The TestRunner was exposing internal implementation details of
the Geolocation object through setMockGeolocationError().

In practice, only the error code PositionUnavailable is supported
or even implemented.

Exposing setMockGeolocationError() does not make sense for WebKit2 as
passing generic errors from the UIProcess is a bad idea. This is the
opportunity to clean TestRunner and prepare and interface suitable for WebKit2.

* DumpRenderTree/TestRunner.cpp:
(setMockGeolocationPositionUnavailableErrorCallback):
(TestRunner::staticFunctions):
* DumpRenderTree/TestRunner.h:
(TestRunner):
* DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/chromium/DRTTestRunner.cpp:
(DRTTestRunner::DRTTestRunner):
(DRTTestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/chromium/DRTTestRunner.h:
(DRTTestRunner):
* DumpRenderTree/efl/TestRunnerEfl.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/gtk/TestRunnerGtk.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/mac/MockGeolocationProvider.h:
* DumpRenderTree/mac/MockGeolocationProvider.mm:
(-[MockGeolocationProvider dealloc]):
(-[MockGeolocationProvider resetError]):
(-[MockGeolocationProvider setPosition:]):
(-[MockGeolocationProvider setPositionUnavailableErrorWithMessage:]):
(-[MockGeolocationProvider lastPosition]):
(-[MockGeolocationProvider timerFired]):
* DumpRenderTree/mac/TestRunnerMac.mm:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/qt/TestRunnerQt.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/qt/TestRunnerQt.h:
(TestRunner):
* DumpRenderTree/win/TestRunnerWin.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):
* DumpRenderTree/wx/TestRunnerWx.cpp:
(TestRunner::setMockGeolocationPositionUnavailableError):

LayoutTests:

Patch by Benjamin Poulain <bpoulain@apple.com> on 2012-09-24
Reviewed by Sam Weinig.

Update the tests to use setMockGeolocationPositionUnavailableError() instead
of setMockGeolocationError().

Only PositionError.POSITION_UNAVAILABLE was supported, so this not change
anything for the test coverage.

* fast/dom/Geolocation/error-clear-watch.html:
* fast/dom/Geolocation/error-expected.txt:
* fast/dom/Geolocation/maximum-age-expected.txt:
* fast/dom/Geolocation/reentrant-error-expected.txt:
* fast/dom/Geolocation/script-tests/error.js:
* fast/dom/Geolocation/script-tests/maximum-age.js:
(checkError):
(testNonZeroMaximumAge):
* fast/dom/Geolocation/script-tests/permission-denied-already-error.js:
* fast/dom/Geolocation/script-tests/reentrant-error.js:
* fast/dom/Geolocation/script-tests/watch.js:
(checkError):
* fast/dom/Geolocation/watch-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@129444 268f45cc-cd09-0410-ab3c-d52691b4dbfc

46 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/Geolocation/error-clear-watch.html
LayoutTests/fast/dom/Geolocation/error-expected.txt
LayoutTests/fast/dom/Geolocation/maximum-age-expected.txt
LayoutTests/fast/dom/Geolocation/reentrant-error-expected.txt
LayoutTests/fast/dom/Geolocation/script-tests/error.js
LayoutTests/fast/dom/Geolocation/script-tests/maximum-age.js
LayoutTests/fast/dom/Geolocation/script-tests/permission-denied-already-error.js
LayoutTests/fast/dom/Geolocation/script-tests/reentrant-error.js
LayoutTests/fast/dom/Geolocation/script-tests/watch.js
LayoutTests/fast/dom/Geolocation/watch-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/platform/mock/GeolocationClientMock.cpp
Source/WebCore/platform/mock/GeolocationClientMock.h
Source/WebKit/blackberry/ChangeLog
Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.cpp
Source/WebKit/blackberry/WebKitSupport/DumpRenderTreeSupport.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/public/WebGeolocationClientMock.h
Source/WebKit/chromium/src/WebGeolocationClientMock.cpp
Source/WebKit/gtk/ChangeLog
Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp
Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.h
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit/mac/WebView/WebViewPrivate.h
Source/WebKit/qt/ChangeLog
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.cpp
Source/WebKit/qt/WebCoreSupport/DumpRenderTreeSupportQt.h
Tools/ChangeLog
Tools/DumpRenderTree/TestRunner.cpp
Tools/DumpRenderTree/TestRunner.h
Tools/DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp
Tools/DumpRenderTree/chromium/DRTTestRunner.cpp
Tools/DumpRenderTree/chromium/DRTTestRunner.h
Tools/DumpRenderTree/efl/TestRunnerEfl.cpp
Tools/DumpRenderTree/gtk/TestRunnerGtk.cpp
Tools/DumpRenderTree/mac/MockGeolocationProvider.h
Tools/DumpRenderTree/mac/MockGeolocationProvider.mm
Tools/DumpRenderTree/mac/TestRunnerMac.mm
Tools/DumpRenderTree/qt/TestRunnerQt.cpp
Tools/DumpRenderTree/qt/TestRunnerQt.h
Tools/DumpRenderTree/win/TestRunnerWin.cpp
Tools/DumpRenderTree/wx/TestRunnerWx.cpp

index 062e086..d20e384 100644 (file)
@@ -1,3 +1,30 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        Update the tests to use setMockGeolocationPositionUnavailableError() instead
+        of setMockGeolocationError().
+
+        Only PositionError.POSITION_UNAVAILABLE was supported, so this not change
+        anything for the test coverage.
+
+        * fast/dom/Geolocation/error-clear-watch.html:
+        * fast/dom/Geolocation/error-expected.txt:
+        * fast/dom/Geolocation/maximum-age-expected.txt:
+        * fast/dom/Geolocation/reentrant-error-expected.txt:
+        * fast/dom/Geolocation/script-tests/error.js:
+        * fast/dom/Geolocation/script-tests/maximum-age.js:
+        (checkError):
+        (testNonZeroMaximumAge):
+        * fast/dom/Geolocation/script-tests/permission-denied-already-error.js:
+        * fast/dom/Geolocation/script-tests/reentrant-error.js:
+        * fast/dom/Geolocation/script-tests/watch.js:
+        (checkError):
+        * fast/dom/Geolocation/watch-expected.txt:
+
 2012-09-24  Filip Pizlo  <fpizlo@apple.com>
 
         Nested try/finally should not confuse the finally unpopper in BytecodeGenerator::emitComplexJumpScopes
index 32206df..6c61978 100644 (file)
@@ -7,12 +7,11 @@
 <script>
 description("This tests removing the watcher from an error callback does not causes assertions.");
 
-var mockCode = 2;
 var mockMessage = "debug";
 
 if (window.testRunner) {
     testRunner.setGeolocationPermission(true);
-    testRunner.setMockGeolocationError(mockCode, mockMessage);
+    testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
 } else
     debug('This test can not be run without the LayoutTestController');
 
index 9582059..133e39a 100644 (file)
@@ -3,7 +3,7 @@ Tests Geolocation error callback using the mock service.
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS error.code is mockCode
+PASS error.code is error.POSITION_UNAVAILABLE
 PASS error.message is mockMessage
 PASS error.UNKNOWN_ERROR is undefined
 PASS error.PERMISSION_DENIED is 1
index 344bd45..3889466 100644 (file)
@@ -16,7 +16,7 @@ PASS position.coords.latitude is mockLatitude
 PASS position.coords.longitude is mockLongitude
 PASS position.coords.accuracy is mockAccuracy
 
-PASS error.code is mockCode
+PASS error.code is error.POSITION_UNAVAILABLE
 PASS error.message is mockMessage
 PASS successfullyParsed is true
 
index 993beac..4c4eb1f 100644 (file)
@@ -3,10 +3,10 @@ Tests that reentrant calls to Geolocation methods from the error callback are OK
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-PASS error.code is mockCode
+PASS error.code is error.POSITION_UNAVAILABLE
 PASS error.message is mockMessage
 
-PASS error.code is mockCode
+PASS error.code is error.POSITION_UNAVAILABLE
 PASS error.message is mockMessage
 PASS successfullyParsed is true
 
index 2d13f3f..8e44bc6 100644 (file)
@@ -1,11 +1,10 @@
 description("Tests Geolocation error callback using the mock service.");
 
-var mockCode = 2;
 var mockMessage = "debug";
 
 if (window.testRunner) {
     testRunner.setGeolocationPermission(true);
-    testRunner.setMockGeolocationError(mockCode, mockMessage);
+    testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
 } else
     debug('This test can not be run without the testRunner');
 
@@ -15,7 +14,7 @@ navigator.geolocation.getCurrentPosition(function(p) {
     finishJSTest();
 }, function(e) {
     error = e;
-    shouldBe('error.code', 'mockCode');
+    shouldBe('error.code', 'error.POSITION_UNAVAILABLE');
     shouldBe('error.message', 'mockMessage');
     shouldBe('error.UNKNOWN_ERROR', 'undefined');
     shouldBe('error.PERMISSION_DENIED', '1');
index 6c8f860..47596ca 100644 (file)
@@ -4,7 +4,6 @@ var mockLatitude = 51.478;
 var mockLongitude = -0.166;
 var mockAccuracy = 100.0;
 
-var mockCode = 2;
 var mockMessage = 'test';
 
 var position;
@@ -21,7 +20,7 @@ function checkPosition(p) {
 function checkError(e) {
     debug('');
     error = e;
-    shouldBe('error.code', 'mockCode');
+    shouldBe('error.code', 'error.POSITION_UNAVAILABLE');
     shouldBe('error.message', 'mockMessage');
 }
 
@@ -57,7 +56,7 @@ function testZeroMaximumAge() {
 function testNonZeroMaximumAge() {
     // Update the mock service to report an error.
     if (window.testRunner)
-        testRunner.setMockGeolocationError(mockCode, mockMessage);
+        testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
     // The maximumAge is non-zero, so we expect the cached position, not the error from the service.
     navigator.geolocation.getCurrentPosition(function(p) {
         checkPosition(p);
index b5e3d8f..48b5cf8 100644 (file)
@@ -23,7 +23,7 @@ function continueTest()
 {
     // Make another request, with permission already denied.
     if (window.testRunner)
-        testRunner.setMockGeolocationError(2, 'test');
+        testRunner.setMockGeolocationPositionUnavailableError('test');
 
     navigator.geolocation.getCurrentPosition(function(p) {
         testFailed('Success callback invoked unexpectedly');
index 5439e29..5a6c09d 100644 (file)
@@ -1,11 +1,10 @@
 description("Tests that reentrant calls to Geolocation methods from the error callback are OK.");
 
-var mockCode = 2;
 var mockMessage = 'test';
 
 if (window.testRunner) {
     testRunner.setGeolocationPermission(true);
-    testRunner.setMockGeolocationError(mockCode, mockMessage);
+    testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
 } else
     debug('This test can not be run without the testRunner');
 
@@ -22,7 +21,7 @@ navigator.geolocation.getCurrentPosition(function(p) {
     errorCallbackInvoked = true;
 
     error = e;
-    shouldBe('error.code', 'mockCode');
+    shouldBe('error.code', 'error.POSITION_UNAVAILABLE');
     shouldBe('error.message', 'mockMessage');
     debug('');
     continueTest();
@@ -32,14 +31,14 @@ function continueTest() {
     mockMessage += ' repeat';
 
     if (window.testRunner)
-        testRunner.setMockGeolocationError(mockCode, mockMessage);
+        testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
 
     navigator.geolocation.getCurrentPosition(function(p) {
         testFailed('Success callback invoked unexpectedly');
         finishJSTest();
     }, function(e) {
         error = e;
-        shouldBe('error.code', 'mockCode');
+        shouldBe('error.code', 'error.POSITION_UNAVAILABLE');
         shouldBe('error.message', 'mockMessage');
         finishJSTest();
     });
index 6f1fe0c..0ea1caf 100644 (file)
@@ -4,7 +4,6 @@ var mockLatitude = 51.478;
 var mockLongitude = -0.166;
 var mockAccuracy = 100.0;
 
-var mockCode = 2;
 var mockMessage = 'test';
 
 var position;
@@ -20,7 +19,7 @@ function checkPosition(p) {
 
 function checkError(e) {
     error = e;
-    shouldBe('error.code', 'mockCode');
+    shouldBe('error.code', 'error.POSITION_UNAVAILABLE');
     shouldBe('error.message', 'mockMessage');
     debug('');
 }
@@ -42,7 +41,7 @@ navigator.geolocation.watchPosition(function(p) {
         case 1:
             checkPosition(p);
             if (window.testRunner)
-                testRunner.setMockGeolocationError(mockCode, mockMessage);
+                testRunner.setMockGeolocationPositionUnavailableError(mockMessage);
             break;
         case 3:
             checkPosition(p);
index a043455..4c75f08 100644 (file)
@@ -11,7 +11,7 @@ PASS position.coords.latitude is mockLatitude
 PASS position.coords.longitude is mockLongitude
 PASS position.coords.accuracy is mockAccuracy
 
-PASS error.code is mockCode
+PASS error.code is error.POSITION_UNAVAILABLE
 PASS error.message is mockMessage
 
 PASS position.coords.latitude is mockLatitude
index 8e6db85..b981afe 100644 (file)
@@ -1,3 +1,38 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        GeolocationController currently expose GeolocationError which can be either
+        PermissionDenied or PositionUnavailable.
+
+        In practice, only PositionUnavailable is supported and tested, only Chrome
+        somewhat expose PermissionDenied.
+        The correct way to deny the permission is through Geolocation::setIsAllowed().
+
+        This patch does some of the initial cleanup toward that goal, reducing how
+        far GeolocationError is spread.
+
+        * WebCore.exp.in:
+        * WebCore.xcodeproj/project.pbxproj:
+        Mac does not use GeolocationClientMock, it should not be compiled in WebCore.
+
+        * platform/mock/GeolocationClientMock.cpp:
+        (WebCore::GeolocationClientMock::GeolocationClientMock):
+        (WebCore::GeolocationClientMock::setPosition):
+        (WebCore::GeolocationClientMock::setPositionUnavailableError):
+        This method replace setError(). It is limited to PositionUnavailable errors.
+
+        (WebCore::GeolocationClientMock::reset):
+        (WebCore::GeolocationClientMock::controllerTimerFired):
+        (WebCore):
+        (WebCore::GeolocationClientMock::clearError):
+        * platform/mock/GeolocationClientMock.h:
+        (WebCore):
+        (GeolocationClientMock):
+
 2012-09-24  Kent Tamura  <tkent@chromium.org>
 
         [Chromium] Implement ValidationMessageClient for Chromium
index a196883..a16ce48 100644 (file)
@@ -2191,7 +2191,6 @@ __ZN7WebCore11Geolocation12setIsAllowedEb
 __ZN7WebCore11GeolocationD1Ev
 __ZNK7WebCore11Geolocation5frameEv
 __ZN7WebCore20provideGeolocationToEPNS_4PageEPNS_17GeolocationClientE
-__ZN7WebCore21GeolocationClientMock13setPermissionEb
 __ZN7WebCore21GeolocationController13errorOccurredEPNS_16GeolocationErrorE
 __ZN7WebCore21GeolocationController14supplementNameEv
 __ZN7WebCore21GeolocationController15positionChangedEPNS_19GeolocationPositionE
index 5d4a3dc..b32c240 100644 (file)
@@ -76,8 +76,6 @@
                033A6A7E147E07E700509B36 /* HTMLPropertiesCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 033A6A7D147E07E700509B36 /* HTMLPropertiesCollection.cpp */; };
                033A6A81147E088600509B36 /* JSHTMLPropertiesCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 033A6A80147E088600509B36 /* JSHTMLPropertiesCollection.cpp */; };
                033A6A83147E08A600509B36 /* JSHTMLPropertiesCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = 033A6A82147E08A600509B36 /* JSHTMLPropertiesCollection.h */; };
-               052BFCE9128ABF1500FD338D /* GeolocationClientMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 052BFCE8128ABF1500FD338D /* GeolocationClientMock.cpp */; };
-               052BFCEB128ABF2100FD338D /* GeolocationClientMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 052BFCEA128ABF2100FD338D /* GeolocationClientMock.h */; settings = {ATTRIBUTES = (Private, ); }; };
                0562F9461573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0562F9441573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.cpp */; };
                0562F9471573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0562F9451573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.h */; };
                0562F9611573F88F0031CA16 /* PlatformLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0562F9601573F88F0031CA16 /* PlatformLayer.h */; settings = {ATTRIBUTES = (Private, ); }; };
                033A6A7F147E07F900509B36 /* HTMLPropertiesCollection.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = HTMLPropertiesCollection.idl; sourceTree = "<group>"; };
                033A6A80147E088600509B36 /* JSHTMLPropertiesCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLPropertiesCollection.cpp; sourceTree = "<group>"; };
                033A6A82147E08A600509B36 /* JSHTMLPropertiesCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSHTMLPropertiesCollection.h; sourceTree = "<group>"; };
-               052BFCE8128ABF1500FD338D /* GeolocationClientMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GeolocationClientMock.cpp; path = mock/GeolocationClientMock.cpp; sourceTree = "<group>"; };
-               052BFCEA128ABF2100FD338D /* GeolocationClientMock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GeolocationClientMock.h; path = mock/GeolocationClientMock.h; sourceTree = "<group>"; };
                0562F9441573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebKitCSSSVGDocumentValue.cpp; sourceTree = "<group>"; };
                0562F9451573ECEB0031CA16 /* WebKitCSSSVGDocumentValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitCSSSVGDocumentValue.h; sourceTree = "<group>"; };
                0562F9601573F88F0031CA16 /* PlatformLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformLayer.h; sourceTree = "<group>"; };
                        children = (
                                59309A1011F4AE5800250603 /* DeviceOrientationClientMock.cpp */,
                                59309A1211F4AE6A00250603 /* DeviceOrientationClientMock.h */,
-                               052BFCE8128ABF1500FD338D /* GeolocationClientMock.cpp */,
-                               052BFCEA128ABF2100FD338D /* GeolocationClientMock.h */,
                                0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */,
                                0FE71404142170B800DB33BA /* ScrollbarThemeMock.h */,
                        );
                                0720B0A114D3323500642955 /* GenericEventQueue.h in Headers */,
                                9746AF2414F4DDE6003E7A70 /* Geolocation.h in Headers */,
                                BC56CB2310D5AC8000A77C64 /* GeolocationClient.h in Headers */,
-                               052BFCEB128ABF2100FD338D /* GeolocationClientMock.h in Headers */,
                                9746AF2714F4DDE6003E7A70 /* GeolocationController.h in Headers */,
                                9746AF2814F4DDE6003E7A70 /* GeolocationError.h in Headers */,
                                9746AF2914F4DDE6003E7A70 /* GeolocationPosition.h in Headers */,
                                2D481F03146B5C6500AA7834 /* GeneratorGeneratedImage.cpp in Sources */,
                                0720B0A014D3323500642955 /* GenericEventQueue.cpp in Sources */,
                                9746AF2314F4DDE6003E7A70 /* Geolocation.cpp in Sources */,
-                               052BFCE9128ABF1500FD338D /* GeolocationClientMock.cpp in Sources */,
                                9746AF2614F4DDE6003E7A70 /* GeolocationController.cpp in Sources */,
                                0720B0A014D3323500642956 /* GestureEvent.cpp in Sources */,
                                B2C3DA6D0D006CD600EF6F26 /* GlyphPageTreeNode.cpp in Sources */,
index 276b4a3..9901b66 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -41,6 +42,7 @@ namespace WebCore {
 
 GeolocationClientMock::GeolocationClientMock()
     : m_controller(0)
+    , m_hasError(false)
     , m_controllerTimer(this, &GeolocationClientMock::controllerTimerFired)
     , m_permissionTimer(this, &GeolocationClientMock::permissionTimerFired)
     , m_isActive(false)
@@ -62,14 +64,15 @@ void GeolocationClientMock::setController(GeolocationController *controller)
 void GeolocationClientMock::setPosition(PassRefPtr<GeolocationPosition> position)
 {
     m_lastPosition = position;
-    m_lastError = 0;
+    clearError();
     asyncUpdateController();
 }
 
-void GeolocationClientMock::setError(PassRefPtr<GeolocationError> error)
+void GeolocationClientMock::setPositionUnavailableError(const String& errorMessage)
 {
-    m_lastError = error;
-    m_lastPosition = 0;
+    m_hasError = true;
+    m_errorMessage = errorMessage;
+    m_lastPosition = nullptr;
     asyncUpdateController();
 }
 
@@ -125,7 +128,7 @@ void GeolocationClientMock::permissionTimerFired(WebCore::Timer<GeolocationClien
 void GeolocationClientMock::reset()
 {
     m_lastPosition = 0;
-    m_lastError = 0;
+    clearError();
     m_permissionState = PermissionStateUnset;
 }
 
@@ -171,10 +174,19 @@ void GeolocationClientMock::controllerTimerFired(Timer<GeolocationClientMock>* t
     ASSERT_UNUSED(timer, timer == &m_controllerTimer);
     ASSERT(m_controller);
 
-    if (m_lastPosition.get())
+    if (m_lastPosition.get()) {
+        ASSERT(!m_hasError);
         m_controller->positionChanged(m_lastPosition.get());
-    else if (m_lastError.get())
-        m_controller->errorOccurred(m_lastError.get());
+    } else if (m_hasError) {
+        RefPtr<GeolocationError> geolocatioError = GeolocationError::create(GeolocationError::PositionUnavailable, m_errorMessage);
+        m_controller->errorOccurred(geolocatioError.get());
+    }
+}
+
+void GeolocationClientMock::clearError()
+{
+    m_hasError = false;
+    m_errorMessage = String();
 }
 
 } // WebCore
index 8abd5e9..f380c14 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -42,9 +43,9 @@ namespace WebCore {
 
 class GeolocationController;
 class GeolocationPosition;
-class GeolocationError;
 
-// Provides a mock object for the geolocation client
+// FIXME: this should not be in WebCore. It should be moved to WebKit.
+// Provides a mock object for the geolocation client.
 class GeolocationClientMock : public GeolocationClient {
 public:
     GeolocationClientMock();
@@ -53,8 +54,8 @@ public:
     void reset();
     void setController(GeolocationController*);
 
-    void setError(PassRefPtr<GeolocationError>);
     void setPosition(PassRefPtr<GeolocationPosition>);
+    void setPositionUnavailableError(const String& errorMessage);
     void setPermission(bool allowed);
     int numberOfPendingPermissionRequests() const;
 
@@ -74,9 +75,12 @@ private:
     void asyncUpdatePermission();
     void permissionTimerFired(Timer<GeolocationClientMock>*);
 
+    void clearError();
+
     GeolocationController* m_controller;
     RefPtr<GeolocationPosition> m_lastPosition;
-    RefPtr<GeolocationError> m_lastError;
+    bool m_hasError;
+    String m_errorMessage;
     Timer<GeolocationClientMock> m_controllerTimer;
     Timer<GeolocationClientMock> m_permissionTimer;
     bool m_isActive;
index 9f5195a..156c4bf 100644 (file)
@@ -1,3 +1,15 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        * WebKitSupport/DumpRenderTreeSupport.cpp:
+        (DumpRenderTreeSupport::setMockGeolocationPositionUnavailableError):
+        * WebKitSupport/DumpRenderTreeSupport.h:
+        (DumpRenderTreeSupport):
+
 2012-09-24  Otto Derek Cheung  <otcheung@rim.com>
 
         [BlackBerry] Reverting implementation for 407 error pages
index e4e4ef0..ea4ac56 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Research In Motion Limited. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -95,20 +96,10 @@ void DumpRenderTreeSupport::resetGeolocationMock(WebPage* webPage)
     mockClient->reset();
 }
 
-void DumpRenderTreeSupport::setMockGeolocationError(WebPage* webPage, int errorCode, const String message)
+void DumpRenderTreeSupport::setMockGeolocationPositionUnavailableError(WebPage* webPage, const String message)
 {
-    GeolocationError::ErrorCode code = GeolocationError::PositionUnavailable;
-    switch (errorCode) {
-    case PositionError::PERMISSION_DENIED:
-        code = GeolocationError::PermissionDenied;
-        break;
-    case PositionError::POSITION_UNAVAILABLE:
-        code = GeolocationError::PositionUnavailable;
-        break;
-    }
-
     GeolocationClientMock* mockClient = static_cast<GeolocationClientMock*>(GeolocationController::from(corePage(webPage))->client());
-    mockClient->setError(GeolocationError::create(code, message));
+    mockClient->setPositionUnavailableError(message);
 }
 
 void DumpRenderTreeSupport::setMockGeolocationPermission(WebPage* webPage, bool allowed)
index 58fc1b5..01fe4f8 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Research In Motion Limited. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -52,7 +53,7 @@ public:
 
     static int numberOfPendingGeolocationPermissionRequests(BlackBerry::WebKit::WebPage*);
     static void resetGeolocationMock(BlackBerry::WebKit::WebPage*);
-    static void setMockGeolocationError(BlackBerry::WebKit::WebPage*, int errorCode, const WTF::String message);
+    static void setMockGeolocationPositionUnavailableError(BlackBerry::WebKit::WebPage*, const WTF::String message);
     static void setMockGeolocationPermission(BlackBerry::WebKit::WebPage*, bool allowed);
     static void setMockGeolocationPosition(BlackBerry::WebKit::WebPage*, double latitude, double longitude, double accuracy);
     static void scalePageBy(BlackBerry::WebKit::WebPage*, float, float, float);
index 7b268da..a040866 100644 (file)
@@ -1,3 +1,15 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        * public/WebGeolocationClientMock.h:
+        (WebGeolocationClientMock):
+        * src/WebGeolocationClientMock.cpp:
+        (WebKit::WebGeolocationClientMock::setMockGeolocationPositionUnavailableError):
+
 2012-09-24  Kent Tamura  <tkent@chromium.org>
 
         [Chromium] Implement ValidationMessageClient for Chromium
index 052a546..a04d1dd 100644 (file)
@@ -49,7 +49,7 @@ public:
     ~WebGeolocationClientMock() { reset(); }
 
     WEBKIT_EXPORT void setPosition(double latitude, double longitude, double accuracy);
-    WEBKIT_EXPORT void setError(int errorCode, const WebString& message);
+    WEBKIT_EXPORT void setPositionUnavailableError(const WebString& message);
     WEBKIT_EXPORT void setPermission(bool);
     WEBKIT_EXPORT int numberOfPendingPermissionRequests() const;
     WEBKIT_EXPORT void resetMock();
index 3d96307..a7948a7 100644 (file)
@@ -41,6 +41,7 @@
 #include "WebGeolocationError.h"
 #include "WebGeolocationPermissionRequest.h"
 #include "WebGeolocationPosition.h"
+#include "platform/WebString.h"
 
 using namespace WebCore;
 
@@ -58,23 +59,9 @@ void WebGeolocationClientMock::setPosition(double latitude, double longitude, do
     m_clientMock->setPosition(webPosition);
 }
 
-void WebGeolocationClientMock::setError(int errorCode, const WebString& message)
+void WebGeolocationClientMock::setPositionUnavailableError(const WebString& message)
 {
-    WebGeolocationError::Error code;
-    switch (errorCode) {
-    case PositionError::PERMISSION_DENIED:
-        code = WebGeolocationError::ErrorPermissionDenied;
-        break;
-    case PositionError::POSITION_UNAVAILABLE:
-        code = WebGeolocationError::ErrorPositionUnavailable;
-        break;
-    default:
-        ASSERT_NOT_REACHED();
-        return;
-    }
-
-    WebGeolocationError webError(code, message);
-    m_clientMock->setError(webError);
+    m_clientMock->setPositionUnavailableError(message);
 }
 
 void WebGeolocationClientMock::setPermission(bool allowed)
index fd2546f..e69726d 100644 (file)
@@ -1,3 +1,15 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
+        (DumpRenderTreeSupportGtk::setMockGeolocationPositionUnavailableError):
+        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
+        (DumpRenderTreeSupportGtk):
+
 2012-09-24  Zan Dobersek  <zandobersek@gmail.com>
 
         [Gtk] Unskip the Shadow DOM layout tests
index 46e18ee..b39d5ae 100644 (file)
@@ -3,6 +3,7 @@
  *  Copyright (C) 2010 Joone Hur <joone@kldp.org>
  *  Copyright (C) 2009 Google Inc. All rights reserved.
  *  Copyright (C) 2011 Igalia S.L.
+ *  Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Lesser General Public
@@ -659,23 +660,11 @@ void DumpRenderTreeSupportGtk::setMockGeolocationPosition(WebKitWebView* webView
 #endif
 }
 
-void DumpRenderTreeSupportGtk::setMockGeolocationError(WebKitWebView* webView, int errorCode, const gchar* errorMessage)
+void DumpRenderTreeSupportGtk::setMockGeolocationPositionUnavailableError(WebKitWebView* webView, const gchar* errorMessage)
 {
 #if ENABLE(GEOLOCATION)
     GeolocationClientMock* mock = static_cast<GeolocationClientMock*>(GeolocationController::from(core(webView))->client());
-
-    GeolocationError::ErrorCode code;
-    switch (errorCode) {
-    case PositionError::PERMISSION_DENIED:
-        code = GeolocationError::PermissionDenied;
-        break;
-    case PositionError::POSITION_UNAVAILABLE:
-    default:
-        code = GeolocationError::PositionUnavailable;
-        break;
-    }
-
-    mock->setError(GeolocationError::create(code, errorMessage));
+    mock->setPositionUnavailableError(errorMessage);
 #endif
 }
 
index 7e15057..44ac783 100644 (file)
@@ -1,5 +1,6 @@
 /*
  *  Copyright (C) Research In Motion Limited 2010. All rights reserved.
+ *  Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Lesser General Public
@@ -111,7 +112,7 @@ public:
     static void resetGeolocationClientMock(WebKitWebView*);
     static void setMockGeolocationPermission(WebKitWebView*, bool allowed);
     static void setMockGeolocationPosition(WebKitWebView*, double latitude, double longitude, double accuracy);
-    static void setMockGeolocationError(WebKitWebView*, int errorCode, const gchar* errorMessage);
+    static void setMockGeolocationPositionUnavailableError(WebKitWebView*, const gchar* errorMessage);
     static int numberOfPendingGeolocationPermissionRequests(WebKitWebView*);
 
     static void setPageCacheSupportsPlugins(WebKitWebView*, bool enabled);
index 1601cfe..7579b65 100644 (file)
@@ -1,3 +1,14 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        * WebView/WebView.mm:
+        (-[WebView _geolocationDidFailWithMessage:]):
+        * WebView/WebViewPrivate.h:
+
 2012-09-24  Ryosuke Niwa  <rniwa@webkit.org>
 
         suspend/resumeWidgetHierarchyUpdates should be a RAII object
index c1f0a2d..80d5417 100644 (file)
@@ -6511,11 +6511,11 @@ static void glibContextIterationCallback(CFRunLoopObserverRef, CFRunLoopActivity
 #endif // ENABLE(GEOLOCATION)
 }
 
-- (void)_geolocationDidFailWithError:(NSError *)error
+- (void)_geolocationDidFailWithMessage:(NSString *)errorMessage
 {
 #if ENABLE(GEOLOCATION)
     if (_private && _private->page) {
-        RefPtr<GeolocationError> geolocatioError = GeolocationError::create(GeolocationError::PositionUnavailable, [error localizedDescription]);
+        RefPtr<GeolocationError> geolocatioError = GeolocationError::create(GeolocationError::PositionUnavailable, errorMessage);
         WebCore::GeolocationController::from(_private->page)->errorOccurred(geolocatioError.get());
     }
 #endif // ENABLE(GEOLOCATION)
index 826474e..c46d35e 100644 (file)
@@ -728,7 +728,7 @@ Could be worth adding to the API.
 - (id<WebGeolocationProvider>)_geolocationProvider;
 
 - (void)_geolocationDidChangePosition:(WebGeolocationPosition *)position;
-- (void)_geolocationDidFailWithError:(NSError *)error;
+- (void)_geolocationDidFailWithMessage:(NSString *)errorMessage;
 @end
 
 @interface WebView (WebViewNotification)
index 5aa62f1..3d7ceda 100644 (file)
@@ -1,3 +1,14 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+
+        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
+        (DumpRenderTreeSupportQt::setMockGeolocationPositionUnavailableError):
+        * WebCoreSupport/DumpRenderTreeSupportQt.h:
+
 2012-09-20  Csaba Osztrogon√°c  <ossy@webkit.org>
 
         [Qt] Enable CSS regions by default
index dc82316..1ec3644 100644 (file)
@@ -2,7 +2,7 @@
     Copyright (C) 2010 Robert Hogan <robert@roberthogan.net>
     Copyright (C) 2008,2009,2010 Nokia Corporation and/or its subsidiary(-ies)
     Copyright (C) 2007 Staikos Computing Services Inc.
-    Copyright (C) 2007 Apple Inc.
+    Copyright (C) 2007, 2012 Apple Inc.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -753,23 +753,12 @@ void DumpRenderTreeSupportQt::setMockGeolocationPosition(QWebPage* page, double
 #endif
 }
 
-void DumpRenderTreeSupportQt::setMockGeolocationError(QWebPage* page, int errorCode, const QString& message)
+void DumpRenderTreeSupportQt::setMockGeolocationPositionUnavailableError(QWebPage* page, const QString& message)
 {
 #if ENABLE(GEOLOCATION)
     Page* corePage = QWebPagePrivate::core(page);
-
-    GeolocationError::ErrorCode code = GeolocationError::PositionUnavailable;
-    switch (errorCode) {
-    case PositionError::PERMISSION_DENIED:
-        code = GeolocationError::PermissionDenied;
-        break;
-    case PositionError::POSITION_UNAVAILABLE:
-        code = GeolocationError::PositionUnavailable;
-        break;
-    }
-
     GeolocationClientMock* mockClient = static_cast<GeolocationClientMock*>(GeolocationController::from(corePage)->client());
-    mockClient->setError(GeolocationError::create(code, message));
+    mockClient->setPositionUnavailableError(message);
 #endif
 }
 
index 8622136..cefb9d1 100644 (file)
@@ -2,7 +2,7 @@
     Copyright (C) 2010 Robert Hogan <robert@roberthogan.net>
     Copyright (C) 2008,2009,2010 Nokia Corporation and/or its subsidiary(-ies)
     Copyright (C) 2007 Staikos Computing Services Inc.
-    Copyright (C) 2007 Apple Inc.
+    Copyright (C) 2007, 2012 Apple Inc.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -141,7 +141,7 @@ public:
     static void resetGeolocationMock(QWebPage*);
     static void setMockGeolocationPermission(QWebPage*, bool allowed);
     static void setMockGeolocationPosition(QWebPage*, double latitude, double longitude, double accuracy);
-    static void setMockGeolocationError(QWebPage*, int errorCode, const QString& message);
+    static void setMockGeolocationPositionUnavailableError(QWebPage*, const QString& message);
     static int numberOfPendingGeolocationPermissionRequests(QWebPage*);
 
     static int workerThreadCount();
index 327de01..ee66c42 100644 (file)
@@ -1,3 +1,54 @@
+2012-09-24  Benjamin Poulain  <bpoulain@apple.com>
+
+        Fix Geolocation error reporting in the test support
+        https://bugs.webkit.org/show_bug.cgi?id=97386
+
+        Reviewed by Sam Weinig.
+        The TestRunner was exposing internal implementation details of
+        the Geolocation object through setMockGeolocationError().
+
+        In practice, only the error code PositionUnavailable is supported
+        or even implemented.
+
+        Exposing setMockGeolocationError() does not make sense for WebKit2 as
+        passing generic errors from the UIProcess is a bad idea. This is the
+        opportunity to clean TestRunner and prepare and interface suitable for WebKit2.
+
+        * DumpRenderTree/TestRunner.cpp:
+        (setMockGeolocationPositionUnavailableErrorCallback):
+        (TestRunner::staticFunctions):
+        * DumpRenderTree/TestRunner.h:
+        (TestRunner):
+        * DumpRenderTree/blackberry/TestRunnerBlackBerry.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/chromium/DRTTestRunner.cpp:
+        (DRTTestRunner::DRTTestRunner):
+        (DRTTestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/chromium/DRTTestRunner.h:
+        (DRTTestRunner):
+        * DumpRenderTree/efl/TestRunnerEfl.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/gtk/TestRunnerGtk.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/mac/MockGeolocationProvider.h:
+        * DumpRenderTree/mac/MockGeolocationProvider.mm:
+        (-[MockGeolocationProvider dealloc]):
+        (-[MockGeolocationProvider resetError]):
+        (-[MockGeolocationProvider setPosition:]):
+        (-[MockGeolocationProvider setPositionUnavailableErrorWithMessage:]):
+        (-[MockGeolocationProvider lastPosition]):
+        (-[MockGeolocationProvider timerFired]):
+        * DumpRenderTree/mac/TestRunnerMac.mm:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/qt/TestRunnerQt.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/qt/TestRunnerQt.h:
+        (TestRunner):
+        * DumpRenderTree/win/TestRunnerWin.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+        * DumpRenderTree/wx/TestRunnerWx.cpp:
+        (TestRunner::setMockGeolocationPositionUnavailableError):
+
 2012-09-24  Nikhil Bansal  <n.bansal@samsung.com>
 
         [EFL][WK2] TestRunner needs touch events support.
index 1d00c50..9f7a7c1 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
  * Copyright (C) 2010 Joone Hur <joone@kldp.org>
  *
  * Redistribution and use in source and binary forms, with or without
@@ -1095,17 +1095,16 @@ static JSValueRef setMockGeolocationPositionCallback(JSContextRef context, JSObj
     return JSValueMakeUndefined(context);
 }
 
-static JSValueRef setMockGeolocationErrorCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+static JSValueRef setMockGeolocationPositionUnavailableErrorCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
-    if (argumentCount < 2)
+    if (argumentCount != 1)
         return JSValueMakeUndefined(context);
 
-    int code = JSValueToNumber(context, arguments[0], NULL);
-    JSRetainPtr<JSStringRef> message(Adopt, JSValueToStringCopy(context, arguments[1], exception));
+    JSRetainPtr<JSStringRef> message(Adopt, JSValueToStringCopy(context, arguments[0], exception));
     ASSERT(!*exception);
 
     TestRunner* controller = reinterpret_cast<TestRunner*>(JSObjectGetPrivate(thisObject));
-    controller->setMockGeolocationError(code, message.get());
+    controller->setMockGeolocationPositionUnavailableError(message.get());
 
     return JSValueMakeUndefined(context);
 }
@@ -2266,7 +2265,7 @@ JSStaticFunction* TestRunner::staticFunctions()
         { "setMainFrameIsFirstResponder", setMainFrameIsFirstResponderCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setMinimumTimerInterval", setMinimumTimerIntervalCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setMockDeviceOrientation", setMockDeviceOrientationCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
-        { "setMockGeolocationError", setMockGeolocationErrorCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "setMockGeolocationPositionUnavailableError", setMockGeolocationPositionUnavailableErrorCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setMockGeolocationPosition", setMockGeolocationPositionCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "addMockSpeechInputResult", addMockSpeechInputResultCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setMockSpeechInputDumpRect", setMockSpeechInputDumpRectCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
index 9bcc95b..edd0dfd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -100,8 +100,8 @@ public:
     void setAutomaticLinkDetectionEnabled(bool flag);
     void setMainFrameIsFirstResponder(bool flag);
     void setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma);
-    void setMockGeolocationError(int code, JSStringRef message);
     void setMockGeolocationPosition(double latitude, double longitude, double accuracy);
+    void setMockGeolocationPositionUnavailableError(JSStringRef message);
     void addMockSpeechInputResult(JSStringRef result, double confidence, JSStringRef language);
     void setMockSpeechInputDumpRect(bool flag);
     void setPersistentUserStyleSheetLocation(JSStringRef path);
index 8986900..62be5fe 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2009, 2010, 2012 Research In Motion Limited. All rights reserved.
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -449,10 +450,10 @@ void TestRunner::setMockGeolocationPosition(double latitude, double longitude, d
     DumpRenderTreeSupport::setMockGeolocationPosition(BlackBerry::WebKit::DumpRenderTree::currentInstance()->page(), latitude, longitude, accuracy);
 }
 
-void TestRunner::setMockGeolocationError(int code, JSStringRef message)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef message)
 {
     String messageStr = jsStringRefToWebCoreString(message);
-    DumpRenderTreeSupport::setMockGeolocationError(BlackBerry::WebKit::DumpRenderTree::currentInstance()->page(), code, messageStr);
+    DumpRenderTreeSupport::setMockGeolocationPositionUnavailableError(BlackBerry::WebKit::DumpRenderTree::currentInstance()->page(), messageStr);
 }
 
 void TestRunner::showWebInspector()
index 0e5a8b3..f4f3aed 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
  * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org)
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -206,7 +207,7 @@ DRTTestRunner::DRTTestRunner(TestShell* shell)
     bindMethod("setJavaScriptCanAccessClipboard", &DRTTestRunner::setJavaScriptCanAccessClipboard);
     bindMethod("setMinimumTimerInterval", &DRTTestRunner::setMinimumTimerInterval);
     bindMethod("setMockDeviceOrientation", &DRTTestRunner::setMockDeviceOrientation);
-    bindMethod("setMockGeolocationError", &DRTTestRunner::setMockGeolocationError);
+    bindMethod("setMockGeolocationPositionUnavailableError", &DRTTestRunner::setMockGeolocationPositionUnavailableError);
     bindMethod("setMockGeolocationPosition", &DRTTestRunner::setMockGeolocationPosition);
     bindMethod("setPageVisibility", &DRTTestRunner::setPageVisibility);
     bindMethod("setPluginsEnabled", &DRTTestRunner::setPluginsEnabled);
@@ -1816,14 +1817,15 @@ void DRTTestRunner::setMockGeolocationPosition(const CppArgumentList& arguments,
         windowList[i]->geolocationClientMock()->setPosition(arguments[0].toDouble(), arguments[1].toDouble(), arguments[2].toDouble());
 }
 
-void DRTTestRunner::setMockGeolocationError(const CppArgumentList& arguments, CppVariant* result)
+void DRTTestRunner::setMockGeolocationPositionUnavailableError(const CppArgumentList& arguments, CppVariant* result)
 {
     result->setNull();
-    if (arguments.size() < 2 || !arguments[0].isNumber() || !arguments[1].isString())
+    if (arguments.size() != 1 || !arguments[0].isString())
         return;
     Vector<WebViewHost*> windowList = m_shell->windowList();
+    // FIXME: Benjamin
     for (size_t i = 0; i < windowList.size(); i++)
-        windowList[i]->geolocationClientMock()->setError(arguments[0].toInt32(), cppVariantToWebString(arguments[1]));
+        windowList[i]->geolocationClientMock()->setPositionUnavailableError(cppVariantToWebString(arguments[0]));
 }
 
 void DRTTestRunner::abortModal(const CppArgumentList& arguments, CppVariant* result)
index b6c907e..55940ac 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2010 Google Inc. All rights reserved.
  * Copyright (C) 2010 Pawel Hajdan (phajdan.jr@chromium.org)
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -337,7 +338,7 @@ public:
     // Geolocation related functions.
     void setGeolocationPermission(const CppArgumentList&, CppVariant*);
     void setMockGeolocationPosition(const CppArgumentList&, CppVariant*);
-    void setMockGeolocationError(const CppArgumentList&, CppVariant*);
+    void setMockGeolocationPositionUnavailableError(const CppArgumentList&, CppVariant*);
 
     // Empty stub method to keep parity with object model exposed by global DRTTestRunner.
     void abortModal(const CppArgumentList&, CppVariant*);
index 2e380c5..9797a31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2012 Apple Inc. All rights reserved.
  * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
  * Copyright (C) 2008 Nuanti Ltd.
  * Copyright (C) 2009 Jan Michael Alonzo <jmalonzo@gmail.com>
@@ -379,7 +379,7 @@ void TestRunner::setMockGeolocationPosition(double, double, double)
     notImplemented();
 }
 
-void TestRunner::setMockGeolocationError(int, JSStringRef)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef)
 {
     // FIXME: Implement for Geolocation layout tests.
     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
index 0929cad..db96289 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2012 Apple Inc. All rights reserved.
  * Copyright (C) 2007 Eric Seidel <eric@webkit.org>
  * Copyright (C) 2008 Nuanti Ltd.
  * Copyright (C) 2009 Jan Michael Alonzo <jmalonzo@gmail.com>
@@ -447,7 +447,7 @@ void TestRunner::setMockGeolocationPosition(double latitude, double longitude, d
     DumpRenderTreeSupportGtk::setMockGeolocationPosition(view, latitude, longitude, accuracy);
 }
 
-void TestRunner::setMockGeolocationError(int code, JSStringRef message)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef message)
 {
     WebKitWebView* view = WEBKIT_WEB_VIEW(g_slist_nth_data(webViewList, 0));
     if (!view)
@@ -455,7 +455,7 @@ void TestRunner::setMockGeolocationError(int code, JSStringRef message)
     ASSERT(view);
 
     GOwnPtr<gchar> cMessage(JSStringCopyUTF8CString(message));
-    DumpRenderTreeSupportGtk::setMockGeolocationError(view, code, cMessage.get());
+    DumpRenderTreeSupportGtk::setMockGeolocationPositionUnavailableError(view, cMessage.get());
 }
 
 void TestRunner::setGeolocationPermission(bool allow)
index 311d1e9..ba3a842 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2010, 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 
 #import <WebKit/WebViewPrivate.h>
 #import <wtf/HashSet.h>
+#import <wtf/RetainPtr.h>
 
 @interface MockGeolocationProvider : NSObject<WebGeolocationProvider> {
-    WebGeolocationPosition *_lastPosition;
-    NSError *_error;
+    RetainPtr<WebGeolocationPosition> _lastPosition;
+    BOOL _hasError;
+    RetainPtr<NSString> _errorMessage;
     NSTimer *_timer;
     HashSet<WebView *> _registeredViews;
 }
@@ -39,7 +41,7 @@
 + (MockGeolocationProvider *)shared;
 
 - (void)setPosition:(WebGeolocationPosition *)position;
-- (void)setError:(NSError *)error;
+- (void)setPositionUnavailableErrorWithMessage:(NSString *)errorMessage;
 
 - (void)stopTimer;
 
index e03cae2..5156d51 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2010, 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
 {
     ASSERT(_registeredViews.isEmpty());
 
-    [_lastPosition release];
-    [_error release];
+    _lastPosition.clear();
+    _errorMessage.clear();
     [super dealloc];
 }
 
+- (void)resetError
+{
+    _hasError = NO;
+    _errorMessage.clear();
+}
+
 - (void)setPosition:(WebGeolocationPosition *)position
 {
-    if (_lastPosition != position) {
-        [_lastPosition release];
-        _lastPosition = [position retain];
-    }
+    _lastPosition = position;
     
-    [_error release];
-    _error = 0;
+    [self resetError];
 
     if (!_timer)
         _timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(timerFired) userInfo:0 repeats:NO];
 }
 
-- (void)setError:(NSError *)error
+- (void)setPositionUnavailableErrorWithMessage:(NSString *)errorMessage
 {
-    if (_error != error) {
-        [_error release];
-        _error = [error retain];
-    }
-    
-    [_lastPosition release];
-    _lastPosition = 0;
+    _hasError = YES;
+    _errorMessage = errorMessage;
+
+    _lastPosition.clear();
 
     if (!_timer)
         _timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(timerFired) userInfo:0 repeats:NO];
@@ -86,7 +85,7 @@
 
 - (WebGeolocationPosition *)lastPosition
 {
-    return _lastPosition;
+    return _lastPosition.get();
 }
 
 - (void)stopTimer
     // Expect that views won't be (un)registered while iterating.
     HashSet<WebView*> views = _registeredViews;
     for (HashSet<WebView*>::iterator iter = views.begin(); iter != views.end(); ++iter) {
-        if (_error)
-            [*iter _geolocationDidFailWithError:_error];
+        if (_hasError)
+            [*iter _geolocationDidFailWithMessage:_errorMessage.get()];
         else
-            [*iter _geolocationDidChangePosition:_lastPosition];
+            [*iter _geolocationDidChangePosition:_lastPosition.get()];
     }
 }
 
index a21ed80..1a0a04d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2007, 2008, 2009, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -479,12 +479,11 @@ void TestRunner::setMockGeolocationPosition(double latitude, double longitude, d
     [position release];
 }
 
-void TestRunner::setMockGeolocationError(int code, JSStringRef message)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef message)
 {
     RetainPtr<CFStringRef> messageCF(AdoptCF, JSStringCopyCFString(kCFAllocatorDefault, message));
     NSString *messageNS = (NSString *)messageCF.get();
-    NSError *error = [NSError errorWithDomain:WebKitErrorDomain code:code userInfo:[NSDictionary dictionaryWithObject:messageNS forKey:NSLocalizedDescriptionKey]];
-    [[MockGeolocationProvider shared] setError:error];
+    [[MockGeolocationProvider shared] setPositionUnavailableErrorWithMessage:messageNS];
 }
 
 void TestRunner::setGeolocationPermission(bool allow)
index d3503bd..9a92013 100644 (file)
@@ -834,11 +834,11 @@ void TestRunner::setGeolocationPermissionCommon(bool allow)
      m_geolocationPermission = allow;
 }
 
-void TestRunner::setMockGeolocationError(int code, const QString& message)
+void TestRunner::setMockGeolocationPositionUnavailableError(const QString& message)
 {
     QList<WebCore::WebPage*> pages = m_drt->getAllPages();
     foreach (WebCore::WebPage* page, pages)
-        DumpRenderTreeSupportQt::setMockGeolocationError(page, code, message);
+        DumpRenderTreeSupportQt::setMockGeolocationPositionUnavailableError(page, message);
 }
 
 void TestRunner::setMockGeolocationPosition(double latitude, double longitude, double accuracy)
index 88a9c6a..311bcd9 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
  * Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -224,7 +225,7 @@ public Q_SLOTS:
 
     void setMockDeviceOrientation(bool canProvideAlpha, double alpha, bool canProvideBeta, double beta, bool canProvideGamma, double gamma);
 
-    void setMockGeolocationError(int code, const QString& message);
+    void setMockGeolocationPositionUnavailableError(const QString& message);
     void setMockGeolocationPosition(double latitude, double longitude, double accuracy);
     void setGeolocationPermission(bool allow);
     int numberOfPendingGeolocationPermissionRequests();
index d33651b..c4400fd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -420,7 +420,7 @@ void TestRunner::setMockGeolocationPosition(double latitude, double longitude, d
     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
 }
 
-void TestRunner::setMockGeolocationError(int code, JSStringRef message)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef message)
 {
     // FIXME: Implement for Geolocation layout tests.
     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
index d7a5252..e780cfe 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2008 Kevin Ollivier <kevino@theolliviers.com>
+ * Copyright (C) 2012 Apple Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -338,7 +339,7 @@ void TestRunner::setMockGeolocationPosition(double latitude, double longitude, d
     // See https://bugs.webkit.org/show_bug.cgi?id=28264.
 }
 
-void TestRunner::setMockGeolocationError(int code, JSStringRef message)
+void TestRunner::setMockGeolocationPositionUnavailableError(JSStringRef)
 {
     // FIXME: Implement for Geolocation layout tests.
     // See https://bugs.webkit.org/show_bug.cgi?id=28264.