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

Side by Side Diff: third_party/WebKit/LayoutTests/platform/mac/svg/text/text-rescale-expected.txt

Issue 1890293002: Manual rebaseline for bug 602483, 602614, 602616, 602618 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mark virtual/spv2/svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml for NeedsManualRebaseline (it was skipped so no baseline generated) Created 4 years, 8 months 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
1 { 1 {
2 "bounds": [800, 600], 2 "bounds": [800, 600],
3 "children": [ 3 "children": [
4 { 4 {
5 "bounds": [800, 600], 5 "bounds": [800, 600],
6 "contentsOpaque": true, 6 "contentsOpaque": true,
7 "drawsContent": true, 7 "drawsContent": true,
8 "paintInvalidations": [ 8 "paintInvalidations": [
9 { 9 {
10 "object": "InlineFlowBox", 10 "object": "LayoutSVGRoot (positioned) svg",
11 "rect": [0, 0, 0, 0], 11 "rect": [0, 13, 402, 187],
12 "reason": "bounds change"
13 },
14 {
15 "object": "LayoutSVGRoot (positioned) svg",
16 "rect": [0, 0, 402, 163],
17 "reason": "bounds change"
18 },
19 {
20 "object": "LayoutSVGContainer g id='text2g'",
21 "rect": [0, 63, 402, 100],
12 "reason": "full" 22 "reason": "full"
13 }, 23 },
14 { 24 {
15 "object": "InlineFlowBox", 25 "object": "LayoutSVGContainer g id='text1g'",
16 "rect": [0, 0, 0, 0], 26 "rect": [0, 13, 402, 100],
17 "reason": "full" 27 "reason": "full"
18 }, 28 },
19 { 29 {
20 "object": "InlineFlowBox", 30 "object": "LayoutSVGContainer g id='text3g'",
21 "rect": [0, 0, 0, 0], 31 "rect": [0, 113, 402, 87],
22 "reason": "full" 32 "reason": "full"
23 }, 33 },
24 { 34 {
25 "object": "InlineFlowBox", 35 "object": "LayoutSVGInlineText #text",
26 "rect": [0, 0, 0, 0], 36 "rect": [0, 114, 194, 46],
27 "reason": "bounds change" 37 "reason": "bounds change"
28 }, 38 },
29 { 39 {
30 "object": "InlineFlowBox", 40 "object": "LayoutSVGInlineText #text",
31 "rect": [0, 0, 0, 0], 41 "rect": [0, 114, 194, 46],
32 "reason": "bounds change" 42 "reason": "bounds change"
33 }, 43 },
34 { 44 {
35 "object": "InlineTextBox 'PASS '", 45 "object": "LayoutSVGInlineText #text",
36 "rect": [0, 0, 0, 0], 46 "rect": [0, 114, 194, 46],
37 "reason": "full"
38 },
39 {
40 "object": "InlineTextBox 'PASS '",
41 "rect": [0, 0, 0, 0],
42 "reason": "full"
43 },
44 {
45 "object": "InlineTextBox 'PASS '",
46 "rect": [0, 0, 0, 0],
47 "reason": "full"
48 },
49 {
50 "object": "InlineTextBox 'PASS '",
51 "rect": [0, 0, 0, 0],
52 "reason": "bounds change" 47 "reason": "bounds change"
53 }, 48 },
54 { 49 {
55 "object": "InlineTextBox 'PASS '", 50 "object": "LayoutSVGTSpan tspan",
56 "rect": [0, 0, 0, 0], 51 "rect": [0, 114, 194, 46],
57 "reason": "bounds change" 52 "reason": "bounds change"
58 }, 53 },
59 { 54 {
60 "object": "InlineTextBox 'PASS'", 55 "object": "LayoutSVGText text",
61 "rect": [0, 0, 0, 0], 56 "rect": [0, 114, 194, 46],
62 "reason": "full" 57 "reason": "forced by layout"
63 }, 58 },
64 { 59 {
65 "object": "InlineTextBox 'PASS'", 60 "object": "LayoutSVGText text",
66 "rect": [0, 0, 0, 0], 61 "rect": [0, 64, 194, 46],
67 "reason": "full" 62 "reason": "forced by layout"
68 }, 63 },
69 { 64 {
70 "object": "InlineTextBox 'PASS'", 65 "object": "LayoutSVGInlineText #text",
71 "rect": [0, 0, 0, 0], 66 "rect": [0, 14, 194, 46],
72 "reason": "full"
73 },
74 {
75 "object": "InlineTextBox 'PASS'",
76 "rect": [0, 0, 0, 0],
77 "reason": "full"
78 },
79 {
80 "object": "InlineTextBox 'PASS'",
81 "rect": [0, 0, 0, 0],
82 "reason": "full"
83 },
84 {
85 "object": "InlineTextBox 'PASS'",
86 "rect": [0, 0, 0, 0],
87 "reason": "full"
88 },
89 {
90 "object": "InlineTextBox 'PASS'",
91 "rect": [0, 0, 0, 0],
92 "reason": "bounds change" 67 "reason": "bounds change"
93 }, 68 },
94 { 69 {
95 "object": "InlineTextBox 'PASS'", 70 "object": "LayoutSVGInlineText #text",
96 "rect": [0, 0, 0, 0], 71 "rect": [0, 14, 194, 46],
72 "reason": "bounds change"
73 },
74 {
75 "object": "LayoutSVGInlineText #text",
76 "rect": [0, 14, 194, 46],
77 "reason": "bounds change"
78 },
79 {
80 "object": "LayoutSVGTSpan tspan",
81 "rect": [0, 14, 194, 46],
82 "reason": "bounds change"
83 },
84 {
85 "object": "LayoutSVGText text",
86 "rect": [0, 14, 194, 46],
87 "reason": "forced by layout"
88 },
89 {
90 "object": "LayoutSVGForeignObject foreignObject",
91 "rect": [210, 13, 100, 100],
97 "reason": "location change" 92 "reason": "location change"
98 }, 93 },
99 { 94 {
100 "object": "InlineTextBox 'PASS'", 95 "object": "LayoutSVGForeignObject foreignObject",
101 "rect": [0, 0, 0, 0], 96 "rect": [210, 113, 100, 87],
102 "reason": "location change"
103 },
104 {
105 "object": "InlineTextBox 'PASS'",
106 "rect": [0, 0, 0, 0],
107 "reason": "bounds change"
108 },
109 {
110 "object": "InlineTextBox 'PASS'",
111 "rect": [0, 0, 0, 0],
112 "reason": "location change"
113 },
114 {
115 "object": "InlineTextBox 'PASS'",
116 "rect": [0, 0, 0, 0],
117 "reason": "location change" 97 "reason": "location change"
118 }, 98 },
119 { 99 {
120 "object": "LayoutBlockFlow P", 100 "object": "LayoutBlockFlow P",
121 "rect": [0, 0, 1, 1], 101 "rect": [210, 113, 100, 46],
122 "reason": "location change" 102 "reason": "location change"
123 }, 103 },
124 { 104 {
125 "object": "LayoutBlockFlow P", 105 "object": "LayoutBlockFlow P",
126 "rect": [210, 13, 100, 46], 106 "rect": [210, 13, 100, 46],
127 "reason": "location change" 107 "reason": "location change"
128 }, 108 },
129 { 109 {
110 "object": "LayoutSVGInlineText #text",
111 "rect": [310, 114, 92, 46],
112 "reason": "location change"
113 },
114 {
115 "object": "LayoutSVGText text",
116 "rect": [310, 114, 92, 46],
117 "reason": "location change"
118 },
119 {
120 "object": "LayoutSVGViewportContainer svg",
121 "rect": [310, 114, 92, 46],
122 "reason": "location change"
123 },
124 {
125 "object": "LayoutSVGText text",
126 "rect": [310, 64, 92, 46],
127 "reason": "forced by layout"
128 },
129 {
130 "object": "LayoutSVGInlineText #text",
131 "rect": [310, 14, 92, 46],
132 "reason": "location change"
133 },
134 {
135 "object": "LayoutSVGText text",
136 "rect": [310, 14, 92, 46],
137 "reason": "location change"
138 },
139 {
140 "object": "LayoutSVGViewportContainer svg",
141 "rect": [310, 14, 92, 46],
142 "reason": "location change"
143 },
144 {
145 "object": "LayoutText #text",
146 "rect": [210, 113, 92, 46],
147 "reason": "location change"
148 },
149 {
150 "object": "LayoutText #text",
151 "rect": [210, 13, 92, 46],
152 "reason": "location change"
153 },
154 {
155 "object": "LayoutSVGContainer g id='text3g'",
156 "rect": [0, 3, 13, 4],
157 "reason": "full"
158 },
159 {
160 "object": "LayoutSVGInlineText #text",
161 "rect": [0, 3, 6, 2],
162 "reason": "bounds change"
163 },
164 {
165 "object": "LayoutSVGInlineText #text",
166 "rect": [0, 3, 6, 2],
167 "reason": "bounds change"
168 },
169 {
170 "object": "LayoutSVGInlineText #text",
171 "rect": [0, 3, 6, 2],
172 "reason": "bounds change"
173 },
174 {
175 "object": "LayoutSVGTSpan tspan",
176 "rect": [0, 3, 6, 2],
177 "reason": "bounds change"
178 },
179 {
180 "object": "LayoutSVGText text",
181 "rect": [0, 3, 6, 2],
182 "reason": "forced by layout"
183 },
184 {
185 "object": "LayoutSVGForeignObject foreignObject",
186 "rect": [6, 3, 4, 4],
187 "reason": "location change"
188 },
189 {
190 "object": "LayoutSVGInlineText #text",
191 "rect": [9, 3, 4, 2],
192 "reason": "location change"
193 },
194 {
195 "object": "LayoutSVGText text",
196 "rect": [9, 3, 4, 2],
197 "reason": "location change"
198 },
199 {
200 "object": "LayoutSVGViewportContainer svg",
201 "rect": [9, 3, 4, 2],
202 "reason": "location change"
203 },
204 {
130 "object": "LayoutBlockFlow P", 205 "object": "LayoutBlockFlow P",
131 "rect": [6, 3, 4, 2], 206 "rect": [6, 3, 4, 2],
132 "reason": "location change" 207 "reason": "location change"
133 }, 208 },
134 { 209 {
135 "object": "LayoutBlockFlow P",
136 "rect": [210, 113, 100, 46],
137 "reason": "location change"
138 },
139 {
140 "object": "LayoutSVGContainer g id='text1g'",
141 "rect": [0, 0, 1, 1],
142 "reason": "full"
143 },
144 {
145 "object": "LayoutSVGContainer g id='text1g'",
146 "rect": [0, 13, 402, 100],
147 "reason": "full"
148 },
149 {
150 "object": "LayoutSVGContainer g id='text2g'",
151 "rect": [0, 63, 402, 100],
152 "reason": "full"
153 },
154 {
155 "object": "LayoutSVGContainer g id='text3g'",
156 "rect": [0, 3, 13, 4],
157 "reason": "full"
158 },
159 {
160 "object": "LayoutSVGContainer g id='text3g'",
161 "rect": [0, 113, 402, 87],
162 "reason": "full"
163 },
164 {
165 "object": "LayoutSVGForeignObject foreignObject",
166 "rect": [0, 0, 1, 1],
167 "reason": "location change"
168 },
169 {
170 "object": "LayoutSVGForeignObject foreignObject",
171 "rect": [210, 13, 100, 100],
172 "reason": "location change"
173 },
174 {
175 "object": "LayoutSVGForeignObject foreignObject",
176 "rect": [6, 3, 4, 4],
177 "reason": "location change"
178 },
179 {
180 "object": "LayoutSVGForeignObject foreignObject",
181 "rect": [210, 113, 100, 87],
182 "reason": "location change"
183 },
184 {
185 "object": "LayoutSVGInlineText #text",
186 "rect": [0, 0, 1, 1],
187 "reason": "bounds change"
188 },
189 {
190 "object": "LayoutSVGInlineText #text",
191 "rect": [0, 14, 194, 46],
192 "reason": "bounds change"
193 },
194 {
195 "object": "LayoutSVGInlineText #text",
196 "rect": [0, 0, 1, 1],
197 "reason": "bounds change"
198 },
199 {
200 "object": "LayoutSVGInlineText #text",
201 "rect": [0, 14, 194, 46],
202 "reason": "bounds change"
203 },
204 {
205 "object": "LayoutSVGInlineText #text",
206 "rect": [0, 0, 1, 1],
207 "reason": "bounds change"
208 },
209 {
210 "object": "LayoutSVGInlineText #text",
211 "rect": [0, 14, 194, 46],
212 "reason": "bounds change"
213 },
214 {
215 "object": "LayoutSVGInlineText #text",
216 "rect": [0, 0, 1, 1],
217 "reason": "location change"
218 },
219 {
220 "object": "LayoutSVGInlineText #text",
221 "rect": [310, 14, 92, 46],
222 "reason": "location change"
223 },
224 {
225 "object": "LayoutSVGInlineText #text",
226 "rect": [0, 3, 6, 2],
227 "reason": "bounds change"
228 },
229 {
230 "object": "LayoutSVGInlineText #text",
231 "rect": [0, 114, 194, 46],
232 "reason": "bounds change"
233 },
234 {
235 "object": "LayoutSVGInlineText #text",
236 "rect": [0, 3, 6, 2],
237 "reason": "bounds change"
238 },
239 {
240 "object": "LayoutSVGInlineText #text",
241 "rect": [0, 114, 194, 46],
242 "reason": "bounds change"
243 },
244 {
245 "object": "LayoutSVGInlineText #text",
246 "rect": [0, 3, 6, 2],
247 "reason": "bounds change"
248 },
249 {
250 "object": "LayoutSVGInlineText #text",
251 "rect": [0, 114, 194, 46],
252 "reason": "bounds change"
253 },
254 {
255 "object": "LayoutSVGInlineText #text",
256 "rect": [9, 3, 4, 2],
257 "reason": "location change"
258 },
259 {
260 "object": "LayoutSVGInlineText #text",
261 "rect": [310, 114, 92, 46],
262 "reason": "location change"
263 },
264 {
265 "object": "LayoutSVGRoot (positioned) svg",
266 "rect": [0, 0, 402, 163],
267 "reason": "bounds change"
268 },
269 {
270 "object": "LayoutSVGRoot (positioned) svg",
271 "rect": [0, 13, 402, 187],
272 "reason": "bounds change"
273 },
274 {
275 "object": "LayoutSVGTSpan tspan",
276 "rect": [0, 0, 1, 1],
277 "reason": "bounds change"
278 },
279 {
280 "object": "LayoutSVGTSpan tspan",
281 "rect": [0, 14, 194, 46],
282 "reason": "bounds change"
283 },
284 {
285 "object": "LayoutSVGTSpan tspan",
286 "rect": [0, 3, 6, 2],
287 "reason": "bounds change"
288 },
289 {
290 "object": "LayoutSVGTSpan tspan",
291 "rect": [0, 114, 194, 46],
292 "reason": "bounds change"
293 },
294 {
295 "object": "LayoutSVGText text",
296 "rect": [0, 0, 1, 1],
297 "reason": "forced by layout"
298 },
299 {
300 "object": "LayoutSVGText text",
301 "rect": [0, 14, 194, 46],
302 "reason": "forced by layout"
303 },
304 {
305 "object": "LayoutSVGText text",
306 "rect": [0, 0, 1, 1],
307 "reason": "location change"
308 },
309 {
310 "object": "LayoutSVGText text",
311 "rect": [310, 14, 92, 46],
312 "reason": "location change"
313 },
314 {
315 "object": "LayoutSVGText text",
316 "rect": [0, 64, 194, 46],
317 "reason": "forced by layout"
318 },
319 {
320 "object": "LayoutSVGText text",
321 "rect": [310, 64, 92, 46],
322 "reason": "forced by layout"
323 },
324 {
325 "object": "LayoutSVGText text",
326 "rect": [0, 3, 6, 2],
327 "reason": "forced by layout"
328 },
329 {
330 "object": "LayoutSVGText text",
331 "rect": [0, 114, 194, 46],
332 "reason": "forced by layout"
333 },
334 {
335 "object": "LayoutSVGText text",
336 "rect": [9, 3, 4, 2],
337 "reason": "location change"
338 },
339 {
340 "object": "LayoutSVGText text",
341 "rect": [310, 114, 92, 46],
342 "reason": "location change"
343 },
344 {
345 "object": "LayoutSVGViewportContainer svg",
346 "rect": [0, 0, 1, 1],
347 "reason": "location change"
348 },
349 {
350 "object": "LayoutSVGViewportContainer svg",
351 "rect": [310, 14, 92, 46],
352 "reason": "location change"
353 },
354 {
355 "object": "LayoutSVGViewportContainer svg",
356 "rect": [9, 3, 4, 2],
357 "reason": "location change"
358 },
359 {
360 "object": "LayoutSVGViewportContainer svg",
361 "rect": [310, 114, 92, 46],
362 "reason": "location change"
363 },
364 {
365 "object": "LayoutText #text",
366 "rect": [0, 0, 1, 1],
367 "reason": "location change"
368 },
369 {
370 "object": "LayoutText #text",
371 "rect": [210, 13, 92, 46],
372 "reason": "location change"
373 },
374 {
375 "object": "LayoutText #text", 210 "object": "LayoutText #text",
376 "rect": [6, 3, 4, 2], 211 "rect": [6, 3, 4, 2],
377 "reason": "location change" 212 "reason": "location change"
378 }, 213 },
379 { 214 {
215 "object": "LayoutBlockFlow P",
216 "rect": [0, 0, 1, 1],
217 "reason": "location change"
218 },
219 {
220 "object": "LayoutSVGContainer g id='text1g'",
221 "rect": [0, 0, 1, 1],
222 "reason": "full"
223 },
224 {
225 "object": "LayoutSVGForeignObject foreignObject",
226 "rect": [0, 0, 1, 1],
227 "reason": "location change"
228 },
229 {
230 "object": "LayoutSVGInlineText #text",
231 "rect": [0, 0, 1, 1],
232 "reason": "bounds change"
233 },
234 {
235 "object": "LayoutSVGInlineText #text",
236 "rect": [0, 0, 1, 1],
237 "reason": "bounds change"
238 },
239 {
240 "object": "LayoutSVGInlineText #text",
241 "rect": [0, 0, 1, 1],
242 "reason": "bounds change"
243 },
244 {
245 "object": "LayoutSVGInlineText #text",
246 "rect": [0, 0, 1, 1],
247 "reason": "location change"
248 },
249 {
250 "object": "LayoutSVGTSpan tspan",
251 "rect": [0, 0, 1, 1],
252 "reason": "bounds change"
253 },
254 {
255 "object": "LayoutSVGText text",
256 "rect": [0, 0, 1, 1],
257 "reason": "forced by layout"
258 },
259 {
260 "object": "LayoutSVGText text",
261 "rect": [0, 0, 1, 1],
262 "reason": "location change"
263 },
264 {
265 "object": "LayoutSVGViewportContainer svg",
266 "rect": [0, 0, 1, 1],
267 "reason": "location change"
268 },
269 {
380 "object": "LayoutText #text", 270 "object": "LayoutText #text",
381 "rect": [210, 113, 92, 46], 271 "rect": [0, 0, 1, 1],
382 "reason": "location change" 272 "reason": "location change"
383 }, 273 },
384 { 274 {
385 "object": "RootInlineBox", 275 "object": "InlineFlowBox",
386 "rect": [0, 0, 0, 0], 276 "reason": "full"
387 "reason": "full" 277 },
388 }, 278 {
389 { 279 "object": "InlineFlowBox",
390 "object": "RootInlineBox", 280 "reason": "full"
391 "rect": [0, 0, 0, 0], 281 },
392 "reason": "full" 282 {
393 }, 283 "object": "InlineFlowBox",
394 { 284 "reason": "full"
395 "object": "RootInlineBox", 285 },
396 "rect": [0, 0, 0, 0], 286 {
397 "reason": "full" 287 "object": "InlineFlowBox",
398 }, 288 "reason": "bounds change"
399 { 289 },
400 "object": "RootInlineBox", 290 {
401 "rect": [0, 0, 0, 0], 291 "object": "InlineFlowBox",
402 "reason": "full" 292 "reason": "bounds change"
403 }, 293 },
404 { 294 {
405 "object": "RootInlineBox", 295 "object": "InlineTextBox 'PASS '",
406 "rect": [0, 0, 0, 0], 296 "reason": "full"
407 "reason": "full" 297 },
408 }, 298 {
409 { 299 "object": "InlineTextBox 'PASS '",
410 "object": "RootInlineBox", 300 "reason": "full"
411 "rect": [0, 0, 0, 0], 301 },
412 "reason": "full" 302 {
413 }, 303 "object": "InlineTextBox 'PASS '",
414 { 304 "reason": "full"
415 "object": "RootInlineBox", 305 },
416 "rect": [0, 0, 0, 0], 306 {
417 "reason": "full" 307 "object": "InlineTextBox 'PASS '",
418 }, 308 "reason": "bounds change"
419 { 309 },
420 "object": "RootInlineBox", 310 {
421 "rect": [0, 0, 0, 0], 311 "object": "InlineTextBox 'PASS '",
422 "reason": "full" 312 "reason": "bounds change"
423 }, 313 },
424 { 314 {
425 "object": "RootInlineBox", 315 "object": "InlineTextBox 'PASS'",
426 "rect": [0, 0, 0, 0], 316 "reason": "full"
427 "reason": "full" 317 },
428 }, 318 {
429 { 319 "object": "InlineTextBox 'PASS'",
430 "object": "RootInlineBox", 320 "reason": "full"
431 "rect": [0, 0, 0, 0], 321 },
432 "reason": "full" 322 {
433 }, 323 "object": "InlineTextBox 'PASS'",
434 { 324 "reason": "full"
435 "object": "RootInlineBox", 325 },
436 "rect": [0, 0, 0, 0], 326 {
437 "reason": "full" 327 "object": "InlineTextBox 'PASS'",
438 }, 328 "reason": "full"
439 { 329 },
440 "object": "RootInlineBox", 330 {
441 "rect": [0, 0, 0, 0], 331 "object": "InlineTextBox 'PASS'",
442 "reason": "full" 332 "reason": "full"
443 }, 333 },
444 { 334 {
445 "object": "RootInlineBox", 335 "object": "InlineTextBox 'PASS'",
446 "rect": [0, 0, 0, 0], 336 "reason": "full"
447 "reason": "full" 337 },
448 }, 338 {
449 { 339 "object": "InlineTextBox 'PASS'",
450 "object": "RootInlineBox", 340 "reason": "bounds change"
451 "rect": [0, 0, 0, 0], 341 },
342 {
343 "object": "InlineTextBox 'PASS'",
344 "reason": "bounds change"
345 },
346 {
347 "object": "InlineTextBox 'PASS'",
348 "reason": "location change"
349 },
350 {
351 "object": "InlineTextBox 'PASS'",
352 "reason": "location change"
353 },
354 {
355 "object": "InlineTextBox 'PASS'",
356 "reason": "location change"
357 },
358 {
359 "object": "InlineTextBox 'PASS'",
360 "reason": "location change"
361 },
362 {
363 "object": "RootInlineBox",
364 "reason": "full"
365 },
366 {
367 "object": "RootInlineBox",
368 "reason": "full"
369 },
370 {
371 "object": "RootInlineBox",
372 "reason": "full"
373 },
374 {
375 "object": "RootInlineBox",
376 "reason": "full"
377 },
378 {
379 "object": "RootInlineBox",
380 "reason": "full"
381 },
382 {
383 "object": "RootInlineBox",
384 "reason": "full"
385 },
386 {
387 "object": "RootInlineBox",
388 "reason": "full"
389 },
390 {
391 "object": "RootInlineBox",
392 "reason": "full"
393 },
394 {
395 "object": "RootInlineBox",
396 "reason": "full"
397 },
398 {
399 "object": "RootInlineBox",
400 "reason": "full"
401 },
402 {
403 "object": "RootInlineBox",
404 "reason": "full"
405 },
406 {
407 "object": "RootInlineBox",
408 "reason": "full"
409 },
410 {
411 "object": "RootInlineBox",
412 "reason": "full"
413 },
414 {
415 "object": "RootInlineBox",
452 "reason": "full" 416 "reason": "full"
453 } 417 }
454 ] 418 ]
455 } 419 }
456 ] 420 ]
457 } 421 }
458 422
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698