Files
shaka-player/lib/util/license_request.js
T
Jacob Trimble e74ad98eaa Added setNetworkCallback method to dash and offline video sources.
This allows the app to intercept media requests to modify its URLs.
The callback accepts the URL for the request and returns a modified
URL or null to use the original.

Closes #148

Change-Id: I08352754ace05f318706fd93910097c0fa7696f0
2015-08-24 09:35:27 -07:00

92 lines
2.9 KiB
JavaScript

/**
* Copyright 2014 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.
*
* @fileoverview Implements a license request.
*/
goog.provide('shaka.util.LicenseRequest');
goog.require('shaka.player.Defaults');
goog.require('shaka.util.AjaxRequest');
goog.require('shaka.util.FailoverUri');
/**
* Creates a LicenseRequest. A LicenseRequest manages retries automatically.
*
* @param {string} url The URL.
* @param {(ArrayBuffer|?string)} body The request's body.
* @param {string} method The HTTP request method, which must be either 'GET'
* or 'POST'.
* @param {boolean} withCredentials True if cookies should be sent in
* cross-domain license requests. If true, the browser will reject license
* responses which use the wildcard header "Access-Control-Allow-Origin: *".
* See http://goo.gl/pzY9F7 for more information.
* @param {Object.<string, string>=} opt_extraHeaders Optional extra HTTP
* request headers as key-value pairs.
* @param {number=} opt_requestTimeout The timeout for a LicenseRequest in
* seconds.
*
* @struct
* @constructor
*/
shaka.util.LicenseRequest = function(
url,
body,
method,
withCredentials,
opt_extraHeaders,
opt_requestTimeout) {
shaka.asserts.assert((method == 'GET') || (method == 'POST'));
/** @private {!shaka.util.FailoverUri} */
this.url_ = new shaka.util.FailoverUri(null, [new goog.Uri(url)]);
/** @private {!shaka.util.AjaxRequest.Parameters} */
this.parameters_ = new shaka.util.AjaxRequest.Parameters();
this.parameters_.body = body;
this.parameters_.method = method;
this.parameters_.maxAttempts = 3;
this.parameters_.withCredentials = withCredentials;
var timeoutSeconds = opt_requestTimeout != null ?
opt_requestTimeout : shaka.player.Defaults.LICENSE_REQUEST_TIMEOUT;
this.parameters_.requestTimeoutMs = timeoutSeconds * 1000;
// Clone the headers.
var extraHeaders = opt_extraHeaders || {};
for (var key in extraHeaders) {
this.parameters_.requestHeaders[key] = extraHeaders[key];
}
};
/**
* Sends the license request.
* @return {!Promise.<!Uint8Array>}
*/
shaka.util.LicenseRequest.prototype.send = function() {
return this.url_.fetch(this.parameters_).then(
/** @param {!ArrayBuffer|string} body */
function(body) {
var response = /** @type {!ArrayBuffer} */ (body);
return Promise.resolve(new Uint8Array(response));
}
);
};