Bug 263712 - Removing an item from rect (SVGTransformList) prevents attribute removal
Summary: Removing an item from rect (SVGTransformList) prevents attribute removal
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: SVG (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords: BrowserCompat, InRadar
Depends on:
Blocks:
 
Reported: 2023-10-26 01:55 PDT by Ahmad Saleem
Modified: 2023-11-20 00:29 PST (History)
6 users (show)

See Also:


Attachments
steps in devtools of safari and firefox (291.37 KB, image/png)
2023-11-19 23:31 PST, Karl Dubost
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ahmad Saleem 2023-10-26 01:55:47 PDT
Hi Team,

While going through Blink's bug, I came across another where we differ:

Test Case: https://jsfiddle.net/b56f2v8e/

^ Console logs 'true' for STP181 while 'false' for Chrome Canary 120 and Firefox Nightly 121.

Chrome Bug: crbug.com/843901

Just wanted to raise so we can track and fix it.

Thanks!
Comment 1 Radar WebKit Bug Importer 2023-11-02 01:56:12 PDT
<rdar://problem/117840533>
Comment 2 Karl Dubost 2023-11-19 23:31:08 PST
Created attachment 468670 [details]
steps in devtools of safari and firefox

These are the steps in both browsers for the script. 

var elem = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
elem.setAttribute('transform', 'matrix(1,0,0,1,0,0)');
elem.transform.baseVal.removeItem(0);
elem.removeAttribute('transform');
console.log(elem.hasAttribute('transform'));


The interesting differences are starting once the following has been applied. 
"elem.transform.baseVal.removeItem(0)"

Firefox: <rect transform=""></rect>
Safari:  <rect transform="matrix(1,0,0,1,0,0)"></rect>

then applying "elem.removeAttribute('transform')"
gives the same result

Firefox: <rect></rect>
Safari:  <rect></rect>

BUT doing "elem.hasAttribute('transform')"

Firefox: false
Safari:  true

which is not logical with the previous result.
Comment 3 Karl Dubost 2023-11-19 23:41:12 PST
it seems like there is not a complete synchronization of the element state.
Comment 4 Nikolas Zimmermann 2023-11-20 00:29:49 PST
Good catch Karl. Indeed this is the „lazy SVG attribute synchronization“ that apparently exposes this bug. We probably fail to unmap properly..