anchor.diff:    }
   
     void logout({String redirect_to: "/"}) {
  -    String revoke_url = _REVOKE_URL + _endpoint.auth.token.data;
  +    var token = _endpoint.auth.token;
  +    // for dartium
  +    if (token is! String) {
  +      token = token.data;
  +    }
  +    String revoke_url = _REVOKE_URL + token;
       var completer = loading_completer();
  -    _http.get(revoke_url).then((_response) {
  -      _endpoint.auth.logout();
  -      redirect(redirect_to);
  -    })
  +    _http.get(revoke_url)
       .whenComplete(() {
         completer.complete();
  +      if (_endpoint.auth.token is String) {
  +        var details = new chrome.InvalidTokenDetails(token:_endpoint.auth.token);
  +        chrome.identity.removeCachedAuthToken(details)
  +        .whenComplete(() {
  +          redirect(redirect_to);
  +        });
  +      // for dartium
  +      } else {
  +        _endpoint.auth.logout();
  +        redirect(redirect_to);
  +      }
       });
     }
   }
  
positive.code:       me = response;
      })
      .catchError((error) {
        window.location.hash = "/signup";
      }, test: (e) => e is APIRequestError)
      .whenComplete(() {
        completer.complete();
  
negative.code: 
    GoogleCloudEndpointService(this.c, this._http) {
      try {
        var details = new chrome.TokenDetails(interactive:true);
        chrome.identity.getAuthToken(details)
        .then((token) {
          OAuth2 auth = new SimpleOAuth2(token);
          _postLogin(auth);
  