Re: [fxtf-drafts] [css-masking] make the behavior of an invalid mask be consistent with clip-path and filter

## Error handling on filter

Test case for filter: https://codepen.io/krit/pen/pVYabE?editors=1000
In order of the test case:

| Behavior of `<filter>` on element         | Edge                | Gecko               | Blink               | WebKit              |
| ----------------------------------------- |:-------------------:|:-------------------:|:-------------------:|:-------------------:|
| no content                                | disappears          | disappears          | disappears          | disappears          |
| grouped content followed by valid content | applies<sub>1</sub> | applies<sub>1</sub> | applies<sub>1</sub> | applies<sub>1</sub> |
| invalid, followed by valid content        | applies<sub>2</sub> | applies<sub>2</sub> | applies<sub>2</sub> | applies<sub>2</sub> |
| missing reference                         | disappears          | disappears          | disappears          | disappears          |

1) Grouped content gets ignored, valid content applies.
2) Invalid content gets ignored, valid content applies.

## Error handling on clipping

Test case for clipping: https://codepen.io/krit/pen/NMJyXr?editors=1000
In order of the test case:

| Behavior of `<clipPath>` on element  | Edge                | Gecko               | Blink               | WebKit              |
| ------------------------------------ |:-------------------:|:-------------------:|:-------------------:|:-------------------:|
| no content                           | disappears          | disappears          | disappears          | disappears          |
| grouped content                      | disappears          | disappears          | disappears          | disappears          |
| invalid, followed by valid content   | clipped<sub>1</sub> | disappears          | clipped<sub>1</sub> | clipped<sub>1</sub> |
| missing reference                    | no clipping         | no clipping         | no clipping         | no clipping         |
| circular dependency                  | clipped<sub>2</sub> | disappears          | clipped<sub>2</sub> | clipped<sub>2</sub> |
| `<use>` referencing `<g>` w/ content | clipped<sub>3</sub> | disappears          | clipped<sub>1</sub> | clipped<sub>1</sub> |

1) Clipped by valid (by spec) content.
2) Clipped by content, circular dependencies get removed.
3) Clipped by combination of use and valid content.

## Error handling on masking

Test case for masking: https://codepen.io/krit/pen/derdaE?editors=1000
In order of the test case:

| Behavior of `<mask>` on element           | Edge                | Gecko               | Blink               | WebKit              |
| ----------------------------------------- |:-------------------:|:-------------------:|:-------------------:|:-------------------:|
| no content                                | disappears          | disappears          | disappears          | disappears          |
| grouped content followed by valid content | applies<sub>1</sub> | applies<sub>1</sub> | applies<sub>1</sub> | applies<sub>1</sub> |
| invalid, followed by valid content        | applies<sub>2</sub> | applies<sub>2</sub> | applies<sub>2</sub> | applies<sub>2</sub> |
| missing reference                         | no masking          | no masking          | no masking          | no masking          |
| circular dependency                       | applies<sub>3</sub> | disappears          | applies<sub>3</sub> | applies<sub>3</sub> |

1) Grouped content gets ignored, valid content applies.
2) Invalid content gets ignored, valid content applies.
3) Masking applies, circular dependencies get removed.

## Summary
1. As described: missing filter reference makes the element disappear on all browsers. Missing mask and clipping references get ignored.
    * There is a special case for masks applied on HTML elements where the content disappears in Firefox as well. See https://github.com/w3c/fxtf-drafts/issues/245#issuecomment-390863839
2. For all browsers but Firefox: Elements that do not match the content model get ignored, the resource still applies.
3. For all browsers but Firefox: Circular dependencies get broken up and the resource still applies. (Filter primitives need more testing)

Interesting for #17: Blink and WebKit do not take `<use>` referenced elements for clipping into account that do not match the `<clipPath>` content model. Edge does, which means an inconsistency in its own model. Gecko ignores the entire clipping resource.

-- 
GitHub Notification of comment by dirkschulze
Please view or discuss this issue at https://github.com/w3c/fxtf-drafts/issues/130#issuecomment-390981529 using your GitHub account

Received on Tuesday, 22 May 2018 13:02:54 UTC