mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-15 16:06:41 +03:00
f58afd21da
This makes a large number of small typo fixes. It also rewords a number of comments and JSDoc descriptions, and does some formatting standardization. This doesn't fix every single issue, but it fixes a lot. Notably, there were some formatting issues I declined to standardize due to ambivalence on what the proper standardization would be; for example, when and where empty lines should show up in JSDoc. Change-Id: Ibcaf21382bd78b91e589122983dd14e001bfdad5
124 lines
4.0 KiB
JavaScript
124 lines
4.0 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2016 Google Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
goog.provide('shaka.net.HttpXHRPlugin');
|
|
|
|
goog.require('goog.asserts');
|
|
goog.require('shaka.net.HttpPluginUtils');
|
|
goog.require('shaka.net.NetworkingEngine');
|
|
goog.require('shaka.util.AbortableOperation');
|
|
goog.require('shaka.util.Error');
|
|
|
|
|
|
/**
|
|
* @namespace
|
|
* @summary A networking plugin to handle http and https URIs via XHR.
|
|
* @param {string} uri
|
|
* @param {shakaExtern.Request} request
|
|
* @param {shaka.net.NetworkingEngine.RequestType} requestType
|
|
* @return {!shakaExtern.IAbortableOperation.<shakaExtern.Response>}
|
|
* @export
|
|
*/
|
|
shaka.net.HttpXHRPlugin = function(uri, request, requestType) {
|
|
let xhr = new shaka.net.HttpXHRPlugin.xhr_();
|
|
|
|
let promise = new Promise(function(resolve, reject) {
|
|
xhr.open(request.method, uri, true);
|
|
xhr.responseType = 'arraybuffer';
|
|
xhr.timeout = request.retryParameters.timeout;
|
|
xhr.withCredentials = request.allowCrossSiteCredentials;
|
|
|
|
xhr.onabort = function() {
|
|
reject(new shaka.util.Error(
|
|
shaka.util.Error.Severity.RECOVERABLE,
|
|
shaka.util.Error.Category.NETWORK,
|
|
shaka.util.Error.Code.OPERATION_ABORTED,
|
|
uri, requestType));
|
|
};
|
|
xhr.onload = function(event) {
|
|
let target = event.target;
|
|
goog.asserts.assert(target, 'XHR onload has no target!');
|
|
// Since IE and Edge incorrectly return the header with a leading new line
|
|
// character ('\n'), we trim the header here.
|
|
let headers = target.getAllResponseHeaders().trim().split('\r\n').reduce(
|
|
function(all, part) {
|
|
/** @type {!Array.<string>} */
|
|
let header = part.split(': ');
|
|
all[header[0].toLowerCase()] = header.slice(1).join(': ');
|
|
return all;
|
|
},
|
|
{});
|
|
|
|
try {
|
|
let response = shaka.net.HttpPluginUtils.makeResponse(headers,
|
|
target.response, target.status, uri, target.responseURL,
|
|
requestType);
|
|
resolve(response);
|
|
} catch (error) {
|
|
goog.asserts.assert(error instanceof shaka.util.Error,
|
|
'Wrong error type!');
|
|
reject(error);
|
|
}
|
|
};
|
|
xhr.onerror = function(event) {
|
|
reject(new shaka.util.Error(
|
|
shaka.util.Error.Severity.RECOVERABLE,
|
|
shaka.util.Error.Category.NETWORK,
|
|
shaka.util.Error.Code.HTTP_ERROR,
|
|
uri, event, requestType));
|
|
};
|
|
xhr.ontimeout = function(event) {
|
|
reject(new shaka.util.Error(
|
|
shaka.util.Error.Severity.RECOVERABLE,
|
|
shaka.util.Error.Category.NETWORK,
|
|
shaka.util.Error.Code.TIMEOUT,
|
|
uri, requestType));
|
|
};
|
|
|
|
for (let key in request.headers) {
|
|
// The Fetch API automatically normalizes outgoing header keys to
|
|
// lowercase. For consistency's sake, do it here too.
|
|
let lowercasedKey = key.toLowerCase();
|
|
xhr.setRequestHeader(lowercasedKey, request.headers[key]);
|
|
}
|
|
xhr.send(request.body);
|
|
});
|
|
|
|
return new shaka.util.AbortableOperation(
|
|
promise,
|
|
() => {
|
|
xhr.abort();
|
|
return Promise.resolve();
|
|
});
|
|
};
|
|
|
|
|
|
/**
|
|
* Overridden in unit tests, but compiled out in production.
|
|
*
|
|
* @const {function(new: XMLHttpRequest)}
|
|
* @private
|
|
*/
|
|
shaka.net.HttpXHRPlugin.xhr_ = window.XMLHttpRequest;
|
|
|
|
|
|
shaka.net.NetworkingEngine.registerScheme('http', shaka.net.HttpXHRPlugin,
|
|
shaka.net.NetworkingEngine.PluginPriority.FALLBACK);
|
|
shaka.net.NetworkingEngine.registerScheme('https', shaka.net.HttpXHRPlugin,
|
|
shaka.net.NetworkingEngine.PluginPriority.FALLBACK);
|
|
|