/** Handles change events from {@link History}. */
 @Override
 public void onValueChange(final ValueChangeEvent<String> event) {
   if (locked) {
     defferedNavigation =
         new Command() {
           @Override
           public void execute() {
             onValueChange(event);
           }
         };
     return;
   }
   if (!getLock()) {
     return;
   }
   String historyToken = event.getValue();
   try {
     if (historyToken.trim().equals("")) {
       unlock();
       revealDefaultPlace();
     } else {
       historyToken = modifyNameToken(historyToken);
       placeHierarchy = tokenFormatter.toPlaceRequestHierarchy(historyToken);
       setPreviousRequestUrl(getCurrentPlaceRequest());
       doRevealPlace(getCurrentPlaceRequest(), true);
     }
   } catch (TokenFormatException e) {
     unlock();
     error(historyToken);
     NavigationEvent.fire(this, null);
   }
 }
 @Override
 public void onReveal() {
   super.onReveal();
   getView().setNavigationPlace(null);
   unregisterNavigationHandler(); // Be on the safe side
   handlerRegistration = addHandler(NavigationEvent.getType(), this);
 }
 @Override
 public void onNavigation(NavigationEvent navigationEvent) {
   analytics.trackPageview(navigationEvent.getRequest().getNameToken());
 }
 @Override
 public void onNavigation(NavigationEvent navigationEvent) {
   getView().setNavigationPlace(navigationEvent.getRequest().getNameToken());
 }