WebAudio API
- [X] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix#6710
- [X] There are tests for these changes
This PR adds basic support for the WebAudio API using [servo-media](https://github.com/servo/media) with GStreamer as the audio backend.
There are still some major stuff to fix like:
- [x] Detach ArrayBuffer during the [AudioBuffer "acquire the content" operation](https://webaudio.github.io/web-audio-api/#acquire-the-content). I am naively using `JS_StealArrayBufferContents()` directly, because it is what Gecko uses, but this should probably be part of the [rust-mozjs](https://github.com/servo/rust-mozjs) [TypedArray](https://github.com/servo/rust-mozjs/blob/master/src/typedarray.rs) API. And, in any case, I am not even sure if that's the proper way to do it. According to the results of the WPTs it may not even be right since [this assertion](https://github.com/servo/rust-mozjs/blob/master/src/typedarray.rs#L285) is failing in some cases. I need to dig more about this.
- [x] Disable the GStreamer dependency on Android. Unfortunately gstreamer-rs requires an NDK version upgrade, so we need to disable this for Android until then. I tried adding [different features to servo-media](https://github.com/servo/media/pull/79), but I am currently hitting [this issue](https://github.com/rust-lang/cargo/issues/1197)
I still need to run servo-tidy, change the servo-media dependency to use the git repo and add/fix some comments and TODOs.
The remaining feature work should be done in future PRs.
Note that most of the failing WPTs are failing because we don't implement the tested features yet (we only implement a few AudioNodes) and we have no OfflineAudioContext support, which most WPTs rely on.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21158)
<!-- Reviewable:end -->
The expectation change is due to the shader now using its DOM-side compile status.
It is actually a bug for the shader to think it actually compiled successfully,
but at least it does so consistently now.
Implement document load cancellation
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [ ] `./mach build -d` does not report any errors
- [ ] `./mach test-tidy` does not report any errors
- [ ] These changes fix#19309fix#21114fix#21113 (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21111)
<!-- Reviewable:end -->
script: A couple mutation observer fixes.
I felt like doing Servo stuff while trying to catch Gecko intermittents :)
This fixes most of #21233. I haven't dug into the other test.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21236)
<!-- Reviewable:end -->
Track hash changes in session history
<!-- Please describe your changes on the following line: -->
Adds tracking of hash changes in the session history.
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix#14970fix#13437 (github issue number if applicable).
<!-- Either: -->
- [X] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21048)
<!-- Reviewable:end -->
Add some support for WPT tests in an Android emulator through WebDriver
This succeeds on my machine:
`./mach test-wpt --product servodriver --binary etc/run_in_headless_android_emulator.py --binary-arg servo-x86 --binary-arg target/i686-linux-android/release/servo.apk /_mozilla/mozilla/DOMParser.html`
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21213)
<!-- Reviewable:end -->
```
0:27.48 pid:4157 Traceback (most recent call last):
0:27.48 pid:4157 File "/home/simon/servo1/etc/run_in_headless_android_emulator.py", line 212, in <module>
0:27.48 pid:4157 sys.exit(main(*sys.argv[1:]))
0:27.48 pid:4157 File "/home/simon/servo1/etc/run_in_headless_android_emulator.py", line 72, in main
0:27.48 pid:4157 forward_webdriver(adb, args)
0:27.48 pid:4157 File "/home/simon/servo1/etc/run_in_headless_android_emulator.py", line 163, in forward_webdriver
0:27.48 pid:4157 ports = [int(part) for part in split if part]
0:27.48 pid:4157 ValueError: invalid literal for int() with base 10: 'None'
```
```
Traceback (most recent call last):
File "/home/simon/servo1/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 90, in run
rv = commands[command](*args)
File "/home/simon/servo1/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py", line 110, in wait
self.executor.wait()
File "/home/simon/servo1/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py", line 209, in wait
self.protocol.base.wait()
AttributeError: 'ServoWebDriverProtocol' object has no attribute 'base'
```