During the last weeks, I finished implementing custom element upgrades and fixed various failing tests.
As I entered the final few weeks of the project, I began to triage and categorize the remaining custom element test failures. Some tests fail due to Servo missing an implementation of a different spec. This includes the Shadow DOM and various missing attributes. These tests are ok to remain failing as they do not siginify an issue with the custom element implementation.
The triaging process involves picking a specific test failure and looking at the test itself. I look for any APIs that are used that servo does not implement. If there are none, I then run the test and find the failing assertion. This typically will give more insight into the problem. For example, an upgrade reaction may not occur like it should. Once I figure out what assertion is failing, I step through the Rust implementation and attempt to figure out why or why not certain reactions were triggered.
The failures found in #18074 and #18146 were due to issues with the custom element
implementation. The former failure was due to the attribute change callback not being fired when
an attribute node was being replaced. The latter was due to Element's
This week is my final week on the project, I have a few more test failures to look into. I will also be writing a blog post discussing my GSoC experience and the custom element implementation. The final goal is to enable custom element by default in Servo.
For more information on my gsoc project, check out my proposal and roadmap.