Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(68)

Side by Side Diff: third_party/WebKit/LayoutTests/media/preload-conditions.html

Issue 2546993003: [MediaElement] Allow preloading for non-network scheme src (Closed)
Patch Set: nits Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <title>Test media preloading behaviour with different conditions.</title>
3 <script src="../resources/testharness.js"></script>
4 <script src="../resources/testharnessreport.js"></script>
5 <script src="media-file.js"></script>
6 <script>
7 var tests = [
8 {
9 name: 'regular conditions',
10 conditions: {
11 dataSaver: false,
12 cellular: false,
13 lowEndDevice: false,
14 },
15 expectations: {
16 default: 'auto',
17 allowed: [ 'none', 'metadata', 'auto' ]
18 }
19 },
20 {
21 name: 'cellular connections',
22 conditions: {
23 dataSaver: false,
24 cellular: true,
25 lowEndDevice: false,
26 },
27 expectations: {
28 default: 'metadata',
29 allowed: [ 'none', 'metadata' ]
30 }
31 },
32 {
33 name: 'cellular connections with Data Saver',
34 conditions: {
35 dataSaver: true,
36 cellular: true,
37 lowEndDevice: false,
38 },
39 expectations: {
40 default: 'none',
41 allowed: [ 'none' ]
42 }
43 },
44 {
45 name: 'Data Saver',
46 conditions: {
47 dataSaver: true,
48 cellular: false,
49 lowEndDevice: false,
50 },
51 expectations: {
52 default: 'none',
53 allowed: [ 'none' ]
54 }
55 },
56 {
57 name: 'low end device',
58 conditions: {
59 dataSaver: false,
60 cellular: false,
61 lowEndDevice: true,
62 },
63 expectations: {
64 default: 'none',
65 allowed: [ 'none' ]
66 }
67 },
68 ];
69
70 function checkPreloadAttribute(media, value, expected) {
71 // Use IDL attribute.
72 media.removeAttribute("preload");
73 media.preload = value;
74 assert_equals(media.getAttribute("preload"), value);
75 assert_equals(media.preload, expected);
76
77 // Use. content attribute.
78 media.removeAttribute("preload");
79 media.setAttribute("preload", value);
80 assert_equals(media.preload, expected);
81 assert_equals(media.getAttribute("preload"), value);
82 }
83
84 var asyncTests = tests.map(test => async_test('Testing autoplay behaviour for ' + test.name));
85
86 var currentTest = 0;
87 function runNextTest() {
88 asyncTests[currentTest].done();
89
90 ++currentTest;
91 if (currentTest == tests.length)
92 return;
93
94 asyncTests[currentTest].step_func(runTest(asyncTests[currentTest], tests[curre ntTest]));
95 }
96
97 function runTest(t, test) {
98 // Sanity checks for 'conditions'.
99 assert_true('dataSaver' in test.conditions);
100 assert_true('cellular' in test.conditions);
101 assert_true('lowEndDevice' in test.conditions);
102
103 internals.settings.setDataSaverEnabled(test.conditions.dataSaver);
104 if (test.conditions.cellular)
105 internals.setNetworkConnectionInfoOverride(true, 'cellular3g', 2.0);
106 else
107 internals.clearNetworkConnectionInfoOverride();
108 internals.settings.setForcePreloadNoneForMediaElements(test.conditions.lowEndD evice);
109
110 t.add_cleanup(() => {
111 internals.settings.setDataSaverEnabled(false);
112 internals.clearNetworkConnectionInfoOverride();
113 internals.settings.setForcePreloadNoneForMediaElements(false);
114 });
115
116 var media = document.createElement('video');
117
118 // Test IDL without any value.
119 assert_equals(media.preload, test.expectations.default);
120 assert_false(media.hasAttribute('preload'));
121
122 // Test allowed values.
123 [ 'none', 'metadata', 'auto' ].forEach(t.step_func(preload => {
124 var expected = test.expectations.allowed.includes(preload) ? preload : test. expectations.default;
125 checkPreloadAttribute(media, preload, expected);
126 }));
127
128 // Test not allowed values.
129 [ '', 'default', 'foo' ].forEach(preload => {
130 checkPreloadAttribute(media, preload, test.expectations.default);
131 });
132
133 // Test loading events.
134 var expectedLoading = 4;
135 [ '', 'none', 'metadata', 'auto' ].forEach(preload => {
136 var media = document.createElement('video');
137 media.preload = preload;
138 media.src = findMediaFile('video', 'content/test');
139 assert_equals(media.readyState, HTMLMediaElement.HAVE_NOTHING);
140
141 switch (media.preload) {
142 case 'none':
143 media.onloadedmetadata = t.unreached_func();
144 media.onprogress = t.unreached_func();
145
146 media.onsuspend = t.step_func(_ => {
147 assert_equals(media.readyState, HTMLMediaElement.HAVE_NOTHING);
148 --expectedLoading;
149 if (expectedLoading == 0)
150 runNextTest();
151 });
152 break;
153 case 'metadata':
154 media.onloadedmetadata = t.step_func(_ => {
155 assert_equals(media.readyState, HTMLMediaElement.HAVE_METADATA);
156 --expectedLoading;
157 if (expectedLoading == 0)
158 runNextTest();
159 });
160 break;
161 case 'auto':
162 if (media.readyState == HTMLMediaElement.HAVE_ENOUGH_DATA) {
163 --expectedLoading;
164 break;
165 }
166
167 media.oncanplaythrough = t.step_func(_ => {
168 assert_equals(media.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA);
169 --expectedLoading;
170 if (expectedLoading == 0)
171 runNextTest();
172 });
173 break;
174 }
175 });
176 }
177
178 asyncTests[currentTest].step_func(runTest(asyncTests[currentTest], tests[current Test]));
179
180 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698