It turns out that Safari 2.0.4 does not throw an exception when an XHR violates the same-origin policy. As a matter of fact, it appears to do nothing. The test will no longer fail if an XHR on a Safari browser fails to generate a same-origin policy violation.
Review by: jgw (desk check)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2003 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/test/com/google/gwt/http/client/RequestBuilderTest.java b/user/test/com/google/gwt/http/client/RequestBuilderTest.java
index ccfeaec..bedda28 100644
--- a/user/test/com/google/gwt/http/client/RequestBuilderTest.java
+++ b/user/test/com/google/gwt/http/client/RequestBuilderTest.java
@@ -28,6 +28,16 @@
return GWT.getModuleBaseURL() + "testRequestBuilder/";
}
+ /**
+ * HACK: Part of a work around for Safari 2.0.4's failure to throw an
+ * exception when an XmlHttpRequest that violates the same origin policy is
+ * made.
+ */
+ private static native boolean isSafari() /*-{
+ var ua = navigator.userAgent.toLowerCase();
+ return ua.indexOf("webkit") != -1;
+ }-*/;
+
@Override
public String getModuleName() {
return "com.google.gwt.http.RequestBuilderTest";
@@ -90,7 +100,22 @@
// should never get here
}
});
- fail("Expected RequestPermissionException");
+
+ if (isSafari()) {
+ /*
+ * HACK: Safari 2.0.4 will not throw an exception for XHR's that violate
+ * the same-origin policy. It appears to silently ignore them so we do
+ * not fail this test if we are on Safari and the
+ * RequestPermissionException is not thrown. Even though Safari 3.0.4
+ * does throw an exception in this case, we exclude it anyway.
+ */
+ } else {
+ /*
+ * All other supported browsers throw an exception for XHR's that
+ * violate the same-origin policy; fail the test if we get here.
+ */
+ fail("Expected RequestPermissionException");
+ }
} catch (IllegalArgumentException ex) {
// purposely ignored
} catch (RequestPermissionException ex) {