function X_Callback_actualClosure( obj ){\r
return function(){\r
if( arguments[ 0 ] === X_Closure_COMMAND_BACK ) return obj;\r
- if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy( obj, arguments );\r
+ if( arguments[ 0 ] !== X_Closure_COMMAND_DROP ) return obj.proxy && obj.proxy( obj, arguments );\r
};\r
};\r
\r
default :\r
if( raw.attachEvent ){\r
raw.detachEvent( 'on' + type, that[ '_listeners' ][ X_LISTENERS_ACTUAL_HANDLER ] );\r
+ console.log( 'raw rmEvent ' + type );\r
} else {\r
raw[ 'on' + type ] = X_emptyFunction;\r
raw[ 'on' + type ] = '';\r
case 'timeout' : // Gecko 12.0 https://developer.mozilla.org/ja/docs/XMLHttpRequest/Synchronous_and_Asynchronous_Requests\r
X_NET_XHRWrapper._busy = false;\r
X_NET_XHRWrapper._error = !!X_UA[ 'Gecko' ];\r
- X_NET_XHRWrapper[ 'asyncDispatch' ]( { type :X_EVENT_ERROR, 'timeout' : true } );\r
+ X_NET_XHRWrapper[ 'asyncDispatch' ]( { type :X_EVENT_ERROR, 'timeout' : true, status : 408 } );\r
break;\r
};\r
},\r
\r
if( live || raw.readyState < 3 ){\r
this._busy = false;\r
- live && this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true } );\r
+ live && this[ 'asyncDispatch' ]( { type : X_EVENT_ERROR, 'timeout' : true, status : 408 } );\r
};\r
this._timerID = 0;\r
},\r
* アクセストークンのリフレッシュ。
*/
'refreshToken' : function(){
- var pair = X_Pair_get( this );
+ var pair = X_Pair_get( this ),
+ refreshToken = X_OAuth2_getRefreshToken( this );
+
+ if( !refreshToken ){
+ pair.oauth2State = 0;
+ this[ 'asyncDispatch' ]( X_EVENT_NEED_AUTH );
+ return;
+ };
if( pair.net ) return;
'client_id' : pair[ 'clientID' ],
'client_secret' : pair[ 'clientSecret' ],
'grant_type' : 'refresh_token',
- 'refresh_token' : X_OAuth2_getRefreshToken( this )
+ 'refresh_token' : refreshToken
}),
'dataType' : 'json',
'headers' : {
\r
var X_Audio_BACKENDS = []; // Array.<Hash>\r
\r
+X_TEMP.onSystemReady.push(\r
+ function(){\r
+ var canPlay = X[ 'Audio' ][ 'canPlay' ] = {},\r
+ i = X_Audio_BACKENDS.length;\r
+ for( ; i; ){\r
+ X_Object_override( canPlay, X_Audio_BACKENDS[ --i ].canPlay );\r
+ };\r
+ });\r
+\r
/**\r
* <p>複数のバックエンドから、与えられた音声を再生可能なものを見つけ、音声を再生します。\r
* <p>HTMLAudio の動作・機能がブラウザ毎にバラバラなのに業を煮やし、メソッドやイベントは独自に定義しています。\r
}\r
);\r
\r
-// TODO\r
-X[ 'Audio' ][ 'canPlay' ] = {};\r
-\r
function X_Audio_handleEvent( e ){\r
var backend;\r
\r
{
backendName : 'Web Audio',
+ canPlay : {}, // TODO HTMLAudio と同じ
+
//
detect : function( proxy, source, ext ){
proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : X_Audio_codecs[ ext ] } );
X_Audio_BACKENDS.push(\r
{\r
backendName : 'HTML Audio',\r
+ \r
+ canPlay : X_Audio_codecs,\r
/*\r
* HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット\r
* https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats\r
X_Audio_BACKENDS.push( {\r
backendName : 'Silverlight Audio',\r
\r
+ canPlay : {\r
+ 'mp3' : true,\r
+ 'wma' : true,\r
+ 'wav' : true\r
+ },\r
+\r
detect : function( proxy, source, ext ){\r
var ok = ext === 'mp3' || ext === 'wma' || ext === 'wav';\r
proxy[ 'asyncDispatch' ]( { type : X_EVENT_COMPLETE, canPlay : ok } ); \r