diff --git a/src/CoreManager.js b/src/CoreManager.js index dc45d4314..4621dbcb1 100644 --- a/src/CoreManager.js +++ b/src/CoreManager.js @@ -171,6 +171,7 @@ const config: Config & { [key: string]: mixed } = { !!process.versions.node && !process.versions.electron), REQUEST_ATTEMPT_LIMIT: 5, + REQUEST_HEADERS: {}, SERVER_URL: 'https://api.parse.com/1', SERVER_AUTH_TYPE: null, SERVER_AUTH_TOKEN: null, diff --git a/src/RESTController.js b/src/RESTController.js index 4ebf31f08..f02d17e7c 100644 --- a/src/RESTController.js +++ b/src/RESTController.js @@ -48,7 +48,7 @@ if (typeof XDomainRequest !== 'undefined' && useXDomainRequest = true; } -function ajaxIE9(method: string, url: string, data: any, options?: FullOptions) { +function ajaxIE9(method: string, url: string, data: any, headers?: any, options?: FullOptions) { return new Promise((resolve, reject) => { const xdr = new XDomainRequest(); if (options && typeof options.requestTask === 'function') { @@ -163,7 +163,10 @@ const RESTController = { if (CoreManager.get('SERVER_AUTH_TYPE') && CoreManager.get('SERVER_AUTH_TOKEN')) { headers['Authorization'] = CoreManager.get('SERVER_AUTH_TYPE') + ' ' + CoreManager.get('SERVER_AUTH_TOKEN'); } - + const customHeaders = CoreManager.get('REQUEST_HEADERS'); + for (const key in customHeaders) { + headers[key] = customHeaders[key]; + } if(options && typeof options.progress === 'function') { if (xhr.upload) { xhr.upload.addEventListener('progress', (oEvent) => { diff --git a/src/__tests__/RESTController-test.js b/src/__tests__/RESTController-test.js index b4b8d711f..1d6874259 100644 --- a/src/__tests__/RESTController-test.js +++ b/src/__tests__/RESTController-test.js @@ -454,4 +454,21 @@ describe('RESTController', () => { done(); }); }); + + it('opens a XHR with the custom headers', () => { + CoreManager.set('REQUEST_HEADERS', { 'Cache-Control' : 'max-age=3600' }); + const xhr = { + setRequestHeader: jest.fn(), + open: jest.fn(), + send: jest.fn() + }; + RESTController._setXHR(function() { return xhr; }); + RESTController.ajax('GET', 'users/me', {}, { 'X-Parse-Session-Token': '123' }); + expect(xhr.setRequestHeader.mock.calls[3]).toEqual( + [ 'Cache-Control', 'max-age=3600' ] + ); + expect(xhr.open.mock.calls[0]).toEqual([ 'GET', 'users/me', true ]); + expect(xhr.send.mock.calls[0][0]).toEqual({}); + CoreManager.set('REQUEST_HEADERS', {}); + }); });