wiki:ProjectsWorthDoing
  • [Singleton Removals] Remove PlatformStrategies, replacing with per-page providers.
  • [Singleton Removals] Remove RuntimeEnabledFeatures and DeprecatedGlobalSettings, replacing them with use of per-page Settings.
  • [Singleton Removals] Remove Theme (and related classes) singletons, replacing them with per-page Theme objects.
  • [Building Performance] Reduce the size of JavaScriptCore headers needed by WebCore to an absolute minimum. May require a new SPI for DOM bindings.
  • [Building Performance] Speedup IDL generation (cache parsed IDL prior to code gen to remove reparsing for type lookup and/or convert to a two phase generation .idl -> .binaryparsedidl, .binaryparsedidl -> JS*.h/JS*.cpp., re-write in something that isn't perl)
  • [Moving] Move remaining settings in Settings.yaml WTF/WebPreferences*.yaml.
  • [Moving] Move WeCore/platform/ classes to PAL/ to enforce layering via the linker.
  • [Moving] Move legacy loading code to WebKitLegacy.
  • [CSSValue <-> Style Split] Stop using CSSValue classes in Style code, creating new Style classes for remaining concepts and simplifying CSSValue classes to just be plain data.
  • [CSS] Add "context" for CSS classes so they can access a relevant ScriptExecutionContext for Settings/Caches/etc.
  • [String] Make WTF::String threadsafe and immutable.
  • [String] Make WTF::AtomString threadsafe.
  • [String] Make WTF::String use UTF-8.
  • [Testing] Split WebKit IPC code into a static library that we can test via unit tests.
  • [Testing] Add preferences generation to WebKitLegacy/win (needed so we can stop updating testing defaults for it every time)
  • [Testing] Move unit tests out of WebKitTools/TestWebKitAPI and into project specific directories (e.g. WTF tests go in Source/WTF/Tests, etc.)
  • [Rationalize] Rationalize how settings should work with Service Workers. Probably requires a concept in WebKit that a Service Worker can only be shared by pages that have the same WebPreferences/WebDataStore/WKUserContentController/applicationNameForUserAgent etc.
  • [Rationalize] Rationalize how WebPreferences and API::PageConfiguration specific settings interact.
  • [Loading] Unify loading classes using the Fetch naming and behavior.
  • [RunLoop] Unify runloop classes using the HTML EventLoop naming and behavior
  • [Unify] Unify viewport support.
  • [Unify] Unify scrolling models.
  • [Naming] Replace usage of broad PLATFORM() macros with more targeted HAVE()/USE()/ENABLE()/OS() etc. Adding new predicates and predicate types when needed.
  • [Naming] Identify and apply idiomatic naming for WebKit objects. Currently a hodgepodge of Web* API*, *Proxy, etc. I personally propose we use explicit prefixes (perhaps WP:: / UP::) for classes that should only ever be used in one process or another rather than using Proxy, as often that doesn't really apply.
  • [Unclear If Possible] Find a way/idiomatic ways to handle objects that need access to the Page, but it can go away. This will likely require a rigorous approach to object lifetime in WebCore and need to handle cases such as an object that is shared between two or more pages (which might indicate what we really want is an object above Page that doesn't go away until all the object beneath it does and is always accessible up the hierarchy), and objects that need to be in a suspended state while in the back/forward cache. The more explicit we can be here the better. We have far far too much code that just blindly null checks a Page or Frame pointer and returns and in most cases no tests for those branches at all.
  • [Unclear If Possible] Find a way to get rid of Widget tree in WebCore.
  • [Unclear If Possible] Find a better way to express the relationship between DOM objects that need to keep each other alive (potentially in a circular fashion) that is usable for both normal reference counting and for informing the JS GC about relationships so it can keep necessary wrappers around.
Last modified 3 years ago Last modified on May 9, 2021 11:39:30 AM