This integrates the deprecation tool with our library and updates
all the deprecated warnings to use our new tool.
As some features needed to be removed in 2.5, this change removes them
since their deprecation checks would make us fail.
Change-Id: I28310bbe9df6839719f4763a96026d5968bdcea6
If we use sets for filters in networking engine we get some
pretty good additions:
1. Someone can't double-register their listener (by accident)
2. We don't need ArrayUtils to remove listeners.
Change-Id: I5115b9488d43f0bcd64fcc1a11133d5a49ad3d3a
On Edge, window.ReadableStream exists, but attempting to call it
results in an error.
This changes the support check for Fetch to try actually creating a
ReadableStream before it OKs using Fetch.
Change-Id: Iab6ea2c459fe536ac51796808cb56c4c54dd4312
In a recent CL, the Http Fetch plugin was modified to make use of
ReadableStream. However, ReadableStream isn't available on every
platform. This change modifies the Fetch plugin to not be used if
ReadableStream isn't defined.
This also adds a basic mock ReadableStream for tests.
Change-Id: I7554298779040ce0cef1b8ad55c3ee113f932954
This is part 1 of conditionally aborting requests when network
downgrading.
1. Add progress event handler for Http XHR Plugin, to get more frequent
updates for network bandwidth estimate and suggest streams based on
that.
2. When the plugin doesn't support progress event, call
onProgressUpdated function after every segment is downloaded.
3. Replace onSegmentDownloaded with onProgressUpdated function in
player.js and network_engine.js.
4. Since XHR Plugin supports progress event while Fetch doesn't, change
the config to prefer XHR over Fetch API.
Issue #1051.
Change-Id: Icf6775dd3520fb2e359b13d29e3b39d3792fe865
There is now a separate server URL for 'individualization-request'
messages; if it isn't given, it will fallback to the license server.
There is also a new field in the Request object so a request filter
can act differently based on the message type.
Closes#1565
Change-Id: I970a8651ef05ec533d9fd41841cb52021e3c0489
This makes NetworkingEngine a FakeEventTarget, and gives it a 'retry'
event which is fired when there is a recoverable error that results in
a retry.
Closes#1529
Change-Id: I0c15ed20f4d6abf971d280263c6d62841daf440e
Previously, HttpFetchPlugin would treat any non-Shaka error as
HTTP_ERROR when there were potentially other circumstances which
could have produced a non-Shaka error.
This change catches errors from fetch sooner, so that there is no
need to do a fuzzy check for error.severity. It also clears the
request timeout regardless of whether fetch throws or not.
Closes#1519
cloneObject used to be part of config_utils.js.
This meant that a number of classes that didn't actually use
config objects required ConfigUtils.
This moves cloneObject into the new ObjectUtils, to clarify that.
Change-Id: I92d630eba8798b3e2671dcce95b61f44282b05e7
https://goo.gl is being turned-down, so we can't use it for new URLS.
So we have consistent short links, this converts them to be
https://bit.ly.
Change-Id: I07a86cba807b67157664893341f648023918d0de
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
- Translate uncaught Promise rejections into test failures
(Chrome only until the event is more widely implemented)
- Clean up uncaught Promise rejection caused by exceptions thrown
after destroy() in:
- CastProxy
- CastReceiver
- NetworkingEngine
- StreamingEngine
- Clean up uncaught Promise rejection caused by test cases in:
- CancelableChain unit tests
- DrmEngine unit tests
- StreamingEngine unit and integration tests
- Player unit and integration tests
- Speed up rejection in NetworkingEngine when we should not retry
- Add --delay-tests to test.py, to aid in debugging uncaught
Promise rejections and other types of async test pollution
Closes#1323
Change-Id: I5a8f5702a22430929babeb071bf6650c52c5ad17
Catch BAD_HTTP_STATUS error thrown by makeResponse in xhr.onload
Also wrap mock XHR event handlers in try-catch blocks in
http_plugin_unit to avoid regression.
Resolves#1302
Google style guide requires adding curly braces to all block statements
even if it is only has one line. This fixes it by using eslint's
--fix flag followed by running clang-format to reformat the change.
Change-Id: Idc086c2aa8c02df5ef8b2140a11bfb9128eeb4bd
This is part of a change to convert all usages of 'var' with either
'let' or 'const'. This takes a conservative approach for 'const' where
it will only be used for aliases and storing the "original" values in
tests.
Change-Id: I475eba0a477d13cd9201c88ad44899d521ad8991
Fetch requests with a method of GET or HEADER cannot have a body, or
else the request will fail. Normally we had no problems with this, but
it turns out that Edge counts a body of 'null' as being defined.
This changes the Fetch scheme plugin so that it will replace null with
undefined for the body in the init data.
This also makes it so that HTTP_ERROR errors emitted by the http
plugin will include the original error, to aid in debugging future
issues.
Change-Id: I0531656dada25f97ef610d4285c225d57d7ef262
This plugin is preferred over the XHR plugin, if available.
This plugin requires AbortController, which is only present on
Firefox 57 and Edge 16, so this will not be active on every platform.
This also adds a simple mock for the Fetch API for use with Jasmine.
Closes#829
Change-Id: Ifb79d29334fbfcfd175afe0706da5a3d5e452e2f
When changing networking engine to use AbortableOperation, we had an
accidental regression. Now, when it runs out of retries, it rejects
with an error of "undefined" instead of with the actual error that was
causing it to retry.
This changes networking engine to save the last error and return with
that. It also modifies the unit tests to catch this problem.
Closes#1278
Change-Id: I8af9a81d7a8ad58d195a8e9f1af622ddbc3592f2
This uses AbortableOperation in all networking, from the scheme
plugins all the way to the request interface.
This also updates all default scheme plugins, docs, and sample code.
Backward compatibility is provided for scheme plugins and the
request API in NetworkingEngine. This compatibility will be
removed in v2.5.
Two cancelation-related tests have been disabled in
player_integration until the new abort interface has been adopted
in the manifest parsers.
Issue #829
Change-Id: I91c8e6efe97798d111e8ddca5655cddc1f6bcbf3
Once we start moving to ES6, uncompiled mode stops working on non-ES6
browsers (IE11 is the only one we test on). We can disable uncompiled
mode in the demo, but we still want our tests to be uncompiled. With
uncompiled library & tests, we can test units that are not exported
and even access private members that would otherwise be renamed.
For production/demo, Babel plays no role. The Closure Compiler will
take in ES6 and spit out ES3 syntax (even older than ES5, so we can
at least run & fail a support check).
Babel will be used by Karma to preprocess all test and library code
before serving it from Karma. This will allow us to use ES6 in both
the library and the tests, and still run uncompiled tests and test the
uncompiled library on ES5 browsers such as IE 11.
Issue #1157
Change-Id: Idd185d0e231d16b6df52babda777111e85890012
Since IE/Edge returns the header with a leading new line('\n'), we need
to remove it from the response.
Closes#1172.
Change-Id: I133f9cfbada6486edc438f3dcbc37c7c78dbf36c
This adds the ability to supply an isCanceled() callback when making a
backoff object. If the callback is provided, the backoff will break the
timeout into a series of 200 MS timeouts, and check isCanceled() between
every segment.
This changes makes it so that, when canceling a load, you can quickly end
the current backoff. This will making canceling a load significantly faster,
especially if the player is on a late retry.
This still does not quite fix issue #1084 to my satisfaction; if the
manifest is currently downloading, the cancel will need to wait on that.
Canceling an in-progress manifest download will be yet another followup CL.
Issue #1084
Change-Id: I0a53310a9b521de375f2e128f63eaa133547c340
If the parser is failing to load a manifest, perhaps due to being offline,
and the player is destroyed mid-load, it will wait for all of the retries to
run out before canceling. This causes a significant wait time on destroy.
This change adds an optional isCanceled callback to the request method in
NetworkingEngine, allowing requests to be made that can be canceled via a
provided callback. This is then used to quickly skip past all of the
retries, when destroying the parser.
This doesn't stop any backoff in progress, so there still might be a delay of
a second or two (depending on networking settings, of course) if you destroy
during a backoff period. That will be changed in a followup CL.
Issue #1084
Change-Id: I0b99616ed4d5be078161122532ea271e84613170
This modified the networking engine to store every plugin it is given
for a scheme, and adds a priority system to pick which of the plugins
to use.
Issue #829
Change-Id: I21a8a534383f2be898160d609d77efecfc2b684b
ArrayBuffer.slice isn't supported with two arguments on Tizen 2016.
This is a temporary fix that can be cherry-picked to v2.2. A better
fix will be handled in a follow-up change.
Issue #1022
Change-Id: Iae6a0b2ef0cf17843f42f22f0ea0962a56e8be68
Instead of calling the failure callback right away, use the delay and
backoff algorithm first. This way, applications do not need to
implement their own delay, and should behave more responsibly toward
servers in case of failures.
Closes#976
Change-Id: Id896365a5ed0ffdd288ef1f59e8637d1e4e55b5b
This extracts the delay, backoff, and fuzzing code from
NetworkingEngine in a way that can be used by other classes that need
this same backoff/retry behavior.
Issue #976
Change-Id: I2a370fc996e6f8f507768559c44cf7855e16abe1
This adds a severity field to Error objects. This can be used to
detect whether an error is recoverable. All the same errors are still
reported so the field can be ignored.
There are two possible values:
* RECOVERABLE means that the Player will try to recover from the error
* CRITICAL means the Player will be unable to continue and must call
load() again
Closes#564
Change-Id: Ie2c5468340c13e7a288b99690ab65b7ecc0a6b29
Widevine HLS manifests have a data URI that needs to be parsed to
generate DrmInfo. Rather than write another parser, factor the data
URI networking plugin to expose the parser to other classes.
Issue #279
Change-Id: I71f174b86cc3b0ae0e8dbc31701ea9d36cd157ee
This allows network responses to have an X-Shaka-From-Cache header to
indicate that the response was somehow from a cache and should be
ignored for bandwidth calculations. For example, this can be from a
service worker intercepting the request.
Change-Id: I4dfdf4211921b7205febb58f1e80967f0c4841cd
This adds a field to the network response that will indicate that the
response was from a cache and should be ignored for bandwidth
estimation.
Change-Id: I6b02e9d4fb3be02731bdf0a2a46bc5ce5f11e302