Introduces BrowserEvents string constants

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

Review by: jlabanca@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10661 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/cell/client/AbstractCell.java b/user/src/com/google/gwt/cell/client/AbstractCell.java
index 738cb6a..26205ed 100644
--- a/user/src/com/google/gwt/cell/client/AbstractCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractCell.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.cell.client;
 
-import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.KeyCodes;
@@ -55,7 +55,10 @@
    * Construct a new {@link AbstractCell} with the specified consumed events.
    * The input arguments are passed by copy.
    * 
-   * @param consumedEvents the events that this cell consumes
+   * @param consumedEvents the {@link com.google.gwt.dom.client.BrowserEvents
+   *          events} that this cell consumes
+   * 
+   * @see com.google.gwt.dom.client.BrowserEvents
    */
   public AbstractCell(String... consumedEvents) {
     Set<String> events = null;
@@ -109,7 +112,7 @@
       NativeEvent event, ValueUpdater<C> valueUpdater) {
     String eventType = event.getType();
     // Special case the ENTER key for a unified user experience.
-    if ("keydown".equals(eventType) && event.getKeyCode() == KeyCodes.KEY_ENTER) {
+    if (BrowserEvents.KEYDOWN.equals(eventType) && event.getKeyCode() == KeyCodes.KEY_ENTER) {
       onEnterKeyDown(context, parent, value, event, valueUpdater);
     }
   }
diff --git a/user/src/com/google/gwt/cell/client/AbstractInputCell.java b/user/src/com/google/gwt/cell/client/AbstractInputCell.java
index b9719fc..5d23869 100644
--- a/user/src/com/google/gwt/cell/client/AbstractInputCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractInputCell.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.cell.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 
@@ -38,9 +39,9 @@
    */
   private static Set<String> getConsumedEventsImpl(Set<String> userEvents) {
     Set<String> events = new HashSet<String>();
-    events.add("focus");
-    events.add("blur");
-    events.add("keydown");
+    events.add(BrowserEvents.FOCUS);
+    events.add(BrowserEvents.BLUR);
+    events.add(BrowserEvents.KEYDOWN);
     if (userEvents != null && userEvents.size() > 0) {
       events.addAll(userEvents);
     }
@@ -105,9 +106,9 @@
     }
 
     String eventType = event.getType();
-    if ("focus".equals(eventType)) {
+    if (BrowserEvents.FOCUS.equals(eventType)) {
       focusedKey = context.getKey();
-    } else if ("blur".equals(eventType)) {
+    } else if (BrowserEvents.BLUR.equals(eventType)) {
       focusedKey = null;
     }
   }
diff --git a/user/src/com/google/gwt/cell/client/ActionCell.java b/user/src/com/google/gwt/cell/client/ActionCell.java
index fec102c..dee2d06 100644
--- a/user/src/com/google/gwt/cell/client/ActionCell.java
+++ b/user/src/com/google/gwt/cell/client/ActionCell.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.cell.client;
 
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NativeEvent;
@@ -54,7 +57,7 @@
    * @param delegate the delegate that will handle events
    */
   public ActionCell(SafeHtml message, Delegate<C> delegate) {
-    super("click", "keydown");
+    super(CLICK, KEYDOWN);
     this.delegate = delegate;
     this.html = new SafeHtmlBuilder().appendHtmlConstant(
         "<button type=\"button\" tabindex=\"-1\">").append(message).appendHtmlConstant(
@@ -76,7 +79,7 @@
   public void onBrowserEvent(Context context, Element parent, C value,
       NativeEvent event, ValueUpdater<C> valueUpdater) {
     super.onBrowserEvent(context, parent, value, event, valueUpdater);
-    if ("click".equals(event.getType())) {
+    if (CLICK.equals(event.getType())) {
       EventTarget eventTarget = event.getEventTarget();
       if (!Element.is(eventTarget)) {
         return;
diff --git a/user/src/com/google/gwt/cell/client/ButtonCell.java b/user/src/com/google/gwt/cell/client/ButtonCell.java
index 03a56c4..b34d671 100644
--- a/user/src/com/google/gwt/cell/client/ButtonCell.java
+++ b/user/src/com/google/gwt/cell/client/ButtonCell.java
@@ -15,6 +15,10 @@
  */
 package com.google.gwt.cell.client;
 
+
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NativeEvent;
@@ -41,14 +45,14 @@
    * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public ButtonCell(SafeHtmlRenderer<String> renderer) {
-    super(renderer, "click", "keydown");
+    super(renderer, CLICK, KEYDOWN);
   }
 
   @Override
   public void onBrowserEvent(Context context, Element parent, String value,
       NativeEvent event, ValueUpdater<String> valueUpdater) {
     super.onBrowserEvent(context, parent, value, event, valueUpdater);
-    if ("click".equals(event.getType())) {
+    if (CLICK.equals(event.getType())) {
       EventTarget eventTarget = event.getEventTarget();
       if (!Element.is(eventTarget)) {
         return;
diff --git a/user/src/com/google/gwt/cell/client/ButtonCellBase.java b/user/src/com/google/gwt/cell/client/ButtonCellBase.java
index 331b1c7..8f1aa27 100644
--- a/user/src/com/google/gwt/cell/client/ButtonCellBase.java
+++ b/user/src/com/google/gwt/cell/client/ButtonCellBase.java
@@ -15,7 +15,12 @@
  */
 package com.google.gwt.cell.client;
 
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+import static com.google.gwt.dom.client.BrowserEvents.MOUSEDOWN;
+
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.shared.HandlerRegistration;
@@ -333,7 +338,7 @@
     }
 
     public void onPreviewNativeEvent(NativePreviewEvent event) {
-      if ("mouseup".equals(event.getNativeEvent().getType())) {
+      if (BrowserEvents.MOUSEUP.equals(event.getNativeEvent().getType())) {
         // Unregister self.
         reg.removeHandler();
 
@@ -365,7 +370,7 @@
    * @param appearance the appearance of the cell
    */
   public ButtonCellBase(Appearance<C> appearance) {
-    super("click", "keydown", "mousedown");
+    super(CLICK, KEYDOWN, MOUSEDOWN);
     this.appearance = appearance;
   }
 
@@ -433,10 +438,10 @@
     }
 
     String eventType = event.getType();
-    if ("click".equals(eventType)) {
+    if (CLICK.equals(eventType)) {
       // Click the button.
       onEnterKeyDown(context, parent, value, event, valueUpdater);
-    } else if ("mousedown".equals(eventType)) {
+    } else if (MOUSEDOWN.equals(eventType)) {
       // Push.
       appearance.onPush(parent);
 
diff --git a/user/src/com/google/gwt/cell/client/Cell.java b/user/src/com/google/gwt/cell/client/Cell.java
index 1388cd8..e01542c 100644
--- a/user/src/com/google/gwt/cell/client/Cell.java
+++ b/user/src/com/google/gwt/cell/client/Cell.java
@@ -155,8 +155,10 @@
   boolean dependsOnSelection();
 
   /**
-   * Get the set of events that this cell consumes. The container that uses this
-   * cell should only pass these events to
+   * Get the set of events that this cell consumes (see
+   * {@link com.google.gwt.dom.client.BrowserEvents BrowserEvents} for useful
+   * constants). The container that uses this cell should only pass these events
+   * to
    * {@link #onBrowserEvent(Context, Element, Object, NativeEvent, ValueUpdater)}
    * when the event occurs.
    * 
@@ -166,6 +168,8 @@
    * </p>
    * 
    * @return the consumed events, or null if no events are consumed
+   * 
+   * @see com.google.gwt.dom.client.BrowserEvents
    */
   Set<String> getConsumedEvents();
 
diff --git a/user/src/com/google/gwt/cell/client/CheckboxCell.java b/user/src/com/google/gwt/cell/client/CheckboxCell.java
index e0eae00..8e9c462 100644
--- a/user/src/com/google/gwt/cell/client/CheckboxCell.java
+++ b/user/src/com/google/gwt/cell/client/CheckboxCell.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.cell.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.dom.client.NativeEvent;
@@ -67,7 +68,7 @@
    * @param handlesSelection true if the cell modifies the selection state
    */
   public CheckboxCell(boolean dependsOnSelection, boolean handlesSelection) {
-    super("change", "keydown");
+    super(BrowserEvents.CHANGE, BrowserEvents.KEYDOWN);
     this.dependsOnSelection = dependsOnSelection;
     this.handlesSelection = handlesSelection;
   }
@@ -94,9 +95,9 @@
       NativeEvent event, ValueUpdater<Boolean> valueUpdater) {
     String type = event.getType();
 
-    boolean enterPressed = "keydown".equals(type)
+    boolean enterPressed = BrowserEvents.KEYDOWN.equals(type)
         && event.getKeyCode() == KeyCodes.KEY_ENTER;
-    if ("change".equals(type) || enterPressed) {
+    if (BrowserEvents.CHANGE.equals(type) || enterPressed) {
       InputElement input = parent.getFirstChild().cast();
       Boolean isChecked = input.isChecked();
 
diff --git a/user/src/com/google/gwt/cell/client/ClickableTextCell.java b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
index a3a41d7..4ace521 100644
--- a/user/src/com/google/gwt/cell/client/ClickableTextCell.java
+++ b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.cell.client;
 
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.safehtml.shared.SafeHtml;
@@ -43,14 +46,14 @@
    * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public ClickableTextCell(SafeHtmlRenderer<String> renderer) {
-    super(renderer, "click", "keydown");
+    super(renderer, CLICK, KEYDOWN);
   }
 
   @Override
   public void onBrowserEvent(Context context, Element parent, String value,
       NativeEvent event, ValueUpdater<String> valueUpdater) {
     super.onBrowserEvent(context, parent, value, event, valueUpdater);
-    if ("click".equals(event.getType())) {
+    if (CLICK.equals(event.getType())) {
       onEnterKeyDown(context, parent, value, event, valueUpdater);
     }
   }
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index 4b1252b..d240c0e 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -15,6 +15,9 @@
  */
 package com.google.gwt.cell.client;
 
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.logical.shared.CloseEvent;
@@ -107,7 +110,7 @@
    * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public DatePickerCell(DateTimeFormat format, SafeHtmlRenderer<String> renderer) {
-    super("click", "keydown");
+    super(CLICK, KEYDOWN);
     if (format == null) {
       throw new IllegalArgumentException("format == null");
     }
@@ -176,7 +179,7 @@
   public void onBrowserEvent(Context context, Element parent, Date value,
       NativeEvent event, ValueUpdater<Date> valueUpdater) {
     super.onBrowserEvent(context, parent, value, event, valueUpdater);
-    if ("click".equals(event.getType())) {
+    if (CLICK.equals(event.getType())) {
       onEnterKeyDown(context, parent, value, event, valueUpdater);
     }
   }
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java
index a8a8cd9..fd39ac0 100644
--- a/user/src/com/google/gwt/cell/client/EditTextCell.java
+++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -15,7 +15,11 @@
  */
 package com.google.gwt.cell.client;
 
-import com.google.gwt.cell.client.Cell.Context;
+import static com.google.gwt.dom.client.BrowserEvents.BLUR;
+import static com.google.gwt.dom.client.BrowserEvents.CLICK;
+import static com.google.gwt.dom.client.BrowserEvents.KEYDOWN;
+import static com.google.gwt.dom.client.BrowserEvents.KEYUP;
+
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
@@ -149,7 +153,7 @@
    *          instance
    */
   public EditTextCell(SafeHtmlRenderer<String> renderer) {
-    super("click", "keyup", "keydown", "blur");
+    super(CLICK, KEYUP, KEYDOWN, BLUR);
     if (template == null) {
       template = GWT.create(Template.class);
     }
@@ -176,9 +180,9 @@
     } else {
       String type = event.getType();
       int keyCode = event.getKeyCode();
-      boolean enterPressed = "keyup".equals(type)
+      boolean enterPressed = KEYUP.equals(type)
           && keyCode == KeyCodes.KEY_ENTER;
-      if ("click".equals(type) || enterPressed) {
+      if (CLICK.equals(type) || enterPressed) {
         // Go into edit mode.
         if (viewData == null) {
           viewData = new ViewData(value);
@@ -290,8 +294,8 @@
   private void editEvent(Context context, Element parent, String value,
       ViewData viewData, NativeEvent event, ValueUpdater<String> valueUpdater) {
     String type = event.getType();
-    boolean keyUp = "keyup".equals(type);
-    boolean keyDown = "keydown".equals(type);
+    boolean keyUp = KEYUP.equals(type);
+    boolean keyDown = KEYDOWN.equals(type);
     if (keyUp || keyDown) {
       int keyCode = event.getKeyCode();
       if (keyUp && keyCode == KeyCodes.KEY_ENTER) {
@@ -311,7 +315,7 @@
         // Update the text in the view data on each key.
         updateViewData(parent, viewData, true);
       }
-    } else if ("blur".equals(type)) {
+    } else if (BLUR.equals(type)) {
       // Commit the change. Ensure that we are blurring the input element and
       // not the parent element itself.
       EventTarget eventTarget = event.getEventTarget();
diff --git a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
index e72e7a4..6ac3698 100644
--- a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
@@ -16,6 +16,7 @@
 package com.google.gwt.cell.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NativeEvent;
@@ -169,7 +170,7 @@
    * @param renderers an instance of {@link ImageLoadingCell.Renderers Renderers}
    */
   public ImageLoadingCell(Renderers renderers) {
-    super("load", "error");
+    super(BrowserEvents.LOAD, BrowserEvents.ERROR);
     if (template == null) {
       template = GWT.create(Template.class);
     }
@@ -184,7 +185,7 @@
     // The loading indicator can fire its own load or error event, so we check
     // that the event actually occurred on the main image.
     String type = event.getType();
-    if ("load".equals(type) && eventOccurredOnImage(event, parent)) {
+    if (BrowserEvents.LOAD.equals(type) && eventOccurredOnImage(event, parent)) {
       // Remove the loading indicator.
       parent.getFirstChildElement().getStyle().setDisplay(Display.NONE);
 
@@ -193,7 +194,7 @@
       imgWrapper.getStyle().setProperty("height", "auto");
       imgWrapper.getStyle().setProperty("width", "auto");
       imgWrapper.getStyle().setProperty("overflow", "auto");
-    } else if ("error".equals(type) && eventOccurredOnImage(event, parent)) {
+    } else if (BrowserEvents.ERROR.equals(type) && eventOccurredOnImage(event, parent)) {
       // Replace the loading indicator with an error message.
       parent.getFirstChildElement().setInnerHTML(
           errorRenderer.render(value).asString());
diff --git a/user/src/com/google/gwt/cell/client/SelectionCell.java b/user/src/com/google/gwt/cell/client/SelectionCell.java
index 1695d19..fbbb2ba 100644
--- a/user/src/com/google/gwt/cell/client/SelectionCell.java
+++ b/user/src/com/google/gwt/cell/client/SelectionCell.java
@@ -16,6 +16,7 @@
 package com.google.gwt.cell.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.dom.client.SelectElement;
@@ -52,7 +53,7 @@
    * @param options the options in the cell
    */
   public SelectionCell(List<String> options) {
-    super("change");
+    super(BrowserEvents.CHANGE);
     if (template == null) {
       template = GWT.create(Template.class);
     }
@@ -68,7 +69,7 @@
       NativeEvent event, ValueUpdater<String> valueUpdater) {
     super.onBrowserEvent(context, parent, value, event, valueUpdater);
     String type = event.getType();
-    if ("change".equals(type)) {
+    if (BrowserEvents.CHANGE.equals(type)) {
       Object key = context.getKey();
       SelectElement select = parent.getFirstChild().cast();
       String newValue = options.get(select.getSelectedIndex());
diff --git a/user/src/com/google/gwt/cell/client/TextInputCell.java b/user/src/com/google/gwt/cell/client/TextInputCell.java
index 05b5ab0..5b368c9 100644
--- a/user/src/com/google/gwt/cell/client/TextInputCell.java
+++ b/user/src/com/google/gwt/cell/client/TextInputCell.java
@@ -16,6 +16,7 @@
 package com.google.gwt.cell.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.dom.client.NativeEvent;
@@ -132,7 +133,7 @@
    * Constructs a TextInputCell that renders its text without HTML markup.
    */
   public TextInputCell() {
-    super("change", "keyup");
+    super(BrowserEvents.CHANGE, BrowserEvents.KEYUP);
     if (template == null) {
       template = GWT.create(Template.class);
     }
@@ -164,9 +165,9 @@
 
     String eventType = event.getType();
     Object key = context.getKey();
-    if ("change".equals(eventType)) {
+    if (BrowserEvents.CHANGE.equals(eventType)) {
       finishEditing(parent, value, key, valueUpdater);
-    } else if ("keyup".equals(eventType)) {
+    } else if (BrowserEvents.KEYUP.equals(eventType)) {
       // Record keys as they are typed.
       ViewData vd = getViewData(key);
       if (vd == null) {
diff --git a/user/src/com/google/gwt/dom/client/BrowserEvents.java b/user/src/com/google/gwt/dom/client/BrowserEvents.java
new file mode 100644
index 0000000..8e3acb3
--- /dev/null
+++ b/user/src/com/google/gwt/dom/client/BrowserEvents.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2011 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.dom.client;
+
+/**
+ * Constant strings representing browser events.
+ */
+public class BrowserEvents {
+
+  public static final String BLUR = "blur";
+  public static final String CANPLAYTHROUGH = "canplaythrough";
+  public static final String CHANGE = "change";
+  public static final String CLICK = "click";
+  public static final String CONTEXTMENU = "contextmenu";
+  public static final String DBLCLICK = "dblclick";
+  public static final String DRAG = "drag";
+  public static final String DRAGEND = "dragend";
+  public static final String DRAGENTER = "dragenter";
+  public static final String DRAGLEAVE = "dragleave";
+  public static final String DRAGOVER = "dragover";
+  public static final String DRAGSTART = "dragstart";
+  public static final String DROP = "drop";
+  public static final String ENDED = "ended";
+  public static final String ERROR = "error";
+  public static final String FOCUS = "focus";
+  public static final String FOCUSIN = "focusin";
+  public static final String FOCUSOUT = "focusout";
+  public static final String GESTURECHANGE = "gesturechange";
+  public static final String GESTUREEND = "gestureend";
+  public static final String GESTURESTART = "gesturestart";
+  public static final String KEYDOWN = "keydown";
+  public static final String KEYPRESS = "keypress";
+  public static final String KEYUP = "keyup";
+  public static final String LOAD = "load";
+  public static final String LOSECAPTURE = "losecapture";
+  public static final String MOUSEDOWN = "mousedown";
+  public static final String MOUSEMOVE = "mousemove";
+  public static final String MOUSEOUT = "mouseout";
+  public static final String MOUSEOVER = "mouseover";
+  public static final String MOUSEUP = "mouseup";
+  public static final String MOUSEWHEEL = "mousewheel";
+  public static final String PROGRESS = "progress";
+  public static final String SCROLL = "scroll";
+  public static final String TOUCHCANCEL = "touchcancel";
+  public static final String TOUCHEND = "touchend";
+  public static final String TOUCHMOVE = "touchmove";
+  public static final String TOUCHSTART = "touchstart";
+
+  // Prevents instantiation and subclassing.
+  private BrowserEvents() {
+  }
+}
diff --git a/user/src/com/google/gwt/dom/client/Document.java b/user/src/com/google/gwt/dom/client/Document.java
index 39321eb..d615a5b 100644
--- a/user/src/com/google/gwt/dom/client/Document.java
+++ b/user/src/com/google/gwt/dom/client/Document.java
@@ -105,7 +105,7 @@
    * Creates a 'blur' event.
    */
   public final NativeEvent createBlurEvent() {
-    return createHtmlEvent("blur", false, false);
+    return createHtmlEvent(BrowserEvents.BLUR, false, false);
   }
 
   /**
@@ -165,7 +165,7 @@
    * Creates a 'change' event.
    */
   public final NativeEvent createChangeEvent() {
-    return createHtmlEvent("change", false, true);
+    return createHtmlEvent(BrowserEvents.CHANGE, false, true);
   }
 
   /**
@@ -201,7 +201,7 @@
       boolean shiftKey, boolean metaKey) {
     // We disallow setting the button here, because IE doesn't provide the
     // button property for click events.
-    return createMouseEvent("click", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.CLICK, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
         NativeEvent.BUTTON_LEFT, null);
   }
@@ -235,7 +235,7 @@
    * @return the event object
    */
   public final NativeEvent createContextMenuEvent() {
-    return createHtmlEvent("contextmenu", true, true);
+    return createHtmlEvent(BrowserEvents.CONTEXTMENU, true, true);
   }
 
   /**
@@ -267,7 +267,7 @@
       boolean shiftKey, boolean metaKey) {
     // We disallow setting the button here, because IE doesn't provide the
     // button property for click events.
-    return createMouseEvent("dblclick", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.DBLCLICK, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
         NativeEvent.BUTTON_LEFT, null);
   }
@@ -315,7 +315,7 @@
    * @return the event object
    */
   public final NativeEvent createErrorEvent() {
-    return createHtmlEvent("error", false, false);
+    return createHtmlEvent(BrowserEvents.ERROR, false, false);
   }
 
   /**
@@ -343,7 +343,7 @@
    * @return the event object
    */
   public final NativeEvent createFocusEvent() {
-    return createHtmlEvent("focus", false, false);
+    return createHtmlEvent(BrowserEvents.FOCUS, false, false);
   }
 
   /**
@@ -427,7 +427,7 @@
    * based upon its type).
    * </p>
    * 
-   * @param type the type of event (e.g., "focus", "load", etc)
+   * @param type the type of event (e.g., BrowserEvents.FOCUS, BrowserEvents.LOAD, etc)
    * @param canBubble <code>true</code> if the event should bubble
    * @param cancelable <code>true</code> if the event should be cancelable
    * @return the event object
@@ -483,7 +483,7 @@
    * {@link #createKeyUpEvent(boolean, boolean, boolean, boolean, int)}.
    * </p>
    * 
-   * @param type the type of event (e.g., "keydown", "keypress", etc)
+   * @param type the type of event (e.g., BrowserEvents.KEYDOWN, BrowserEvents.KEYPRESS, etc)
    * @param ctrlKey <code>true</code> if the ctrl key is depressed
    * @param altKey <code>true</code> if the alt key is depressed
    * @param shiftKey <code>true</code> if the shift key is depressed
@@ -509,7 +509,7 @@
    */
   public final NativeEvent createKeyDownEvent(boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int keyCode) {
-    return createKeyCodeEvent("keydown", ctrlKey, altKey, shiftKey, metaKey,
+    return createKeyCodeEvent(BrowserEvents.KEYDOWN, ctrlKey, altKey, shiftKey, metaKey,
         keyCode);
   }
 
@@ -530,7 +530,7 @@
   @Deprecated
   public final NativeEvent createKeyDownEvent(boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int keyCode, int charCode) {
-    return createKeyEvent("keydown", true, true, ctrlKey, altKey, shiftKey,
+    return createKeyEvent(BrowserEvents.KEYDOWN, true, true, ctrlKey, altKey, shiftKey,
         metaKey, keyCode, charCode);
   }
 
@@ -550,7 +550,7 @@
    * based upon its type).
    * </p>
    * 
-   * @param type the type of event (e.g., "keydown", "keypress", etc)
+   * @param type the type of event (e.g., BrowserEvents.KEYDOWN, BrowserEvents.KEYPRESS, etc)
    * @param canBubble <code>true</code> if the event should bubble
    * @param cancelable <code>true</code> if the event should be cancelable
    * @param ctrlKey <code>true</code> if the ctrl key is depressed
@@ -607,7 +607,7 @@
   @Deprecated
   public final NativeEvent createKeyPressEvent(boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int keyCode, int charCode) {
-    return createKeyEvent("keypress", true, true, ctrlKey, altKey, shiftKey,
+    return createKeyEvent(BrowserEvents.KEYPRESS, true, true, ctrlKey, altKey, shiftKey,
         metaKey, keyCode, charCode);
   }
 
@@ -623,7 +623,7 @@
    */
   public final NativeEvent createKeyUpEvent(boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int keyCode) {
-    return createKeyCodeEvent("keyup", ctrlKey, altKey, shiftKey, metaKey,
+    return createKeyCodeEvent(BrowserEvents.KEYUP, ctrlKey, altKey, shiftKey, metaKey,
         keyCode);
   }
 
@@ -644,7 +644,7 @@
   @Deprecated
   public final NativeEvent createKeyUpEvent(boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int keyCode, int charCode) {
-    return createKeyEvent("keyup", true, true, ctrlKey, altKey, shiftKey,
+    return createKeyEvent(BrowserEvents.KEYUP, true, true, ctrlKey, altKey, shiftKey,
         metaKey, keyCode, charCode);
   }
 
@@ -690,7 +690,7 @@
    * @return the event object
    */
   public final NativeEvent createLoadEvent() {
-    return createHtmlEvent("load", false, false);
+    return createHtmlEvent(BrowserEvents.LOAD, false, false);
   }
 
   /**
@@ -730,7 +730,7 @@
   public final NativeEvent createMouseDownEvent(int detail, int screenX,
       int screenY, int clientX, int clientY, boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int button) {
-    return createMouseEvent("mousedown", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.MOUSEDOWN, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, null);
   }
 
@@ -750,7 +750,7 @@
    * based upon its type).
    * </p>
    * 
-   * @param type the type of event (e.g., "focus", "load", etc)
+   * @param type the type of event (e.g., BrowserEvents.FOCUS, BrowserEvents.LOAD, etc)
    * @param canBubble <code>true</code> if the event should bubble
    * @param cancelable <code>true</code> if the event should be cancelable
    * @param detail the event's detail property
@@ -796,7 +796,7 @@
   public final NativeEvent createMouseMoveEvent(int detail, int screenX,
       int screenY, int clientX, int clientY, boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int button) {
-    return createMouseEvent("mousemove", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.MOUSEMOVE, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, null);
   }
 
@@ -823,7 +823,7 @@
   public final NativeEvent createMouseOutEvent(int detail, int screenX,
       int screenY, int clientX, int clientY, boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int button, Element relatedTarget) {
-    return createMouseEvent("mouseout", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.MOUSEOUT, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button,
         relatedTarget);
   }
@@ -851,7 +851,7 @@
   public final NativeEvent createMouseOverEvent(int detail, int screenX,
       int screenY, int clientX, int clientY, boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int button, Element relatedTarget) {
-    return createMouseEvent("mouseover", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.MOUSEOVER, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button,
         relatedTarget);
   }
@@ -875,7 +875,7 @@
   public final NativeEvent createMouseUpEvent(int detail, int screenX,
       int screenY, int clientX, int clientY, boolean ctrlKey, boolean altKey,
       boolean shiftKey, boolean metaKey, int button) {
-    return createMouseEvent("mouseup", true, true, detail, screenX, screenY,
+    return createMouseEvent(BrowserEvents.MOUSEUP, true, true, detail, screenX, screenY,
         clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, null);
   }
 
@@ -1027,7 +1027,7 @@
    * @return the event object
    */
   public final NativeEvent createScrollEvent() {
-    return createHtmlEvent("scroll", false, false);
+    return createHtmlEvent(BrowserEvents.SCROLL, false, false);
   }
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/BlurEvent.java b/user/src/com/google/gwt/event/dom/client/BlurEvent.java
index ad762e1..3ca16f4 100644
--- a/user/src/com/google/gwt/event/dom/client/BlurEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/BlurEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native blur event.
  */
@@ -24,7 +26,7 @@
    * Event type for blur events. Represents the meta-data associated with this
    * event.
    */
-  private static final Type<BlurHandler> TYPE = new Type<BlurHandler>("blur",
+  private static final Type<BlurHandler> TYPE = new Type<BlurHandler>(BrowserEvents.BLUR,
       new BlurEvent());
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/CanPlayThroughEvent.java b/user/src/com/google/gwt/event/dom/client/CanPlayThroughEvent.java
index 1c28833..3430dc9 100644
--- a/user/src/com/google/gwt/event/dom/client/CanPlayThroughEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/CanPlayThroughEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native media can play through event.
  * 
@@ -31,7 +33,7 @@
    * associated with this event.
    */
   private static final Type<CanPlayThroughHandler> TYPE = new Type<
-      CanPlayThroughHandler>("canplaythrough", new CanPlayThroughEvent());
+      CanPlayThroughHandler>(BrowserEvents.CANPLAYTHROUGH, new CanPlayThroughEvent());
 
   /**
    * Gets the event type associated with media can play through events.
diff --git a/user/src/com/google/gwt/event/dom/client/ChangeEvent.java b/user/src/com/google/gwt/event/dom/client/ChangeEvent.java
index 4fe646c..bfa8915 100644
--- a/user/src/com/google/gwt/event/dom/client/ChangeEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ChangeEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native change event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<ChangeHandler> TYPE = new Type<ChangeHandler>(
-      "change", new ChangeEvent());
+      BrowserEvents.CHANGE, new ChangeEvent());
 
   /**
    * Gets the event type associated with change events.
diff --git a/user/src/com/google/gwt/event/dom/client/ClickEvent.java b/user/src/com/google/gwt/event/dom/client/ClickEvent.java
index d0da72b..564073f 100644
--- a/user/src/com/google/gwt/event/dom/client/ClickEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ClickEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native click event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<ClickHandler> TYPE = new Type<ClickHandler>(
-      "click", new ClickEvent());
+      BrowserEvents.CLICK, new ClickEvent());
 
   /**
    * Gets the event type associated with click events.
diff --git a/user/src/com/google/gwt/event/dom/client/ContextMenuEvent.java b/user/src/com/google/gwt/event/dom/client/ContextMenuEvent.java
index ff801d3..2904b94 100644
--- a/user/src/com/google/gwt/event/dom/client/ContextMenuEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ContextMenuEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native context menu event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<ContextMenuHandler> TYPE = new Type<ContextMenuHandler>(
-      "contextmenu", new ContextMenuEvent());
+      BrowserEvents.CONTEXTMENU, new ContextMenuEvent());
 
   /**
    * Gets the event type associated with context menu events.
diff --git a/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java b/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
index 0a042fc..a231d8d 100644
--- a/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DoubleClickEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native double click event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<DoubleClickHandler> TYPE = new Type<DoubleClickHandler>(
-      "dblclick", new DoubleClickEvent());
+      BrowserEvents.DBLCLICK, new DoubleClickEvent());
 
   /**
    * Gets the event type associated with double click events.
diff --git a/user/src/com/google/gwt/event/dom/client/DragEndEvent.java b/user/src/com/google/gwt/event/dom/client/DragEndEvent.java
index d351e4b..e4a57ec 100644
--- a/user/src/com/google/gwt/event/dom/client/DragEndEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragEndEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag end event.
  */
@@ -24,7 +26,7 @@
    * Event type for drag end events. Represents the meta-data associated with
    * this event.
    */
-  private static final Type<DragEndHandler> TYPE = new Type<DragEndHandler>("dragend",
+  private static final Type<DragEndHandler> TYPE = new Type<DragEndHandler>(BrowserEvents.DRAGEND,
       new DragEndEvent());
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/DragEnterEvent.java b/user/src/com/google/gwt/event/dom/client/DragEnterEvent.java
index 32ae34d..c0979e1 100644
--- a/user/src/com/google/gwt/event/dom/client/DragEnterEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragEnterEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag enter event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<DragEnterHandler> TYPE = new Type<DragEnterHandler>(
-      "dragenter", new DragEnterEvent());
+      BrowserEvents.DRAGENTER, new DragEnterEvent());
 
   /**
    * Gets the event type associated with drag enter events.
diff --git a/user/src/com/google/gwt/event/dom/client/DragEvent.java b/user/src/com/google/gwt/event/dom/client/DragEvent.java
index 103ef84..56cfbc0 100644
--- a/user/src/com/google/gwt/event/dom/client/DragEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag event.
  */
@@ -24,7 +26,7 @@
    * Event type for drag events. Represents the meta-data associated with this
    * event.
    */
-  private static final Type<DragHandler> TYPE = new Type<DragHandler>("drag", new DragEvent());
+  private static final Type<DragHandler> TYPE = new Type<DragHandler>(BrowserEvents.DRAG, new DragEvent());
 
   /**
    * Gets the event type associated with drag events.
diff --git a/user/src/com/google/gwt/event/dom/client/DragLeaveEvent.java b/user/src/com/google/gwt/event/dom/client/DragLeaveEvent.java
index 5cbcb1c..56af6b8 100644
--- a/user/src/com/google/gwt/event/dom/client/DragLeaveEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragLeaveEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag leave event.
  */
@@ -24,7 +26,7 @@
    * Event type for drag leave events. Represents the meta-data associated with
    * this event.
    */
-  private static final Type<DragLeaveHandler> TYPE = new Type<DragLeaveHandler>("dragleave",
+  private static final Type<DragLeaveHandler> TYPE = new Type<DragLeaveHandler>(BrowserEvents.DRAGLEAVE,
       new DragLeaveEvent());
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/DragOverEvent.java b/user/src/com/google/gwt/event/dom/client/DragOverEvent.java
index d25c138..5d7f714 100644
--- a/user/src/com/google/gwt/event/dom/client/DragOverEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragOverEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag over event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<DragOverHandler> TYPE = new Type<DragOverHandler>(
-      "dragover", new DragOverEvent());
+      BrowserEvents.DRAGOVER, new DragOverEvent());
 
   /**
    * Gets the event type associated with drag over events.
diff --git a/user/src/com/google/gwt/event/dom/client/DragStartEvent.java b/user/src/com/google/gwt/event/dom/client/DragStartEvent.java
index b4a2797..b218611 100644
--- a/user/src/com/google/gwt/event/dom/client/DragStartEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DragStartEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drag start event.
  */
@@ -24,7 +26,7 @@
    * Event type for drag start events. Represents the meta-data associated with
    * this event.
    */
-  private static final Type<DragStartHandler> TYPE = new Type<DragStartHandler>("dragstart",
+  private static final Type<DragStartHandler> TYPE = new Type<DragStartHandler>(BrowserEvents.DRAGSTART,
       new DragStartEvent());
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/DropEvent.java b/user/src/com/google/gwt/event/dom/client/DropEvent.java
index 3e5416a..fd3197d 100644
--- a/user/src/com/google/gwt/event/dom/client/DropEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DropEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native drop event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<DropHandler> TYPE = new Type<DropHandler>(
-      "drop", new DropEvent());
+      BrowserEvents.DROP, new DropEvent());
 
   /**
    * Gets the event type associated with drop events.
diff --git a/user/src/com/google/gwt/event/dom/client/EndedEvent.java b/user/src/com/google/gwt/event/dom/client/EndedEvent.java
index aa0518e..a2b6b2a 100644
--- a/user/src/com/google/gwt/event/dom/client/EndedEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/EndedEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native media ended event.
  * 
@@ -31,7 +33,7 @@
    * this event.
    */
   private static final Type<EndedHandler> TYPE = new Type<
-      EndedHandler>("ended", new EndedEvent());
+      EndedHandler>(BrowserEvents.ENDED, new EndedEvent());
 
   /**
    * Gets the event type associated with media ended events.
diff --git a/user/src/com/google/gwt/event/dom/client/ErrorEvent.java b/user/src/com/google/gwt/event/dom/client/ErrorEvent.java
index 3cfcb2e..16ab7ff 100644
--- a/user/src/com/google/gwt/event/dom/client/ErrorEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ErrorEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native error event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<ErrorHandler> TYPE = new Type<ErrorHandler>(
-      "error", new ErrorEvent());
+      BrowserEvents.ERROR, new ErrorEvent());
 
   /**
    * Gets the event type associated with error events.
diff --git a/user/src/com/google/gwt/event/dom/client/FocusEvent.java b/user/src/com/google/gwt/event/dom/client/FocusEvent.java
index f9a86dc..e38e8da 100644
--- a/user/src/com/google/gwt/event/dom/client/FocusEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/FocusEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native focus event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<FocusHandler> TYPE = new Type<FocusHandler>(
-      "focus", new FocusEvent());
+      BrowserEvents.FOCUS, new FocusEvent());
 
   /**
    * Gets the event type associated with focus events.
diff --git a/user/src/com/google/gwt/event/dom/client/GestureChangeEvent.java b/user/src/com/google/gwt/event/dom/client/GestureChangeEvent.java
index 5d5e8a8..d66ec83 100644
--- a/user/src/com/google/gwt/event/dom/client/GestureChangeEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/GestureChangeEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native gesture change event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<GestureChangeHandler> TYPE = new Type<
-      GestureChangeHandler>("gesturechange", new GestureChangeEvent());
+      GestureChangeHandler>(BrowserEvents.GESTURECHANGE, new GestureChangeEvent());
 
   /**
    * Gets the event type associated with gesture change events.
diff --git a/user/src/com/google/gwt/event/dom/client/GestureEndEvent.java b/user/src/com/google/gwt/event/dom/client/GestureEndEvent.java
index c1848c0..ed8fbfa 100644
--- a/user/src/com/google/gwt/event/dom/client/GestureEndEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/GestureEndEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native gesture end event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<GestureEndHandler> TYPE = new Type<
-      GestureEndHandler>("gestureend", new GestureEndEvent());
+      GestureEndHandler>(BrowserEvents.GESTUREEND, new GestureEndEvent());
 
   /**
    * Gets the event type associated with gesture end events.
diff --git a/user/src/com/google/gwt/event/dom/client/GestureStartEvent.java b/user/src/com/google/gwt/event/dom/client/GestureStartEvent.java
index df9d16f..c0a3067 100644
--- a/user/src/com/google/gwt/event/dom/client/GestureStartEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/GestureStartEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native gesture start event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<GestureStartHandler> TYPE = new Type<
-      GestureStartHandler>("gesturestart", new GestureStartEvent());
+      GestureStartHandler>(BrowserEvents.GESTURESTART, new GestureStartEvent());
 
   /**
    * Gets the event type associated with gesture start events.
diff --git a/user/src/com/google/gwt/event/dom/client/KeyDownEvent.java b/user/src/com/google/gwt/event/dom/client/KeyDownEvent.java
index 0cc2ee1..9c7393c 100644
--- a/user/src/com/google/gwt/event/dom/client/KeyDownEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/KeyDownEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native key down event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<KeyDownHandler> TYPE = new Type<KeyDownHandler>(
-      "keydown", new KeyDownEvent());
+      BrowserEvents.KEYDOWN, new KeyDownEvent());
 
   /**
    * Gets the event type associated with key down events.
diff --git a/user/src/com/google/gwt/event/dom/client/KeyPressEvent.java b/user/src/com/google/gwt/event/dom/client/KeyPressEvent.java
index f0b648d..c45cfa0 100644
--- a/user/src/com/google/gwt/event/dom/client/KeyPressEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/KeyPressEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native key press event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<KeyPressHandler> TYPE = new Type<KeyPressHandler>(
-      "keypress", new KeyPressEvent());
+      BrowserEvents.KEYPRESS, new KeyPressEvent());
 
   /**
    * Gets the event type associated with key press events.
diff --git a/user/src/com/google/gwt/event/dom/client/KeyUpEvent.java b/user/src/com/google/gwt/event/dom/client/KeyUpEvent.java
index 2939667..f87809a 100644
--- a/user/src/com/google/gwt/event/dom/client/KeyUpEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/KeyUpEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native key up event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<KeyUpHandler> TYPE = new Type<KeyUpHandler>(
-      "keyup", new KeyUpEvent());
+      BrowserEvents.KEYUP, new KeyUpEvent());
 
   /**
    * Gets the event type associated with key up events.
diff --git a/user/src/com/google/gwt/event/dom/client/LoadEvent.java b/user/src/com/google/gwt/event/dom/client/LoadEvent.java
index 5b7360d..1cca31a 100644
--- a/user/src/com/google/gwt/event/dom/client/LoadEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/LoadEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native load event.
  */
@@ -24,7 +26,7 @@
    * Event type for load events. Represents the meta-data associated with this
    * event.
    */
-  private static final Type<LoadHandler> TYPE = new Type<LoadHandler>("load",
+  private static final Type<LoadHandler> TYPE = new Type<LoadHandler>(BrowserEvents.LOAD,
       new LoadEvent());
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/LoseCaptureEvent.java b/user/src/com/google/gwt/event/dom/client/LoseCaptureEvent.java
index c5926d7..0a480c8 100644
--- a/user/src/com/google/gwt/event/dom/client/LoseCaptureEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/LoseCaptureEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native lose capture event.
  */
@@ -25,7 +27,7 @@
    * with this event.
    */
   private static final Type<LoseCaptureHandler> TYPE = new Type<LoseCaptureHandler>(
-      "losecapture", new LoseCaptureEvent());
+      BrowserEvents.LOSECAPTURE, new LoseCaptureEvent());
 
   /**
    * Gets the event type associated with lose capture events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseDownEvent.java b/user/src/com/google/gwt/event/dom/client/MouseDownEvent.java
index 29355d7..4ab5dd5 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseDownEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseDownEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native mouse down event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<MouseDownHandler> TYPE = new Type<MouseDownHandler>(
-      "mousedown", new MouseDownEvent());
+      BrowserEvents.MOUSEDOWN, new MouseDownEvent());
 
   /**
    * Gets the event type associated with mouse down events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseMoveEvent.java b/user/src/com/google/gwt/event/dom/client/MouseMoveEvent.java
index 674af95..12b7cbb 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseMoveEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseMoveEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native mouse move event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<MouseMoveHandler> TYPE = new Type<MouseMoveHandler>(
-      "mousemove", new MouseMoveEvent());
+      BrowserEvents.MOUSEMOVE, new MouseMoveEvent());
 
   /**
    * Gets the event type associated with mouse move events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java b/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
index 4f18653..d9aee52 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.EventTarget;
 
 /**
@@ -27,7 +28,7 @@
    * this event.
    */
   private static final Type<MouseOutHandler> TYPE = new Type<MouseOutHandler>(
-      "mouseout", new MouseOutEvent());
+      BrowserEvents.MOUSEOUT, new MouseOutEvent());
 
   /**
    * Gets the event type associated with mouse out events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java b/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
index 1811b09..e024b24 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.EventTarget;
 
 /**
@@ -27,7 +28,7 @@
    * this event.
    */
   private static final Type<MouseOverHandler> TYPE = new Type<MouseOverHandler>(
-      "mouseover", new MouseOverEvent());
+      BrowserEvents.MOUSEOVER, new MouseOverEvent());
 
   /**
    * Gets the event type associated with mouse over events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseUpEvent.java b/user/src/com/google/gwt/event/dom/client/MouseUpEvent.java
index f79353c..1d98ed6 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseUpEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseUpEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native mouse up event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<MouseUpHandler> TYPE = new Type<MouseUpHandler>(
-      "mouseup", new MouseUpEvent());
+      BrowserEvents.MOUSEUP, new MouseUpEvent());
 
   /**
    * Gets the event type associated with mouse up events.
diff --git a/user/src/com/google/gwt/event/dom/client/MouseWheelEvent.java b/user/src/com/google/gwt/event/dom/client/MouseWheelEvent.java
index 647bdb5..33fc5ca 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseWheelEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseWheelEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native mouse wheel event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<MouseWheelHandler> TYPE = new Type<MouseWheelHandler>(
-      "mousewheel", new MouseWheelEvent());
+      BrowserEvents.MOUSEWHEEL, new MouseWheelEvent());
 
   static {
     /**
diff --git a/user/src/com/google/gwt/event/dom/client/ProgressEvent.java b/user/src/com/google/gwt/event/dom/client/ProgressEvent.java
index b4755d3..48137d1 100644
--- a/user/src/com/google/gwt/event/dom/client/ProgressEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ProgressEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native media progress event.
  * 
@@ -31,7 +33,7 @@
    * with this event.
    */
   private static final Type<ProgressHandler> TYPE = new Type<
-  ProgressHandler>("progress", new ProgressEvent());
+  ProgressHandler>(BrowserEvents.PROGRESS, new ProgressEvent());
 
   /**
    * Gets the event type associated with media progress events.
diff --git a/user/src/com/google/gwt/event/dom/client/ScrollEvent.java b/user/src/com/google/gwt/event/dom/client/ScrollEvent.java
index 405ae4f..5c9f308 100644
--- a/user/src/com/google/gwt/event/dom/client/ScrollEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/ScrollEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native scroll event.
  */
@@ -25,7 +27,7 @@
    * event.
    */
   private static final Type<ScrollHandler> TYPE = new Type<ScrollHandler>(
-      "scroll", new ScrollEvent());
+      BrowserEvents.SCROLL, new ScrollEvent());
 
   /**
    * Gets the event type associated with scroll events.
diff --git a/user/src/com/google/gwt/event/dom/client/TouchCancelEvent.java b/user/src/com/google/gwt/event/dom/client/TouchCancelEvent.java
index 8522a65..73616c9 100644
--- a/user/src/com/google/gwt/event/dom/client/TouchCancelEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/TouchCancelEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native touch start event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<TouchCancelHandler> TYPE = new Type<
-      TouchCancelHandler>("touchcancel", new TouchCancelEvent());
+      TouchCancelHandler>(BrowserEvents.TOUCHCANCEL, new TouchCancelEvent());
 
   /**
    * Gets the event type associated with touch start events.
diff --git a/user/src/com/google/gwt/event/dom/client/TouchEndEvent.java b/user/src/com/google/gwt/event/dom/client/TouchEndEvent.java
index 9b69e37..ff2857a 100644
--- a/user/src/com/google/gwt/event/dom/client/TouchEndEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/TouchEndEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native touch end event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<TouchEndHandler> TYPE = new Type<TouchEndHandler>(
-      "touchend", new TouchEndEvent());
+      BrowserEvents.TOUCHEND, new TouchEndEvent());
 
   /**
    * Gets the event type associated with touch end events.
diff --git a/user/src/com/google/gwt/event/dom/client/TouchMoveEvent.java b/user/src/com/google/gwt/event/dom/client/TouchMoveEvent.java
index 708a9dc..c3abafc 100644
--- a/user/src/com/google/gwt/event/dom/client/TouchMoveEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/TouchMoveEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native touch move event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<TouchMoveHandler> TYPE = new Type<TouchMoveHandler>(
-      "touchmove", new TouchMoveEvent());
+      BrowserEvents.TOUCHMOVE, new TouchMoveEvent());
 
   /**
    * Gets the event type associated with touch move events.
diff --git a/user/src/com/google/gwt/event/dom/client/TouchStartEvent.java b/user/src/com/google/gwt/event/dom/client/TouchStartEvent.java
index 82f0fb4..6f08737 100644
--- a/user/src/com/google/gwt/event/dom/client/TouchStartEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/TouchStartEvent.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
+
 /**
  * Represents a native touch start event.
  */
@@ -25,7 +27,7 @@
    * this event.
    */
   private static final Type<TouchStartHandler> TYPE = new Type<
-      TouchStartHandler>("touchstart", new TouchStartEvent());
+      TouchStartHandler>(BrowserEvents.TOUCHSTART, new TouchStartEvent());
 
   /**
    * Gets the event type associated with touch start events.
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
index f51f92a..3aaffe8 100644
--- a/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
+++ b/user/src/com/google/gwt/user/cellview/client/AbstractCellTable.java
@@ -24,6 +24,7 @@
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.dom.builder.shared.HtmlTableSectionBuilder;
 import com.google.gwt.dom.builder.shared.TableSectionBuilder;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
@@ -112,7 +113,7 @@
     public void onCellPreview(CellPreviewEvent<T> event) {
       NativeEvent nativeEvent = event.getNativeEvent();
       String eventType = event.getNativeEvent().getType();
-      if ("keydown".equals(eventType) && !event.isCellEditing()) {
+      if (BrowserEvents.KEYDOWN.equals(eventType) && !event.isCellEditing()) {
         /*
          * Handle keyboard navigation, unless the cell is being edited. If the
          * cell is being edited, we do not want to change rows.
@@ -159,7 +160,7 @@
             return;
           }
         }
-      } else if ("click".equals(eventType) || "focus".equals(eventType)) {
+      } else if (BrowserEvents.CLICK.equals(eventType) || BrowserEvents.FOCUS.equals(eventType)) {
         /*
          * Move keyboard focus to the clicked column, even if the cell is being
          * edited. Unlike key events, we aren't moving the currently selected
@@ -175,7 +176,7 @@
             || (table.getKeyboardSelectedRow() != relRow)
             || (table.getKeyboardSelectedSubRow() != subrow)) {
           boolean stealFocus = false;
-          if ("click".equals(eventType)) {
+          if (BrowserEvents.CLICK.equals(eventType)) {
             // If a natively focusable element was just clicked, then do not
             // steal focus.
             Element target = Element.as(event.getNativeEvent().getEventTarget());
@@ -531,7 +532,7 @@
 
       // Remove all children in the range.
       final int absEndIndex = table.getPageStart() + startIndex + childCount;
-      boolean done = false;
+
       TableRowElement insertBefore = table.getChildElement(startIndex).cast();
       if (table.legacyRenderRowValues) {
         int count = 0;
@@ -1731,7 +1732,7 @@
      */
     TableRowElement targetTableRow = targetTableCell.getParentElement().cast();
     String eventType = event.getType();
-    boolean isClick = "click".equals(eventType);
+    boolean isClick = BrowserEvents.CLICK.equals(eventType);
     int col = targetTableCell.getCellIndex();
     if (targetTableSection == thead || targetTableSection == tfoot) {
       boolean isHeader = (targetTableSection == thead);
@@ -1775,14 +1776,14 @@
       int absRow = tableBuilder.getRowValueIndex(targetTableRow);
       int relRow = absRow - getPageStart();
       int subrow = tableBuilder.getSubrowValueIndex(targetTableRow);
-      if ("mouseover".equals(eventType)) {
+      if (BrowserEvents.MOUSEOVER.equals(eventType)) {
         // Unstyle the old row if it is still part of the table.
         if (hoveringRow != null && getTableBodyElement().isOrHasChild(hoveringRow)) {
           setRowHover(hoveringRow, event, false);
         }
         hoveringRow = targetTableRow;
         setRowHover(hoveringRow, event, true);
-      } else if ("mouseout".equals(eventType) && hoveringRow != null) {
+      } else if (BrowserEvents.MOUSEOUT.equals(eventType) && hoveringRow != null) {
         // Ignore events happening directly over the hovering row. If there are floating element
         // on top of the row, mouseout event should not be triggered. This is to avoid the flickring
         // effect if the floating element is shown/hide based on hover event.
@@ -2371,8 +2372,8 @@
 
     // Sink events.
     Set<String> eventTypes = new HashSet<String>();
-    eventTypes.add("mouseover");
-    eventTypes.add("mouseout");
+    eventTypes.add(BrowserEvents.MOUSEOVER);
+    eventTypes.add(BrowserEvents.MOUSEOUT);
     CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
 
     // Set the table builder.
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java b/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
index 6ce8516..05ba50c 100644
--- a/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
+++ b/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.cell.client.Cell;
 import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
@@ -93,7 +94,7 @@
     public void onCellPreview(CellPreviewEvent<T> event) {
       NativeEvent nativeEvent = event.getNativeEvent();
       String eventType = event.getNativeEvent().getType();
-      if ("keydown".equals(eventType) && !event.isCellEditing()) {
+      if (BrowserEvents.KEYDOWN.equals(eventType) && !event.isCellEditing()) {
         /*
          * Handle keyboard navigation, unless the cell is being edited. If the
          * cell is being edited, we do not want to change rows.
@@ -131,7 +132,7 @@
             handledEvent(event);
             return;
         }
-      } else if ("click".equals(eventType)) {
+      } else if (BrowserEvents.CLICK.equals(eventType)) {
         /*
          * Move keyboard focus to the clicked row, even if the Cell is being
          * edited. Unlike key events, we aren't moving the currently selected
@@ -147,7 +148,7 @@
         display.setKeyboardSelectedRow(relRow, !isFocusable);
 
         // Do not cancel the event as the click may have occurred on a Cell.
-      } else if ("focus".equals(eventType)) {
+      } else if (BrowserEvents.FOCUS.equals(eventType)) {
         // Move keyboard focus to match the currently focused element.
         int relRow = event.getIndex() - display.getPageStart();
         if (display.getKeyboardSelectedRow() != relRow) {
@@ -484,12 +485,12 @@
 
     // Sink events.
     Set<String> eventTypes = new HashSet<String>();
-    eventTypes.add("focus");
-    eventTypes.add("blur");
-    eventTypes.add("keydown"); // Used for keyboard navigation.
-    eventTypes.add("keyup"); // Used by subclasses for selection.
-    eventTypes.add("click"); // Used by subclasses for selection.
-    eventTypes.add("mousedown"); // No longer used, but here for legacy support.
+    eventTypes.add(BrowserEvents.FOCUS);
+    eventTypes.add(BrowserEvents.BLUR);
+    eventTypes.add(BrowserEvents.KEYDOWN); // Used for keyboard navigation.
+    eventTypes.add(BrowserEvents.KEYUP); // Used by subclasses for selection.
+    eventTypes.add(BrowserEvents.CLICK); // Used by subclasses for selection.
+    eventTypes.add(BrowserEvents.MOUSEDOWN); // No longer used, but here for legacy support.
     CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
 
     // Add a default selection event manager.
@@ -716,18 +717,18 @@
     super.onBrowserEvent(event);
 
     String eventType = event.getType();
-    if ("focus".equals(eventType)) {
+    if (BrowserEvents.FOCUS.equals(eventType)) {
       // Remember the focus state.
       isFocused = true;
       onFocus();
-    } else if ("blur".equals(eventType)) {
+    } else if (BrowserEvents.BLUR.equals(eventType)) {
       // Remember the blur state.
       isFocused = false;
       onBlur();
-    } else if ("keydown".equals(eventType)) {
+    } else if (BrowserEvents.KEYDOWN.equals(eventType)) {
       // A key event indicates that we already have focus.
       isFocused = true;
-    } else if ("mousedown".equals(eventType)
+    } else if (BrowserEvents.MOUSEDOWN.equals(eventType)
         && CellBasedWidgetImpl.get().isFocusable(Element.as(target))) {
       // If a natively focusable element was just clicked, then we must have
       // focus.
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java b/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java
index 9e5f8ec..0d72e69 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplStandard.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.cellview.client;
 
 import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.user.client.DOM;
@@ -93,10 +94,10 @@
   public CellBasedWidgetImplStandard() {
     // Initialize the set of non-bubbling events.
     nonBubblingEvents = new HashSet<String>();
-    nonBubblingEvents.add("focus");
-    nonBubblingEvents.add("blur");
-    nonBubblingEvents.add("load");
-    nonBubblingEvents.add("error");
+    nonBubblingEvents.add(BrowserEvents.FOCUS);
+    nonBubblingEvents.add(BrowserEvents.BLUR);
+    nonBubblingEvents.add(BrowserEvents.LOAD);
+    nonBubblingEvents.add(BrowserEvents.ERROR);
   }
 
   @Override
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java b/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
index 52db44d..b002a3d 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBasedWidgetImplTrident.java
@@ -19,6 +19,7 @@
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.EventTarget;
@@ -158,7 +159,7 @@
     }
 
     String type = event.getType();
-    if ("focusin".equals(type)) {
+    if (BrowserEvents.FOCUSIN.equals(type)) {
       // If this is an input element, remember that we focused it.
       String tagName = target.getTagName().toLowerCase();
       if (inputTypes.contains(tagName)) {
@@ -171,7 +172,7 @@
       // The focus event has not fired yet, so we just need to set the
       // CellTable as the event listener and wait for it.
       dispatchCellEvent(widget, target, Event.ONFOCUS, null);
-    } else if ("focusout".equals(type)) {
+    } else if (BrowserEvents.FOCUSOUT.equals(type)) {
       // Fire a change event on the input element if the value changed.
       maybeFireChangeEvent(widget);
       focusedInput = null;
@@ -179,7 +180,7 @@
       // The blur event has already fired, so we need to synthesize one.
       Event blurEvent = Document.get().createFocusEvent().cast();
       dispatchCellEvent(widget, target, Event.ONBLUR, null);
-    } else if ("load".equals(type) || "error".equals(type)) {
+    } else if (BrowserEvents.LOAD.equals(type) || BrowserEvents.ERROR.equals(type)) {
       dispatchEvent(event, widget.getElement(), listener);
     }
   }
@@ -242,8 +243,8 @@
 
     // Initialize the change event triggers.
     changeEventTriggers = new HashSet<String>();
-    changeEventTriggers.add("mouseup");
-    changeEventTriggers.add("mousewheel");
+    changeEventTriggers.add(BrowserEvents.MOUSEUP);
+    changeEventTriggers.add(BrowserEvents.MOUSEWHEEL);
   }
 
   @Override
@@ -257,7 +258,7 @@
     // We need to remove the event listener from the cell now that the event
     // has fired.
     String type = event.getType().toLowerCase();
-    if ("focus".equals(type) || "blur".equals(type) || "change".equals(type)) {
+    if (BrowserEvents.FOCUS.equals(type) || BrowserEvents.BLUR.equals(type) || BrowserEvents.CHANGE.equals(type)) {
       EventTarget eventTarget = event.getEventTarget();
       if (Element.is(eventTarget)) {
         com.google.gwt.user.client.Element target = eventTarget.cast();
@@ -268,7 +269,7 @@
     }
 
     // Update the value of the focused input box.
-    if (focusedInput != null && "change".equals(type)) {
+    if (focusedInput != null && BrowserEvents.CHANGE.equals(type)) {
       focusedInputValue = getInputValue(focusedInput);
     }
 
@@ -312,8 +313,8 @@
 
   @Override
   protected int sinkEvent(Widget widget, String typeName) {
-    if ("change".equals(typeName) || "focus".equals(typeName)
-        || "blur".equals(typeName)) {
+    if (BrowserEvents.CHANGE.equals(typeName) || BrowserEvents.FOCUS.equals(typeName)
+        || BrowserEvents.BLUR.equals(typeName)) {
       // Initialize the focus events.
       if (dispatchFocusEvent == null) {
         initFocusEventSystem();
@@ -335,7 +336,7 @@
         }
       }
       return eventsToSink;
-    } else if ("load".equals(typeName) || "error".equals(typeName)) {
+    } else if (BrowserEvents.LOAD.equals(typeName) || BrowserEvents.ERROR.equals(typeName)) {
       // Initialize the load listener.
       if (!loadEventsInitialized) {
         loadEventsInitialized = true;
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index f0d25cd..fd1965f 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -19,6 +19,7 @@
 import com.google.gwt.cell.client.Cell;
 import com.google.gwt.cell.client.Cell.Context;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Style.Overflow;
@@ -45,7 +46,6 @@
 import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
 import com.google.gwt.safehtml.shared.SafeHtmlUtils;
-import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
@@ -255,7 +255,7 @@
 
       // Handle keyboard navigation between lists.
       String eventType = event.getType();
-      if ("keydown".equals(eventType) && !isKeyboardNavigationSuppressed()) {
+      if (BrowserEvents.KEYDOWN.equals(eventType) && !isKeyboardNavigationSuppressed()) {
         int keyCode = event.getKeyCode();
         switch (keyCode) {
           case KeyCodes.KEY_LEFT:
diff --git a/user/src/com/google/gwt/user/cellview/client/CellList.java b/user/src/com/google/gwt/user/cellview/client/CellList.java
index ca06a36..4771c36 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellList.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellList.java
@@ -20,6 +20,7 @@
 import com.google.gwt.cell.client.ValueUpdater;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
@@ -437,7 +438,7 @@
       // before firing the event to the cell in case the cell operates on the
       // currently selected item.
       String eventType = event.getType();
-      boolean isClick = "click".equals(eventType);
+      boolean isClick = BrowserEvents.CLICK.equals(eventType);
       int idx = Integer.parseInt(idxString);
       int indexOnPage = idx - getPageStart();
       if (!isRowWithinBounds(indexOnPage)) {
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTable.java b/user/src/com/google/gwt/user/cellview/client/CellTable.java
index ed2beb5..6a03e54 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTable.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTable.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.cellview.client;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Style.TableLayout;
 import com.google.gwt.dom.client.Style.Unit;
@@ -615,8 +616,8 @@
 
     // Sink events.
     Set<String> eventTypes = new HashSet<String>();
-    eventTypes.add("mouseover");
-    eventTypes.add("mouseout");
+    eventTypes.add(BrowserEvents.MOUSEOVER);
+    eventTypes.add(BrowserEvents.MOUSEOUT);
     CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
   }
 
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTree.java b/user/src/com/google/gwt/user/cellview/client/CellTree.java
index de7f6ae..751b8ab 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTree.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTree.java
@@ -18,6 +18,7 @@
 import com.google.gwt.animation.client.Animation;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.dom.client.Style.Overflow;
@@ -588,12 +589,12 @@
 
     // Add event handlers.
     Set<String> eventTypes = new HashSet<String>();
-    eventTypes.add("focus");
-    eventTypes.add("blur");
-    eventTypes.add("keydown");
-    eventTypes.add("keyup");
-    eventTypes.add("mousedown");
-    eventTypes.add("click");
+    eventTypes.add(BrowserEvents.FOCUS);
+    eventTypes.add(BrowserEvents.BLUR);
+    eventTypes.add(BrowserEvents.KEYDOWN);
+    eventTypes.add(BrowserEvents.KEYUP);
+    eventTypes.add(BrowserEvents.MOUSEDOWN);
+    eventTypes.add(BrowserEvents.CLICK);
     CellBasedWidgetImpl.get().sinkEvents(this, eventTypes);
 
     // Associate a view with the item.
@@ -648,15 +649,15 @@
     super.onBrowserEvent(event);
 
     String eventType = event.getType();
-    if ("focus".equals(eventType)) {
+    if (BrowserEvents.FOCUS.equals(eventType)) {
       // Remember the focus state.
       isFocused = true;
       onFocus();
-    } else if ("blur".equals(eventType)) {
+    } else if (BrowserEvents.BLUR.equals(eventType)) {
       // Remember the blur state.
       isFocused = false;
       onBlur();
-    } else if ("keydown".equals(eventType) && !cellIsEditing) {
+    } else if (BrowserEvents.KEYDOWN.equals(eventType) && !cellIsEditing) {
       int keyCode = event.getKeyCode();
       switch (keyCode) {
         // Handle keyboard navigation.
@@ -679,8 +680,8 @@
     ArrayList<Element> chain = new ArrayList<Element>();
     collectElementChain(chain, getElement(), target);
 
-    final boolean isMouseDown = "mousedown".equals(eventType);
-    final boolean isClick = "click".equals(eventType);
+    final boolean isMouseDown = BrowserEvents.MOUSEDOWN.equals(eventType);
+    final boolean isClick = BrowserEvents.CLICK.equals(eventType);
     final CellTreeNodeView<?> nodeView = findItemByChain(chain, 0, rootNode);
     if (nodeView != null) {
       if (isMouseDown) {
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
index 128a986..1fdba7b 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
@@ -20,6 +20,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.dom.client.AnchorElement;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
@@ -913,8 +914,8 @@
         if (nodeInfo != null) {
           Set<String> eventsToSink = new HashSet<String>();
           // Listen for focus and blur for keyboard navigation
-          eventsToSink.add("focus");
-          eventsToSink.add("blur");
+          eventsToSink.add(BrowserEvents.FOCUS);
+          eventsToSink.add(BrowserEvents.BLUR);
 
           Set<String> consumedEvents = nodeInfo.getCell().getConsumedEvents();
           if (consumedEvents != null) {
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplIE9.java b/user/src/com/google/gwt/user/client/impl/DOMImplIE9.java
index aa47aa0..35dcb6a 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplIE9.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplIE9.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.impl;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.user.client.Element;
 
 /**
@@ -35,12 +36,12 @@
   protected void sinkBitlessEventImpl(Element elem, String eventTypeName) {
     super.sinkBitlessEventImpl(elem, eventTypeName);
 
-    if ("dragover".equals(eventTypeName)) {
+    if (BrowserEvents.DRAGOVER.equals(eventTypeName)) {
       /*
        * In IE, we have to sink dragenter with dragover in order to make an
        * element a drop target.
        */
-      super.sinkBitlessEventImpl(elem, "dragenter");
+      super.sinkBitlessEventImpl(elem, BrowserEvents.DRAGENTER);
     }
   }
 
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
index 8c6f7fc..1140c23 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplStandard.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.client.impl;
 
 import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
 
@@ -40,11 +41,11 @@
 
   @Override
   public Element eventGetFromElement(Event evt) {
-    if (evt.getType().equals("mouseover")) {
+    if (evt.getType().equals(BrowserEvents.MOUSEOVER)) {
       return evt.getRelatedEventTarget().cast();
     }
 
-    if (evt.getType().equals("mouseout")) {
+    if (evt.getType().equals(BrowserEvents.MOUSEOUT)) {
       return evt.getEventTarget().cast();
     }
 
@@ -53,11 +54,11 @@
  
   @Override
   public Element eventGetToElement(Event evt) {
-    if (evt.getType().equals("mouseover")) {
+    if (evt.getType().equals(BrowserEvents.MOUSEOVER)) {
       return evt.getEventTarget().cast();
     }
 
-    if (evt.getType().equals("mouseout")) {
+    if (evt.getType().equals(BrowserEvents.MOUSEOUT)) {
       return evt.getRelatedEventTarget().cast();
     }
 
diff --git a/user/src/com/google/gwt/user/client/ui/Image.java b/user/src/com/google/gwt/user/client/ui/Image.java
index a3aa6a4..d616f41 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -18,6 +18,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.Scheduler;
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.ImageElement;
@@ -31,9 +32,9 @@
 import com.google.gwt.event.dom.client.DragEnterEvent;
 import com.google.gwt.event.dom.client.DragEnterHandler;
 import com.google.gwt.event.dom.client.DragEvent;
+import com.google.gwt.event.dom.client.DragHandler;
 import com.google.gwt.event.dom.client.DragLeaveEvent;
 import com.google.gwt.event.dom.client.DragLeaveHandler;
-import com.google.gwt.event.dom.client.DragHandler;
 import com.google.gwt.event.dom.client.DragOverEvent;
 import com.google.gwt.event.dom.client.DragOverHandler;
 import com.google.gwt.event.dom.client.DragStartEvent;
@@ -282,7 +283,7 @@
       // If an onload event fired while the image wasn't attached, we need to
       // synthesize one now.
       String unhandledEvent = getImageElement(image).getPropertyString(UNHANDLED_EVENT_ATTR);
-      if ("load".equals(unhandledEvent)) {
+      if (BrowserEvents.LOAD.equals(unhandledEvent)) {
         fireSyntheticLoadEvent(image);
       }
     }
@@ -334,7 +335,7 @@
            * the widget is attached.
            */
           if (!image.isAttached()) {
-            getImageElement(image).setPropertyString(UNHANDLED_EVENT_ATTR, "load");
+            getImageElement(image).setPropertyString(UNHANDLED_EVENT_ATTR, BrowserEvents.LOAD);
             return;
           }
 
diff --git a/user/src/com/google/gwt/view/client/DefaultSelectionEventManager.java b/user/src/com/google/gwt/view/client/DefaultSelectionEventManager.java
index c9e33a6..2418b73 100644
--- a/user/src/com/google/gwt/view/client/DefaultSelectionEventManager.java
+++ b/user/src/com/google/gwt/view/client/DefaultSelectionEventManager.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.view.client;
 
+import com.google.gwt.dom.client.BrowserEvents;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.dom.client.NativeEvent;
@@ -141,7 +142,7 @@
     public SelectAction translateSelectionEvent(CellPreviewEvent<T> event) {
       // Handle the event.
       NativeEvent nativeEvent = event.getNativeEvent();
-      if ("click".equals(nativeEvent.getType())) {
+      if (BrowserEvents.CLICK.equals(nativeEvent.getType())) {
         // Ignore if the event didn't occur in the correct column.
         if (column > -1 && column != event.getColumn()) {
           return SelectAction.IGNORE;
@@ -506,7 +507,7 @@
       SelectAction action, MultiSelectionModel<? super T> selectionModel) {
     NativeEvent nativeEvent = event.getNativeEvent();
     String type = nativeEvent.getType();
-    if ("click".equals(type)) {
+    if (BrowserEvents.CLICK.equals(type)) {
       /*
        * Update selection on click. Selection is toggled only if the user
        * presses the ctrl key. If the user does not press the control key,
@@ -521,7 +522,7 @@
       }
       doMultiSelection(selectionModel, event.getDisplay(), event.getIndex(),
           event.getValue(), action, shift, clearOthers);
-    } else if ("keyup".equals(type)) {
+    } else if (BrowserEvents.KEYUP.equals(type)) {
       int keyCode = nativeEvent.getKeyCode();
       if (keyCode == 32) {
         /*
@@ -572,7 +573,7 @@
     // Handle default selection.
     NativeEvent nativeEvent = event.getNativeEvent();
     String type = nativeEvent.getType();
-    if ("click".equals(type)) {
+    if (BrowserEvents.CLICK.equals(type)) {
       if (nativeEvent.getCtrlKey() || nativeEvent.getMetaKey()) {
         // Toggle selection on ctrl+click.
         selectionModel.setSelected(value, !selectionModel.isSelected(value));
@@ -580,7 +581,7 @@
         // Select on click.
         selectionModel.setSelected(value, true);
       }
-    } else if ("keyup".equals(type)) {
+    } else if (BrowserEvents.KEYUP.equals(type)) {
       // Toggle selection on space.
       int keyCode = nativeEvent.getKeyCode();
       if (keyCode == 32) {