Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <title>Test for backwards seeking behavior </title>
4 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
5 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
6 </head>
7 <body>
8 <p id="display"></p>
9 <div id="content" style="display: none">
10 <svg id="svg" xmlns="http://www.w3.org/2000/svg" />
11 </div>
12 <pre id="test">
13 <script class="testbody" type="text/javascript">
14 <![CDATA[
15 /** Test for backwards seeking behavior **/
17 var gSvg = document.getElementById("svg");
19 SimpleTest.waitForExplicitFinish();
21 function main()
22 {
23 // Pause our document, so that the setCurrentTime calls are the only
24 // thing affecting document time
25 gSvg.pauseAnimations();
27 // We define a series of scenarios, sample times, and expected return values
28 // from getStartTime.
29 //
30 // Each scenario is basically a variation on the following arrangement:
31 //
32 // <svg>
33 // <set ... dur="1s" begin="<A-BEGIN>"/>
34 // <set ... dur="1s" begin="<B-BEGIN>"/>
35 // </svg>
36 //
37 // Each test then consists of the following:
38 // animA: attributes to be applied to a
39 // animB: attributes to be applied to b
40 // times: a series of triples which consist of:
41 // <sample time, a's expected start time, b's expected start time>
42 // * The sample time is the time passed to setCurrentTime and so is
43 // in seconds.
44 // * The expected start times are compared with the return value of
45 // getStartTime. To check for an unresolved start time where
46 // getStartTime would normally throw an exception use
47 // 'unresolved'.
48 // * We also allow the special notation to indicate a call to
49 // beginElement
50 // <'beginElementAt', id of animation element, offset>
51 //
52 // In the diagrams below '^' means the time before the seek and '*' is the
53 // seek time.
54 var testCases = Array();
56 // 0: Simple case
57 //
58 // A: +-------
59 // B: +------- begin: a.begin
60 // * ^
61 testCases[0] = {
62 'animA': {'begin':'1s', 'id':'a'},
63 'animB': {'begin':'a.begin'},
64 'times': [ [0, 1, 1],
65 [1, 1, 1],
66 [2, 'unresolved', 'unresolved'],
67 [0, 1, 1],
68 [1.5, 1, 1],
69 [1, 1, 1],
70 [2, 'unresolved', 'unresolved'] ]
71 };
73 // 1: Restored times should be live
74 //
75 // When we restore times they should be live. So we have the following
76 // scenario.
77 //
78 // A: +-------
79 // B: +------- begin: a.begin
80 // * ^
81 //
82 // Then we call beginElement at an earlier time which should give us the
83 // following.
84 //
85 // A: +-------
86 // B: +-------
87 // * ^
88 //
89 // If the times are not live however we'll end up with this
90 //
91 // A: +-------
92 // B: +-+-------
93 // * ^
94 testCases[1] = {
95 'animA': {'begin':'1s', 'id':'a', 'restart':'whenNotActive'},
96 'animB': {'begin':'a.begin', 'restart':'always'},
97 'times': [ [0, 1, 1],
98 [2, 'unresolved', 'unresolved'],
99 [0.25, 1, 1],
100 ['beginElementAt', 'a', 0.25], // = start time of 0.5
101 [0.25, 0.5, 0.5],
102 [1, 0.5, 0.5],
103 [1.5, 'unresolved', 'unresolved'] ]
104 };
106 // 2: Multiple intervals A
107 //
108 // A: +- +-
109 // B: +- +- begin: a.begin+4s
110 // * ^
111 testCases[2] = {
112 'animA': {'begin':'1s; 3s', 'id':'a'},
113 'animB': {'begin':'a.begin+4s'},
114 'times': [ [0, 1, 5],
115 [3, 3, 5],
116 [6.5, 'unresolved', 7],
117 [4, 'unresolved', 5],
118 [6, 'unresolved', 7],
119 [2, 3, 5],
120 ['beginElementAt', 'a', 0],
121 [2, 2, 5],
122 [5, 'unresolved', 5],
123 [6, 'unresolved', 6],
124 [7, 'unresolved', 7],
125 [8, 'unresolved', 'unresolved'] ]
126 };
128 for (var i = 0; i < testCases.length; i++) {
129 gSvg.setCurrentTime(0);
130 var test = testCases[i];
132 // Create animation elements
133 var animA = createAnim(test.animA);
134 var animB = createAnim(test.animB);
136 // Run samples
137 for (var j = 0; j < test.times.length; j++) {
138 var times = test.times[j];
139 if (times[0] == 'beginElementAt') {
140 var anim = getElement(times[1]);
141 anim.beginElementAt(times[2]);
142 } else {
143 gSvg.setCurrentTime(times[0]);
144 checkStartTime(animA, times[1], times[0], i, 'a');
145 checkStartTime(animB, times[2], times[0], i, 'b');
146 }
147 }
149 // Tidy up
150 animA.parentNode.removeChild(animA);
151 animB.parentNode.removeChild(animB);
152 }
154 SimpleTest.finish();
155 }
157 function createAnim(attr)
158 {
159 const svgns = "http://www.w3.org/2000/svg";
160 var anim = document.createElementNS(svgns, 'set');
161 anim.setAttribute('attributeName','x');
162 anim.setAttribute('to','10');
163 anim.setAttribute('dur','1s');
164 for (name in attr) {
165 anim.setAttribute(name, attr[name]);
166 }
167 return gSvg.appendChild(anim);
168 }
170 function checkStartTime(anim, expectedStartTime, sampleTime, caseNum, id)
171 {
172 var startTime = 'unresolved';
173 try {
174 startTime = anim.getStartTime();
175 } catch (e) {
176 if (e.name != "InvalidStateError" ||
177 e.code != DOMException.INVALID_STATE_ERR)
178 throw e;
179 }
181 var msg = "Test case " + caseNum + ", t=" + sampleTime + " animation '" +
182 id + "': Unexpected getStartTime:";
183 is(startTime, expectedStartTime, msg);
184 }
186 window.addEventListener("load", main, false);
187 ]]>
188 </script>
189 </pre>
190 </body>
191 </html>