Disable tests using toDataURL() or getImageData() on Safari 3.

Review at http://gwt-code-reviews.appspot.com/1176801

Review by: rice@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9333 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/dom/client/DOMImplMozilla.java b/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
index e46f3ca..900fcf9 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplMozilla.java
@@ -19,8 +19,6 @@
  * Mozilla implementation of StandardBrowser.
  */
 class DOMImplMozilla extends DOMImplStandard {
-  private static boolean isGecko190OrBefore;
-  private static boolean isGecko190OrBeforeDetected;
 
   /**
    * Return true if using Gecko 1.9.0 (Firefox 3) or earlier.
@@ -28,20 +26,7 @@
    * @return true if using Gecko 1.9.0 (Firefox 3) or earlier.
    */
   @SuppressWarnings("unused")
-  static boolean isGecko190OrBefore() {
-    if (!isGecko190OrBeforeDetected) {
-      isGecko190OrBefore = isGecko190OrBeforeImpl();
-      isGecko190OrBeforeDetected = true;
-    }
-    return isGecko190OrBefore;
-  }
-
-  /**
-   * Return true if using Gecko 1.9.0 (Firefox 3) or earlier.
-   * 
-   * @return true if using Gecko 1.9.0 (Firefox 3) or earlier.
-   */
-  private static native boolean isGecko190OrBeforeImpl() /*-{
+  private static native boolean isGecko190OrBefore() /*-{
     var result = /rv:([0-9]+)\.([0-9]+)\.([0-9]+)?/.exec(navigator.userAgent.toLowerCase());
     if (result && result.length >= 3) {
       var version = (parseInt(result[1]) * 1000000) + (parseInt(result[2]) * 1000) + 
diff --git a/user/src/com/google/gwt/dom/client/DOMImplSafari.java b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
index 01454af..e9a4285 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplSafari.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
@@ -22,6 +22,23 @@
  */
 class DOMImplSafari extends DOMImplStandard {
 
+  /**
+   * Return true if using Webkit 525.x (Safari 3) or earlier.
+   * 
+   * @return true if using Webkit 525.x (Safari 3) or earlier.
+   */
+  @SuppressWarnings("unused")
+  private static native boolean isWebkit525OrBefore() /*-{
+    var result = /safari\/([\d.]+)/.exec(navigator.userAgent.toLowerCase());
+    if (result) {
+      var version = (parseFloat(result[1]));
+      if (version < 526) {
+        return true;
+      }
+    }
+    return false;
+  }-*/;
+
   private static class ClientRect extends JavaScriptObject {
     
     @SuppressWarnings("unused")
diff --git a/user/test/com/google/gwt/canvas/client/CanvasTest.java b/user/test/com/google/gwt/canvas/client/CanvasTest.java
index bd3cb77..147ddfe 100644
--- a/user/test/com/google/gwt/canvas/client/CanvasTest.java
+++ b/user/test/com/google/gwt/canvas/client/CanvasTest.java
@@ -34,6 +34,10 @@
   protected Canvas canvas1;
   protected Canvas canvas2;
 
+  native boolean isWebkit525OrBefore() /*-{
+    return @com.google.gwt.dom.client.DOMImplSafari::isWebkit525OrBefore()();
+  }-*/;
+
   @Override
   public String getModuleName() {
     return "com.google.gwt.canvas.Canvas";
@@ -69,6 +73,12 @@
       return; // disable tests if not supported
     }
 
+    // Safari 3.0 does not support toDataURL(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("0px");
     canvas1.setWidth("0px");
     assertEquals(0, canvas1.getOffsetHeight());
@@ -142,6 +152,12 @@
       return; // disable tests if not supported
     }
 
+    // Safari 3.0 does not support toDataURL(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("10px");
     canvas1.setWidth("10px");
     canvas1.setCoordinateSpaceHeight(10);
diff --git a/user/test/com/google/gwt/canvas/dom/client/Context2dTest.java b/user/test/com/google/gwt/canvas/dom/client/Context2dTest.java
index f7834ce..600d811 100644
--- a/user/test/com/google/gwt/canvas/dom/client/Context2dTest.java
+++ b/user/test/com/google/gwt/canvas/dom/client/Context2dTest.java
@@ -40,7 +40,11 @@
   protected Canvas canvas2;
 
   native boolean isGecko190OrBefore() /*-{
-    return @com.google.gwt.dom.client.DOMImplMozilla::isGecko190OrBeforeImpl()();
+    return @com.google.gwt.dom.client.DOMImplMozilla::isGecko190OrBefore()();
+  }-*/;
+
+  native boolean isWebkit525OrBefore() /*-{
+    return @com.google.gwt.dom.client.DOMImplSafari::isWebkit525OrBefore()();
   }-*/;
 
   @Override
@@ -71,6 +75,12 @@
       return; // disable tests if not supported
     }
 
+    // Safari 3.0 does not support getImageData(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("40px");
     canvas1.setWidth("60px");
     canvas1.setCoordinateSpaceHeight(80);
@@ -196,6 +206,12 @@
       return; // disable tests if not supported
     }
 
+    // Safari 3.0 does not support getImageData(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("40px");
     canvas1.setWidth("60px");
     canvas1.setCoordinateSpaceHeight(40);
@@ -242,6 +258,12 @@
       return;
     }
 
+    // Safari 3.0 does not support getImageData(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("40px");
     canvas1.setWidth("60px");
     canvas1.setCoordinateSpaceHeight(40);
@@ -358,6 +380,12 @@
       return; // disable tests if not supported
     }
 
+    // Safari 3.0 does not support getImageData(), so the following tests are disabled for
+    // Safari 3.0 and before.
+    if (isWebkit525OrBefore()) {
+      return;
+    }
+
     canvas1.setHeight("40px");
     canvas1.setWidth("60px");
     canvas1.setCoordinateSpaceHeight(40);