aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-02-22 17:50:48 -0800
committerGitHub <noreply@github.com>2017-02-22 17:50:48 -0800
commit854d720b21dda68034233a25385c4f2564a4a2d5 (patch)
tree447ba0490ee2f42aa0d9590908fe741f1c6d2ae6
parentaf292c4a7180a35c632b16a4fb0aff9ae2933f77 (diff)
parent5af2603ec4f59f2bbabc8aa9d73deed29acf9492 (diff)
downloadservo-854d720b21dda68034233a25385c4f2564a4a2d5.tar.gz
servo-854d720b21dda68034233a25385c4f2564a4a2d5.zip
Auto merge of #14962 - jdm:image_script_load, r=Ms2ger,glennw,emilio
Remove network requests from image cache thread The design of initiating network requests from the image cache thread was simple, but it makes it difficult to implement image loading that conforms to the HTML specification. These changes make the implementation of HTMLImageElement responsible for network requests for `<img>` elements, and CSS-based images (background-image, bullets, etc.) are requested by the script thread to ensure that the layout thread does not attempt to retain unsafe pointers to DOM nodes during asynchronous operations. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #7708 - [X] There are tests for these changes <!-- 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/14962) <!-- Reviewable:end -->
-rw-r--r--components/layout/construct.rs3
-rw-r--r--components/layout/context.rs116
-rw-r--r--components/layout/display_list_builder.rs3
-rw-r--r--components/layout/fragment.rs9
-rw-r--r--components/layout/query.rs11
-rw-r--r--components/layout_thread/lib.rs79
-rw-r--r--components/net/image_cache_thread.rs399
-rw-r--r--components/net_traits/image_cache_thread.rs126
-rw-r--r--components/net_traits/lib.rs4
-rw-r--r--components/script/document_loader.rs7
-rw-r--r--components/script/dom/bindings/trace.rs4
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs4
-rw-r--r--components/script/dom/htmlcanvaselement.rs17
-rw-r--r--components/script/dom/htmlimageelement.rs235
-rw-r--r--components/script/dom/window.rs79
-rw-r--r--components/script/layout_image.rs81
-rw-r--r--components/script/lib.rs1
-rw-r--r--components/script/script_thread.rs26
-rw-r--r--components/script_layout_interface/lib.rs18
-rw-r--r--components/script_layout_interface/rpc.rs4
-rw-r--r--components/script_plugins/unrooted_must_root.rs1
-rw-r--r--components/servo/lib.rs3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini3
-rw-r--r--tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini3
-rw-r--r--tests/wpt/metadata/MANIFEST.json26
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini3
-rw-r--r--tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini1
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini1
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini1
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini4
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini1
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini71
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini14
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini189
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini189
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini189
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini189
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini3
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini108
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini8
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini1
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini6
-rw-r--r--tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini4
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json327
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html29
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html33
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html19
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html19
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html32
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html39
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html20
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html19
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html30
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html23
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html30
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html23
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html29
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html30
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html38
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html25
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html35
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html31
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html35
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html38
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html19
-rw-r--r--tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html16
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html2
-rw-r--r--tests/wpt/web-platform-tests/webgl/conformance-1.0.3/resources/js-test-pre.js8
-rw-r--r--tests/wpt/web-platform-tests/webgl/tools/js-test-pre.patch15
214 files changed, 2272 insertions, 1622 deletions
diff --git a/components/layout/construct.rs b/components/layout/construct.rs
index bbfe17d22b7..afdf903c500 100644
--- a/components/layout/construct.rs
+++ b/components/layout/construct.rs
@@ -351,11 +351,13 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode>
}
Some(LayoutNodeType::Element(LayoutElementType::HTMLImageElement)) => {
let image_info = box ImageFragmentInfo::new(node.image_url(),
+ node,
&self.layout_context);
SpecificFragmentInfo::Image(image_info)
}
Some(LayoutNodeType::Element(LayoutElementType::HTMLObjectElement)) => {
let image_info = box ImageFragmentInfo::new(node.object_data(),
+ node,
&self.layout_context);
SpecificFragmentInfo::Image(image_info)
}
@@ -1219,6 +1221,7 @@ impl<'a, ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode>
let marker_fragments = match node.style(self.style_context()).get_list().list_style_image {
Either::First(ref url_value) => {
let image_info = box ImageFragmentInfo::new(url_value.url().map(|u| u.clone()),
+ node,
&self.layout_context);
vec![Fragment::new(node, SpecificFragmentInfo::Image(image_info), self.layout_context)]
}
diff --git a/components/layout/context.rs b/components/layout/context.rs
index e67e7da6fb1..1dff9f6ea5e 100644
--- a/components/layout/context.rs
+++ b/components/layout/context.rs
@@ -5,22 +5,22 @@
//! Data needed by the layout thread.
use fnv::FnvHasher;
-use gfx::display_list::WebRenderImageInfo;
+use gfx::display_list::{WebRenderImageInfo, OpaqueNode};
use gfx::font_cache_thread::FontCacheThread;
use gfx::font_context::FontContext;
use heapsize::HeapSizeOf;
-use ipc_channel::ipc;
-use net_traits::image::base::Image;
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread, ImageResponse, ImageState};
+use net_traits::image_cache_thread::{ImageCacheThread, ImageState, CanRequestImages};
use net_traits::image_cache_thread::{ImageOrMetadataAvailable, UsePlaceholder};
+use opaque_node::OpaqueNodeMethods;
use parking_lot::RwLock;
-use servo_config::opts;
+use script_layout_interface::{PendingImage, PendingImageState};
use servo_url::ServoUrl;
use std::borrow::{Borrow, BorrowMut};
use std::cell::{RefCell, RefMut};
use std::collections::HashMap;
use std::hash::BuildHasherDefault;
use std::sync::{Arc, Mutex};
+use std::thread;
use style::context::{SharedStyleContext, ThreadLocalStyleContext};
use style::dom::TElement;
@@ -82,9 +82,6 @@ pub struct LayoutContext {
/// The shared image cache thread.
pub image_cache_thread: Mutex<ImageCacheThread>,
- /// A channel for the image cache to send responses to.
- pub image_cache_sender: Mutex<ImageCacheChan>,
-
/// Interface to the font cache thread.
pub font_cache_thread: Mutex<FontCacheThread>,
@@ -92,6 +89,20 @@ pub struct LayoutContext {
pub webrender_image_cache: Arc<RwLock<HashMap<(ServoUrl, UsePlaceholder),
WebRenderImageInfo,
BuildHasherDefault<FnvHasher>>>>,
+
+ /// A list of in-progress image loads to be shared with the script thread.
+ /// A None value means that this layout was not initiated by the script thread.
+ pub pending_images: Option<Mutex<Vec<PendingImage>>>
+}
+
+impl Drop for LayoutContext {
+ fn drop(&mut self) {
+ if !thread::panicking() {
+ if let Some(ref pending_images) = self.pending_images {
+ assert!(pending_images.lock().unwrap().is_empty());
+ }
+ }
+ }
}
impl LayoutContext {
@@ -100,71 +111,60 @@ impl LayoutContext {
&self.style_context
}
- fn get_or_request_image_synchronously(&self, url: ServoUrl, use_placeholder: UsePlaceholder)
- -> Option<Arc<Image>> {
- debug_assert!(opts::get().output_file.is_some() || opts::get().exit_after_load);
-
- // See if the image is already available
- let result = self.image_cache_thread.lock().unwrap()
- .find_image(url.clone(), use_placeholder);
-
- match result {
- Ok(image) => return Some(image),
- Err(ImageState::LoadError) => {
- // Image failed to load, so just return nothing
- return None
- }
- Err(_) => {}
- }
-
- // If we are emitting an output file, then we need to block on
- // image load or we risk emitting an output file missing the image.
- let (sync_tx, sync_rx) = ipc::channel().unwrap();
- self.image_cache_thread.lock().unwrap().request_image(url, ImageCacheChan(sync_tx), None);
- loop {
- match sync_rx.recv() {
- Err(_) => return None,
- Ok(response) => {
- match response.image_response {
- ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => {
- return Some(image)
- }
- ImageResponse::None | ImageResponse::MetadataLoaded(_) => {}
- }
- }
- }
- }
- }
+ pub fn get_or_request_image_or_meta(&self,
+ node: OpaqueNode,
+ url: ServoUrl,
+ use_placeholder: UsePlaceholder)
+ -> Option<ImageOrMetadataAvailable> {
+ //XXXjdm For cases where we do not request an image, we still need to
+ // ensure the node gets another script-initiated reflow or it
+ // won't be requested at all.
+ let can_request = if self.pending_images.is_some() {
+ CanRequestImages::Yes
+ } else {
+ CanRequestImages::No
+ };
- pub fn get_or_request_image_or_meta(&self, url: ServoUrl, use_placeholder: UsePlaceholder)
- -> Option<ImageOrMetadataAvailable> {
- // If we are emitting an output file, load the image synchronously.
- if opts::get().output_file.is_some() || opts::get().exit_after_load {
- return self.get_or_request_image_synchronously(url, use_placeholder)
- .map(|img| ImageOrMetadataAvailable::ImageAvailable(img));
- }
// See if the image is already available
let result = self.image_cache_thread.lock().unwrap()
.find_image_or_metadata(url.clone(),
- use_placeholder);
+ use_placeholder,
+ can_request);
match result {
Ok(image_or_metadata) => Some(image_or_metadata),
// Image failed to load, so just return nothing
Err(ImageState::LoadError) => None,
- // Not yet requested, async mode - request image or metadata from the cache
- Err(ImageState::NotRequested) => {
- let sender = self.image_cache_sender.lock().unwrap().clone();
- self.image_cache_thread.lock().unwrap()
- .request_image_and_metadata(url, sender, None);
+ // Not yet requested - request image or metadata from the cache
+ Err(ImageState::NotRequested(id)) => {
+ let image = PendingImage {
+ state: PendingImageState::Unrequested(url),
+ node: node.to_untrusted_node_address(),
+ id: id,
+ };
+ self.pending_images.as_ref().unwrap().lock().unwrap().push(image);
None
}
// Image has been requested, is still pending. Return no image for this paint loop.
// When the image loads it will trigger a reflow and/or repaint.
- Err(ImageState::Pending) => None,
+ Err(ImageState::Pending(id)) => {
+ //XXXjdm if self.pending_images is not available, we should make sure that
+ // this node gets marked dirty again so it gets a script-initiated
+ // reflow that deals with this properly.
+ if let Some(ref pending_images) = self.pending_images {
+ let image = PendingImage {
+ state: PendingImageState::PendingResponse,
+ node: node.to_untrusted_node_address(),
+ id: id,
+ };
+ pending_images.lock().unwrap().push(image);
+ }
+ None
+ }
}
}
pub fn get_webrender_image_for_url(&self,
+ node: OpaqueNode,
url: ServoUrl,
use_placeholder: UsePlaceholder)
-> Option<WebRenderImageInfo> {
@@ -174,7 +174,7 @@ impl LayoutContext {
return Some((*existing_webrender_image).clone())
}
- match self.get_or_request_image_or_meta(url.clone(), use_placeholder) {
+ match self.get_or_request_image_or_meta(node, url.clone(), use_placeholder) {
Some(ImageOrMetadataAvailable::ImageAvailable(image)) => {
let image_info = WebRenderImageInfo::from_image(&*image);
if image_info.key.is_none() {
diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs
index 848188d14a0..5eb4534a0c5 100644
--- a/components/layout/display_list_builder.rs
+++ b/components/layout/display_list_builder.rs
@@ -683,7 +683,8 @@ impl FragmentDisplayListBuilding for Fragment {
index: usize) {
let background = style.get_background();
let webrender_image = state.layout_context
- .get_webrender_image_for_url(image_url.clone(),
+ .get_webrender_image_for_url(self.node,
+ image_url.clone(),
UsePlaceholder::No);
if let Some(webrender_image) = webrender_image {
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs
index ec1e87e6dd2..9cc0efbce6e 100644
--- a/components/layout/fragment.rs
+++ b/components/layout/fragment.rs
@@ -367,11 +367,14 @@ impl ImageFragmentInfo {
///
/// FIXME(pcwalton): The fact that image fragments store the cache in the fragment makes little
/// sense to me.
- pub fn new(url: Option<ServoUrl>,
- layout_context: &LayoutContext)
+ pub fn new<N: ThreadSafeLayoutNode>(url: Option<ServoUrl>,
+ node: &N,
+ layout_context: &LayoutContext)
-> ImageFragmentInfo {
let image_or_metadata = url.and_then(|url| {
- layout_context.get_or_request_image_or_meta(url, UsePlaceholder::Yes)
+ layout_context.get_or_request_image_or_meta(node.opaque(),
+ url,
+ UsePlaceholder::Yes)
});
let (image, metadata) = match image_or_metadata {
diff --git a/components/layout/query.rs b/components/layout/query.rs
index 5c78a1bc75d..2f26fede59f 100644
--- a/components/layout/query.rs
+++ b/components/layout/query.rs
@@ -17,6 +17,7 @@ use gfx_traits::ScrollRootId;
use inline::LAST_FRAGMENT_OF_ELEMENT;
use ipc_channel::ipc::IpcSender;
use opaque_node::OpaqueNodeMethods;
+use script_layout_interface::PendingImage;
use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse};
use script_layout_interface::rpc::{HitTestResponse, LayoutRPC};
use script_layout_interface::rpc::{MarginStyleResponse, NodeGeometryResponse};
@@ -27,6 +28,7 @@ use script_traits::LayoutMsg as ConstellationMsg;
use script_traits::UntrustedNodeAddress;
use sequential;
use std::cmp::{min, max};
+use std::mem;
use std::ops::Deref;
use std::sync::{Arc, Mutex};
use style::computed_values;
@@ -89,6 +91,9 @@ pub struct LayoutThreadData {
/// Index in a text fragment. We need this do determine the insertion point.
pub text_index_response: TextIndexResponse,
+
+ /// A list of images requests that need to be initiated.
+ pub pending_images: Vec<PendingImage>,
}
pub struct LayoutRPCImpl(pub Arc<Mutex<LayoutThreadData>>);
@@ -216,6 +221,12 @@ impl LayoutRPC for LayoutRPCImpl {
let rw_data = rw_data.lock().unwrap();
rw_data.text_index_response.clone()
}
+
+ fn pending_images(&self) -> Vec<PendingImage> {
+ let &LayoutRPCImpl(ref rw_data) = self;
+ let mut rw_data = rw_data.lock().unwrap();
+ mem::replace(&mut rw_data.pending_images, vec![])
+ }
}
struct UnioningFragmentBorderBoxIterator {
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index 8626385a026..8d6f2377130 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -75,7 +75,7 @@ use layout::wrapper::LayoutNodeLayoutData;
use layout::wrapper::drop_style_and_layout_data;
use layout_traits::LayoutThreadFactory;
use msg::constellation_msg::{FrameId, PipelineId};
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread};
+use net_traits::image_cache_thread::ImageCacheThread;
use net_traits::image_cache_thread::UsePlaceholder;
use parking_lot::RwLock;
use profile_traits::mem::{self, Report, ReportKind, ReportsChan};
@@ -98,6 +98,7 @@ use servo_url::ServoUrl;
use std::borrow::ToOwned;
use std::collections::HashMap;
use std::hash::BuildHasherDefault;
+use std::mem as std_mem;
use std::ops::{Deref, DerefMut};
use std::process;
use std::sync::{Arc, Mutex, MutexGuard};
@@ -137,12 +138,6 @@ pub struct LayoutThread {
/// The port on which we receive messages from the constellation.
pipeline_port: Receiver<LayoutControlMsg>,
- /// The port on which we receive messages from the image cache
- image_cache_receiver: Receiver<ImageCacheResult>,
-
- /// The channel on which the image cache can send messages to ourself.
- image_cache_sender: ImageCacheChan,
-
/// The port on which we receive messages from the font cache thread.
font_cache_receiver: Receiver<()>,
@@ -404,11 +399,6 @@ impl LayoutThread {
// Proxy IPC messages from the pipeline to the layout thread.
let pipeline_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(pipeline_port);
- // Ask the router to proxy IPC messages from the image cache thread to the layout thread.
- let (ipc_image_cache_sender, ipc_image_cache_receiver) = ipc::channel().unwrap();
- let image_cache_receiver =
- ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_image_cache_receiver);
-
// Ask the router to proxy IPC messages from the font cache thread to the layout thread.
let (ipc_font_cache_sender, ipc_font_cache_receiver) = ipc::channel().unwrap();
let font_cache_receiver =
@@ -437,8 +427,6 @@ impl LayoutThread {
image_cache_thread: image_cache_thread,
font_cache_thread: font_cache_thread,
first_reflow: true,
- image_cache_receiver: image_cache_receiver,
- image_cache_sender: ImageCacheChan(ipc_image_cache_sender),
font_cache_receiver: font_cache_receiver,
font_cache_sender: ipc_font_cache_sender,
parallel_traversal: parallel_traversal,
@@ -470,6 +458,7 @@ impl LayoutThread {
margin_style_response: MarginStyleResponse::empty(),
stacking_context_scroll_offsets: HashMap::new(),
text_index_response: TextIndexResponse(None),
+ pending_images: vec![],
})),
error_reporter: CSSErrorReporter {
pipelineid: id,
@@ -506,7 +495,8 @@ impl LayoutThread {
fn build_layout_context(&self,
rw_data: &LayoutThreadData,
screen_size_changed: bool,
- goal: ReflowGoal)
+ goal: ReflowGoal,
+ request_images: bool)
-> LayoutContext {
let thread_local_style_context_creation_data =
ThreadLocalStyleContextCreationInfo::new(self.new_animations_sender.clone());
@@ -530,9 +520,9 @@ impl LayoutThread {
default_computed_values: Arc::new(ComputedValues::initial_values().clone()),
},
image_cache_thread: Mutex::new(self.image_cache_thread.clone()),
- image_cache_sender: Mutex::new(self.image_cache_sender.clone()),
font_cache_thread: Mutex::new(self.font_cache_thread.clone()),
webrender_image_cache: self.webrender_image_cache.clone(),
+ pending_images: if request_images { Some(Mutex::new(vec![])) } else { None },
}
}
@@ -541,14 +531,12 @@ impl LayoutThread {
enum Request {
FromPipeline(LayoutControlMsg),
FromScript(Msg),
- FromImageCache,
FromFontCache,
}
let request = {
let port_from_script = &self.port;
let port_from_pipeline = &self.pipeline_port;
- let port_from_image_cache = &self.image_cache_receiver;
let port_from_font_cache = &self.font_cache_receiver;
select! {
msg = port_from_pipeline.recv() => {
@@ -557,10 +545,6 @@ impl LayoutThread {
msg = port_from_script.recv() => {
Request::FromScript(msg.unwrap())
},
- msg = port_from_image_cache.recv() => {
- msg.unwrap();
- Request::FromImageCache
- },
msg = port_from_font_cache.recv() => {
msg.unwrap();
Request::FromFontCache
@@ -590,9 +574,6 @@ impl LayoutThread {
Request::FromScript(msg) => {
self.handle_request_helper(msg, possibly_locked_rw_data)
},
- Request::FromImageCache => {
- self.repaint(possibly_locked_rw_data)
- },
Request::FromFontCache => {
let _rw_data = possibly_locked_rw_data.lock();
self.outstanding_web_fonts.fetch_sub(1, Ordering::SeqCst);
@@ -603,37 +584,6 @@ impl LayoutThread {
}
}
- /// Repaint the scene, without performing style matching. This is typically
- /// used when an image arrives asynchronously and triggers a relayout and
- /// repaint.
- /// TODO: In the future we could detect if the image size hasn't changed
- /// since last time and avoid performing a complete layout pass.
- fn repaint<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) -> bool {
- let mut rw_data = possibly_locked_rw_data.lock();
-
- if let Some(mut root_flow) = self.root_flow.clone() {
- let flow = flow::mut_base(FlowRef::deref_mut(&mut root_flow));
- flow.restyle_damage.insert(REPAINT);
- }
-
- let reflow_info = Reflow {
- goal: ReflowGoal::ForDisplay,
- page_clip_rect: max_rect(),
- };
- let mut layout_context = self.build_layout_context(&*rw_data,
- false,
- reflow_info.goal);
-
- self.perform_post_style_recalc_layout_passes(&reflow_info,
- None,
- None,
- &mut *rw_data,
- &mut layout_context);
-
-
- true
- }
-
/// Receives and dispatches messages from other threads.
fn handle_request_helper<'a, 'b>(&mut self,
request: Msg,
@@ -1166,7 +1116,8 @@ impl LayoutThread {
// Create a layout context for use throughout the following passes.
let mut layout_context = self.build_layout_context(&*rw_data,
viewport_size_changed,
- data.reflow_info.goal);
+ data.reflow_info.goal,
+ true);
// NB: Type inference falls apart here for some reason, so we need to be very verbose. :-(
let traversal_driver = if self.parallel_flag && self.parallel_traversal.is_some() {
@@ -1247,6 +1198,12 @@ impl LayoutThread {
query_type: &ReflowQueryType,
rw_data: &mut LayoutThreadData,
context: &mut LayoutContext) {
+ let pending_images = match context.pending_images {
+ Some(ref pending) => std_mem::replace(&mut *pending.lock().unwrap(), vec![]),
+ None => vec![],
+ };
+ rw_data.pending_images = pending_images;
+
let mut root_flow = match self.root_flow.clone() {
Some(root_flow) => root_flow,
None => return,
@@ -1367,7 +1324,8 @@ impl LayoutThread {
let mut layout_context = self.build_layout_context(&*rw_data,
false,
- reflow_info.goal);
+ reflow_info.goal,
+ false);
if let Some(mut root_flow) = self.root_flow.clone() {
// Perform an abbreviated style recalc that operates without access to the DOM.
@@ -1387,6 +1345,8 @@ impl LayoutThread {
None,
&mut *rw_data,
&mut layout_context);
+
+ assert!(layout_context.pending_images.is_none());
}
fn reflow_with_newly_loaded_web_font<'a, 'b>(&mut self, possibly_locked_rw_data: &mut RwData<'a, 'b>) {
@@ -1400,7 +1360,8 @@ impl LayoutThread {
let mut layout_context = self.build_layout_context(&*rw_data,
false,
- reflow_info.goal);
+ reflow_info.goal,
+ false);
// No need to do a style recalc here.
if self.root_flow.is_none() {
diff --git a/components/net/image_cache_thread.rs b/components/net/image_cache_thread.rs
index 51d8324bd48..5beacb8a1a4 100644
--- a/components/net/image_cache_thread.rs
+++ b/components/net/image_cache_thread.rs
@@ -5,12 +5,11 @@
use immeta::load_from_buf;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
-use net_traits::{CoreResourceThread, NetworkError, fetch_async, FetchResponseMsg};
+use net_traits::{NetworkError, FetchResponseMsg};
use net_traits::image::base::{Image, ImageMetadata, PixelFormat, load_from_memory};
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheCommand, ImageCacheThread, ImageState};
-use net_traits::image_cache_thread::{ImageCacheResult, ImageOrMetadataAvailable, ImageResponse, UsePlaceholder};
-use net_traits::image_cache_thread::ImageResponder;
-use net_traits::request::{Destination, RequestInit, Type as RequestType};
+use net_traits::image_cache_thread::{ImageCacheCommand, ImageCacheThread, ImageState};
+use net_traits::image_cache_thread::{ImageOrMetadataAvailable, ImageResponse, UsePlaceholder};
+use net_traits::image_cache_thread::{ImageResponder, PendingImageId, CanRequestImages};
use servo_config::resource_files::resources_dir_path;
use servo_url::ServoUrl;
use std::borrow::ToOwned;
@@ -58,20 +57,54 @@ fn is_image_opaque(format: webrender_traits::ImageFormat, bytes: &[u8]) -> bool
struct PendingLoad {
// The bytes loaded so far. Reset to an empty vector once loading
// is complete and the buffer has been transmitted to the decoder.
- bytes: Vec<u8>,
+ bytes: ImageBytes,
// Image metadata, if available.
metadata: Option<ImageMetadata>,
// Once loading is complete, the result of the operation.
result: Option<Result<(), NetworkError>>,
- listeners: Vec<ImageListener>,
+ listeners: Vec<ImageResponder>,
// The url being loaded. Do not forget that this may be several Mb
// if we are loading a data: url.
url: ServoUrl,
}
+enum ImageBytes {
+ InProgress(Vec<u8>),
+ Complete(Arc<Vec<u8>>),
+}
+
+impl ImageBytes {
+ fn extend_from_slice(&mut self, data: &[u8]) {
+ match *self {
+ ImageBytes::InProgress(ref mut bytes) => bytes.extend_from_slice(data),
+ ImageBytes::Complete(_) => panic!("attempted modification of complete image bytes"),
+ }
+ }
+
+ fn mark_complete(&mut self) -> Arc<Vec<u8>> {
+ let bytes = {
+ let own_bytes = match *self {
+ ImageBytes::InProgress(ref mut bytes) => bytes,
+ ImageBytes::Complete(_) => panic!("attempted modification of complete image bytes"),
+ };
+ mem::replace(own_bytes, vec![])
+ };
+ let bytes = Arc::new(bytes);
+ *self = ImageBytes::Complete(bytes.clone());
+ bytes
+ }
+
+ fn as_slice(&self) -> &[u8] {
+ match *self {
+ ImageBytes::InProgress(ref bytes) => &bytes,
+ ImageBytes::Complete(ref bytes) => &*bytes,
+ }
+ }
+}
+
enum LoadResult {
Loaded(Image),
PlaceholderLoaded(Arc<Image>),
@@ -81,7 +114,7 @@ enum LoadResult {
impl PendingLoad {
fn new(url: ServoUrl) -> PendingLoad {
PendingLoad {
- bytes: vec!(),
+ bytes: ImageBytes::InProgress(vec!()),
metadata: None,
result: None,
listeners: vec!(),
@@ -89,7 +122,7 @@ impl PendingLoad {
}
}
- fn add_listener(&mut self, listener: ImageListener) {
+ fn add_listener(&mut self, listener: ImageResponder) {
self.listeners.push(listener);
}
}
@@ -109,11 +142,12 @@ struct AllPendingLoads {
keygen: LoadKeyGenerator,
}
-// Result of accessing a cache.
-#[derive(Eq, PartialEq)]
-enum CacheResult {
- Hit, // The value was in the cache.
- Miss, // The value was not in the cache and needed to be regenerated.
+/// Result of accessing a cache.
+enum CacheResult<'a> {
+ /// The value was in the cache.
+ Hit(LoadKey, &'a mut PendingLoad),
+ /// The value was not in the cache and needed to be regenerated.
+ Miss(Option<(LoadKey, &'a mut PendingLoad)>),
}
impl AllPendingLoads {
@@ -131,20 +165,11 @@ impl AllPendingLoads {
self.loads.is_empty()
}
- // get a PendingLoad from its LoadKey. Prefer this to `get_by_url`,
- // for performance reasons.
+ // get a PendingLoad from its LoadKey.
fn get_by_key_mut(&mut self, key: &LoadKey) -> Option<&mut PendingLoad> {
self.loads.get_mut(key)
}
- // get a PendingLoad from its url. When possible, prefer `get_by_key_mut`.
- fn get_by_url(&self, url: &ServoUrl) -> Option<&PendingLoad> {
- self.url_to_load_key.get(url).
- and_then(|load_key|
- self.loads.get(load_key)
- )
- }
-
fn remove(&mut self, key: &LoadKey) -> Option<PendingLoad> {
self.loads.remove(key).
and_then(|pending_load| {
@@ -153,13 +178,18 @@ impl AllPendingLoads {
})
}
- fn get_cached(&mut self, url: ServoUrl) -> (CacheResult, LoadKey, &mut PendingLoad) {
+ fn get_cached<'a>(&'a mut self, url: ServoUrl, can_request: CanRequestImages)
+ -> CacheResult<'a> {
match self.url_to_load_key.entry(url.clone()) {
Occupied(url_entry) => {
let load_key = url_entry.get();
- (CacheResult::Hit, *load_key, self.loads.get_mut(load_key).unwrap())
+ CacheResult::Hit(*load_key, self.loads.get_mut(load_key).unwrap())
}
Vacant(url_entry) => {
+ if can_request == CanRequestImages::No {
+ return CacheResult::Miss(None);
+ }
+
let load_key = self.keygen.next();
url_entry.insert(load_key);
@@ -168,7 +198,7 @@ impl AllPendingLoads {
Occupied(_) => unreachable!(),
Vacant(load_entry) => {
let mut_load = load_entry.insert(pending_load);
- (CacheResult::Miss, load_key, mut_load)
+ CacheResult::Miss(Some((load_key, mut_load)))
}
}
}
@@ -182,27 +212,20 @@ impl AllPendingLoads {
/// fetched again.
struct CompletedLoad {
image_response: ImageResponse,
+ id: PendingImageId,
}
impl CompletedLoad {
- fn new(image_response: ImageResponse) -> CompletedLoad {
+ fn new(image_response: ImageResponse, id: PendingImageId) -> CompletedLoad {
CompletedLoad {
image_response: image_response,
+ id: id,
}
}
}
-/// Stores information to notify a client when the state
-/// of an image changes.
-struct ImageListener {
- sender: ImageCacheChan,
- responder: Option<ImageResponder>,
- send_metadata_msg: bool,
-}
-
// A key used to communicate during loading.
-#[derive(Eq, Hash, PartialEq, Clone, Copy)]
-struct LoadKey(u64);
+type LoadKey = PendingImageId;
struct LoadKeyGenerator {
counter: u64
@@ -214,34 +237,9 @@ impl LoadKeyGenerator {
counter: 0
}
}
- fn next(&mut self) -> LoadKey {
+ fn next(&mut self) -> PendingImageId {
self.counter += 1;
- LoadKey(self.counter)
- }
-}
-
-impl ImageListener {
- fn new(sender: ImageCacheChan, responder: Option<ImageResponder>, send_metadata_msg: bool) -> ImageListener {
- ImageListener {
- sender: sender,
- responder: responder,
- send_metadata_msg: send_metadata_msg,
- }
- }
-
- fn notify(&self, image_response: ImageResponse) {
- if !self.send_metadata_msg {
- if let ImageResponse::MetadataLoaded(_) = image_response {
- return;
- }
- }
-
- let ImageCacheChan(ref sender) = self.sender;
- let msg = ImageCacheResult {
- responder: self.responder.clone(),
- image_response: image_response,
- };
- sender.send(msg).ok();
+ PendingImageId(self.counter)
}
}
@@ -252,16 +250,11 @@ struct ResourceLoadInfo {
/// Implementation of the image cache
struct ImageCache {
- progress_sender: Sender<ResourceLoadInfo>,
-
decoder_sender: Sender<DecoderMsg>,
// Worker threads for decoding images.
thread_pool: ThreadPool,
- // Resource thread handle
- core_resource_thread: CoreResourceThread,
-
// Images that are loading over network, or decoding.
pending_loads: AllPendingLoads,
@@ -284,7 +277,6 @@ struct DecoderMsg {
struct Receivers {
cmd_receiver: Receiver<ImageCacheCommand>,
decoder_receiver: Receiver<DecoderMsg>,
- progress_receiver: Receiver<ResourceLoadInfo>,
}
impl Receivers {
@@ -292,16 +284,12 @@ impl Receivers {
fn recv(&self) -> SelectResult {
let cmd_receiver = &self.cmd_receiver;
let decoder_receiver = &self.decoder_receiver;
- let progress_receiver = &self.progress_receiver;
select! {
msg = cmd_receiver.recv() => {
SelectResult::Command(msg.unwrap())
},
msg = decoder_receiver.recv() => {
SelectResult::Decoder(msg.unwrap())
- },
- msg = progress_receiver.recv() => {
- SelectResult::Progress(msg.unwrap())
}
}
}
@@ -310,7 +298,6 @@ impl Receivers {
/// The types of messages that the main image cache thread receives.
enum SelectResult {
Command(ImageCacheCommand),
- Progress(ResourceLoadInfo),
Decoder(DecoderMsg),
}
@@ -347,8 +334,7 @@ fn get_placeholder_image(webrender_api: &webrender_traits::RenderApi) -> io::Res
}
impl ImageCache {
- fn run(core_resource_thread: CoreResourceThread,
- webrender_api: webrender_traits::RenderApi,
+ fn run(webrender_api: webrender_traits::RenderApi,
ipc_command_receiver: IpcReceiver<ImageCacheCommand>) {
// Preload the placeholder image, used when images fail to load.
let placeholder_image = get_placeholder_image(&webrender_api).ok();
@@ -356,15 +342,12 @@ impl ImageCache {
// Ask the router to proxy messages received over IPC to us.
let cmd_receiver = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_command_receiver);
- let (progress_sender, progress_receiver) = channel();
let (decoder_sender, decoder_receiver) = channel();
let mut cache = ImageCache {
- progress_sender: progress_sender,
decoder_sender: decoder_sender,
thread_pool: ThreadPool::new(4),
pending_loads: AllPendingLoads::new(),
completed_loads: HashMap::new(),
- core_resource_thread: core_resource_thread,
placeholder_image: placeholder_image,
webrender_api: webrender_api,
};
@@ -372,7 +355,6 @@ impl ImageCache {
let receivers = Receivers {
cmd_receiver: cmd_receiver,
decoder_receiver: decoder_receiver,
- progress_receiver: progress_receiver,
};
let mut exit_sender: Option<IpcSender<()>> = None;
@@ -382,9 +364,6 @@ impl ImageCache {
SelectResult::Command(cmd) => {
exit_sender = cache.handle_cmd(cmd);
}
- SelectResult::Progress(msg) => {
- cache.handle_progress(msg);
- }
SelectResult::Decoder(msg) => {
cache.handle_decoder(msg);
}
@@ -406,22 +385,22 @@ impl ImageCache {
ImageCacheCommand::Exit(sender) => {
return Some(sender);
}
- ImageCacheCommand::RequestImage(url, result_chan, responder) => {
- self.request_image(url, result_chan, responder, false);
- }
- ImageCacheCommand::RequestImageAndMetadata(url, result_chan, responder) => {
- self.request_image(url, result_chan, responder, true);
+ ImageCacheCommand::AddListener(id, responder) => {
+ self.add_listener(id, responder);
}
- ImageCacheCommand::GetImageIfAvailable(url, use_placeholder, consumer) => {
- let result = self.get_image_if_available(url, use_placeholder);
+ ImageCacheCommand::GetImageOrMetadataIfAvailable(url,
+ use_placeholder,
+ can_request,
+ consumer) => {
+ let result = self.get_image_or_meta_if_available(url, use_placeholder, can_request);
+ // TODO(#15501): look for opportunities to clean up cache if this send fails.
let _ = consumer.send(result);
}
- ImageCacheCommand::GetImageOrMetadataIfAvailable(url, use_placeholder, consumer) => {
- let result = self.get_image_or_meta_if_available(url, use_placeholder);
- let _ = consumer.send(result);
- }
- ImageCacheCommand::StoreDecodeImage(url, image_vector) => {
- self.store_decode_image(url, image_vector);
+ ImageCacheCommand::StoreDecodeImage(id, data) => {
+ self.handle_progress(ResourceLoadInfo {
+ action: data,
+ key: id
+ });
}
};
@@ -433,41 +412,41 @@ impl ImageCache {
match (msg.action, msg.key) {
(FetchResponseMsg::ProcessRequestBody, _) |
(FetchResponseMsg::ProcessRequestEOF, _) => return,
- (FetchResponseMsg::ProcessResponse(_), _) => {}
+ (FetchResponseMsg::ProcessResponse(_response), _) => {}
(FetchResponseMsg::ProcessResponseChunk(data), _) => {
+ debug!("got some data for {:?}", msg.key);
let pending_load = self.pending_loads.get_by_key_mut(&msg.key).unwrap();
pending_load.bytes.extend_from_slice(&data);
//jmr0 TODO: possibly move to another task?
if let None = pending_load.metadata {
- if let Ok(metadata) = load_from_buf(&pending_load.bytes) {
+ if let Ok(metadata) = load_from_buf(&pending_load.bytes.as_slice()) {
let dimensions = metadata.dimensions();
let img_metadata = ImageMetadata { width: dimensions.width,
- height: dimensions.height };
- pending_load.metadata = Some(img_metadata.clone());
+ height: dimensions.height };
for listener in &pending_load.listeners {
- listener.notify(ImageResponse::MetadataLoaded(img_metadata.clone()).clone());
+ listener.respond(ImageResponse::MetadataLoaded(img_metadata.clone()));
}
+ pending_load.metadata = Some(img_metadata);
}
}
}
(FetchResponseMsg::ProcessResponseEOF(result), key) => {
+ debug!("received EOF for {:?}", key);
match result {
Ok(()) => {
let pending_load = self.pending_loads.get_by_key_mut(&msg.key).unwrap();
pending_load.result = Some(result);
- let bytes = mem::replace(&mut pending_load.bytes, vec!());
+ let bytes = pending_load.bytes.mark_complete();
let sender = self.decoder_sender.clone();
+ debug!("async decoding {} ({:?})", pending_load.url, key);
self.thread_pool.execute(move || {
- let image = load_from_memory(&bytes);
- let msg = DecoderMsg {
- key: key,
- image: image
- };
+ let msg = decode_bytes_sync(key, &*bytes);
sender.send(msg).unwrap();
});
}
Err(_) => {
+ debug!("processing error for {:?}", key);
match self.placeholder_image.clone() {
Some(placeholder_image) => {
self.complete_load(msg.key, LoadResult::PlaceholderLoaded(
@@ -492,7 +471,10 @@ impl ImageCache {
// Change state of a url from pending -> loaded.
fn complete_load(&mut self, key: LoadKey, mut load_result: LoadResult) {
- let pending_load = self.pending_loads.remove(&key).unwrap();
+ let pending_load = match self.pending_loads.remove(&key) {
+ Some(load) => load,
+ None => return,
+ };
match load_result {
LoadResult::Loaded(ref mut image) => {
@@ -518,145 +500,122 @@ impl ImageCache {
LoadResult::None => ImageResponse::None,
};
- let completed_load = CompletedLoad::new(image_response.clone());
+ let completed_load = CompletedLoad::new(image_response.clone(), key);
self.completed_loads.insert(pending_load.url.into(), completed_load);
for listener in pending_load.listeners {
- listener.notify(image_response.clone());
+ listener.respond(image_response.clone());
}
}
- // Request an image from the cache. If the image hasn't been
- // loaded/decoded yet, it will be loaded/decoded in the
- // background. If send_metadata_msg is set, the channel will be notified
- // that image metadata is available, possibly before the image has finished
- // loading.
- fn request_image(&mut self,
- url: ServoUrl,
- result_chan: ImageCacheChan,
- responder: Option<ImageResponder>,
- send_metadata_msg: bool) {
- let image_listener = ImageListener::new(result_chan, responder, send_metadata_msg);
-
- // Check if already completed
- match self.completed_loads.get(&url) {
- Some(completed_load) => {
- // It's already completed, return a notify straight away
- image_listener.notify(completed_load.image_response.clone());
- }
- None => {
- // Check if the load is already pending
- let (cache_result, load_key, mut pending_load) = self.pending_loads.get_cached(url.clone());
- pending_load.add_listener(image_listener);
- match cache_result {
- CacheResult::Miss => {
- // A new load request! Request the load from
- // the resource thread.
- // https://html.spec.whatwg.org/multipage/#update-the-image-data
- // step 12.
- //
- // TODO(emilio): ServoUrl in more places please!
- let request = RequestInit {
- url: url.clone(),
- type_: RequestType::Image,
- destination: Destination::Image,
- origin: url.clone(),
- .. RequestInit::default()
- };
-
- let progress_sender = self.progress_sender.clone();
- fetch_async(request, &self.core_resource_thread, move |action| {
- let action = match action {
- FetchResponseMsg::ProcessRequestBody |
- FetchResponseMsg::ProcessRequestEOF => return,
- a => a
- };
- progress_sender.send(ResourceLoadInfo {
- action: action,
- key: load_key,
- }).unwrap();
- });
- }
- CacheResult::Hit => {
- // Request is already on its way.
- }
- }
+ /// Add a listener for a given image if it is still pending, or notify the
+ /// listener if the image is complete.
+ fn add_listener(&mut self,
+ id: PendingImageId,
+ listener: ImageResponder) {
+ if let Some(load) = self.pending_loads.get_by_key_mut(&id) {
+ if let Some(ref metadata) = load.metadata {
+ listener.respond(ImageResponse::MetadataLoaded(metadata.clone()));
}
+ load.add_listener(listener);
+ return;
}
+ if let Some(load) = self.completed_loads.values().find(|l| l.id == id) {
+ listener.respond(load.image_response.clone());
+ return;
+ }
+ warn!("Couldn't find cached entry for listener {:?}", id);
}
- fn get_image_if_available(&mut self,
- url: ServoUrl,
- placeholder: UsePlaceholder, )
- -> Result<Arc<Image>, ImageState> {
- let img_or_metadata = self.get_image_or_meta_if_available(url, placeholder);
- match img_or_metadata {
- Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => Ok(image),
- Ok(ImageOrMetadataAvailable::MetadataAvailable(_)) => Err(ImageState::Pending),
- Err(err) => Err(err),
- }
+ /// Return a completed image if it exists, or None if there is no complete load
+ /// or the complete load is not fully decoded or is unavailable.
+ fn get_completed_image_if_available(&self,
+ url: &ServoUrl,
+ placeholder: UsePlaceholder)
+ -> Option<Result<ImageOrMetadataAvailable, ImageState>> {
+ self.completed_loads.get(url).map(|completed_load| {
+ match (&completed_load.image_response, placeholder) {
+ (&ImageResponse::Loaded(ref image), _) |
+ (&ImageResponse::PlaceholderLoaded(ref image), UsePlaceholder::Yes) => {
+ Ok(ImageOrMetadataAvailable::ImageAvailable(image.clone()))
+ }
+ (&ImageResponse::PlaceholderLoaded(_), UsePlaceholder::No) |
+ (&ImageResponse::None, _) |
+ (&ImageResponse::MetadataLoaded(_), _) => {
+ Err(ImageState::LoadError)
+ }
+ }
+ })
}
+ /// Return any available metadata or image for the given URL, or an indication that
+ /// the image is not yet available if it is in progress, or else reserve a slot in
+ /// the cache for the URL if the consumer can request images.
fn get_image_or_meta_if_available(&mut self,
url: ServoUrl,
- placeholder: UsePlaceholder)
+ placeholder: UsePlaceholder,
+ can_request: CanRequestImages)
-> Result<ImageOrMetadataAvailable, ImageState> {
- match self.completed_loads.get(&url) {
- Some(completed_load) => {
- match (completed_load.image_response.clone(), placeholder) {
- (ImageResponse::Loaded(image), _) |
- (ImageResponse::PlaceholderLoaded(image), UsePlaceholder::Yes) => {
- Ok(ImageOrMetadataAvailable::ImageAvailable(image))
+ if let Some(result) = self.get_completed_image_if_available(&url, placeholder) {
+ debug!("{} is available", url);
+ return result;
+ }
+
+ let decoded = {
+ let result = self.pending_loads.get_cached(url.clone(), can_request);
+ match result {
+ CacheResult::Hit(key, pl) => match (&pl.result, &pl.metadata) {
+ (&Some(Ok(_)), _) => {
+ debug!("sync decoding {} ({:?})", url, key);
+ decode_bytes_sync(key, &pl.bytes.as_slice())
+ }
+ (&None, &Some(ref meta)) => {
+ debug!("metadata available for {} ({:?})", url, key);
+ return Ok(ImageOrMetadataAvailable::MetadataAvailable(meta.clone()))
}
- (ImageResponse::PlaceholderLoaded(_), UsePlaceholder::No) |
- (ImageResponse::None, _) |
- (ImageResponse::MetadataLoaded(_), _) => {
- Err(ImageState::LoadError)
+ (&Some(Err(_)), _) | (&None, &None) => {
+ debug!("{} ({:?}) is still pending", url, key);
+ return Err(ImageState::Pending(key));
}
+ },
+ CacheResult::Miss(Some((key, _pl))) => {
+ debug!("should be requesting {} ({:?})", url, key);
+ return Err(ImageState::NotRequested(key));
+ }
+ CacheResult::Miss(None) => {
+ debug!("couldn't find an entry for {}", url);
+ return Err(ImageState::LoadError);
}
}
- None => {
- let pl = match self.pending_loads.get_by_url(&url) {
- Some(pl) => pl,
- None => return Err(ImageState::NotRequested),
- };
-
- let meta = match pl.metadata {
- Some(ref meta) => meta,
- None => return Err(ImageState::Pending),
- };
+ };
- Ok(ImageOrMetadataAvailable::MetadataAvailable(meta.clone()))
- }
+ // In the case where a decode is ongoing (or waiting in a queue) but we have the
+ // full response available, we decode the bytes synchronously and ignore the
+ // async decode when it finishes later.
+ // TODO: make this behaviour configurable according to the caller's needs.
+ self.handle_decoder(decoded);
+ match self.get_completed_image_if_available(&url, placeholder) {
+ Some(result) => result,
+ None => Err(ImageState::LoadError),
}
}
-
- fn store_decode_image(&mut self,
- ref_url: ServoUrl,
- loaded_bytes: Vec<u8>) {
- let (cache_result, load_key, _) = self.pending_loads.get_cached(ref_url.clone());
- assert!(cache_result == CacheResult::Miss);
- let action = FetchResponseMsg::ProcessResponseChunk(loaded_bytes);
- let _ = self.progress_sender.send(ResourceLoadInfo {
- action: action,
- key: load_key,
- });
- let action = FetchResponseMsg::ProcessResponseEOF(Ok(()));
- let _ = self.progress_sender.send(ResourceLoadInfo {
- action: action,
- key: load_key,
- });
- }
}
/// Create a new image cache.
-pub fn new_image_cache_thread(core_resource_thread: CoreResourceThread,
- webrender_api: webrender_traits::RenderApi) -> ImageCacheThread {
+pub fn new_image_cache_thread(webrender_api: webrender_traits::RenderApi) -> ImageCacheThread {
let (ipc_command_sender, ipc_command_receiver) = ipc::channel().unwrap();
thread::Builder::new().name("ImageCacheThread".to_owned()).spawn(move || {
- ImageCache::run(core_resource_thread, webrender_api, ipc_command_receiver)
+ ImageCache::run(webrender_api, ipc_command_receiver)
}).expect("Thread spawning failed");
ImageCacheThread::new(ipc_command_sender)
}
+
+fn decode_bytes_sync(key: LoadKey, bytes: &[u8]) -> DecoderMsg {
+ let image = load_from_memory(bytes);
+ DecoderMsg {
+ key: key,
+ image: image
+ }
+}
diff --git a/components/net_traits/image_cache_thread.rs b/components/net_traits/image_cache_thread.rs
index 4fb7aedee04..49bd1ea1c8f 100644
--- a/components/net_traits/image_cache_thread.rs
+++ b/components/net_traits/image_cache_thread.rs
@@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use FetchResponseMsg;
use image::base::{Image, ImageMetadata};
use ipc_channel::ipc::{self, IpcSender};
use servo_url::ServoUrl;
@@ -13,27 +14,45 @@ use std::sync::Arc;
/// and/or repaint.
#[derive(Clone, Deserialize, Serialize)]
pub struct ImageResponder {
- sender: IpcSender<ImageResponse>,
+ id: PendingImageId,
+ sender: IpcSender<PendingImageResponse>,
+}
+
+#[derive(Deserialize, Serialize)]
+pub struct PendingImageResponse {
+ pub response: ImageResponse,
+ pub id: PendingImageId,
}
impl ImageResponder {
- pub fn new(sender: IpcSender<ImageResponse>) -> ImageResponder {
+ pub fn new(sender: IpcSender<PendingImageResponse>, id: PendingImageId) -> ImageResponder {
ImageResponder {
sender: sender,
+ id: id,
}
}
pub fn respond(&self, response: ImageResponse) {
- self.sender.send(response).unwrap()
+ // This send can fail if thread waiting for this notification has panicked.
+ // That's not a case that's worth warning about.
+ // TODO(#15501): are there cases in which we should perform cleanup?
+ let _ = self.sender.send(PendingImageResponse {
+ response: response,
+ id: self.id,
+ });
}
}
+/// The unique id for an image that has previously been requested.
+#[derive(Copy, Clone, PartialEq, Eq, Deserialize, Serialize, HeapSizeOf, Hash, Debug)]
+pub struct PendingImageId(pub u64);
+
/// The current state of an image in the cache.
#[derive(PartialEq, Copy, Clone, Deserialize, Serialize)]
pub enum ImageState {
- Pending,
+ Pending(PendingImageId),
LoadError,
- NotRequested,
+ NotRequested(PendingImageId),
}
/// The returned image.
@@ -56,45 +75,22 @@ pub enum ImageOrMetadataAvailable {
MetadataAvailable(ImageMetadata),
}
-/// Channel used by the image cache to send results.
-#[derive(Clone, Deserialize, Serialize)]
-pub struct ImageCacheChan(pub IpcSender<ImageCacheResult>);
-
-/// The result of an image cache command that is returned to the
-/// caller.
-#[derive(Deserialize, Serialize)]
-pub struct ImageCacheResult {
- pub responder: Option<ImageResponder>,
- pub image_response: ImageResponse,
-}
-
/// Commands that the image cache understands.
#[derive(Deserialize, Serialize)]
pub enum ImageCacheCommand {
- /// Request an image asynchronously from the cache. Supply a channel
- /// to receive the result, and optionally an image responder
- /// that is passed to the result channel.
- RequestImage(ServoUrl, ImageCacheChan, Option<ImageResponder>),
-
- /// Requests an image and a "metadata-ready" notification message asynchronously from the
- /// cache. The cache will make an effort to send metadata before the image is completely
- /// loaded. Supply a channel to receive the results, and optionally an image responder
- /// that is passed to the result channel.
- RequestImageAndMetadata(ServoUrl, ImageCacheChan, Option<ImageResponder>),
-
- /// Synchronously check the state of an image in the cache.
- /// TODO(gw): Profile this on some real world sites and see
- /// if it's worth caching the results of this locally in each
- /// layout / paint thread.
- GetImageIfAvailable(ServoUrl, UsePlaceholder, IpcSender<Result<Arc<Image>, ImageState>>),
-
/// Synchronously check the state of an image in the cache. If the image is in a loading
/// state and but its metadata has been made available, it will be sent as a response.
- GetImageOrMetadataIfAvailable(ServoUrl, UsePlaceholder, IpcSender<Result<ImageOrMetadataAvailable, ImageState>>),
+ GetImageOrMetadataIfAvailable(ServoUrl,
+ UsePlaceholder,
+ CanRequestImages,
+ IpcSender<Result<ImageOrMetadataAvailable, ImageState>>),
+
+ /// Add a new listener for the given pending image.
+ AddListener(PendingImageId, ImageResponder),
/// Instruct the cache to store this data as a newly-complete network request and continue
/// decoding the result into pixel data
- StoreDecodeImage(ServoUrl, Vec<u8>),
+ StoreDecodeImage(PendingImageId, FetchResponseMsg),
/// Clients must wait for a response before shutting down the ResourceThread
Exit(IpcSender<()>),
@@ -106,6 +102,15 @@ pub enum UsePlaceholder {
Yes,
}
+/// Whether a consumer is in a position to request images or not. This can occur when
+/// animations are being processed by the layout thread while the script thread is executing
+/// in parallel.
+#[derive(Copy, Clone, PartialEq, Deserialize, Serialize)]
+pub enum CanRequestImages {
+ No,
+ Yes,
+}
+
/// The client side of the image cache thread. This can be safely cloned
/// and passed to different threads.
#[derive(Clone, Deserialize, Serialize)]
@@ -122,52 +127,41 @@ impl ImageCacheThread {
}
}
- /// Asynchronously request an image. See ImageCacheCommand::RequestImage.
- pub fn request_image(&self, url: ServoUrl, result_chan: ImageCacheChan, responder: Option<ImageResponder>) {
- let msg = ImageCacheCommand::RequestImage(url, result_chan, responder);
- let _ = self.chan.send(msg);
- }
-
- /// Asynchronously request an image and metadata.
- /// See ImageCacheCommand::RequestImageAndMetadata
- pub fn request_image_and_metadata(&self,
- url: ServoUrl,
- result_chan: ImageCacheChan,
- responder: Option<ImageResponder>) {
- let msg = ImageCacheCommand::RequestImageAndMetadata(url, result_chan, responder);
- let _ = self.chan.send(msg);
- }
-
- /// Get the current state of an image. See ImageCacheCommand::GetImageIfAvailable.
- pub fn find_image(&self, url: ServoUrl, use_placeholder: UsePlaceholder) -> Result<Arc<Image>, ImageState> {
- let (sender, receiver) = ipc::channel().unwrap();
- let msg = ImageCacheCommand::GetImageIfAvailable(url, use_placeholder, sender);
- let _ = self.chan.send(msg);
- try!(receiver.recv().map_err(|_| ImageState::LoadError))
- }
-
/// Get the current state of an image, returning its metadata if available.
/// See ImageCacheCommand::GetImageOrMetadataIfAvailable.
///
/// FIXME: We shouldn't do IPC for data uris!
pub fn find_image_or_metadata(&self,
url: ServoUrl,
- use_placeholder: UsePlaceholder)
+ use_placeholder: UsePlaceholder,
+ can_request: CanRequestImages)
-> Result<ImageOrMetadataAvailable, ImageState> {
let (sender, receiver) = ipc::channel().unwrap();
- let msg = ImageCacheCommand::GetImageOrMetadataIfAvailable(url, use_placeholder, sender);
+ let msg = ImageCacheCommand::GetImageOrMetadataIfAvailable(url,
+ use_placeholder,
+ can_request,
+ sender);
let _ = self.chan.send(msg);
try!(receiver.recv().map_err(|_| ImageState::LoadError))
}
- /// Decode the given image bytes and cache the result for the given URL.
- pub fn store_complete_image_bytes(&self, url: ServoUrl, image_data: Vec<u8>) {
- let msg = ImageCacheCommand::StoreDecodeImage(url, image_data);
- let _ = self.chan.send(msg);
+ /// Add a new listener for the given pending image id. If the image is already present,
+ /// the responder will still receive the expected response.
+ pub fn add_listener(&self, id: PendingImageId, responder: ImageResponder) {
+ let msg = ImageCacheCommand::AddListener(id, responder);
+ self.chan.send(msg).expect("Image cache thread is not available");
+ }
+
+ /// Inform the image cache about a response for a pending request.
+ pub fn notify_pending_response(&self, id: PendingImageId, data: FetchResponseMsg) {
+ let msg = ImageCacheCommand::StoreDecodeImage(id, data);
+ self.chan.send(msg).expect("Image cache thread is not available");
}
/// Shutdown the image cache thread.
pub fn exit(&self) {
+ // If the image cache is not available when we're trying to shut it down,
+ // that is not worth warning about.
let (response_chan, response_port) = ipc::channel().unwrap();
let _ = self.chan.send(ImageCacheCommand::Exit(response_chan));
let _ = response_port.recv();
diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs
index 8f1e004e8b0..d2ffee09887 100644
--- a/components/net_traits/lib.rs
+++ b/components/net_traits/lib.rs
@@ -192,7 +192,7 @@ pub trait FetchTaskTarget {
fn process_response_eof(&mut self, response: &Response);
}
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum FilteredMetadata {
Basic(Metadata),
Cors(Metadata),
@@ -200,7 +200,7 @@ pub enum FilteredMetadata {
OpaqueRedirect
}
-#[derive(Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub enum FetchMetadata {
Unfiltered(Metadata),
Filtered {
diff --git a/components/script/document_loader.rs b/components/script/document_loader.rs
index 30d83019c5f..a4ce36a2f57 100644
--- a/components/script/document_loader.rs
+++ b/components/script/document_loader.rs
@@ -116,6 +116,13 @@ impl DocumentLoader {
request: RequestInit,
fetch_target: IpcSender<FetchResponseMsg>) {
self.add_blocking_load(load);
+ self.fetch_async_background(request, fetch_target);
+ }
+
+ /// Initiate a new fetch that does not block the document load event.
+ pub fn fetch_async_background(&mut self,
+ request: RequestInit,
+ fetch_target: IpcSender<FetchResponseMsg>) {
self.resource_threads.sender().send(CoreResourceMsg::Fetch(request, fetch_target)).unwrap();
}
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 0e605780a20..4d38b39d333 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -62,7 +62,7 @@ use msg::constellation_msg::{FrameId, FrameType, PipelineId};
use net_traits::{Metadata, NetworkError, ReferrerPolicy, ResourceThreads};
use net_traits::filemanager_thread::RelativePos;
use net_traits::image::base::{Image, ImageMetadata};
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread};
+use net_traits::image_cache_thread::{ImageCacheThread, PendingImageId};
use net_traits::request::{Request, RequestInit};
use net_traits::response::{Response, ResponseBody};
use net_traits::response::HttpsState;
@@ -320,7 +320,7 @@ unsafe_no_jsmanaged_fields!(bool, f32, f64, String, AtomicBool, AtomicUsize, Uui
unsafe_no_jsmanaged_fields!(usize, u8, u16, u32, u64);
unsafe_no_jsmanaged_fields!(isize, i8, i16, i32, i64);
unsafe_no_jsmanaged_fields!(ServoUrl, ImmutableOrigin, MutableOrigin);
-unsafe_no_jsmanaged_fields!(Image, ImageMetadata, ImageCacheChan, ImageCacheThread);
+unsafe_no_jsmanaged_fields!(Image, ImageMetadata, ImageCacheThread, PendingImageId);
unsafe_no_jsmanaged_fields!(Metadata);
unsafe_no_jsmanaged_fields!(NetworkError);
unsafe_no_jsmanaged_fields!(Atom, Prefix, LocalName, Namespace, QualName);
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index fff339e1cc7..065b966d939 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -429,7 +429,9 @@ impl CanvasRenderingContext2D {
let img = match self.request_image_from_cache(url) {
ImageResponse::Loaded(img) => img,
- ImageResponse::PlaceholderLoaded(_) | ImageResponse::None | ImageResponse::MetadataLoaded(_) => {
+ ImageResponse::PlaceholderLoaded(_) |
+ ImageResponse::None |
+ ImageResponse::MetadataLoaded(_) => {
return None;
}
};
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index b174d2ec9a8..a51463f4674 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -337,15 +337,20 @@ impl<'a> From<&'a WebGLContextAttributes> for GLContextAttributes {
pub mod utils {
use dom::window::Window;
- use ipc_channel::ipc;
- use net_traits::image_cache_thread::{ImageCacheChan, ImageResponse};
+ use net_traits::image_cache_thread::{ImageResponse, UsePlaceholder, ImageOrMetadataAvailable};
+ use net_traits::image_cache_thread::CanRequestImages;
use servo_url::ServoUrl;
pub fn request_image_from_cache(window: &Window, url: ServoUrl) -> ImageResponse {
let image_cache = window.image_cache_thread();
- let (response_chan, response_port) = ipc::channel().unwrap();
- image_cache.request_image(url.into(), ImageCacheChan(response_chan), None);
- let result = response_port.recv().unwrap();
- result.image_response
+ let response =
+ image_cache.find_image_or_metadata(url.into(),
+ UsePlaceholder::No,
+ CanRequestImages::No);
+ match response {
+ Ok(ImageOrMetadataAvailable::ImageAvailable(image)) =>
+ ImageResponse::Loaded(image),
+ _ => ImageResponse::None,
+ }
}
}
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index ec9f2e1ec80..af98b013410 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use app_units::{Au, AU_PER_PX};
+use document_loader::{LoadType, LoadBlocker};
use dom::activation::Activatable;
use dom::attr::Attr;
use dom::bindings::cell::DOMRefCell;
@@ -16,6 +17,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::inheritance::Castable;
use dom::bindings::js::{LayoutJS, Root};
use dom::bindings::refcounted::Trusted;
+use dom::bindings::reflector::DomObject;
use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
@@ -34,13 +36,18 @@ use euclid::point::Point2D;
use html5ever_atoms::LocalName;
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
+use net_traits::{FetchResponseListener, FetchMetadata, NetworkError, FetchResponseMsg};
use net_traits::image::base::{Image, ImageMetadata};
-use net_traits::image_cache_thread::{ImageResponder, ImageResponse};
+use net_traits::image_cache_thread::{ImageResponder, ImageResponse, PendingImageId, ImageState};
+use net_traits::image_cache_thread::{UsePlaceholder, ImageOrMetadataAvailable, CanRequestImages};
+use net_traits::image_cache_thread::ImageCacheThread;
+use net_traits::request::{RequestInit, Type as RequestType};
+use network_listener::{NetworkListener, PreInvoke};
use num_traits::ToPrimitive;
use script_thread::Runnable;
use servo_url::ServoUrl;
use std::i32;
-use std::sync::Arc;
+use std::sync::{Arc, Mutex};
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
use task_source::TaskSource;
@@ -53,10 +60,12 @@ enum State {
Broken,
}
#[derive(JSTraceable, HeapSizeOf)]
+#[must_root]
struct ImageRequest {
state: State,
parsed_url: Option<ServoUrl>,
source_url: Option<DOMString>,
+ blocker: Option<LoadBlocker>,
#[ignore_heap_size_of = "Arc"]
image: Option<Arc<Image>>,
metadata: Option<ImageMetadata>,
@@ -74,7 +83,6 @@ impl HTMLImageElement {
}
}
-
struct ImageResponseHandlerRunnable {
element: Trusted<HTMLImageElement>,
image: ImageResponse,
@@ -94,75 +102,225 @@ impl Runnable for ImageResponseHandlerRunnable {
fn name(&self) -> &'static str { "ImageResponseHandlerRunnable" }
fn handler(self: Box<Self>) {
- // Update the image field
let element = self.element.root();
- let (image, metadata, trigger_image_load, trigger_image_error) = match self.image {
+ element.process_image_response(self.image);
+ }
+}
+
+/// The context required for asynchronously loading an external image.
+struct ImageContext {
+ /// The element that initiated the request.
+ elem: Trusted<HTMLImageElement>,
+ /// The initial URL requested.
+ url: ServoUrl,
+ /// Indicates whether the request failed, and why
+ status: Result<(), NetworkError>,
+ /// The cache ID for this request.
+ id: PendingImageId,
+}
+
+impl ImageContext {
+ fn image_cache(&self) -> ImageCacheThread {
+ let elem = self.elem.root();
+ window_from_node(&*elem).image_cache_thread().clone()
+ }
+}
+
+impl FetchResponseListener for ImageContext {
+ fn process_request_body(&mut self) {}
+ fn process_request_eof(&mut self) {}
+
+ fn process_response(&mut self, metadata: Result<FetchMetadata, NetworkError>) {
+ self.image_cache().notify_pending_response(
+ self.id,
+ FetchResponseMsg::ProcessResponse(metadata.clone()));
+
+ let metadata = metadata.ok().map(|meta| {
+ match meta {
+ FetchMetadata::Unfiltered(m) => m,
+ FetchMetadata::Filtered { unsafe_, .. } => unsafe_
+ }
+ });
+
+ let status_code = metadata.as_ref().and_then(|m| {
+ m.status.as_ref().map(|&(code, _)| code)
+ }).unwrap_or(0);
+
+ self.status = match status_code {
+ 0 => Err(NetworkError::Internal("No http status code received".to_owned())),
+ 200...299 => Ok(()), // HTTP ok status codes
+ _ => Err(NetworkError::Internal(format!("HTTP error code {}", status_code)))
+ };
+ }
+
+ fn process_response_chunk(&mut self, payload: Vec<u8>) {
+ if self.status.is_ok() {
+ self.image_cache().notify_pending_response(
+ self.id,
+ FetchResponseMsg::ProcessResponseChunk(payload));
+ }
+ }
+
+ fn process_response_eof(&mut self, response: Result<(), NetworkError>) {
+ let elem = self.elem.root();
+ let document = document_from_node(&*elem);
+ let image_cache = self.image_cache();
+ image_cache.notify_pending_response(self.id,
+ FetchResponseMsg::ProcessResponseEOF(response));
+ document.finish_load(LoadType::Image(self.url.clone()));
+ }
+}
+
+impl PreInvoke for ImageContext {}
+
+impl HTMLImageElement {
+ /// Update the current image with a valid URL.
+ fn update_image_with_url(&self, img_url: ServoUrl, src: DOMString) {
+ {
+ let mut current_request = self.current_request.borrow_mut();
+ current_request.parsed_url = Some(img_url.clone());
+ current_request.source_url = Some(src);
+
+ LoadBlocker::terminate(&mut current_request.blocker);
+ let document = document_from_node(self);
+ current_request.blocker =
+ Some(LoadBlocker::new(&*document, LoadType::Image(img_url.clone())));
+ }
+
+ fn add_cache_listener_for_element(image_cache: &ImageCacheThread,
+ id: PendingImageId,
+ elem: &HTMLImageElement) {
+ let trusted_node = Trusted::new(elem);
+ let (responder_sender, responder_receiver) = ipc::channel().unwrap();
+
+ let window = window_from_node(elem);
+ let task_source = window.networking_task_source();
+ let wrapper = window.get_runnable_wrapper();
+ ROUTER.add_route(responder_receiver.to_opaque(), box move |message| {
+ // Return the image via a message to the script thread, which marks the element
+ // as dirty and triggers a reflow.
+ let runnable = ImageResponseHandlerRunnable::new(
+ trusted_node.clone(), message.to().unwrap());
+ let _ = task_source.queue_with_wrapper(box runnable, &wrapper);
+ });
+
+ image_cache.add_listener(id, ImageResponder::new(responder_sender, id));
+ }
+
+ let window = window_from_node(self);
+ let image_cache = window.image_cache_thread();
+ let response =
+ image_cache.find_image_or_metadata(img_url.clone().into(),
+ UsePlaceholder::Yes,
+ CanRequestImages::Yes);
+ match response {
+ Ok(ImageOrMetadataAvailable::ImageAvailable(image)) => {
+ self.process_image_response(ImageResponse::Loaded(image));
+ }
+
+ Ok(ImageOrMetadataAvailable::MetadataAvailable(m)) => {
+ self.process_image_response(ImageResponse::MetadataLoaded(m));
+ }
+
+ Err(ImageState::Pending(id)) => {
+ add_cache_listener_for_element(image_cache, id, self);
+ }
+
+ Err(ImageState::LoadError) => {
+ self.process_image_response(ImageResponse::None);
+ }
+
+ Err(ImageState::NotRequested(id)) => {
+ add_cache_listener_for_element(image_cache, id, self);
+ self.request_image(img_url, id);
+ }
+ }
+ }
+
+ fn request_image(&self, img_url: ServoUrl, id: PendingImageId) {
+ let document = document_from_node(self);
+ let window = window_from_node(self);
+
+ let context = Arc::new(Mutex::new(ImageContext {
+ elem: Trusted::new(self),
+ url: img_url.clone(),
+ status: Ok(()),
+ id: id,
+ }));
+
+ let (action_sender, action_receiver) = ipc::channel().unwrap();
+ let listener = NetworkListener {
+ context: context,
+ task_source: window.networking_task_source(),
+ wrapper: Some(window.get_runnable_wrapper()),
+ };
+ ROUTER.add_route(action_receiver.to_opaque(), box move |message| {
+ listener.notify_fetch(message.to().unwrap());
+ });
+
+ let request = RequestInit {
+ url: img_url.clone(),
+ origin: document.url().clone(),
+ type_: RequestType::Image,
+ pipeline_id: Some(document.global().pipeline_id()),
+ .. RequestInit::default()
+ };
+
+ document.fetch_async(LoadType::Image(img_url), request, action_sender);
+ }
+
+ fn process_image_response(&self, image: ImageResponse) {
+ let (image, metadata, trigger_image_load, trigger_image_error) = match image {
ImageResponse::Loaded(image) | ImageResponse::PlaceholderLoaded(image) => {
- (Some(image.clone()), Some(ImageMetadata { height: image.height, width: image.width } ), true, false)
+ (Some(image.clone()),
+ Some(ImageMetadata { height: image.height, width: image.width }),
+ true,
+ false)
}
ImageResponse::MetadataLoaded(meta) => {
(None, Some(meta), false, false)
}
ImageResponse::None => (None, None, false, true)
};
- element.current_request.borrow_mut().image = image;
- element.current_request.borrow_mut().metadata = metadata;
+ self.current_request.borrow_mut().image = image;
+ self.current_request.borrow_mut().metadata = metadata;
// Mark the node dirty
- let document = document_from_node(&*element);
- element.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
+ self.upcast::<Node>().dirty(NodeDamage::OtherNodeDamage);
// Fire image.onload
if trigger_image_load {
- element.upcast::<EventTarget>().fire_event(atom!("load"));
+ self.upcast::<EventTarget>().fire_event(atom!("load"));
}
// Fire image.onerror
if trigger_image_error {
- element.upcast::<EventTarget>().fire_event(atom!("error"));
+ self.upcast::<EventTarget>().fire_event(atom!("error"));
}
+ LoadBlocker::terminate(&mut self.current_request.borrow_mut().blocker);
+
// Trigger reflow
- let window = window_from_node(&*document);
+ let window = window_from_node(self);
window.add_pending_reflow();
}
-}
-impl HTMLImageElement {
/// Makes the local `image` member match the status of the `src` attribute and starts
/// prefetching the image. This method must be called after `src` is changed.
fn update_image(&self, value: Option<(DOMString, ServoUrl)>) {
let document = document_from_node(self);
let window = document.window();
- let image_cache = window.image_cache_thread();
match value {
None => {
self.current_request.borrow_mut().parsed_url = None;
self.current_request.borrow_mut().source_url = None;
+ LoadBlocker::terminate(&mut self.current_request.borrow_mut().blocker);
self.current_request.borrow_mut().image = None;
}
Some((src, base_url)) => {
let img_url = base_url.join(&src);
if let Ok(img_url) = img_url {
- self.current_request.borrow_mut().parsed_url = Some(img_url.clone());
- self.current_request.borrow_mut().source_url = Some(src);
-
- let trusted_node = Trusted::new(self);
- let (responder_sender, responder_receiver) = ipc::channel().unwrap();
- let task_source = window.networking_task_source();
- let wrapper = window.get_runnable_wrapper();
- ROUTER.add_route(responder_receiver.to_opaque(), box move |message| {
- // Return the image via a message to the script thread, which marks the element
- // as dirty and triggers a reflow.
- let image_response = message.to().unwrap();
- let runnable = box ImageResponseHandlerRunnable::new(
- trusted_node.clone(), image_response);
- let _ = task_source.queue_with_wrapper(runnable, &wrapper);
- });
-
- image_cache.request_image_and_metadata(img_url.into(),
- window.image_cache_chan(),
- Some(ImageResponder::new(responder_sender)));
+ self.update_image_with_url(img_url, src);
} else {
// https://html.spec.whatwg.org/multipage/#update-the-image-data
// Step 11 (error substeps)
@@ -202,6 +360,7 @@ impl HTMLImageElement {
}
}
}
+
fn new_inherited(local_name: LocalName, prefix: Option<DOMString>, document: &Document) -> HTMLImageElement {
HTMLImageElement {
htmlelement: HTMLElement::new_inherited(local_name, prefix, document),
@@ -210,14 +369,16 @@ impl HTMLImageElement {
parsed_url: None,
source_url: None,
image: None,
- metadata: None
+ metadata: None,
+ blocker: None,
}),
pending_request: DOMRefCell::new(ImageRequest {
state: State::Unavailable,
parsed_url: None,
source_url: None,
image: None,
- metadata: None
+ metadata: None,
+ blocker: None,
}),
}
}
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index b6392fbdd19..93cdd1c31d0 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -42,7 +42,7 @@ use dom::location::Location;
use dom::mediaquerylist::{MediaQueryList, WeakMediaQueryListVec};
use dom::messageevent::MessageEvent;
use dom::navigator::Navigator;
-use dom::node::{Node, from_untrusted_node_address, window_from_node};
+use dom::node::{Node, from_untrusted_node_address, window_from_node, NodeDamage};
use dom::performance::Performance;
use dom::promise::Promise;
use dom::screen::Screen;
@@ -52,20 +52,23 @@ use euclid::{Point2D, Rect, Size2D};
use fetch;
use gfx_traits::ScrollRootId;
use ipc_channel::ipc::{self, IpcSender};
+use ipc_channel::router::ROUTER;
use js::jsapi::{HandleObject, HandleValue, JSAutoCompartment, JSContext};
use js::jsapi::{JS_GC, JS_GetRuntime};
use js::jsval::UndefinedValue;
use js::rust::Runtime;
+use layout_image::fetch_image_for_layout;
use msg::constellation_msg::{FrameType, PipelineId};
use net_traits::{ResourceThreads, ReferrerPolicy};
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheThread};
+use net_traits::image_cache_thread::{ImageResponder, ImageResponse};
+use net_traits::image_cache_thread::{PendingImageResponse, ImageCacheThread, PendingImageId};
use net_traits::storage_thread::StorageType;
use num_traits::ToPrimitive;
use open;
use profile_traits::mem::ProfilerChan as MemProfilerChan;
use profile_traits::time::ProfilerChan as TimeProfilerChan;
use rustc_serialize::base64::{FromBase64, STANDARD, ToBase64};
-use script_layout_interface::TrustedNodeAddress;
+use script_layout_interface::{TrustedNodeAddress, PendingImageState};
use script_layout_interface::message::{Msg, Reflow, ReflowQueryType, ScriptReflow};
use script_layout_interface::reporter::CSSErrorReporter;
use script_layout_interface::rpc::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC};
@@ -73,7 +76,7 @@ use script_layout_interface::rpc::{MarginStyleResponse, NodeScrollRootIdResponse
use script_layout_interface::rpc::{ResolvedStyleResponse, TextIndexResponse};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort, ScriptThreadEventCategory};
use script_thread::{MainThreadScriptChan, MainThreadScriptMsg, Runnable, RunnableWrapper};
-use script_thread::SendableMainThreadScriptChan;
+use script_thread::{SendableMainThreadScriptChan, ImageCacheMsg};
use script_traits::{ConstellationControlMsg, LoadData, MozBrowserEvent, UntrustedNodeAddress};
use script_traits::{DocumentState, TimerEvent, TimerEventId};
use script_traits::{ScriptMsg as ConstellationMsg, TimerEventRequest, WindowSizeData, WindowSizeType};
@@ -87,6 +90,7 @@ use std::ascii::AsciiExt;
use std::borrow::ToOwned;
use std::cell::Cell;
use std::collections::{HashMap, HashSet};
+use std::collections::hash_map::Entry;
use std::default::Default;
use std::io::{Write, stderr, stdout};
use std::mem;
@@ -165,7 +169,7 @@ pub struct Window {
#[ignore_heap_size_of = "channels are hard"]
image_cache_thread: ImageCacheThread,
#[ignore_heap_size_of = "channels are hard"]
- image_cache_chan: ImageCacheChan,
+ image_cache_chan: Sender<ImageCacheMsg>,
browsing_context: MutNullableJS<BrowsingContext>,
document: MutNullableJS<Document>,
history: MutNullableJS<History>,
@@ -253,7 +257,13 @@ pub struct Window {
webvr_thread: Option<IpcSender<WebVRMsg>>,
/// A map for storing the previous permission state read results.
- permission_state_invocation_results: DOMRefCell<HashMap<String, PermissionState>>
+ permission_state_invocation_results: DOMRefCell<HashMap<String, PermissionState>>,
+
+ /// All of the elements that have an outstanding image request that was
+ /// initiated by layout during a reflow. They are stored in the script thread
+ /// to ensure that the element can be marked dirty when the image data becomes
+ /// available at some point in the future.
+ pending_layout_images: DOMRefCell<HashMap<PendingImageId, Vec<JS<Node>>>>,
}
impl Window {
@@ -295,10 +305,6 @@ impl Window {
&self.script_chan.0
}
- pub fn image_cache_chan(&self) -> ImageCacheChan {
- self.image_cache_chan.clone()
- }
-
pub fn parent_info(&self) -> Option<(PipelineId, FrameType)> {
self.parent_info
}
@@ -346,6 +352,28 @@ impl Window {
pub fn permission_state_invocation_results(&self) -> &DOMRefCell<HashMap<String, PermissionState>> {
&self.permission_state_invocation_results
}
+
+ pub fn pending_image_notification(&self, response: PendingImageResponse) {
+ //XXXjdm could be more efficient to send the responses to the layout thread,
+ // rather than making the layout thread talk to the image cache to
+ // obtain the same data.
+ let mut images = self.pending_layout_images.borrow_mut();
+ let nodes = images.entry(response.id);
+ let nodes = match nodes {
+ Entry::Occupied(nodes) => nodes,
+ Entry::Vacant(_) => return,
+ };
+ for node in nodes.get() {
+ node.dirty(NodeDamage::OtherNodeDamage);
+ }
+ match response.response {
+ ImageResponse::MetadataLoaded(_) => {}
+ ImageResponse::Loaded(_) |
+ ImageResponse::PlaceholderLoaded(_) |
+ ImageResponse::None => { nodes.remove(); }
+ }
+ self.add_pending_reflow();
+ }
}
#[cfg(any(target_os = "macos", target_os = "linux", target_os = "windows"))]
@@ -1168,6 +1196,31 @@ impl Window {
self.emit_timeline_marker(marker.end());
}
+ let pending_images = self.layout_rpc.pending_images();
+ for image in pending_images {
+ let id = image.id;
+ let js_runtime = self.js_runtime.borrow();
+ let js_runtime = js_runtime.as_ref().unwrap();
+ let node = from_untrusted_node_address(js_runtime.rt(), image.node);
+
+ if let PendingImageState::Unrequested(ref url) = image.state {
+ fetch_image_for_layout(url.clone(), &*node, id, self.image_cache_thread.clone());
+ }
+
+ let mut images = self.pending_layout_images.borrow_mut();
+ let nodes = images.entry(id).or_insert(vec![]);
+ if nodes.iter().find(|n| &***n as *const _ == &*node as *const _).is_none() {
+ let (responder, responder_listener) = ipc::channel().unwrap();
+ let pipeline = self.upcast::<GlobalScope>().pipeline_id();
+ let image_cache_chan = self.image_cache_chan.clone();
+ ROUTER.add_route(responder_listener.to_opaque(), box move |message| {
+ let _ = image_cache_chan.send((pipeline, message.to().unwrap()));
+ });
+ self.image_cache_thread.add_listener(id, ImageResponder::new(responder, id));
+ nodes.push(JS::from_ref(&*node));
+ }
+ }
+
true
}
@@ -1227,7 +1280,8 @@ impl Window {
let ready_state = document.ReadyState();
- if ready_state == DocumentReadyState::Complete && !reftest_wait {
+ let pending_images = self.pending_layout_images.borrow().is_empty();
+ if ready_state == DocumentReadyState::Complete && !reftest_wait && pending_images {
let global_scope = self.upcast::<GlobalScope>();
let event = ConstellationMsg::SetDocumentState(global_scope.pipeline_id(), DocumentState::Idle);
global_scope.constellation_chan().send(event).unwrap();
@@ -1635,7 +1689,7 @@ impl Window {
network_task_source: NetworkingTaskSource,
history_task_source: HistoryTraversalTaskSource,
file_task_source: FileReadingTaskSource,
- image_cache_chan: ImageCacheChan,
+ image_cache_chan: Sender<ImageCacheMsg>,
image_cache_thread: ImageCacheThread,
resource_threads: ResourceThreads,
bluetooth_thread: IpcSender<BluetoothRequest>,
@@ -1717,6 +1771,7 @@ impl Window {
test_runner: Default::default(),
webvr_thread: webvr_thread,
permission_state_invocation_results: DOMRefCell::new(HashMap::new()),
+ pending_layout_images: DOMRefCell::new(HashMap::new()),
};
unsafe {
diff --git a/components/script/layout_image.rs b/components/script/layout_image.rs
new file mode 100644
index 00000000000..d903b435c26
--- /dev/null
+++ b/components/script/layout_image.rs
@@ -0,0 +1,81 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+//! Infrastructure to initiate network requests for images needed by the layout
+//! thread. The script thread needs to be responsible for them because there's
+//! no guarantee that the responsible nodes will still exist in the future if the
+//! layout thread holds on to them during asynchronous operations.
+
+use dom::bindings::reflector::DomObject;
+use dom::node::{Node, document_from_node};
+use ipc_channel::ipc;
+use ipc_channel::router::ROUTER;
+use net_traits::{FetchResponseMsg, FetchResponseListener, FetchMetadata, NetworkError};
+use net_traits::image_cache_thread::{ImageCacheThread, PendingImageId};
+use net_traits::request::{Type as RequestType, RequestInit as FetchRequestInit};
+use network_listener::{NetworkListener, PreInvoke};
+use servo_url::ServoUrl;
+use std::sync::{Arc, Mutex};
+
+struct LayoutImageContext {
+ id: PendingImageId,
+ cache: ImageCacheThread,
+}
+
+impl FetchResponseListener for LayoutImageContext {
+ fn process_request_body(&mut self) {}
+ fn process_request_eof(&mut self) {}
+ fn process_response(&mut self, metadata: Result<FetchMetadata, NetworkError>) {
+ self.cache.notify_pending_response(
+ self.id,
+ FetchResponseMsg::ProcessResponse(metadata));
+ }
+
+ fn process_response_chunk(&mut self, payload: Vec<u8>) {
+ self.cache.notify_pending_response(
+ self.id,
+ FetchResponseMsg::ProcessResponseChunk(payload));
+ }
+
+ fn process_response_eof(&mut self, response: Result<(), NetworkError>) {
+ self.cache.notify_pending_response(self.id,
+ FetchResponseMsg::ProcessResponseEOF(response));
+ }
+}
+
+impl PreInvoke for LayoutImageContext {}
+
+pub fn fetch_image_for_layout(url: ServoUrl,
+ node: &Node,
+ id: PendingImageId,
+ cache: ImageCacheThread) {
+ let context = Arc::new(Mutex::new(LayoutImageContext {
+ id: id,
+ cache: cache,
+ }));
+
+ let document = document_from_node(node);
+ let window = document.window();
+
+ let (action_sender, action_receiver) = ipc::channel().unwrap();
+ let listener = NetworkListener {
+ context: context,
+ task_source: window.networking_task_source(),
+ wrapper: Some(window.get_runnable_wrapper()),
+ };
+ ROUTER.add_route(action_receiver.to_opaque(), box move |message| {
+ listener.notify_fetch(message.to().unwrap());
+ });
+
+ let request = FetchRequestInit {
+ url: url,
+ origin: document.url().clone(),
+ type_: RequestType::Image,
+ pipeline_id: Some(document.global().pipeline_id()),
+ .. FetchRequestInit::default()
+ };
+
+ // Layout image loads do not delay the document load event.
+ document.mut_loader().fetch_async_background(request, action_sender);
+}
diff --git a/components/script/lib.rs b/components/script/lib.rs
index e5c93357bd2..81c7eb0901f 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -110,6 +110,7 @@ pub mod document_loader;
#[macro_use]
mod dom;
pub mod fetch;
+mod layout_image;
pub mod layout_wrapper;
mod mem;
mod microtask;
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 2ab421c707b..192923294a6 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -73,7 +73,7 @@ use microtask::{MicrotaskQueue, Microtask};
use msg::constellation_msg::{FrameId, FrameType, PipelineId, PipelineNamespace};
use net_traits::{CoreResourceMsg, FetchMetadata, FetchResponseListener};
use net_traits::{IpcSend, Metadata, ReferrerPolicy, ResourceThreads};
-use net_traits::image_cache_thread::{ImageCacheChan, ImageCacheResult, ImageCacheThread};
+use net_traits::image_cache_thread::{PendingImageResponse, ImageCacheThread};
use net_traits::request::{CredentialsMode, Destination, RequestInit};
use net_traits::storage_thread::StorageType;
use network_listener::NetworkListener;
@@ -120,6 +120,8 @@ use url::Position;
use webdriver_handlers;
use webvr_traits::WebVRMsg;
+pub type ImageCacheMsg = (PipelineId, PendingImageResponse);
+
thread_local!(pub static STACK_ROOTS: Cell<Option<RootCollectionPtr>> = Cell::new(None));
thread_local!(static SCRIPT_THREAD_ROOT: Cell<Option<*const ScriptThread>> = Cell::new(None));
@@ -230,7 +232,7 @@ enum MixedMessage {
FromConstellation(ConstellationControlMsg),
FromScript(MainThreadScriptMsg),
FromDevtools(DevtoolScriptControlMsg),
- FromImageCache(ImageCacheResult),
+ FromImageCache((PipelineId, PendingImageResponse)),
FromScheduler(TimerEvent)
}
@@ -444,10 +446,10 @@ pub struct ScriptThread {
layout_to_constellation_chan: IpcSender<LayoutMsg>,
/// The port on which we receive messages from the image cache
- image_cache_port: Receiver<ImageCacheResult>,
+ image_cache_port: Receiver<ImageCacheMsg>,
/// The channel on which the image cache can send messages to ourself.
- image_cache_channel: ImageCacheChan,
+ image_cache_channel: Sender<ImageCacheMsg>,
/// For providing contact with the time profiler.
time_profiler_chan: time::ProfilerChan,
@@ -646,11 +648,6 @@ impl ScriptThread {
let (ipc_devtools_sender, ipc_devtools_receiver) = ipc::channel().unwrap();
let devtools_port = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_devtools_receiver);
- // Ask the router to proxy IPC messages from the image cache thread to us.
- let (ipc_image_cache_channel, ipc_image_cache_port) = ipc::channel().unwrap();
- let image_cache_port =
- ROUTER.route_ipc_receiver_to_new_mpsc_receiver(ipc_image_cache_port);
-
let (timer_event_chan, timer_event_port) = channel();
// Ask the router to proxy IPC messages from the control port to us.
@@ -658,6 +655,8 @@ impl ScriptThread {
let boxed_script_sender = MainThreadScriptChan(chan.clone()).clone();
+ let (image_cache_channel, image_cache_port) = channel();
+
ScriptThread {
documents: DOMRefCell::new(Documents::new()),
browsing_contexts: DOMRefCell::new(HashMap::new()),
@@ -666,7 +665,7 @@ impl ScriptThread {
job_queue_map: Rc::new(JobQueue::new()),
image_cache_thread: state.image_cache_thread,
- image_cache_channel: ImageCacheChan(ipc_image_cache_channel),
+ image_cache_channel: image_cache_channel,
image_cache_port: image_cache_port,
resource_threads: state.resource_threads,
@@ -1111,8 +1110,11 @@ impl ScriptThread {
}
}
- fn handle_msg_from_image_cache(&self, msg: ImageCacheResult) {
- msg.responder.unwrap().respond(msg.image_response);
+ fn handle_msg_from_image_cache(&self, (id, response): (PipelineId, PendingImageResponse)) {
+ let window = self.documents.borrow().find_window(id);
+ if let Some(ref window) = window {
+ window.pending_image_notification(response);
+ }
}
fn handle_webdriver_msg(&self, pipeline_id: PipelineId, msg: WebDriverScriptCommand) {
diff --git a/components/script_layout_interface/lib.rs b/components/script_layout_interface/lib.rs
index 87b76763d7d..1793e06909d 100644
--- a/components/script_layout_interface/lib.rs
+++ b/components/script_layout_interface/lib.rs
@@ -43,6 +43,9 @@ use canvas_traits::CanvasMsg;
use core::nonzero::NonZero;
use ipc_channel::ipc::IpcSender;
use libc::c_void;
+use net_traits::image_cache_thread::PendingImageId;
+use script_traits::UntrustedNodeAddress;
+use servo_url::ServoUrl;
use std::sync::atomic::AtomicIsize;
use style::data::ElementData;
@@ -137,3 +140,18 @@ pub fn is_image_data(uri: &str) -> bool {
static TYPES: &'static [&'static str] = &["data:image/png", "data:image/gif", "data:image/jpeg"];
TYPES.iter().any(|&type_| uri.starts_with(type_))
}
+
+/// Whether the pending image needs to be fetched or is waiting on an existing fetch.
+pub enum PendingImageState {
+ Unrequested(ServoUrl),
+ PendingResponse,
+}
+
+/// The data associated with an image that is not yet present in the image cache.
+/// Used by the script thread to hold on to DOM elements that need to be repainted
+/// when an image fetch is complete.
+pub struct PendingImage {
+ pub state: PendingImageState,
+ pub node: UntrustedNodeAddress,
+ pub id: PendingImageId,
+}
diff --git a/components/script_layout_interface/rpc.rs b/components/script_layout_interface/rpc.rs
index 2fb75f6b959..78e99571ee7 100644
--- a/components/script_layout_interface/rpc.rs
+++ b/components/script_layout_interface/rpc.rs
@@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+use PendingImage;
use app_units::Au;
use euclid::point::Point2D;
use euclid::rect::Rect;
@@ -37,7 +38,8 @@ pub trait LayoutRPC {
fn offset_parent(&self) -> OffsetParentResponse;
/// Query layout for the resolve values of the margin properties for an element.
fn margin_style(&self) -> MarginStyleResponse;
-
+ /// Requests the list of not-yet-loaded images that were encountered in the last reflow.
+ fn pending_images(&self) -> Vec<PendingImage>;
fn nodes_from_point(&self, page_point: Point2D<f32>, client_point: Point2D<f32>) -> Vec<UntrustedNodeAddress>;
fn text_index(&self) -> TextIndexResponse;
diff --git a/components/script_plugins/unrooted_must_root.rs b/components/script_plugins/unrooted_must_root.rs
index 660a0c58781..ad74f6c4b8f 100644
--- a/components/script_plugins/unrooted_must_root.rs
+++ b/components/script_plugins/unrooted_must_root.rs
@@ -52,6 +52,7 @@ fn is_unrooted_ty(cx: &LateContext, ty: &ty::TyS, in_new_function: bool) -> bool
} else if match_def_path(cx, did.did, &["core", "cell", "Ref"])
|| match_def_path(cx, did.did, &["core", "cell", "RefMut"])
|| match_def_path(cx, did.did, &["core", "slice", "Iter"])
+ || match_def_path(cx, did.did, &["std", "collections", "hash", "map", "Entry"])
|| match_def_path(cx, did.did, &["std", "collections", "hash", "map", "OccupiedEntry"])
|| match_def_path(cx, did.did, &["std", "collections", "hash", "map", "VacantEntry"]) {
// Structures which are semantically similar to an &ptr.
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index afda35f1582..69b9bbeceb8 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -281,8 +281,7 @@ fn create_constellation(user_agent: Cow<'static, str>,
devtools_chan.clone(),
time_profiler_chan.clone(),
config_dir);
- let image_cache_thread = new_image_cache_thread(public_resource_threads.sender(),
- webrender_api_sender.create_api());
+ let image_cache_thread = new_image_cache_thread(webrender_api_sender.create_api());
let font_cache_thread = FontCacheThread::new(public_resource_threads.sender(),
Some(webrender_api_sender.create_api()));
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini
deleted file mode 100644
index 396d39eeb09..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_1.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini
deleted file mode 100644
index 4dcc60a0824..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_10.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini
deleted file mode 100644
index f26feab7168..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_11.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini
deleted file mode 100644
index 8eb54f816a9..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_12.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini
deleted file mode 100644
index 856288b3d70..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_13.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_13.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini
deleted file mode 100644
index 3ba92dd7d75..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_2.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini
deleted file mode 100644
index 277d697527d..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_3.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini
deleted file mode 100644
index 6ced959e23b..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_4.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini
deleted file mode 100644
index 8cd1d610a01..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_5.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini
deleted file mode 100644
index 8d2dfb702fb..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_6.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini
deleted file mode 100644
index e24ff5c2fae..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_7.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini
deleted file mode 100644
index 13688c76798..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_8.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini b/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini
deleted file mode 100644
index 0cf6369939f..00000000000
--- a/tests/wpt/metadata/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_9.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[drawimage_html_image_9.html]
- type: reftest
- disabled: see _mozilla
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index edbb4f2386e..bca20e4f735 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -130647,11 +130647,11 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html": [
- "8cff9e2344fbbe84b2ce315f260e69c6ad92dd51",
+ "461f306d3083248243d7e5a4aac376be59adefd3",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html": [
- "ca239d9a40410e4331863f2d11daabae3e590af3",
+ "970d92ab928086b48dce22c2a873a0e5adde1355",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10_ref.html": [
@@ -130659,7 +130659,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html": [
- "04415ce09b3b52561f5d179e7a6a8050199189c9",
+ "9faf39bcfb3ed5f86b78fabcb8566386ca519b6e",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11_ref.html": [
@@ -130667,7 +130667,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html": [
- "efee9a63933437315c9adec573113d8dee786659",
+ "8f4e8952d6959d7ad3c32ca02a6b91eb29c9bc28",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12_ref.html": [
@@ -130687,7 +130687,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html": [
- "b03f11e43e455e2d1f453ecc2a4de00e00005ebc",
+ "310d7bf19699754d6248599820e17850f0a8de2c",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2_ref.html": [
@@ -130695,7 +130695,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html": [
- "134fa026f56880acb111a8e91efe3a8bcc03bb6b",
+ "368a40dff341c6677a23c5ffeb4a69dc447360e6",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3_ref.html": [
@@ -130703,7 +130703,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html": [
- "5d7254f7bbc8c6feffb2a4fcfeecb06fe6ed3d6c",
+ "a0aa4f32aeb8b0b4178b0efa1446455387f281eb",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4_ref.html": [
@@ -130711,7 +130711,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html": [
- "6a02b961aa4a5eb013366cd85dbea06fd2c08da0",
+ "7d92f1f10e7bc29564d7a8b8e49d42f552ad0782",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5_ref.html": [
@@ -130719,7 +130719,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html": [
- "ce7cbe3b76274177301acca263f7cdd6c4033aa1",
+ "c60e69eaf1e92c6e2cd53936e52683054fbddd32",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6_ref.html": [
@@ -130727,7 +130727,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html": [
- "f5469ba799e0845bc59766d76713ee052f3e6966",
+ "d305b82f0329bbedd5e950287619e8a7dc926536",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7_ref.html": [
@@ -130735,7 +130735,7 @@
"support"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html": [
- "37958b2fb55bd90567c7c0b64b599165b20992b9",
+ "00a95cb5ad9f256101ea65f296a201d7074ef9f5",
"reftest"
],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8_ref.html": [
@@ -215651,7 +215651,7 @@
"support"
],
"webgl/conformance-1.0.3/resources/js-test-pre.js": [
- "0ea0d3b945ac49d9a98c39788b2bc18c82de762a",
+ "23bc989f25ee5371a45762bac36c260d230001ca",
"support"
],
"webgl/conformance-1.0.3/resources/js-test-style.css": [
@@ -215687,7 +215687,7 @@
"support"
],
"webgl/tools/js-test-pre.patch": [
- "b903fa3810ba7538a735d4126d20364d285b88cc",
+ "9d692bf9bf2b37385f1193855e2605573af8249e",
"support"
],
"webgl/tools/unit.patch": [
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini
index 1435a098642..2aa027d16bf 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/current-pixel-density/basic.html.ini
@@ -1,8 +1,5 @@
[basic.html]
type: testharness
- [<img src="/images/green-256x256.png" data-expect="256">]
- expected: FAIL
-
[<img srcset="/images/green-256x256.png 1x" data-expect="256">]
expected: FAIL
diff --git a/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini b/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini
index 85e7b6ce91b..52f13d00053 100644
--- a/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini
+++ b/tests/wpt/metadata/old-tests/submission/Opera/script_scheduling/028.html.ini
@@ -1,4 +1,5 @@
[028.html]
+ type: testharness
[ scheduler: javascript: URL]
expected: FAIL
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini
index a6a2d5407ce..bc630e5579b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/buffers/buffer-data-array-buffer-delete.html.ini
@@ -7,3 +7,6 @@
[WebGL test #1: gl should be non-null. Was null]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini
index 1de68eb69bb..7ebc47ba3e6 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/misc/shader-precision-format.html.ini
@@ -40,3 +40,6 @@
[WebGL test #12: gl.getShaderPrecisionFormat(gl.HIGH_INT, gl.VERTEX_SHADER) threw exception TypeError: gl.getShaderPrecisionFormat is not a function]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini
index b20c90fdcc4..991e156f928 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/abs/abs_001_to_006.html.ini
@@ -1,5 +1,9 @@
[abs_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: abs_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini
index 329ebe92cd7..939910f1c1b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/acos/acos_001_to_006.html.ini
@@ -1,5 +1,9 @@
[acos_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: acos_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini
index ef08d504340..acffbf3016b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/all/all_001_to_004.html.ini
@@ -1,5 +1,9 @@
[all_001_to_004.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: all_001_to_004.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini
index a39d7edb2d1..d09a1d94e36 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/any/any_001_to_004.html.ini
@@ -1,5 +1,9 @@
[any_001_to_004.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: any_001_to_004.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini
index 1ef57e20b58..25ecb8e139d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/array/array_001_to_006.html.ini
@@ -1,5 +1,9 @@
[array_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: array_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini
index 3612a1d8936..0d292576fa3 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/asin/asin_001_to_006.html.ini
@@ -1,5 +1,9 @@
[asin_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: asin_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini
index 1ee5087e713..c7027a0105e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_001_to_008.html.ini
@@ -1,5 +1,9 @@
[atan_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: atan_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini
index 6c3e3baf8a8..b9ddf6f5296 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/atan/atan_009_to_012.html.ini
@@ -1,5 +1,9 @@
[atan_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: atan_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini
index e10d0acdb9a..d214b0ca531 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_001_to_008.html.ini
@@ -1,5 +1,9 @@
[biConstants_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: biConstants_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini
index bb816c8dfdd..e34d61f3adc 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biConstants/biConstants_009_to_016.html.ini
@@ -1,5 +1,9 @@
[biConstants_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: biConstants_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini
index 48123c753d3..5717ac47d9a 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html.ini
@@ -1,5 +1,9 @@
[biuDepthRange_001_to_002.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: biuDepthRange_001_to_002.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini
index 10c41ca64f4..2a5ca589aad 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/ceil/ceil_001_to_006.html.ini
@@ -1,5 +1,9 @@
[ceil_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: ceil_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini
index 0e3547feaa4..dcf4ec23f80 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/clamp/clamp_001_to_006.html.ini
@@ -1,5 +1,9 @@
[clamp_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: clamp_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini
index dfac4fee4fa..6b1750cfd72 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_001_to_008.html.ini
@@ -1,5 +1,9 @@
[control_flow_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: control_flow_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini
index 192cf2bbd56..0e8e3b3b1ea 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/control_flow/control_flow_009_to_010.html.ini
@@ -1,5 +1,9 @@
[control_flow_009_to_010.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: control_flow_009_to_010.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini
index 04f57367e3b..0d4560efeca 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cos/cos_001_to_006.html.ini
@@ -1,5 +1,9 @@
[cos_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: cos_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini
index 55c939623b4..7f59ec33c9b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/cross/cross_001_to_002.html.ini
@@ -1,5 +1,9 @@
[cross_001_to_002.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: cross_001_to_002.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini
index 88e2cef91e6..61ff742b902 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/default/default_001_to_001.html.ini
@@ -1,5 +1,9 @@
[default_001_to_001.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: default_001_to_001.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini
index cf631ad9f6b..aacef53656e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/degrees/degrees_001_to_006.html.ini
@@ -1,5 +1,9 @@
[degrees_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: degrees_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini
index 4da12ab1e73..e0dbd874347 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/discard/discard_001_to_002.html.ini
@@ -1,5 +1,9 @@
[discard_001_to_002.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: discard_001_to_002.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini
index 4e97077ec26..2ca71664454 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/distance/distance_001_to_006.html.ini
@@ -1,5 +1,9 @@
[distance_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: distance_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini
index 9a72122da3f..57962188759 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/dot/dot_001_to_006.html.ini
@@ -1,5 +1,9 @@
[dot_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: dot_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini
index 3b482eee638..03bb46b5056 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_001_to_008.html.ini
@@ -1,5 +1,9 @@
[equal_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: equal_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini
index 9ccc1eb336d..0c5afbe9477 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/equal/equal_009_to_012.html.ini
@@ -1,5 +1,9 @@
[equal_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: equal_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini
index 583d6898cb3..6a6c2f47a3d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_001_to_008.html.ini
@@ -1,5 +1,9 @@
[exp_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: exp_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini
index 1ecd37cd78f..0b407e8700d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp/exp_009_to_012.html.ini
@@ -1,5 +1,9 @@
[exp_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: exp_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini
index 6e41d93c519..3cf484ada35 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_001_to_008.html.ini
@@ -1,5 +1,9 @@
[exp2_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: exp2_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini
index ce7d283617b..80aa3ac40ab 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/exp2/exp2_009_to_012.html.ini
@@ -1,5 +1,9 @@
[exp2_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: exp2_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini
index 7e70f85197c..b7665786180 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/faceforward/faceforward_001_to_006.html.ini
@@ -1,5 +1,9 @@
[faceforward_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: faceforward_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini
index 01bd1290f33..3fe704417b3 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/floor/floor_001_to_006.html.ini
@@ -1,5 +1,9 @@
[floor_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: floor_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini
index c04e0bd1d38..2d89e08f05f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/fract/fract_001_to_006.html.ini
@@ -1,5 +1,9 @@
[fract_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: fract_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini
index c08348564c1..78ccd712f0d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.ini
@@ -1,5 +1,9 @@
[gl_FragCoord_001_to_003.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: gl_FragCoord_001_to_003.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini
index 363867c8ee4..643f8efc548 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/gl_FrontFacing/gl_FrontFacing_001_to_001.html.ini
@@ -1,5 +1,9 @@
[gl_FrontFacing_001_to_001.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: gl_FrontFacing_001_to_001.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini
index f41a9ac526b..d4f5b18aaff 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThan/greaterThan_001_to_008.html.ini
@@ -1,5 +1,9 @@
[greaterThan_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: greaterThan_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini
index 304f3f41296..c0829c9e0ad 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/greaterThanEqual/greaterThanEqual_001_to_008.html.ini
@@ -1,5 +1,9 @@
[greaterThanEqual_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: greaterThanEqual_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini
index 4c328cddc5f..450ca50d5a3 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/inversesqrt/inversesqrt_001_to_006.html.ini
@@ -1,5 +1,9 @@
[inversesqrt_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: inversesqrt_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini
index a6226a4041b..8176f9f8529 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/length/length_001_to_006.html.ini
@@ -1,5 +1,9 @@
[length_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: length_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini
index e78e37cddf1..9289af4daa9 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThan/lessThan_001_to_008.html.ini
@@ -1,5 +1,9 @@
[lessThan_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: lessThan_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini
index 5d5f334bcbd..c183c8f0b96 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/lessThanEqual/lessThanEqual_001_to_008.html.ini
@@ -1,5 +1,9 @@
[lessThanEqual_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: lessThanEqual_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini
index e7904a59644..b372812e6dd 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_001_to_008.html.ini
@@ -1,5 +1,9 @@
[log_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: log_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini
index f8410ce0be6..7c81898b942 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log/log_009_to_012.html.ini
@@ -1,5 +1,9 @@
[log_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: log_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini
index 0381a266892..f65c1dc80f6 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_001_to_008.html.ini
@@ -1,5 +1,9 @@
[log2_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: log2_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini
index 025e65b4175..00de46eef34 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/log2/log2_009_to_012.html.ini
@@ -1,5 +1,9 @@
[log2_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: log2_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini
index 5c5ffe6c19f..8f8aa834907 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_001_to_008.html.ini
@@ -1,5 +1,9 @@
[mat_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini
index 18cf0900239..0b0bb59cdea 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_009_to_016.html.ini
@@ -1,5 +1,9 @@
[mat_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini
index d6d9496a55f..728a9c84d6e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_017_to_024.html.ini
@@ -1,5 +1,9 @@
[mat_017_to_024.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_017_to_024.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini
index 0f2c83cf0fd..4aaad2d5851 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_025_to_032.html.ini
@@ -1,5 +1,9 @@
[mat_025_to_032.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_025_to_032.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini
index 2b8d6fb8b1b..e12b8cbd7b2 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_033_to_040.html.ini
@@ -1,5 +1,9 @@
[mat_033_to_040.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_033_to_040.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini
index 368e3acebce..08f72c5b14d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat/mat_041_to_046.html.ini
@@ -1,5 +1,9 @@
[mat_041_to_046.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat_041_to_046.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini
index 212454d0d2d..886c8cee8dd 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mat3/mat3_001_to_006.html.ini
@@ -1,5 +1,9 @@
[mat3_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mat3_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini
index 9d131e82782..7fb01b76836 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/matrixCompMult/matrixCompMult_001_to_004.html.ini
@@ -1,5 +1,9 @@
[matrixCompMult_001_to_004.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: matrixCompMult_001_to_004.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini
index 1d081a0f948..c089f89a0a8 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/max/max_001_to_006.html.ini
@@ -1,5 +1,9 @@
[max_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: max_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini
index 53bf0504f4a..399fc5e9b0f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/min/min_001_to_006.html.ini
@@ -1,5 +1,9 @@
[min_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: min_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini
index ca4ef06c413..7bbae35964c 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mix/mix_001_to_006.html.ini
@@ -1,5 +1,9 @@
[mix_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mix_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini
index 53894c84fef..6b88e1dd009 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/mod/mod_001_to_008.html.ini
@@ -1,5 +1,9 @@
[mod_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: mod_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini
index deb07aedc87..46b02c289e1 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/normalize/normalize_001_to_006.html.ini
@@ -1,5 +1,9 @@
[normalize_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: normalize_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini
index 39daeaaaaf9..72d68a305a7 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/not/not_001_to_004.html.ini
@@ -1,5 +1,9 @@
[not_001_to_004.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: not_001_to_004.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini
index 1e7bbf9b4ca..eee2353635d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_001_to_008.html.ini
@@ -1,5 +1,9 @@
[notEqual_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: notEqual_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini
index ed4d8d18159..1d858e20d6f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/notEqual/notEqual_009_to_012.html.ini
@@ -1,5 +1,9 @@
[notEqual_009_to_012.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: notEqual_009_to_012.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini
index a7bf41d95f1..2c7e690cac4 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_001_to_008.html.ini
@@ -1,5 +1,9 @@
[operators_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: operators_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini
index 55d4d1420a4..86820f04f33 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_009_to_016.html.ini
@@ -1,5 +1,9 @@
[operators_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: operators_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini
index 50e76394ae4..09d3f849088 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_017_to_024.html.ini
@@ -1,5 +1,9 @@
[operators_017_to_024.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: operators_017_to_024.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini
index e92cdbf063f..e9de65f960e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/operators/operators_025_to_026.html.ini
@@ -1,5 +1,9 @@
[operators_025_to_026.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: operators_025_to_026.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini
index c9bd6922deb..01dd0158385 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_001_to_008.html.ini
@@ -1,5 +1,9 @@
[pow_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: pow_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini
index 3587a2c1dcc..55684a86cff 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_009_to_016.html.ini
@@ -1,5 +1,9 @@
[pow_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: pow_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini
index 6ea71a428ae..e0e26df362d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/pow/pow_017_to_024.html.ini
@@ -1,5 +1,9 @@
[pow_017_to_024.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: pow_017_to_024.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini
index 6b747a87714..c3811e3eeab 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/radians/radians_001_to_006.html.ini
@@ -1,5 +1,9 @@
[radians_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: radians_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini
index 733408d14bd..f728177114f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/reflect/reflect_001_to_006.html.ini
@@ -1,5 +1,9 @@
[reflect_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: reflect_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini
index 8e854363f60..0f31e5f06ba 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/refract/refract_001_to_006.html.ini
@@ -1,5 +1,9 @@
[refract_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: refract_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini
index 5a4081fe508..1bc5d46cabe 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sign/sign_001_to_006.html.ini
@@ -1,5 +1,9 @@
[sign_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: sign_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini
index 1ac344036b9..440663f97be 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sin/sin_001_to_006.html.ini
@@ -1,5 +1,9 @@
[sin_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: sin_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini
index 3d62449ab8c..ed56c5f75f4 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/smoothstep/smoothstep_001_to_006.html.ini
@@ -1,5 +1,9 @@
[smoothstep_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: smoothstep_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini
index d6fbd48e995..1b06e03cfdd 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/sqrt/sqrt_001_to_006.html.ini
@@ -1,5 +1,9 @@
[sqrt_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: sqrt_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini
index 8c6954b29f9..e9a3a5267a4 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/step/step_001_to_006.html.ini
@@ -1,5 +1,9 @@
[step_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: step_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini
index 3ab399b47d5..867ebd35e8f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_001_to_008.html.ini
@@ -1,5 +1,9 @@
[struct_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini
index d39da1e71d5..7ac9f618c43 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_009_to_016.html.ini
@@ -1,5 +1,9 @@
[struct_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini
index 61d8e4ea90a..dcbc45fc798 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_017_to_024.html.ini
@@ -1,5 +1,9 @@
[struct_017_to_024.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_017_to_024.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini
index 9a243156e1d..459fbcb356e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_025_to_032.html.ini
@@ -1,5 +1,9 @@
[struct_025_to_032.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_025_to_032.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini
index a94238d5616..ab2a830136b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_033_to_040.html.ini
@@ -1,5 +1,9 @@
[struct_033_to_040.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_033_to_040.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini
index c4612b7879b..36f905582cf 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_041_to_048.html.ini
@@ -1,5 +1,9 @@
[struct_041_to_048.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_041_to_048.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini
index 7be1b66d1ec..568cac3d864 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/struct/struct_049_to_056.html.ini
@@ -1,5 +1,9 @@
[struct_049_to_056.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: struct_049_to_056.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini
index ae075bf497c..26448587654 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_001_to_008.html.ini
@@ -1,5 +1,9 @@
[swizzlers_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini
index b80fe0a03bf..b3cbdda6f25 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_009_to_016.html.ini
@@ -1,5 +1,9 @@
[swizzlers_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini
index 0e65da45c2a..f1a17ff0a83 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_017_to_024.html.ini
@@ -1,5 +1,9 @@
[swizzlers_017_to_024.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_017_to_024.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini
index 07b41cced8d..b93a1af2ebc 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_025_to_032.html.ini
@@ -1,5 +1,9 @@
[swizzlers_025_to_032.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_025_to_032.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini
index 2dc0c2dfb0a..158c52433e3 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_033_to_040.html.ini
@@ -1,5 +1,9 @@
[swizzlers_033_to_040.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_033_to_040.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini
index 76d754b7a3e..d9d19cab206 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_041_to_048.html.ini
@@ -1,5 +1,9 @@
[swizzlers_041_to_048.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_041_to_048.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini
index d9fd6f726bf..34c0c72fce0 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_049_to_056.html.ini
@@ -1,5 +1,9 @@
[swizzlers_049_to_056.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_049_to_056.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini
index c981dafbe11..6f76695cbf7 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_057_to_064.html.ini
@@ -1,5 +1,9 @@
[swizzlers_057_to_064.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_057_to_064.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini
index fc8b775c9f1..814126f23b6 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_065_to_072.html.ini
@@ -1,5 +1,9 @@
[swizzlers_065_to_072.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_065_to_072.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini
index 6a13e876e08..eddaa83fb8a 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_073_to_080.html.ini
@@ -1,5 +1,9 @@
[swizzlers_073_to_080.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_073_to_080.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini
index 08a94f1d235..ca0d202c379 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_081_to_088.html.ini
@@ -1,5 +1,9 @@
[swizzlers_081_to_088.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_081_to_088.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini
index ded833c7293..8fda382bd99 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_089_to_096.html.ini
@@ -1,5 +1,9 @@
[swizzlers_089_to_096.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_089_to_096.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini
index 1586a5cbfb6..ed1287b4f40 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_097_to_104.html.ini
@@ -1,5 +1,9 @@
[swizzlers_097_to_104.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_097_to_104.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini
index a2a2f40a675..596c2b6c26c 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_105_to_112.html.ini
@@ -1,5 +1,9 @@
[swizzlers_105_to_112.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_105_to_112.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini
index 7422017f264..0ecc54b5575 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/swizzlers/swizzlers_113_to_120.html.ini
@@ -1,5 +1,9 @@
[swizzlers_113_to_120.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: swizzlers_113_to_120.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini
index a0c902018d7..23bfbc539ef 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/tan/tan_001_to_006.html.ini
@@ -1,5 +1,9 @@
[tan_001_to_006.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: tan_001_to_006.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini
index f311483f8e2..d969967fe50 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_001_to_008.html.ini
@@ -1,5 +1,9 @@
[vec_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: vec_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini
index a2597350327..b22ea568647 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_009_to_016.html.ini
@@ -1,5 +1,9 @@
[vec_009_to_016.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: vec_009_to_016.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini
index 82b59b6365f..f2211b359d7 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec/vec_017_to_018.html.ini
@@ -1,5 +1,9 @@
[vec_017_to_018.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: vec_017_to_018.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini
index 6c4611116ea..5779234d80d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/ogles/GL/vec3/vec3_001_to_008.html.ini
@@ -1,5 +1,9 @@
[vec3_001_to_008.html]
type: testharness
+ expected: ERROR
[WebGL GLSL conformance test: vec3_001_to_008.html]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini
index c3b2db370fb..5ce1ded25ed 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/renderbuffers/framebuffer-state-restoration.html.ini
@@ -4,3 +4,6 @@
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini
index 096d0cf2f7b..b0baea6f6b0 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-switch.html.ini
@@ -1,5 +1,9 @@
[framebuffer-switch.html]
type: testharness
+ expected: ERROR
[WebGL framebuffer switching conformance test.]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini
index bdc94b78aae..af5245bcb8e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/framebuffer-texture-switch.html.ini
@@ -1,5 +1,9 @@
[framebuffer-texture-switch.html]
type: testharness
+ expected: ERROR
[WebGL framebuffer texture attachment switching conformance test.]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini
new file mode 100644
index 00000000000..a37a8723e08
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/many-draw-calls.html.ini
@@ -0,0 +1,6 @@
+[many-draw-calls.html]
+ type: testharness
+ expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini
index 0992122040d..a4802bc416d 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/multisample-corruption.html.ini
@@ -4,3 +4,6 @@
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini
index 0c1f91ec0a2..637b0ecffe1 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/rendering/point-with-gl-pointcoord-in-fragment-shader.html.ini
@@ -1,5 +1,6 @@
[point-with-gl-pointcoord-in-fragment-shader.html]
type: testharness
+ expected: ERROR
[WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini
index 1fbcfd20375..fa37c3d4ea7 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/state/gl-object-get-calls.html.ini
@@ -1,5 +1,6 @@
[gl-object-get-calls.html]
type: testharness
+ expected: ERROR
[WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini
index 5c34865d346..95ccc65d990 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/copy-tex-image-and-sub-image-2d.html.ini
@@ -1,5 +1,9 @@
[copy-tex-image-and-sub-image-2d.html]
type: testharness
+ expected: ERROR
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini
index c74db002eec..efae6fb14de 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-pixelstorei.html.ini
@@ -1,5 +1,6 @@
[gl-pixelstorei.html]
type: testharness
+ expected: ERROR
[WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini
new file mode 100644
index 00000000000..24192a4c379
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/gl-teximage.html.ini
@@ -0,0 +1,71 @@
+[gl-teximage.html]
+ type: testharness
+ [WebGL test #2: at (0, 15) expected: 0,0,0,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #3: at (128, 15) expected: 255,0,255,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #4: at (255, 15) expected: 0,0,255,255 was 0,0,0,255]
+ expected: FAIL
+
+ [WebGL test #5: at (0, 8) expected: 128,128,128,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #6: at (128, 8) expected: 255,255,255,255 was 128,128,128,255]
+ expected: FAIL
+
+ [WebGL test #9: at (128, 0) expected: 255,255,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #10: at (255, 0) expected: 0,255,0,255 was 0,0,0,255]
+ expected: FAIL
+
+ [WebGL test #38: Half the pixels in channel 0 should be >= 128,128,128. found 25%]
+ expected: FAIL
+
+ [WebGL test #40: Half the pixels in channel 1 should be >= 128,128,128. found 25%]
+ expected: FAIL
+
+ [WebGL test #42: Half the pixels in channel 2 should be >= 128,128,128. found 25%]
+ expected: FAIL
+
+ [WebGL test #52: at (0, 0) expected: 255,255,255,127 was 128,128,128,128]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 0) expected: 127,127,127,127 was 64,64,64,128]
+ expected: FAIL
+
+ [WebGL test #59: at (128, 15) expected: 255,255,0,255 was 255,255,255,255]
+ expected: FAIL
+
+ [WebGL test #60: at (255, 15) expected: 255,0,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #61: at (0, 8) expected: 255,0,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #62: at (128, 8) expected: 255,0,0,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #63: at (255, 8) expected: 0,255,0,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #64: at (0, 0) expected: 0,0,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #65: at (128, 0) expected: 0,0,255,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #66: at (255, 0) expected: 255,0,0,255 was 0,0,0,255]
+ expected: FAIL
+
+ [WebGL test #71: at (128, 8) expected: 15,121,0,255 was 133,0,255,255]
+ expected: FAIL
+
+ [WebGL test #74: at (128, 8) expected: 0,0,255,255 was 1,255,255,255]
+ expected: FAIL
+
+ [WebGL test #76: at (128, 8) expected: 0,0,255,255 was 1,255,255,255]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini
new file mode 100644
index 00000000000..1d20e0565e2
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgb565.html.ini
@@ -0,0 +1,6 @@
+[tex-image-and-sub-image-2d-with-canvas-rgb565.html]
+ type: testharness
+ expected: ERROR
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini
new file mode 100644
index 00000000000..00ae17a1715
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba4444.html.ini
@@ -0,0 +1,6 @@
+[tex-image-and-sub-image-2d-with-canvas-rgba4444.html]
+ type: testharness
+ expected: ERROR
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini
new file mode 100644
index 00000000000..5adc2092e21
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas-rgba5551.html.ini
@@ -0,0 +1,6 @@
+[tex-image-and-sub-image-2d-with-canvas-rgba5551.html]
+ type: testharness
+ expected: ERROR
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini
new file mode 100644
index 00000000000..468299a537d
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-canvas.html.ini
@@ -0,0 +1,6 @@
+[tex-image-and-sub-image-2d-with-canvas.html]
+ type: testharness
+ expected: ERROR
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini
new file mode 100644
index 00000000000..479a6654f1f
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-image-data-rgb565.html.ini
@@ -0,0 +1,14 @@
+[tex-image-and-sub-image-2d-with-image-data-rgb565.html]
+ type: testharness
+ [WebGL test #4: at (0, 0) expected: 0,0,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #7: at (0, 1) expected: 0,0,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #12: at (0, 0) expected: 0,0,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #15: at (0, 1) expected: 0,0,0,255 was 0,255,0,255]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini
index c91eba5318b..e28d29a1447 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-svg-image.html.ini
@@ -4,3 +4,6 @@
[WebGL test #0: at (4, 4) expected: 0,255,0 was 0,0,0]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini
index 2a874e9abc7..c1aaae7a577 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgb565.html.ini
@@ -1,3 +1,6 @@
[tex-image-and-sub-image-2d-with-video-rgb565.html]
type: testharness
expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini
index 9be75537245..d64b5a2230b 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba4444.html.ini
@@ -1,3 +1,6 @@
[tex-image-and-sub-image-2d-with-video-rgba4444.html]
type: testharness
expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini
index 757c5f89f21..70695a2543f 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video-rgba5551.html.ini
@@ -4,3 +4,6 @@
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini
index 2f052c68478..f74c0b51cf2 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-video.html.ini
@@ -4,3 +4,6 @@
[WebGL test #0: Unable to fetch WebGL rendering context for Canvas]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini
index 8baa4869dcf..8c0e1708eb5 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgb565.html.ini
@@ -6,3 +6,192 @@
[WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0]
expected: FAIL
+ [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini
index 18a20f6fb7f..037794850f3 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba4444.html.ini
@@ -6,3 +6,192 @@
[WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0]
expected: FAIL
+ [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini
index 11a836cd9e4..7d1b616ec7e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas-rgba5551.html.ini
@@ -9,3 +9,192 @@
[WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0]
expected: FAIL
+ [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini
index 7909dba022d..6db32f7c194 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-and-sub-image-2d-with-webgl-canvas.html.ini
@@ -6,3 +6,192 @@
[WebGL test #0: at (0, 0) expected: 255,0,0 was 0,0,0]
expected: FAIL
+ [WebGL test #1: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #2: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #3: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #4: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #5: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #6: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #7: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #8: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #9: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #10: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #11: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #12: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #13: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #14: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #15: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #16: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #17: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #18: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #19: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #20: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #21: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #22: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #23: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #24: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #25: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #26: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #27: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #28: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #29: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #30: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #31: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #32: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #33: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #34: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #35: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #36: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #37: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #38: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #39: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #40: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #41: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #42: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #43: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #44: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #45: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #46: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #47: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #48: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #49: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #50: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #51: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #52: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #53: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #55: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #56: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #57: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #58: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #59: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #60: at (0, 0) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #61: at (0, 16) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #62: at (0, 16) expected: 255,0,0 was 0,0,0]
+ expected: FAIL
+
+ [WebGL test #63: at (0, 0) expected: 0,255,0 was 0,0,0]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini
new file mode 100644
index 00000000000..6de5d1c40f0
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/tex-image-with-format-and-type.html.ini
@@ -0,0 +1,3 @@
+[tex-image-with-format-and-type.html]
+ type: testharness
+ expected: CRASH
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini
index f3b2d494241..2bfaf29fe82 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-npot-video.html.ini
@@ -1,3 +1,6 @@
[texture-npot-video.html]
type: testharness
expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini
index 75fa9423abe..9466a6ef229 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size-cube-maps.html.ini
@@ -36,3 +36,111 @@
[WebGL test #35: at (0, 1) expected: 255,255,0,255 was 0,255,0,255]
expected: FAIL
+ [WebGL test #44: at (0, 1) expected: 255,0,0,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #45: at (0, 0) expected: 255,0,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #47: at (0, 0) expected: 0,255,0,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #50: at (0, 1) expected: 0,255,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #51: at (0, 0) expected: 255,0,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #54: at (0, 1) expected: 0,255,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #62: at (0, 1) expected: 0,255,0,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #63: at (0, 0) expected: 0,255,0,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #65: at (0, 0) expected: 0,0,255,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #68: at (0, 1) expected: 0,0,255,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #69: at (0, 0) expected: 255,0,0,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #72: at (0, 1) expected: 255,0,255,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #80: at (0, 1) expected: 0,0,255,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #81: at (0, 0) expected: 0,0,255,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #83: at (0, 0) expected: 255,255,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #86: at (0, 1) expected: 255,255,0,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #87: at (0, 0) expected: 0,255,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #90: at (0, 1) expected: 255,0,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #98: at (0, 1) expected: 255,255,0,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #99: at (0, 0) expected: 255,255,0,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #101: at (0, 0) expected: 0,255,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #104: at (0, 1) expected: 0,255,255,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #105: at (0, 0) expected: 0,0,255,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #108: at (0, 1) expected: 0,255,0,255 was 255,0,255,255]
+ expected: FAIL
+
+ [WebGL test #116: at (0, 1) expected: 0,255,255,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #117: at (0, 0) expected: 0,255,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #119: at (0, 0) expected: 255,0,255,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #122: at (0, 1) expected: 255,0,255,255 was 0,0,255,255]
+ expected: FAIL
+
+ [WebGL test #123: at (0, 0) expected: 255,255,0,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #126: at (0, 1) expected: 0,0,255,255 was 255,0,0,255]
+ expected: FAIL
+
+ [WebGL test #134: at (0, 1) expected: 255,0,255,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #135: at (0, 0) expected: 255,0,255,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #137: at (0, 0) expected: 255,0,0,255 was 0,255,255,255]
+ expected: FAIL
+
+ [WebGL test #140: at (0, 1) expected: 255,0,0,255 was 255,255,0,255]
+ expected: FAIL
+
+ [WebGL test #141: at (0, 0) expected: 0,255,255,255 was 0,255,0,255]
+ expected: FAIL
+
+ [WebGL test #144: at (0, 1) expected: 255,255,0,255 was 0,255,0,255]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini
new file mode 100644
index 00000000000..0363f3ad91d
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-size.html.ini
@@ -0,0 +1,8 @@
+[texture-size.html]
+ type: testharness
+ expected:
+ if os == "linux": TIMEOUT
+ [Overall test]
+ expected:
+ if os == "linux": NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini
new file mode 100644
index 00000000000..8e1092d6c32
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/textures/texture-upload-size.html.ini
@@ -0,0 +1,6 @@
+[texture-upload-size.html]
+ type: testharness
+ expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini
index 8043c629976..e30e0715bd8 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/gl-uniformmatrix4fv.html.ini
@@ -1,5 +1,6 @@
[gl-uniformmatrix4fv.html]
type: testharness
+ expected: ERROR
[WebGL test #0: successfullyParsed should be true (of type boolean). Was undefined (of type undefined).]
expected: FAIL
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini
new file mode 100644
index 00000000000..3461ba85016
--- /dev/null
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/out-of-bounds-uniform-array-access.html.ini
@@ -0,0 +1,6 @@
+[out-of-bounds-uniform-array-access.html]
+ type: testharness
+ expected: TIMEOUT
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini
index 37bd7d3324e..bbd7c84970e 100644
--- a/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini
+++ b/tests/wpt/metadata/webgl/conformance-1.0.3/conformance/uniforms/uniform-default-values.html.ini
@@ -1,5 +1,9 @@
[uniform-default-values.html]
type: testharness
+ expected: ERROR
[WebGL uniform default values]
expected: FAIL
+ [Overall test]
+ expected: NOTRUN
+
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 62275196fbf..7279d1f9440 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -6317,162 +6317,6 @@
{}
]
],
- "mozilla/canvas/drawimage_html_image_1.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_1.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_1_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_10.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_10.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_10_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_11.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_11.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_11_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_12.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_12.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_12_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_13.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_13.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_13_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_2.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_2.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_2_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_3.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_3.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_3_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_4.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_4.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_4_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_5.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_5.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_5_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_6.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_6.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_6_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_7.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_7.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_7_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_8.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_8.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_8_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_9.html": [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_9.html",
- [
- [
- "/_mozilla/mozilla/canvas/drawimage_html_image_9_ref.html",
- "=="
- ]
- ],
- {}
- ]
- ],
"mozilla/details_ui_closed.html": [
[
"/_mozilla/mozilla/details_ui_closed.html",
@@ -9529,71 +9373,6 @@
{}
]
],
- "mozilla/canvas/drawimage_html_image_10_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_11_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_12_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_13_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_1_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_2_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_3_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_4_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_5_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_6_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_7_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_8_ref.html": [
- [
- {}
- ]
- ],
- "mozilla/canvas/drawimage_html_image_9_ref.html": [
- [
- {}
- ]
- ],
"mozilla/click_prevent.html": [
[
{}
@@ -25242,112 +25021,8 @@
"9fb338806987e20f1bac3c09231e1e5718ac4b23",
"testharness"
],
- "mozilla/canvas/drawimage_html_image_1.html": [
- "90ea4e0cfef9731726582e1867d1ced66b6bcc2b",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_10.html": [
- "51a931987a4e22674014d9e9a3f298029f546bbe",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_10_ref.html": [
- "9a70c803aaf5bd8a843b18d6d16779575d4dc6f8",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_11.html": [
- "9b4da400d9486407b834f8f60416a11cfe68f6cf",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_11_ref.html": [
- "b51c787c97490eed29787cadf62b0c5e5cbd9180",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_12.html": [
- "a8b04a034bd5fecab74cef610b8320b8d41d5131",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_12_ref.html": [
- "5529c622869289c1a64987216b525766003d5f8c",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_13.html": [
- "9a47d53761733409f2582e13d5f1b1f9d9e9046e",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_13_ref.html": [
- "30150e3530438d42704fda8b3623286658f6c724",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_1_ref.html": [
- "9a70c803aaf5bd8a843b18d6d16779575d4dc6f8",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_2.html": [
- "ed1d7f348d2966af1a95c75e49837a72c032b2c6",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_2_ref.html": [
- "a95c84aace62371b4a58c381acaab51499cdeedb",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_3.html": [
- "cc8ce7169bdf21905d73597931878422a1cf780c",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_3_ref.html": [
- "59d699ac4347a4af4246c0333e14a91a201da15c",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_4.html": [
- "45f850d0062a0cfe3c448420fa9e5fea88b2a90a",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_4_ref.html": [
- "6204815172949961351ea34906f99d05063bc78f",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_5.html": [
- "a023a6543b9207f86b3928859f903ca90f57e824",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_5_ref.html": [
- "839c4941a71523e7b543080aae8722972b20ebbb",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_6.html": [
- "f9509bb99560ce023f40a0b700b5950bf0a44dda",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_6_ref.html": [
- "359acc11d83341062450e86162d831a9fc1ae158",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_7.html": [
- "402c02c6aad4732f4fe31405c00a7acf24c71e10",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_7_ref.html": [
- "53efd12eca32f7898ddeabdca9b2e61f952b296d",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_8.html": [
- "17ffa3edbdb9bbf572710e1981732d299062c5ba",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_8_ref.html": [
- "89f6e5589e3619835d67e8d919ab6a507fb3bbb5",
- "support"
- ],
- "mozilla/canvas/drawimage_html_image_9.html": [
- "5f89f092758cac8462399555528d8135c6c46692",
- "reftest"
- ],
- "mozilla/canvas/drawimage_html_image_9_ref.html": [
- "5e4587978bcf32905a2676da269a5a09d7938718",
- "support"
- ],
"mozilla/canvas/fill_and_stroke_getters_setters.html": [
- "4ae37c115dff4361db2be1849fa5143be19df438",
+ "794dd75566d0e2086deb0dcfc727dfe1834ca17e",
"testharness"
],
"mozilla/caption.html": [
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html
deleted file mode 100644
index ea5be1227cf..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_1_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-// 2 arguments, the dest origin is 0,0
-// The source canvas will copied to the 0,0 position of the destination canvas
-destCtx.drawImage(sourceImg, 0, 0);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html
deleted file mode 100644
index 68363633382..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_10_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The destination rectangle is larger than the destination canvas.
-// When the destination rectangle is outside the destination image (the scratch bitmap),
-// the pixels that land outside the scratch bitmap are discarded,
-// as if the destination was an infinite canvas
-// whose rendering was clipped to the dimensions of the scratch bitmap.
-destCtx.drawImage(sourceImg, 0, 0, 512, 512, 0, 0, 256, 256);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html
deleted file mode 100644
index 60545df17ff..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_10_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-image: url("../2x2.png");
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html
deleted file mode 100644
index d21d3d925b1..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_11_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source rectangle is larger than the source canvas
-// The source area is clipped to fit the source image
-// and the destination are is clipped in the same proportion
-destCtx.drawImage(sourceImg, 0, 0, 2048, 2048, 0, 0, 800, 800);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html
deleted file mode 100644
index 10d8885f2b0..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_11_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: #FA6FF2;
- }
-</style>
-<body>
-<div id="destination" height="100" width="100"></canvas>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html
deleted file mode 100644
index dc9c8d6bb7d..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_12_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// Negative coordinates of the source rectangle
-// The source area is clipped to fit the source image
-// and the destination area is clipped in the same proportion
-destCtx.drawImage(sourceImg, -25, -25, 50, 50, 0, 0, 50, 50);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html
deleted file mode 100644
index 5f6f22111da..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_12_ref.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
-
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-
- #img {
- position: relative;
- top: 0;
- left: 0;
- width: 25px;
- height: 25px;
- background-color: #FA6FF2;
- }
-
-</style>
-<body>
-<div id="destination">
- <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html
deleted file mode 100644
index 5e663d197b2..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_13_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 128;
-var sourceHeight = 128;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source Image doesn't have a src url defined
-// It should throw an exception because the HTMLImageElement is
-// in the broken state
-// https://html.spec.whatwg.org/multipage/#check-the-usability-of-the-image-argument
-try {
- destCtx.drawImage(sourceImg, 0, 0);
- // It makes the test fail if the exception is not thrown
- destCtx.fillStyle = "#0000FF";
- destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-}
-catch(err) {
- console.log("Exception: " + err.message);
-}
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html
deleted file mode 100644
index 9ac306a5cc6..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_13_ref.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
-
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html
deleted file mode 100644
index 60545df17ff..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_1_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-image: url("../2x2.png");
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html
deleted file mode 100644
index 9eeaae95ebb..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_2_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 2 arguments, the dest origin is not 0,0
-// The source image will copied to the 25, 25 position of the destination canvas
-destCtx.drawImage(sourceImg, 25, 25);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html
deleted file mode 100644
index c4535283500..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_2_ref.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
-
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- background-image: url("../2x2.png");
- background-position: 25px 25px;
- background-repeat: no-repeat;
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html
deleted file mode 100644
index 63b303944ba..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_3_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = true;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-// 4 arguments, the source origin is not 0,0, the dest size is provided
-// The source canvas will copied to the 50, 50 position of the destination canvas and
-// on an area of 50x50 pixels
-destCtx.drawImage(sourceImg, 50, 50, 50, 50);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html
deleted file mode 100644
index b72687a8ace..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_3_ref.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- background-image: url("../2x2.png");
- background-position: 50px 50px;
- background-repeat: no-repeat;
- background-size: 50px 50px;
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html
deleted file mode 100644
index dfaf4018d69..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_4_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-// 4 arguments, the dest origin is not 0,0 and the dest size is provided but
-// does not match the size of the source. The image will be distorted
-// The source canvas will copied to the 50,50 position of the destination canvas
-// and it will be shrunk to a and area of 16x16
-destCtx.drawImage(sourceImg, 50, 50, 16, 16);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html
deleted file mode 100644
index baa6591a220..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_4_ref.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-
- #destination img{
- position: absolute;
- top: 50px;
- left: 50px;
- width: 16px;
- height: 16px;
- }
-</style>
-<body>
-<div id="destination">
- <img src="../2x2.png" />
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html
deleted file mode 100644
index a359fdf35b5..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_5_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-// The source canvas will copied to the 50,50 position of the destination canvas
-// over an area of 64x32 pixels
-// The copied image will be distorted along the x axis
-destCtx.drawImage(sourceImg, 50, 50, 64, 32);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html
deleted file mode 100644
index d8ec95525de..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_5_ref.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- overflow: hidden;
- }
-
- #destination .img{
- position: relative;
- top: 50px;
- left: 50px;
- width: 64px;
- height: 32px;
- }
-
- #destination .img img{
- width: 100%;
- height: 100%;
- }
-
-</style>
-<body>
-<div id="destination">
- <div class="img">
- <img src="../2x2.png" />
- </div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html
deleted file mode 100644
index 4482ca3c319..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_6_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 8 arguments, both destination and source origins are 0, 0
-// An area of 32x32 pixels of the source image will be copied to
-// an area of 32x32 pixels of the destination canvas
-destCtx.drawImage(sourceImg, 0, 0, 32, 32, 0, 0, 32, 32);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html
deleted file mode 100644
index d7343375508..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_6_ref.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- background-color: red;
- background-image: url("../2x2.png");
- background-position: -32px -32px;
- background-size: 64px 64px;
- background-repeat: no-repeat;
- }
-
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html
deleted file mode 100644
index cf6daa0d4c3..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_7_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// 8 arguments the destination origin is not 0,0
-// An area of 32x32 pixels of the source image will be copied to
-// an area of 32x32 pixels of the destination canvas in the position 32,32
-destCtx.drawImage(sourceImg, 0, 0, 32, 32, 32, 32, 32, 32);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html
deleted file mode 100644
index e823ffbb75a..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_7_ref.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
-
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-
- #img {
- position: relative;
- top: 32px;
- left: 32px;
- width: 32px;
- height: 32px;
- background-image: url("../2x2.png");
- background-position: -32px -32px;
- background-size: 64px 64px;
- background-repeat: no-repeat;
- }
-
-</style>
-<body>
-<div id="destination">
- <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html
deleted file mode 100644
index c1ebfa81648..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_8_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The source rectangle overflows the source image
-// The source area is clipped to fit the source image
-// and the destination are is clipped in the same proportion
-destCtx.drawImage(sourceImg, 32, 32, 32, 32, 0, 0, 32, 32);
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html
deleted file mode 100644
index 1a025d26d99..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_8_ref.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
-
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-
- #img {
- position: relative;
- top: 0px;
- left: 0px;
- width: 32px;
- height: 32px;
- background-image: url("../2x2.png");
- background-position: -32px -32px;
- background-size: 64px 64px;
- background-repeat: no-repeat;
- }
-
-</style>
-<body>
-<div id="destination">
- <div id="img"><div>
-</div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html
deleted file mode 100644
index f0fc85d384a..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<link rel=match href=drawimage_html_image_9_ref.html>
-<style>
- html, body {
- margin: 0;
- }
-</style>
-<canvas id="dest" height="100" width="100"></canvas>
-<script>
-
-var sourceWidth = 100;
-var sourceHeight = 100;
-var smoothingEnabled = false;
-var destCanvas = document.getElementById('dest');
-var sourceImg = document.createElement('img');
-sourceImg.src = '../2x2.png'
-sourceImg.width = sourceWidth;
-sourceImg.height = sourceHeight;
-
-var destCtx = destCanvas.getContext('2d');
-destCtx.fillStyle = "#FF0000";
-destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-destCtx.imageSmoothingEnabled = smoothingEnabled;
-
-// The destination rectangle has negative width and height
-// An exception is raised and nothing is drawn
-try {
- destCtx.drawImage(sourceImg, 25, 50, 50, 0, 0, -100, -100);
- // It makes the test fail if the exception is not thrown
- destCtx.fillStyle = "#0000FF";
- destCtx.fillRect(0, 0, destCanvas.width, destCanvas.height);
-}
-catch(err) {
- console.err("Exception Thrown");
-}
-
-</script>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html b/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html
deleted file mode 100644
index 5341e05c1e1..00000000000
--- a/tests/wpt/mozilla/tests/mozilla/canvas/drawimage_html_image_9_ref.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
-</head>
-<style>
- html, body {
- margin: 0;
- }
- #destination {
- width: 100px;
- height: 100px;
- background-color: red;
- }
-</style>
-<body>
-<div id="destination"></div>
-</body>
-</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html b/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html
index 7ddaa5bfbf0..aec8c864348 100644
--- a/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html
+++ b/tests/wpt/mozilla/tests/mozilla/canvas/fill_and_stroke_getters_setters.html
@@ -16,12 +16,16 @@ function roundtrip(property, vals) {
}
}
-var img = document.createElement('img');
-img.src = '../2x2.png';
-var pattern = ctx.createPattern(img, 'repeat');
+async_test(function(t) {
+ var img = document.createElement('img');
+ img.src = '../2x2.png';
+ img.onload = t.step_func_done(function() {
+ var pattern = ctx.createPattern(img, 'repeat');
-var gradient = ctx.createLinearGradient(0.0, 0.0, 1.0, 1.0);
+ var gradient = ctx.createLinearGradient(0.0, 0.0, 1.0, 1.0);
-roundtrip('strokeStyle', ['#ff0000', gradient, pattern]);
-roundtrip('fillStyle', ['#ff0000', gradient, pattern]);
+ roundtrip('strokeStyle', ['#ff0000', gradient, pattern]);
+ roundtrip('fillStyle', ['#ff0000', gradient, pattern]);
+ });
+});
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html
index b9de85a9774..95b25b5adca 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_1.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_1_ref.html>
<style>
@@ -26,5 +27,6 @@ sourceImg.onload = function() {
// 2 arguments, the dest origin is 0,0
// The source canvas will copied to the 0,0 position of the destination canvas
destCtx.drawImage(sourceImg, 0, 0);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html
index 3b11b730fba..1579316a794 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_10.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_10_ref.html>
<style>
@@ -30,5 +31,6 @@ sourceImg.onload = function() {
// as if the destination was an infinite canvas
// whose rendering was clipped to the dimensions of the scratch bitmap.
destCtx.drawImage(sourceImg, 0, 0, 512, 512, 0, 0, 256, 256);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html
index dd1a6149bb0..692c3d33750 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_11.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_11_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// The source area is clipped to fit the source image
// and the destination are is clipped in the same proportion
destCtx.drawImage(sourceImg, 0, 0, 2048, 2048, 0, 0, 800, 800);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html
index 402a661f9f7..e918b067214 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_12.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_12_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// The source area is clipped to fit the source image
// and the destination area is clipped in the same proportion
destCtx.drawImage(sourceImg, -25, -25, 50, 50, 0, 0, 50, 50);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html
index e20ea97e2a8..ab0db08eb80 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_2.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_2_ref.html>
<style>
@@ -27,5 +28,6 @@ sourceImg.onload = function() {
// 2 arguments, the dest origin is not 0,0
// The source image will copied to the 25, 25 position of the destination canvas
destCtx.drawImage(sourceImg, 25, 25);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html
index e09c2ab0015..9ba2c865bfe 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_3.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_3_ref.html>
<style>
@@ -27,5 +28,6 @@ sourceImg.onload = function() {
// The source canvas will copied to the 50, 50 position of the destination canvas and
// on an area of 50x50 pixels
destCtx.drawImage(sourceImg, 50, 50, 50, 50);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html
index 7f029ab0a28..c05ac9703f8 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_4.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_4_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// The source canvas will copied to the 50,50 position of the destination canvas
// and it will be shrunk to a and area of 16x16
destCtx.drawImage(sourceImg, 50, 50, 16, 16);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html
index d221176adcb..23763f7b58c 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_5.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_5_ref.html>
<style>
@@ -27,5 +28,6 @@ sourceImg.onload = function() {
// over an area of 64x32 pixels
// The copied image will be distorted along the x axis
destCtx.drawImage(sourceImg, 50, 50, 64, 32);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html
index a32162a4640..4eee0d4a5df 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_6.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_6_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// An area of 32x32 pixels of the source image will be copied to
// an area of 32x32 pixels of the destination canvas
destCtx.drawImage(sourceImg, 0, 0, 32, 32, 0, 0, 32, 32);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html
index b902df0c24d..04e8398824c 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_7.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_7_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// An area of 32x32 pixels of the source image will be copied to
// an area of 32x32 pixels of the destination canvas in the position 32,32
destCtx.drawImage(sourceImg, 0, 0, 32, 32, 32, 32, 32, 32);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html
index 9b2301e2993..52e2d6ca34d 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_html_image_8.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<html class="reftest-wait">
<meta charset="utf-8">
<link rel=match href=drawimage_html_image_8_ref.html>
<style>
@@ -28,5 +29,6 @@ sourceImg.onload = function() {
// The source area is clipped to fit the source image
// and the destination are is clipped in the same proportion
destCtx.drawImage(sourceImg, 32, 32, 32, 32, 0, 0, 32, 32);
+ document.documentElement.classList.remove('reftest-wait');
}
</script>
diff --git a/tests/wpt/web-platform-tests/webgl/conformance-1.0.3/resources/js-test-pre.js b/tests/wpt/web-platform-tests/webgl/conformance-1.0.3/resources/js-test-pre.js
index 6067e0d4608..9236711b669 100644
--- a/tests/wpt/web-platform-tests/webgl/conformance-1.0.3/resources/js-test-pre.js
+++ b/tests/wpt/web-platform-tests/webgl/conformance-1.0.3/resources/js-test-pre.js
@@ -78,7 +78,7 @@ function nonKhronosFrameworkNotifyDone() {
// if found, since it's overriden by some tests.
var wpt_test = window.test;
var wpt_assert_true = window.assert_true;
-
+ var wt_async_test = window.async_test;
window.reportTestResultsToHarness = function reportTestResultsToHarness(success, msg) {
if (window.parent.webglTestHarness) {
@@ -100,6 +100,12 @@ function notifyFinishedToHarness() {
}
}
+(function() {
+ var oldNotify = notifyFinishedToHarness;
+ var t = async_test("Overall test");
+ window.notifyFinishedToHarness = t.step_func_done(oldNotify);
+}())
+
function _logToConsole(msg)
{
if (window.console)
diff --git a/tests/wpt/web-platform-tests/webgl/tools/js-test-pre.patch b/tests/wpt/web-platform-tests/webgl/tools/js-test-pre.patch
index 1e8a4c9581d..d44e3f496de 100644
--- a/tests/wpt/web-platform-tests/webgl/tools/js-test-pre.patch
+++ b/tests/wpt/web-platform-tests/webgl/tools/js-test-pre.patch
@@ -14,7 +14,7 @@
+ // if found, since it's overriden by some tests.
+ var wpt_test = window.test;
+ var wpt_assert_true = window.assert_true;
-+
++ var wt_async_test = window.async_test;
+
+ window.reportTestResultsToHarness = function reportTestResultsToHarness(success, msg) {
+ if (window.parent.webglTestHarness) {
@@ -30,6 +30,19 @@
function notifyFinishedToHarness() {
if (window.parent.webglTestHarness) {
+@@ -100,2 +100,2 @@ function notifyFinishedToHarness() {
+ }
+ }
+
++(function() {
++ var oldNotify = notifyFinishedToHarness;
++ var t = async_test("Overall test");
++ window.notifyFinishedToHarness = t.step_func_done(oldNotify);
++}())
++
+ function _logToConsole(msg)
+ {
+ if (window.console)
@@ -92,7 +106,7 @@
window.console.log(msg);
}