obj.updateRequest = X_NET_OAUTH2_updateRequest;
if( _getAccessToken( this ) && ( expires_at = _getAccessTokenExpiry( this ) ) ){
- if( expires_at < X_Timer_now() + 300000 ){ // 寿命が5分を切った
+ if( expires_at < X_Timer_now() + ( obj[ 'refreshMargin' ] || 300000 ) ){ // 寿命が5分を切った
this[ 'refreshToken' ]();
} else {
obj.oauth2State = 4;
this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
};
- // TODO canUse
- // TODO kill の cancel
+ // TODO canUse gadgetProxy
+ this[ 'listen' ]( [ X_EVENT_KILL_INSTANCE, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_NEED_AUTH ], X_NET_OAUTH2_handleEvent );
},
/**
delete pair.net;
};
+ if( pair.oauth2State !== 1 ){
+ return;
+ };
+
// http://kojikoji75.hatenablog.com/entry/2013/12/15/223839
X_NET_OAUTH2_authorizationWindow && X_NET_OAUTH2_authorizationWindow.open( 'about:blank', '_self' ).close();
X_NET_OAUTH2_authorizationWindow = null;
* アクセストークンのリフレッシュ。
*/
'refreshToken' : function(){
- // TODO 自動リフレッシュ
-
var pair = X_Pair_get( this );
if( pair.net ) return;
+ if( pair.refreshTimerID ){
+ X_Timer_remove( pair.refreshTimerID );
+ delete pair.refreshTimerID;
+ };
+
pair.oauth2State = 3;
pair.net = X.Net( {
}
);
+function X_NET_OAUTH2_handleEvent( e ){
+ var pair = X_Pair_get( this );
+
+ switch( e.type ){
+ case X_EVENT_KILL_INSTANCE :
+ this[ 'cancelAuth' ]();
+
+ case X_EVENT_ERROR :
+ case X_EVENT_NEED_AUTH :
+ pair.refreshTimerID && X_Timer_remove( pair.refreshTimerID );
+ break;
+
+ case X_EVENT_SUCCESS :
+ pair.refreshTimerID && X_Timer_remove( pair.refreshTimerID );
+ if( _getRefreshToken( this ) ){
+ // 自動リフレッシュ
+ pair.refreshTimerID = X_Timer_once( _getAccessTokenExpiry( this ) - X_Timer_now() - pair[ 'refreshMargin' ], this, this[ 'refreshToken' ] );
+ };
+ };
+};
+
function X_Net_OAuth2_detectAuthPopup(){
var closed, search, pair = X_Pair_get( this );