diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index aef207be36760ad64e6753404542931847da96d9..23bd55f774835aeb8af989d96c20c989efb5fae3 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -4,6 +4,8 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; +import {TPromise} from 'vs/base/common/winjs.base'; + export namespace Schemas { /** @@ -18,3 +20,65 @@ export namespace Schemas { export var file:string = 'file'; } + +export interface IXHROptions { + type?:string; + url?:string; + user?:string; + password?:string; + responseType?:string; + headers?:any; + customRequestInitializer?:(req:any)=>void; + data?:any; +} + +export function xhr(options:IXHROptions): TPromise { + let req:XMLHttpRequest = null; + let canceled = false; + + return new TPromise((c, e, p) => { + req = new XMLHttpRequest(); + + req.onreadystatechange = () => { + if (canceled) { + return; + } + + if (req.readyState === 4) { + // Handle 1223: http://bugs.jquery.com/ticket/1450 + if ((req.status >= 200 && req.status < 300) || req.status === 1223) { + c(req); + } else { + e(req); + } + req.onreadystatechange = () => { }; + } else { + p(req); + } + }; + + req.open( + options.type || 'GET', + options.url, + // Promise based XHR does not support sync. + // + true, + options.user, + options.password + ); + req.responseType = options.responseType || ''; + + Object.keys(options.headers || {}).forEach((k) => { + req.setRequestHeader(k, options.headers[k]); + }); + + if (options.customRequestInitializer) { + options.customRequestInitializer(req); + } + + req.send(options.data); + }, () => { + canceled = true; + req.abort(); + }); +} diff --git a/src/vs/base/common/winjs.base.d.ts b/src/vs/base/common/winjs.base.d.ts index 2b29355a65b45ce01d19eb4b291355cb098ce640..b984548337863546ed606aeb259e4803ef39d262 100644 --- a/src/vs/base/common/winjs.base.d.ts +++ b/src/vs/base/common/winjs.base.d.ts @@ -43,18 +43,6 @@ export declare class Promise { public cancel():void; } -export interface IXHROptions { - type?:string; - url?:string; - user?:string; - password?:string; - responseType?:string; - headers?:any; - customRequestInitializer?:(req:any)=>void; - data?:any; -} - -export declare function xhr(options:IXHROptions):TPromise; export declare function decoratePromise(promise:Promise, successCallback?:ValueCallback, errorCallback?:ErrorCallback):Promise; export declare function decoratePromise(promise:TPromise, successCallback?:TValueCallback, errorCallback?:ErrorCallback):TPromise; diff --git a/src/vs/platform/request/common/baseRequestService.ts b/src/vs/platform/request/common/baseRequestService.ts index f821d9954b8d01d0d42efc752f14c836ff9cc305..13843808f9d33a5dbdd993102d7487b38e8c5d35 100644 --- a/src/vs/platform/request/common/baseRequestService.ts +++ b/src/vs/platform/request/common/baseRequestService.ts @@ -5,7 +5,8 @@ 'use strict'; import URI from 'vs/base/common/uri'; -import {TPromise, xhr, IXHROptions} from 'vs/base/common/winjs.base'; +import {TPromise} from 'vs/base/common/winjs.base'; +import {xhr, IXHROptions} from 'vs/base/common/network'; import strings = require('vs/base/common/strings'); import Timer = require('vs/base/common/timer'); import Async = require('vs/base/common/async'); diff --git a/src/vs/platform/request/node/nodeRequestService.ts b/src/vs/platform/request/node/nodeRequestService.ts index dfceb3a6a6381b371088cffb05a85adcb23f1b20..d39226205b3cb864264cff35967cd98258a4d918 100644 --- a/src/vs/platform/request/node/nodeRequestService.ts +++ b/src/vs/platform/request/node/nodeRequestService.ts @@ -5,7 +5,8 @@ 'use strict'; -import { TPromise, xhr } from 'vs/base/common/winjs.base'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { xhr } from 'vs/base/common/network'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IRequestService } from 'vs/platform/request/common/request'; diff --git a/src/vs/workbench/services/request/node/requestService.ts b/src/vs/workbench/services/request/node/requestService.ts index 2c8e977726e72b5d4d19f23fec8de2e8b4621b88..b8e49c5c9c125535d7e8db554e7dd84483cfff6a 100644 --- a/src/vs/workbench/services/request/node/requestService.ts +++ b/src/vs/workbench/services/request/node/requestService.ts @@ -5,7 +5,8 @@ 'use strict'; -import { TPromise, Promise, xhr } from 'vs/base/common/winjs.base'; +import { TPromise, Promise } from 'vs/base/common/winjs.base'; +import { xhr } from 'vs/base/common/network'; import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry'; import strings = require('vs/base/common/strings'); import nls = require('vs/nls');