Commit Graph

151 Commits

Author SHA1 Message Date
Joey Parrish d1699de19b test: Fix Safari tests hanging in GitHub Actions environment (#4144)
Fixed upstream in shaka-project/karma-local-wd-launcher#38

Closes #3967
2022-04-21 08:52:36 -07:00
Joey Parrish d8b3341720 test: Run tests on a custom Selenium grid (#4117)
Includes a YAML config file for our lab, and documentation on how to
create a custom config for another Selenium grid.

A workflow will run tests nightly in the Shaka lab, using a
self-hosted runner with access to our private grid.

The workflow can also be triggered manually by maintainers to test a
PR in the lab.  This will report status back to the PR.
2022-04-12 11:32:59 -07:00
Joey Parrish 9660ce85df fix: Fix broken deps file generation on Windows (#4086)
This fixes broken deps file generation on Window by upgrading to a
pre-release version of the deps tool.  The upstream issue was filed in
https://github.com/google/closure-library/issues/1159 and fixed in
https://github.com/google/closure-library/pull/1160.

This issue has never affected a release version of Shaka Player, and
was introduced when we switched deps tools in 6f274cbc.

Closes #4085
2022-03-30 19:25:55 -07:00
Joey Parrish 55eab2198c chore: Upgrade HTMLHint to new version with vulnerability fixed (#4071)
We were using a pre-release version of the same for a while, but this
is the same fix in an official release.
2022-03-29 09:37:23 -07:00
Joey Parrish 6f274cbc97 build: Stop using deprecated tool to generate closure deps (#4060)
The depswriter.py tool from google-closure-library was generating
deprecation warnings.  This switches to a newer, rewritten version
called google-closure-deps.
2022-03-23 15:08:01 -07:00
Joey Parrish 3f838cfd3a ci: Deploy demo to appspot nightly and on releases (#4038)
This imports our appspot code into the repo and updates all of it to
Python 3.
2022-03-21 11:15:40 -07:00
Joey Parrish f5f517759f chore(deps): Upgrade less to v4 (prerelease) (#4028)
In #3991, I changed the syntax of our colors to a modern rgba syntax.
For example, rgba(255, 255, 255, 0.85) would become rgba(255 255 255 /
85%). However, less v3 seems not to understand that properly, and
performs division on the last two parts, resulting in output of
rgba(255 255 3%), which is indeed invalid.

This fixes the issue by upgrading to less v4, which understands the
new rgba syntax and leaves it alone. The output for that will now
match the input.

To work around an issue with less v4, this uses a prerelease version
with a fix for https://github.com/less/less.js/issues/3693 . See also
https://github.com/tomas/needle/issues/391

This doesn't affect any release branches, since #3991 hasn't been
cherry-picked.

Closes #4027
2022-03-15 14:53:54 -07:00
Joey Parrish 1507b1e844 chore: Update URLs after moving projects (#4008) 2022-03-03 14:34:40 -08:00
Joey Parrish 4aab0cc0ba build: Replace less-plugin-clean-css and htmlhint with forks (#3995)
These projects have vulnerable dependencies, but are not being
properly maintained.  This replaces both with forks that have upgraded
their deps.

This brings the NPM audit vulnerability count from 6 to 0.
2022-02-23 13:01:47 -08:00
Joey Parrish c318a11caa build: Update jsdoc fork (#3994)
This updates the jsdoc fork to one based on the latest jsdoc.  (The
fork adds features for tutorial sorting.)

We also have an in-repo fork of the default jsdoc template from 2019.
The newer default template no longer includes the same dependencies,
so three deps we used to get transitively from jsdoc are now explicit
at the shaka-player level: open-sans-fonts, code-prettify, and
color-themes-for-google-code-prettify.  This is appropriate, since the
dependency comes from our in-repo fork of the default template.

This upgrade brings our NPM audit vulnerabilities from 10 to 6.
2022-02-22 16:22:48 -08:00
Joey Parrish a5e9ed61eb build: Upgrade CSS linter (#3991)
The new version requires additional configuration for less syntax, and
has new default rules we were out of compliance with.

I disabled rules about avoiding explicit vendor prefixes (such as
"-webkit") because we are not using any auto-prefixer tools.  Other
violations have been fixed:

 - kebab-case for element ids
 - quotes around URLs
 - double quotes instead of single quotes
 - disable class selector pattern matching for MDL (external)
 - use modern rgb/rgba syntax
 - no quotes on font families
 - no long-hand when short-hand will do

This brings our NPM audit vulnerabilities from 20 down to 10.
2022-02-22 14:16:22 -08:00
Joey Parrish a67cb6ed00 build: Downgrade less (#3982)
Downgrade less to v3.  v4 is failing on macOS for some reason.  See
less/less.js#3693

This also makes some less/CSS changes that are useful for future
upgrades:

 - wrap all calculations in calc(), which is required in less v4
 - remove unneeded @transparent variable

Finally, this fixes an erroneous error message that said "extern
generation failed" instead of "CSS compilation failed".

Closes #3981
2022-02-22 08:46:54 -08:00
Joey Parrish a2c853522f build: Update babel (#3979)
This updates babel and its various plugins and associated modules,
which brings our NPM audit vulnerability count from 24 to 20.
2022-02-18 11:28:36 -08:00
Joey Parrish d99ab7959d build: Update eslint (#3977)
Also fixes linter errors found by the new versions
2022-02-18 08:26:43 -08:00
Joey Parrish c482e81ad9 build: Update Closure Compiler (#3976)
This updates the compiler and closure library to the latest releases.
This required a few small tweaks:

 - Drop custom extern for WebCrypto (now built into the compiler)
 - Remove require() in cea parser, only used in `throws` annotations
 - Hack around a typing issue in a fake version of TextTrack in tests
2022-02-17 18:55:49 -08:00
Joey Parrish 49fbcb4e5a build: Update most dev dependencies (#3973)
Most dependencies are not used in Shaka Player itself, but in our
build and test infra or in our demo app.  Still, GitHub reported 29
potential vulnerabilities in these deps, and NPM reported 37.

The changes below being NPM's audit report from 37 down to 24
vulnerabilities.

Detailed updates:
 - Dropped explicit deps for transitive dependencies that we no longer
   need to update for ourselves:
   - ua-parser-js (via karma)
 - Dropped because we no longer need them:
   - karma-ie-launcher
 - Updated to latest versions:
   - awesomplete
   - core-js
   - dialog-polyfill
   - htmlhint
   - jimp
   - karma*
   - less
   - pwacompat
   - rimraf
   - tippy.js
   - which
 - Updated as far as possible without code or config changes in Shaka:
   - mux.js
   - stylelint*
 - Still needs an update:
   - *babel*
   - eslint
   - eslint-config-google
   - google-closure-compiler
   - google-closure-library

Some of the vulnerabilities stem from stylelint, babel, and others
that haven't been updated yet, so follow-up work is needed to address
those with breaking updates.

mux.js is actually used at runtime (optional), so it was only updated
to the latest non-breaking release.
2022-02-17 13:52:24 -08:00
Joey Parrish 4bb2c14195 test: Fix failing WebDriver installations (#3943)
https://github.com/joeyparrish/webdriver-installer/pull/8
2022-02-11 15:28:29 -08:00
Joey Parrish 7155ec73bc test: Switch local Chrome, Edge, Firefox, and Safari launchers to WebDriver-based (#3921)
* test: Switch local Chrome, Edge, Firefox, and Safari launchers to WebDriver-based

This will enable WebDriver-based screenshot tests in local test runs.

* test: Add screenshots for Edge on Mac
2022-02-03 18:54:07 -08:00
Joey Parrish 76d4fd9553 test: Make screenshot comparisons more tolerant (#3916)
Instead of pixel-wise comparison with a change threshold, we now use a
structural similarity (ssim) module to decide how much a screenshot
has changed.  This better tolerates small rendering differences due to
differences in GPUs across machines.
2022-01-31 15:20:43 -08:00
Joey Parrish d15397bfcc chore: Upgrade Karma Safari launcher
This newer launcher is based on WebDriver and seems to work better with GitHub Actions.

Change-Id: I8ea0ff5cd1c975179ffe99c04a9c99601815855f
2022-01-09 19:52:24 +00:00
Joey Parrish 824d8b5fa1 chore: Update master branch version number to prepare for v3.3 release
Change-Id: Ie7565815c52bd94f571c9029d0a521b6d8e9a923
2022-01-07 12:01:22 -08:00
Joey Parrish 291c93e5fd chore: Update changelogs for v3.2.0, v3.1.2, v3.0.13
Change-Id: I2080bc4cf7547cc784f780893f2f7de7144bea0e
2021-07-14 08:37:59 -07:00
Joey Parrish 87797157af chore: Upgrade compiler
The latest compiler should treat `@expose` as a parser error, so the
BanExpose conformance rule is no longer needed.

This upgrades the compiler & closure libraries to the latest releases
from NPM, makes matching updates to the compiler command line (no more
`strictMissingRequire` error category), and removes the BanExpose
conformance rule.

Change-Id: I45e8e71ad5f42fee289a8ddd30141e15f3f425a8
2021-05-13 13:15:09 -07:00
Joey Parrish d5f10bb33c chore: Update changelog for v3.1.0
Change-Id: I376d50f099fdd3ecd3622d9ac0c4b90f14424fdb
2021-04-30 01:01:05 +00:00
Michelle Zhuo c2db6d4896 fix(MediaCap): update EME polyfill version
Issue #1391

Change-Id: I9f990b4e77950b436a0f007999f55bb160d1673b
2021-04-20 16:08:46 +00:00
Álvaro Velad Galván e6108060bd test: Allow testing with Edge Chromium in Karma (#3265) 2021-03-30 16:36:53 -07:00
Michelle Zhuo 57ee23812e feat(MediaCap): Use MediaCapabilities for supporting info
In StreamUtils, use MediaCapabilities.decodingInfo() instead of
MediaSource.isTypeSupported() to check if the stream is supported.

MediaCapabilities.decodingInfo() takes an
MediaDecodingConfiguration object as input, and returns a Promise
with a MediaCapabilitiesInfo object. The returned object tells us
whether decoding the media is supported, smooth, and
powerefficient.

Steps:
1. Create a MediaDecodingConfiguration object for each variant as
   the input.
2. Query the decodingInfo API with the config.
3. Get the 'supported' info from the decodingInfo result, to know
   whether the variant is supported.

Issue #1391

Change-Id: I8fc2d3ec6a9868f38269d550d35f45c298faae98
2021-03-12 21:41:53 +00:00
Joey Parrish 0f9bf71994 test: Fix detection of Xbox & Chromecast in Karma
Karma had an explicit dependency on ua-parser-js "0.7.22".  Not
"^0.7.22", which is a range including newer bugfix releases, but
_exactly_ 0.7.22.  This meant our explicit requirement for a newer
version of ua-parser-js wasn't working, because it conflicted with
Karma's.

This dependency bug was fixed in Karma v6.  Upgrading Karma to v6
allows us to get an updated version of ua-parser-js which includes
fixes for Xbox & Chromecast detection.  (Karma's new dependency is
"^0.7.23", which includes 0.7.24, where Xbox detection was fixed.)

We will keep our explicit dependency on ua-parser-js "^0.7.24", which
will ensure we don't get 0.7.23, which could not correctly detect Xbox
One (which we now support).  But this explicit dependency no longer
conflict's with Karma's, and will serve as an "upgrade" to theirs.

Change-Id: I72b0df9c1bda33c0ae937d79e0b143b1219ef1cb
2021-02-26 22:11:38 +00:00
Joey Parrish eb4023f6df test: Unfork ua-parser-js
The ua-parser-js fork was created to add Xbox One detection support,
but the PR has been merged and the released upstream as 0.7.24.

Change-Id: I14016837bc20da43b077fef7654f9bab8404046e
2021-02-22 11:01:14 -08:00
Joey Parrish f9065705f4 test: Fix recognition of Xbox One in Karma
This updates the UA parser to one that recognizes Xbox devices
including Xbox One.  Corresponds to PR faisalman/ua-parser-js#479

Change-Id: I5e92e78b06c981df1659f73264b6fabfc5eb56ac
2021-02-10 20:37:51 +00:00
Joey Parrish 7544670ee5 chore: Upgrade eslint
The new eslint found many style errors which have now been corrected.

It also complains a lot about atomic update issues that do not seem to
exist, so that rule has been disabled.

This upgrade will allow us to adopt eslint's "id-denylist" instead of
the older "id-blacklist" rule, the name of which violates new Google
guidelines about respectful language.

Bug: 178203011

Change-Id: Ia65581b96e4dd1331f720fa396183dca020b9caf
2021-02-01 23:36:12 +00:00
Theodore Abshire 4ace4395b9 chore: Upgrade stylelint
For a while, we were forced to use a fork of stylelint with a
bugfix necessary for our test bots to run the tool.
That behavior has now been merged into normal stylelint, so we
can stop using that fork.

Change-Id: I51196f8dab73ac1f814137d2f191a08c231fd369
2021-01-07 23:06:16 +00:00
Joey Parrish dd1674be7f chore: Upgrade less
We used to avoid less v3.12 because of a bug, but it seems to be fixed
in less v3.13.

Change-Id: I83a517cec264d4f00af5e1ff31e9be68d5cef2e1
2021-01-07 13:04:01 -08:00
Joey Parrish fc0df44645 chore: Release v2.5.19 and v3.0.7
Change-Id: I07b597b66af49ccd7dc5610965abe55c3156383f
2021-01-06 15:08:29 -08:00
Álvaro Velad Galván 2c07646fee chore: Update mux.js (#3023)
This new version supports CEA-708
2020-12-16 17:40:51 -08:00
michellezhuo 221f8a82e0 build: add goog.require for compiler upgrade (Part 7)
Change-Id: I4607f36260eed511ed71d5672fde8a0e1afd61d7
2020-10-16 20:37:05 -07:00
michellezhuo 81a487aae3 build: add goog.require for compiler upgrade (Part 6)
Change-Id: I9b92f9432a8d6bfe0d9d48c76ab1ce74a9994e0f
2020-10-16 16:10:20 -07:00
Joey Parrish fe6c192d39 build: Generate TypeScript defs with Clutz
The output of Clutz is not directly usable.  We must perform several
transformations on the generated defs:

 - Remove the prefix clutz puts on all namespaces ("ಠ_ಠ.clutz")
 - Replace "GlobalObject" (from Clutz) with TypeScript-native "object"
 - Remove "Global" prefix from Date, Element, Event, and EventTarget
   and use the original definitions instead
 - Remove "protected", which appears on some fields, but is only
   supported on methods
 - Remove duplicate extension of EventTarget on IAdManager
 - Transform "Promise | null | undefined" return type into "Promise |
   void"
 - Fix the definitions of Error and shaka.util.Error
 - Remove an unnecessary second interface on SegmentIndex types
 - Remove definitions for Closure Compiler built-ins

We still need some basic TypeScript sample code that references Shaka
Player, so that we can try to compile it and automatically verify that
the defs work at every commit.

Issue #1030

Change-Id: If394269205e57dbcce4e0f76f6ef582fba0afacb
2020-10-15 03:56:18 +00:00
Michelle Zhuo 1405997a35 feat(text): Add polyfill for TextDecoder/TextEncoder
TextDecoder/TextEncoder is not supported in IE and legacy Edge.
Add a polyfill for that.

Issue #2843
b/168908529

Change-Id: Ia7a3ca87081835fd7dc8e607e05d8090730f9fc5
2020-09-23 23:23:16 +00:00
Theodore Abshire f5f207bc65 fix: Switch to using branch of StyleLint fork
For backwards compatibility reasons, the StyleLint PR had to
be moved to a separate branch of our StyleLint fork. This
changes Shaka Player to use that branch.

Change-Id: Ia1d1ad475a446f36b6c16262320dbd36acb99d8a
2020-09-09 17:36:58 -07:00
Theodore Abshire de478295ca fix: Prepare to adopt newest version of StyleLint
Previously, StyleLint had a problem that was preventing us from
using their library in our buildbot tests. To get around this, we
made a custom branch of their library.
Recently, they almost fixed the issue. There's just one minor change
left before we can use their master branch. In the meantime, this
CL changes Shaka Player to use a new fork of StyleLint that is based
on their current master branch, and makes the LESS modifications
that the newest versions ask for.

Change-Id: I78624b3d366e6c22c577ca6707f5a3311f8e808e
2020-09-02 14:32:57 -07:00
Joey Parrish 34a20d056d test: Improved UA parser with Chromecast support
Our Chromecast tests have started reporting the device as "Linux
aarch64", which is not useful.  This moves us to a fork of
ua-parser-js which can recognize a Chromecast and report its firmware
version.  A pull request has been submitted at
faisalman/ua-parser-js#439.

Change-Id: I158cc2b0dd6fb6ec03825ac9648b05a3096da31b
2020-08-12 11:08:01 -07:00
Joey Parrish d9122a1b8d test: Update Karma and Jasmine
The latest version of Jasmine has deprecated several properties of
jasmine.Env in favor of a configure() method.  This updates our
bootstrap code to use the configure() method.

The latest version of the karma-jasmine adapter hard-codes its own
specFilter configuration at a time that overwrites ours.  There is no
way to configure karma-jasmine not to do this, so we shim
jasmine.getEnv().execute() to work around it.

I filed karma-runner/karma-jasmine#273 to track this latter issue.

Change-Id: Ie6a32f67009b52edeeb8f1974ee131753a75ba3f
2020-08-04 10:36:15 -07:00
Jacob Trimble 1a4d03e463 fix: Workaround less 3.12.0 bug.
Change-Id: Ifb2b1f91eb2f2697fe24d73f0fcb188dab97486f
2020-07-15 14:16:01 -07:00
Joey Parrish 74d9f031e1 chore: Update mux.js
The new version has license headers, which means mux.js release
bundles now comply with some internal Google policies, which in turn
simplifies some of our internal release procedures for Shaka Player.

Change-Id: I796775231c2be2b252d7cbd7adce5d4002e4df76
2020-06-16 00:17:16 +00:00
Joey Parrish b84061a764 build: Upgrade the compiler
This upgrades the compiler to the latest release and fixes some type
errors in the tests found by the new compiler.

Change-Id: I3a555cbdfc94c51fb0683f8397c6adb8ea43f120
2020-06-11 22:03:47 +00:00
Joey Parrish 1b5ba6d6cd Update changelog and bump versions for v3.0
Change-Id: I6ab88140d03b2aeb238fff5eb54802e4b3e104b7
2020-06-01 15:57:31 -07:00
Joey Parrish b839340220 Add screenshot-based layout tests for subtitles
This adds our first screenshot-based layout tests and the
infrastructure to use WebDriver for screenshots through Karma.
This new kind of test will be skipped in any non-WebDriver context.

There are many pieces to this system.

First, we update the Karma WebDriver launcher to a newly-released
version that lets us access the client spec object from the launcher.

Second, we build a Karma middleware plugin to respond to HTTP requests
from the tests.  We handle /screenshot/isSupported and return a bool
so tests can be skipped on non-WebDriver launchers.  We also handle
/screenshot/diff to take the screenshot and compare it to a known-good
version.

The screenshot is a full-page screenshot, since element screenshots
don't work consistently across all the browsers in our test lab.  The
screenshot is then cropped to a rectangle specified in the request.
This rectangle is measured to match a specific element, so in
practice, we are screenshotting just one element.

Browsers use sub-pixel rendering, effectively rendering at a scale
larger than the "pixels" seen by JS.  The screenshot comes in at this
scale, so the requested cropping rectangle is scaled to match, then
the cropped screenshot is scaled down to the JS-measured size.

Because of sub-pixel rendering, element offsets can be non-integer
numbers.  Normally, Karma puts the tests in a iframe, above which is a
variable-height banner showing which devices are connected to Karma
and what state they are in.  So this variation and the lack of integer
offsets means we can run into stability issues due to rounding errors.
To make offsets consistent and improve stability of the screenshots,
this banner is now disabled in our Karma config.

The cropping, scaling, and diffing of images is handled Karma-side by
a node module called Jimp.

Before we start the layout tests for UITextDisplayer, we use a node
module in the browser called fontfaceonload to wait for our web fonts
to be fully loaded.  This module is a polyfill that polls on IE and
uses a standard API in modern browsers to wait for our font to load.
This is all wrapped into a new test util called waitForFont.

Screenshots are stored in test/test/assets/screenshots/ and are
organized into folders by platform and browser and named according to
an identifier specified by each test case.  The new screenshot is
written to disk with the suffix "-new", and a diff image is written
with the suffix "-diff".  When a test fails, we can review the changes
in a browser with test/test/assets/screenshots/review.html.  The
known-good screenshots can be updated with the new tool
build/updateScreenshots.py.

Change-Id: Ib477fd3c459de466c6dc91e9a60d3e2579164b12
2020-05-26 22:38:04 +00:00
Joey Parrish a3f1c0220f Fix CEA caption extraction for b-frame content
This updates to mux.js 5.6.3, which includes a fix for v1 trun box
parsing to fix caption extraction for content with b-frames.

Closes #2395

Change-Id: I206ce26bb43e8187599e8ca7be2e718f4ea345c3
2020-05-07 14:01:26 -07:00
Joey Parrish 1076b78465 Unfork Closure base and update the compiler
The Closure Library's base.js, the Closure Compiler, and the Closure
deps-writer are all now loaded via NPM instead of commiting them
directly to the repo.  This also updates both the library and compiler
to the latest version: 20200406.

We still have a fork of the Closure Library's URI parser.  The latest
upstream version of that has too many dependencies on the rest of the
library to import directly from NPM.

Some internals of the build system have been refactored, and the
"complete" set of files in the build system now includes third_party.

Our forked URI parser does not pass lint checks yet, so the linter
does not run over third_party yet.

A couple of overly-severe sets of compiler checks have been disabled,
since even the latest Closure Library's base.js doesn't pass them.

The script-loader in load.js had to be updated for compatibility with
the new Closure Library.  If you don't return "true" now, Closure's
base.js will stop loading subsequent source files.

Some local externs that we had written are now available from the
compiler, so our local copies have been deleted.

A few type-related changes have been made as well, removing casts that
were necessary with the old compiler, but not necessary with the new
one.

Finally, this corrects some type issues in the tests using the new
"typeof" annotation from the compiler.  This allows us to type a
variable as a class defined elsewhere.  For example, after loading the
compiled library, we can reference compiledShaka.Player, which has the
type "typeof shaka.Player".  The compiler can then type-check all uses
of it in the tests.

Closes #2528 (bad polyfill code generated by the old compiler)

Change-Id: I62ec61e82d4edf342b2c576c2d4f89f11562ee65
2020-04-30 19:32:30 -07:00