Configure the gwtorm KeyUtil.Encoder during module load

gwtorm 1.1.3 no longer actually knows anything about GWT, so it
can't reuse the GWT native JavaScript encoding routines on its own.

Therefore we have to install the KeyEncoder before using anything
that might ask for it.

Change-Id: I708daaed0ce8b1f57a4636a0fea217a738f679cf
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
index 959eb79..811a7e8 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/Gerrit.java
@@ -33,6 +33,7 @@
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.Cookies;
 import com.google.gwt.user.client.History;
@@ -54,6 +55,7 @@
 import com.google.gwtjsonrpc.client.JsonDefTarget;
 import com.google.gwtjsonrpc.client.JsonUtil;
 import com.google.gwtjsonrpc.client.XsrfManager;
+import com.google.gwtorm.client.KeyUtil;
 
 import java.util.ArrayList;
 
@@ -194,6 +196,21 @@
   public void onModuleLoad() {
     UserAgent.assertNotInIFrame();
 
+    KeyUtil.setEncoderImpl(new KeyUtil.Encoder() {
+      @Override
+      public String encode(final String e) {
+        return fixPathImpl(URL.encodeComponent(e));
+      }
+
+      @Override
+      public String decode(final String e) {
+        return URL.decodeComponent(e);
+      }
+
+      private native String fixPathImpl(String path)
+      /*-{ return path.replace(/%2F/g, "/"); }-*/;
+    });
+
     RESOURCES.gwt_override().ensureInjected();
     RESOURCES.css().ensureInjected();