Implement [video-,]dynamic-range media queries

This CL implements the dynamic-range and video-dynamic-range media
queries. The design doc for this implementation may be found here:
https://docs.google.com/document/d/1pHVIEdHV0tN9Je5pp3tEtK77UMbbcB7ZYu2rDJaQA0Y/edit?usp=sharing

Change-Id: I5cb0aae6a3faf7b1e8c9c6ab2aac77ce54cb02cf
Bug: 1224711
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2729607
Commit-Queue: Will Cassella <cassew@google.com>
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#903610}
diff --git a/css/mediaqueries/dynamic-range.html b/css/mediaqueries/dynamic-range.html
new file mode 100644
index 0000000..261fccf
--- /dev/null
+++ b/css/mediaqueries/dynamic-range.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<link rel="help" title="6.5 dynamic-range" href="https://www.w3.org/TR/mediaqueries-5/#dynamic-range">
+<script type="text/javascript" src="/resources/testharness.js"></script>
+<script type="text/javascript" src="/resources/testharnessreport.js"></script>
+<script type="text/javascript" src="resources/matchmedia-utils.js"></script>
+
+<script>
+query_should_be_css_parseable("(dynamic-range: standard)");
+query_should_be_css_parseable("(dynamic-range: high)");
+query_should_be_css_parseable("(video-dynamic-range: standard)");
+query_should_be_css_parseable("(video-dynamic-range: high)");
+
+query_should_not_be_css_parseable("(dynamic-range)");
+query_should_not_be_css_parseable("(dynamic-range: 0)");
+query_should_not_be_css_parseable("(dynamic-range: 10px)");
+query_should_not_be_css_parseable("(dynamic-range: invalid)");
+query_should_not_be_css_parseable("(video-dynamic-range)");
+query_should_not_be_css_parseable("(video-dynamic-range: 0)");
+query_should_not_be_css_parseable("(video-dynamic-range: 10px)");
+query_should_not_be_css_parseable("(video-dynamic-range: invalid)");
+
+query_should_be_js_parseable("(dynamic-range: standard)");
+query_should_be_js_parseable("(dynamic-range: high)");
+query_should_be_js_parseable("(video-dynamic-range: standard)");
+query_should_be_js_parseable("(video-dynamic-range: high)");
+
+query_should_not_be_js_parseable("(dynamic-range)");
+query_should_not_be_js_parseable("(dynamic-range: 0)");
+query_should_not_be_js_parseable("(dynamic-range: 10px)");
+query_should_not_be_js_parseable("(dynamic-range: invalid)");
+query_should_not_be_js_parseable("(video-dynamic-range)");
+query_should_not_be_js_parseable("(video-dynamic-range: 0)");
+query_should_not_be_js_parseable("(video-dynamic-range: 10px)");
+query_should_not_be_js_parseable("(video-dynamic-range: invalid)");
+
+test(() => {
+  let match_standard = window.matchMedia("(dynamic-range: standard)");
+  let match_high = window.matchMedia("(dynamic-range: high)");
+  assert_not_equals(match_standard.matches, match_high.matches);
+}, "Check that dynamic-range is 'standard' or 'high', but not both");
+
+test(() => {
+  let match_standard = window.matchMedia("(video-dynamic-range: standard)");
+  let match_high = window.matchMedia("(video-dynamic-range: high)");
+  assert_not_equals(match_standard.matches, match_high.matches);
+}, "Check that video-dynamic-range is 'standard' or 'high', but not both");
+
+test(() => {
+  let match_invalid = window.matchMedia("(video-dynamic-range: invalid)");
+  assert_false(match_invalid.matches);
+}, "Check that video-dynamic-range is not 'invalid'");
+</script>