Update the Sign In anchor with current URL

Always update the href of the Sign In anchor in the menu bar with
the current page URL after /login/, making the redirect process
bring users back to the current view after sign in.

Change-Id: Id97566975a2193be0e43552d25b0d75f56c9eceb
This commit is contained in:
Shawn O. Pearce
2012-01-19 16:42:46 -08:00
parent 2b3cd55297
commit 31d7c88643

View File

@@ -20,7 +20,6 @@ import com.google.gerrit.client.changes.ChangeConstants;
import com.google.gerrit.client.changes.ChangeListScreen;
import com.google.gerrit.client.patches.PatchScreen;
import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.client.ui.CommandMenuItem;
import com.google.gerrit.client.ui.LinkMenuBar;
import com.google.gerrit.client.ui.LinkMenuItem;
import com.google.gerrit.client.ui.MorphingTabPanel;
@@ -190,13 +189,7 @@ public class Gerrit implements EntryPoint {
*/
public static void updateImpl(final String token) {
History.newItem(token, false);
if (historyHooks != null) {
// Because we blocked firing the event our history hooks won't be
// informed of the current token. Manually fire the event to them.
//
dispatchHistoryHooks(token);
}
dispatchHistoryHooks(token);
}
public static void setQueryString(String query) {
@@ -249,10 +242,7 @@ public class Gerrit implements EntryPoint {
case HTTP_LDAP:
case CLIENT_SSL_CERT_LDAP:
case CUSTOM_EXTENSION:
if (token.startsWith("/")) {
token = token.substring(1);
}
Location.assign(selfRedirect("/login/" + token));
Location.assign(loginRedirect(token));
break;
case DEVELOPMENT_BECOME_ANY_ACCOUNT:
@@ -270,6 +260,15 @@ public class Gerrit implements EntryPoint {
}
}
private static String loginRedirect(String token) {
if (token == null) {
token = "";
} else if (token.startsWith("/")) {
token = token.substring(1);
}
return selfRedirect("/login/" + token);
}
private static String selfRedirect(String suffix) {
// Clean up the path. Users seem to like putting extra slashes into the URL
// which can break redirections by misinterpreting at either client or server.
@@ -376,6 +375,7 @@ public class Gerrit implements EntryPoint {
}
private static ArrayList<JavaScriptObject> historyHooks;
private static Anchor signInAnchor;
private static native void initHistoryHooks()
/*-{ $wnd['gerrit_addHistoryHook'] = function(h) { @com.google.gerrit.client.Gerrit::addHistoryHook(Lcom/google/gwt/core/client/JavaScriptObject;)(h); }; }-*/;
@@ -397,9 +397,14 @@ public class Gerrit implements EntryPoint {
/*-{ hook(url); }-*/;
private static void dispatchHistoryHooks(final String historyToken) {
final String url = Location.getPath() + "#" + historyToken;
for (final JavaScriptObject hook : historyHooks) {
callHistoryHook(hook, url);
if (signInAnchor != null) {
signInAnchor.setHref(loginRedirect(historyToken));
}
if (historyHooks != null) {
final String url = Location.getPath() + "#" + historyToken;
for (final JavaScriptObject hook : historyHooks) {
callHistoryHook(hook, url);
}
}
}
@@ -464,9 +469,7 @@ public class Gerrit implements EntryPoint {
final String token = view.getToken();
if (!token.equals(History.getToken())) {
History.newItem(token, false);
if (historyHooks != null) {
dispatchHistoryHooks(token);
}
dispatchHistoryHooks(token);
}
if (view instanceof ChangeListScreen) {
@@ -606,14 +609,8 @@ public class Gerrit implements EntryPoint {
if (cfg.getRegisterUrl() != null) {
menuRight.add(anchor(C.menuRegister(), cfg.getRegisterUrl()));
}
CommandMenuItem signIn = new CommandMenuItem(C.menuSignIn(),
new Command() {
public void execute() {
doSignIn(History.getToken());
}
});
signIn.setHref(selfRedirect("/login/"));
menuRight.addItem(signIn);
signInAnchor = anchor(C.menuSignIn(), loginRedirect(""));
menuRight.add(signInAnchor);
break;
case DEVELOPMENT_BECOME_ANY_ACCOUNT: