Rollback r5208, since it is failing on IE7. git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5210 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/jsonp/Jsonp.gwt.xml b/user/src/com/google/gwt/jsonp/Jsonp.gwt.xml deleted file mode 100644 index fd39299..0000000 --- a/user/src/com/google/gwt/jsonp/Jsonp.gwt.xml +++ /dev/null
@@ -1,18 +0,0 @@ -<!-- --> -<!-- Copyright 2009 Google Inc. --> -<!-- Licensed under the Apache License, Version 2.0 (the "License"); you --> -<!-- may not use this file except in compliance with the License. You may --> -<!-- may obtain a copy of the License at --> -<!-- --> -<!-- http://www.apache.org/licenses/LICENSE-2.0 --> -<!-- --> -<!-- Unless required by applicable law or agreed to in writing, software --> -<!-- distributed under the License is distributed on an "AS IS" BASIS, --> -<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or --> -<!-- implied. License for the specific language governing permissions and --> -<!-- limitations under the License. --> - -<module> - <inherits name='com.google.gwt.user.User'/> - <source path="client"/> -</module>
diff --git a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java b/user/src/com/google/gwt/jsonp/client/JsonpRequest.java deleted file mode 100644 index fe64eec..0000000 --- a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java +++ /dev/null
@@ -1,215 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp.client; - -import com.google.gwt.dom.client.Document; -import com.google.gwt.dom.client.Node; -import com.google.gwt.dom.client.ScriptElement; -import com.google.gwt.user.client.Command; -import com.google.gwt.user.client.DeferredCommand; -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.rpc.AsyncCallback; - -/** - * A JSONP request that is waiting for a response. The request can be cancelled. - * - * @param <T> the type of the response object. - */ -public class JsonpRequest<T> { - - /** - * Each request will be assigned a new id. - */ - private static int callbackCounter = 0; - - private static native Node getDocumentElement() /*-{ - return $doc.documentElement; - }-*/; - - private static String nextCallbackId() { - return "__jsonp" + (callbackCounter++) + "__"; - } - - private final String callbackId; - - private final int timeout; - - private final AsyncCallback<T> callback; - - /** - * Whether the result is expected to be an integer or not - */ - @SuppressWarnings("unused") // used by JSNI - private final boolean expectInteger; - - private final String callbackParam; - - private final String failureCallbackParam; - - /** - * Timer which keeps track of timeouts. - */ - private Timer timer; - - /** - * Create a new JSONP request. - * - * @param callback The callback instance to notify when the response comes - * back - * @param timeout Time in ms after which a {@link TimeoutException} will be - * thrown - * @param expectInteger Should be true if T is {@link Integer}, false - * otherwise - * @param callbackParam Name of the url param of the callback function name - * @param failureCallbackParam Name of the url param containing the the - * failure callback function name, or null for no failure callback - */ - JsonpRequest(AsyncCallback<T> callback, int timeout, boolean expectInteger, - String callbackParam, String failureCallbackParam) { - callbackId = nextCallbackId(); - this.callback = callback; - this.timeout = timeout; - this.expectInteger = expectInteger; - this.callbackParam = callbackParam; - this.failureCallbackParam = failureCallbackParam; - } - - /** - * Cancels a pending request. - */ - public void cancel() { - timer.cancel(); - unload(); - } - - public AsyncCallback<T> getCallback() { - return callback; - } - - public int getTimeout() { - return timeout; - } - - /** - * Sends a request using the JSONP mechanism. - * - * @param baseUri To be sent to the server. - */ - void send(final String baseUri) { - registerCallbacks(); - StringBuffer uri = new StringBuffer(baseUri); - uri.append(baseUri.contains("?") ? "&" : "?"); - uri.append(callbackParam).append("=").append(callbackId).append( - ".onSuccess"); - if (failureCallbackParam != null) { - uri.append("&"); - uri.append(failureCallbackParam).append("=").append(callbackId).append( - ".onFailure"); - } - ScriptElement script = Document.get().createScriptElement(); - script.setType("text/javascript"); - script.setId(callbackId); - script.setSrc(uri.toString()); - getDocumentElement().getFirstChild().appendChild(script); - timer = new Timer() { - @Override - public void run() { - onFailure(new TimeoutException("Timeout while calling " + baseUri)); - } - }; - timer.schedule(timeout); - } - - @SuppressWarnings("unused") // used by JSNI - private void onFailure(String message) { - onFailure(new Exception(message)); - } - - private void onFailure(Throwable ex) { - timer.cancel(); - try { - if (callback != null) { - callback.onFailure(ex); - } - } finally { - unload(); - } - } - - @SuppressWarnings("unused") // used by JSNI - private void onSuccess(T data) { - timer.cancel(); - try { - if (callback != null) { - callback.onSuccess(data); - } - } finally { - unload(); - } - } - - /** - * Registers the callback methods that will be called when the JSONP response - * comes back. 2 callbacks are created, one to return the value, and one to - * notify a failure. - */ - private native void registerCallbacks() /*-{ - var self = this; - var callback = new Object(); - $wnd[this.@com.google.gwt.jsonp.client.JsonpRequest::callbackId] = callback; - callback.onSuccess = function(data) { - // Box primitive types - if (typeof data == 'boolean') { - data = @java.lang.Boolean::new(Z)(data); - } else if (typeof data == 'number') { - if (self.@com.google.gwt.jsonp.client.JsonpRequest::expectInteger) { - data = @java.lang.Integer::new(I)(data); - } else { - data = @java.lang.Double::new(D)(data); - } - } - self.@com.google.gwt.jsonp.client.JsonpRequest::onSuccess(Ljava/lang/Object;)(data); - }; - if (this.@com.google.gwt.jsonp.client.JsonpRequest::failureCallbackParam) { - callback.onFailure = function(message) { - self.@com.google.gwt.jsonp.client.JsonpRequest::onFailure(Ljava/lang/String;)(message); - }; - } - }-*/; - - /** - * Cleans everything once the response has been received: deletes the script - * tag, unregisters the callback. - */ - private void unload() { - /* - * Some browsers (IE7) require the script tag to be deleted outside the - * scope of the script itself. Therefore, we need to defer the delete - * statement after the callback execution. - */ - DeferredCommand.addCommand(new Command() { - public void execute() { - unregisterCallbacks(); - Node script = Document.get().getElementById(callbackId); - getDocumentElement().getFirstChild().removeChild(script); - } - }); - } - - private native void unregisterCallbacks() /*-{ - delete $wnd[this.@com.google.gwt.jsonp.client.JsonpRequest::callbackId]; - }-*/; -}
diff --git a/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java b/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java deleted file mode 100644 index 7d26448..0000000 --- a/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java +++ /dev/null
@@ -1,201 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp.client; - -import com.google.gwt.core.client.JavaScriptObject; -import com.google.gwt.user.client.rpc.AsyncCallback; - - -/** - * Class to send cross domain requests to an http server. The server will receive a request - * including a callback url parameter, which should be used to return the response as following: - * - * <pre><callback>(<json>);</pre> - * - * where <callback> is the url parameter (see {@link #setCallbackParam(String)}), and - * <json> is the response to the request in json format. - * - * This will result on the client to call the corresponding {@link AsyncCallback#onSuccess(Object)} - * method. - * - * <p> - * If needed, errors can be handled by a separate callback: - * - * <pre><failureCallback>(<error>);</pre> - * - * where <error> is a string containing an error message. This will result on the client to - * call the corresponding {@link AsyncCallback#onFailure(Throwable)} method. See - * {@link #setFailureCallbackParam(String)}. - * - * <p> - * Example using <a href="http://code.google.com/apis/gdata/json.html#Request">JSON Google Calendar - * GData API</a>: - * - * <pre> - * String url = "http://www.google.com/calendar/feeds/developer-calendar@google.com/public/full" + - * "?alt=json-in-script"; - * JsonpRequestBuilder jsonp = new JsonpRequestBuilder(); - * jsonp.requestObject(url, - * new AsyncCallback<Feed>() { - * public void onFailure(Throwable throwable) { - * Log.severe("Error: " + throwable); - * } - * - * public void onSuccess(Feed feed) { - * JsArray<Entry> entries = feed.getEntries(); - * for (int i = 0; i < entries.length(); i++) { - * Entry entry = entries.get(i); - * Log.info(entry.getTitle() + - * " (" + entry.getWhere() + "): " + - * entry.getStartTime() + " -> " + - * entry.getEndTime()); - * } - * } - * }); - * </pre> - * - * This example uses these overlay types: - * - * <pre> - * class Entry extends JavaScriptObject { - * protected Entry() {} - * - * public final native String getTitle() /*-{ - * return this.title.$t; - * }-*/; - * - * public final native String getWhere() /*-{ - * return this.gd$where[0].valueString; - * }-*/; - * - * public final native String getStartTime() /*-{ - * return this.gd$when ? this.gd$when[0].startTime : null; - * }-*/; - * - * public final native String getEndTime() /*-{ - * return this.gd$when ? this.gd$when[0].endTime : null; - * }-*/; - * } - * - * class Feed extends JavaScriptObject { - * protected Feed() {} - * - * public final native JsArray<Entry> getEntries() /*-{ - * return this.feed.entry; - * }-*/; - * } - * </pre> - * - * </p> - */ -public class JsonpRequestBuilder { - private int timeout = 10000; - private String callbackParam = "callback"; - private String failureCallbackParam = null; - - /** - * @return the name of the callback url parameter to send to the server. The default value is - * "callback". - */ - public String getCallbackParam() { - return callbackParam; - } - - /** - * @return the name of the failure callback url parameter to send to the server. The default is - * null. - */ - public String getFailureCallbackParam() { - return failureCallbackParam; - } - - /** - * @return the expected timeout (ms) for this request. - */ - public int getTimeout() { - return timeout; - } - - public JsonpRequest<Boolean> requestBoolean(String url, AsyncCallback<Boolean> callback) { - return send(url, callback, false); - } - - public JsonpRequest<Double> requestDouble(String url, AsyncCallback<Double> callback) { - return send(url, callback, false); - } - - public JsonpRequest<Integer> requestInteger(String url, AsyncCallback<Integer> callback) { - return send(url, callback, true); - } - - /** - * Sends a JSONP request and expects a JavaScript object as a result. The caller can either use - * {@link com.google.gwt.json.client.JSONObject} to parse it, or use a JavaScript overlay class. - */ - public <T extends JavaScriptObject> JsonpRequest<T> requestObject(String url, - AsyncCallback<T> callback) { - return send(url, callback, false); - } - - public JsonpRequest<String> requestString(String url, AsyncCallback<String> callback) { - return send(url, callback, false); - } - - /** - * Sends a JSONP request and does not expect any results. - */ - public void send(String url) { - send(url, null, false); - } - - /** - * Sends a JSONP request, does not expect any result, but still allows to be notified when the - * request has been executed on the server. - */ - public JsonpRequest<Void> send(String url, AsyncCallback<Void> callback) { - return send(url, callback, false); - } - - /** - * @param callbackParam The name of the callback url parameter to send to the server. The default - * value is "callback". - */ - public void setCallbackParam(String callbackParam) { - this.callbackParam = callbackParam; - } - - /** - * @param failureCallbackParam The name of the failure callback url parameter to send to the - * server. The default is null. - */ - public void setFailureCallbackParam(String failureCallbackParam) { - this.failureCallbackParam = failureCallbackParam; - } - - /** - * @param timeout The expected timeout (ms) for this request. The default is 10s. - */ - public void setTimeout(int timeout) { - this.timeout = timeout; - } - - private <T> JsonpRequest<T> send(String url, AsyncCallback<T> callback, boolean expectInteger) { - JsonpRequest<T> request = new JsonpRequest<T>(callback, timeout, expectInteger, callbackParam, - failureCallbackParam); - request.send(url); - return request; - } -}
diff --git a/user/src/com/google/gwt/jsonp/client/TimeoutException.java b/user/src/com/google/gwt/jsonp/client/TimeoutException.java deleted file mode 100644 index 703f663..0000000 --- a/user/src/com/google/gwt/jsonp/client/TimeoutException.java +++ /dev/null
@@ -1,29 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp.client; - -/** - * Exception sent when a JSONP calls expires the timeout. - */ -public class TimeoutException extends Exception { - - public TimeoutException() { - } - - public TimeoutException(String s) { - super(s); - } -}
diff --git a/user/test/com/google/gwt/jsonp/JsonpRequestSuite.java b/user/test/com/google/gwt/jsonp/JsonpRequestSuite.java deleted file mode 100644 index 34fe230..0000000 --- a/user/test/com/google/gwt/jsonp/JsonpRequestSuite.java +++ /dev/null
@@ -1,33 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp; - -import com.google.gwt.jsonp.client.JsonpRequestTest; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Suite for JSONP tests. - */ -public class JsonpRequestSuite extends TestCase { - public static Test suite() { - TestSuite suite = new TestSuite(); - suite.addTestSuite(JsonpRequestTest.class); - return suite; - } -}
diff --git a/user/test/com/google/gwt/jsonp/JsonpTest.gwt.xml b/user/test/com/google/gwt/jsonp/JsonpTest.gwt.xml deleted file mode 100644 index 989fc8d..0000000 --- a/user/test/com/google/gwt/jsonp/JsonpTest.gwt.xml +++ /dev/null
@@ -1,25 +0,0 @@ -<!-- --> -<!-- Copyright 2009 Google Inc. --> -<!-- Licensed under the Apache License, Version 2.0 (the "License"); you --> -<!-- may not use this file except in compliance with the License. You may --> -<!-- may obtain a copy of the License at --> -<!-- --> -<!-- http://www.apache.org/licenses/LICENSE-2.0 --> -<!-- --> -<!-- Unless required by applicable law or agreed to in writing, software --> -<!-- distributed under the License is distributed on an "AS IS" BASIS, --> -<!-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or --> -<!-- implied. License for the specific language governing permissions and --> -<!-- limitations under the License. --> - -<module> - <!-- Inherit the JUnit support --> - <inherits name='com.google.gwt.junit.JUnit'/> - <inherits name = 'com.google.gwt.jsonp.Jsonp'/> - - <!-- Include client-side source for the test cases --> - <source path="client"/> - - <!-- JSONP servlet for testing --> - <servlet path='/echo' class='com.google.gwt.jsonp.server.EchoServlet'/> -</module>
diff --git a/user/test/com/google/gwt/jsonp/client/JsonpRequestTest.java b/user/test/com/google/gwt/jsonp/client/JsonpRequestTest.java deleted file mode 100644 index 7784827..0000000 --- a/user/test/com/google/gwt/jsonp/client/JsonpRequestTest.java +++ /dev/null
@@ -1,182 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp.client; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.junit.client.GWTTestCase; -import com.google.gwt.user.client.rpc.AsyncCallback; - -/** - * Tests for {@link JsonpRequest}. - */ -public class JsonpRequestTest extends GWTTestCase { - - /** - * Checks that an error is received. - */ - private class AssertFailureCallback<T> implements AsyncCallback<T> { - private String expectedMessage; - - public AssertFailureCallback(String expectedMessage) { - this.expectedMessage = expectedMessage; - } - - public void onFailure(Throwable throwable) { - assertEquals(expectedMessage, throwable.getMessage()); - finishTest(); - } - - public void onSuccess(T value) { - fail(); - } - } - - /** - * Checks that the received value is as expected. - */ - private class AssertSuccessCallback<T> implements AsyncCallback<T> { - private T expectedValue; - - private AssertSuccessCallback(T expectedValue) { - this.expectedValue = expectedValue; - } - - public void onFailure(Throwable throwable) { - fail(); - } - - public void onSuccess(T value) { - assertEquals(expectedValue, value); - finishTest(); - } - } - - /** - * Checks that a timeout happens. - */ - private class AssertTimeoutException<T> implements AsyncCallback<T> { - public void onFailure(Throwable throwable) { - assertTrue(throwable instanceof TimeoutException); - finishTest(); - } - - public void onSuccess(T value) { - fail(); - } - } - - private static String echo(String value) { - return GWT.getModuleBaseURL() + "echo?action=SUCCESS&value=" + value; - } - - private static String echoFailure(String error) { - return GWT.getModuleBaseURL() + "echo?action=FAILURE&error=" + error; - } - - private static String echoTimeout() { - return GWT.getModuleBaseURL() + "echo?action=TIMEOUT"; - } - - private JsonpRequestBuilder jsonp; - - @Override - public String getModuleName() { - return "com.google.gwt.jsonp.JsonpTest"; - } - - public void testBooleanFalse() { - jsonp.requestBoolean(echo("false"), new AssertSuccessCallback<Boolean>( - Boolean.FALSE)); - delayTestFinish(500); - } - - public void testBooleanTrue() { - jsonp.requestBoolean(echo("true"), new AssertSuccessCallback<Boolean>( - Boolean.TRUE)); - delayTestFinish(500); - } - - public void testDouble() { - jsonp.requestDouble(echo("123.456"), new AssertSuccessCallback<Double>( - 123.456)); - delayTestFinish(500); - } - - public void testFailureCallback() { - jsonp.setFailureCallbackParam("failureCallback"); - jsonp.requestString(echoFailure("ERROR"), - new AssertFailureCallback<String>("ERROR")); - delayTestFinish(500); - } - - public void testInteger() { - jsonp.requestInteger(echo("123"), new AssertSuccessCallback<Integer>(123)); - delayTestFinish(500); - } - - /** - * Tests that if no failure callback is defined, the servlet receives well - * only a 'callback' parameter, and sends back the error to it. - */ - public void testNoFailureCallback() { - jsonp.setFailureCallbackParam(null); - jsonp.requestString(echoFailure("ERROR"), - new AssertSuccessCallback<String>("ERROR")); - delayTestFinish(500); - } - - public void testNullBoolean() { - jsonp.requestBoolean(echo("null"), new AssertSuccessCallback<Boolean>(null)); - delayTestFinish(500); - } - - public void testNullDouble() { - jsonp.requestDouble(echo("null"), new AssertSuccessCallback<Double>(null)); - delayTestFinish(500); - } - - public void testNullInteger() { - jsonp.requestInteger(echo("null"), new AssertSuccessCallback<Integer>(null)); - delayTestFinish(500); - } - - public void testNullString() { - jsonp.requestString(echo("null"), new AssertSuccessCallback<String>(null)); - delayTestFinish(500); - } - - public void testString() { - jsonp.requestString(echo("'Hello'"), new AssertSuccessCallback<String>( - "Hello")); - delayTestFinish(500); - } - - public void testTimeout() { - jsonp.requestString(echoTimeout(), new AssertTimeoutException<String>()); - delayTestFinish(2000); - } - - public void testVoid() { - jsonp.send(echo(null), new AssertSuccessCallback<Void>(null)); - delayTestFinish(500); - } - - @Override - protected void gwtSetUp() throws Exception { - jsonp = new JsonpRequestBuilder(); - jsonp.setTimeout(1000); - } -}
diff --git a/user/test/com/google/gwt/jsonp/server/EchoServlet.java b/user/test/com/google/gwt/jsonp/server/EchoServlet.java deleted file mode 100644 index bdee3ef..0000000 --- a/user/test/com/google/gwt/jsonp/server/EchoServlet.java +++ /dev/null
@@ -1,80 +0,0 @@ -/* - * Copyright 2009 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.jsonp.server; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * A servlet that returns a given value, following the JSONP protocol. - * Expected url parameters: - * - * <ul> - * <li>action: one of the following values: - * <ul> - * <li>TIMEOUT: don't respond anything to simulate a timeout - * <li>SUCCESS: return a JSON value - * <li>FAILURE: return an error - * </ul> - * <li>value: the JSON value to return if action == "SUCCESS" - * <li>error: the error message to return if action == "FAILURE" - * </ul> - */ -public class EchoServlet extends HttpServlet { - - private enum Action { - SUCCESS, - FAILURE, - TIMEOUT - } - - @Override - protected void service(HttpServletRequest req, HttpServletResponse res) - throws ServletException, IOException { - switch (Action.valueOf(req.getParameter("action"))) { - case SUCCESS: { - String callback = req.getParameter("callback"); - String value = req.getParameter("value"); - if (value == null) { - value = ""; - } - res.getWriter().println(callback + "(" + value + ");"); - break; - } - - case FAILURE: { - String failureCallback = req.getParameter("failureCallback"); - String error = req.getParameter("error"); - if (failureCallback != null) { - res.getWriter().println(failureCallback + "('" + error + "');"); - } else { - // If no failure callback is defined, send the error through the - // success callback. - String callback = req.getParameter("callback"); - res.getWriter().println(callback + "('" + error + "');"); - } - break; - } - - case TIMEOUT: - // Don't respond anything so that a timeout happens. - } - } -}