Reminder - no plan survives breakfast.
- Feel free to send pull requests to the repo!
- Here’s a contributing guide!
- Here’s the guide for creating pull requests that smurfd used and recommends!
Today
- No episodes for the next two weeks due to travel!
- Feedback:
- Q: If you want to be as sure as possible when filing a bug, if it is a security related bug or not. How would you think about that?
- https://www.mozilla.org/en-US/security/bug-bounty/
- After all of this Windows JumpList work is merged and riding the rails to release I think it may be interesting to have a bit of a recap on all the pieces of work you did during all these episodes. Doesn't have to necessarily take up a full episode but maybe it could? 🤷♂️
- I think this is a great idea. This whole project has taken about a year at this point, more or less (we've come and go from the project a bit). I think a recap would be really useful.
- Q: If you want to be as sure as possible when filing a bug, if it is a security related bug or not. How would you think about that?
- Back to WindowsJumpLists
- [x] Rename nsIJumpListBuilder to nsILegacyJumpListBuilder
- [x] Add createLegacyJumpListBuilder to nsIWinTaskBar to use the old mechanism
- [x] Update WindowsJumpList to use the legacy interface
- [x] Create a new nsIJumpListBuilder
- [x] Document NativeJumpListBackend
- [x] Populate nsIJumpListBuilder using the code we developed in the previous iteration
- [x] Have createJumpListBuilder in nsIWinTaskBar use that
- [x] Figure out why the JumpListBuilder isn't returning the URLs of the previous
- [x] It's working! It's just that you have to remember to actually remove the item for it to show up in the list.
- [x] Update WindowsJumpLists to choose the right builder based on the pref and treat them correctly based on that pref.
- [x] Why aren't the favicons working?
- [x] It was always this way - there's a moment in time, right after the page visits, where the favicon hasn't yet been written to disk, but after it has been, the favicon becomes present. Usually the update immediately after.
- [x] Investigate shutdown crashes by adding
MOZ_ASSERT(mThread == PR_GetCurrentThread());
basically everywhere. Especially at shutdown.- [x] I KNOW WHAT"S HAPPENING. The JumpListBuilder is created on the main thread. That class creates a LazyIdleThread (mIOThread) which is responsible for instantiating the JumpListBackend (aka the NativeJumpListBackend). BUT GUESS WHAT: A LazyIdleThread will shut itself down after a period of inactivity - that's part of how it works! That means that when it comes time to shutting everything down, we're asking a LazyIdleThread to destroy the JumpListBackend which might not be the same thread that created it, thus hitting our assertion! What we might need to do is to either, 1: destroy the JumpListBackend anytime the LazyIdleThread is shut down. 2: move the JumpListBackend destruction responsibility to the main thread.
- [x] Nika suggests using
NS_INLINE_DECL_REFCOUNTING_ONEVENTTARGET
- [x] After doing a removal, I saw a NSERRORUNEXPECTED, and then an NSERRORFAILURE for each subsequent update. Why is that?
- [x] We need to ask Windows for the set of URLs to remove before we query Places and populate with the new list. That means adding a new function.
- [ ] Write a GTest for the JumpListBuilder
- [ ] Write a front-end test that registers a fake nsIWinTaskbar or otherwise produces a fake nsIJumpListBuilder to make sure it gets passed the right things.
- [ ] Make a note to migrate the new jump list builder off of the dedicated lazy thread and use the IO thread pool instead.
Chat
- Join us in the Livehacking room on Mozilla’s Matrix instance! Here’s documentation on how to join. I’m only sorta monitoring the Twitch chat. A bot will try to bridge Matrix and Twitch (joc-bridgebot).
Links
- Felicia Bacon
- nbp hacks on the SpiderMonkey JS engine
- Alessandro Castellani has been streaming himself livehacking on Thunderbird
- emilio hacks on Firefox!
- Compiler Compiler - watch a Mozilla engineer hack on the SpiderMonkey JavaScript engine!
- How mconley uses Mercurial
- Andreas Kling hacks on a custom browser engine for a hand-rolled OS called SerenityOS
- The Joy of Coding: Community-Run Episode guide
- Feel free to send pull requests to the repo!
- Here’s the guide for creating pull requests that smurfd used and recommends!
- I've been mirroring the episodes to YouTube
- Code Therapy with Danny O’Brien
- Watch a developer put together a Windows game from scratch (no third-part engines) - really great explanations: https://handmadehero.org/
- /r/WatchPeopleCode for more livehacking!
Glossary
- BHR - “Background Hang Reporter”, a thing that records information about when Firefox performs poorly and sends it over Telemetry
- e10s ("ee ten ESS") - short for Electrolysis, which is the multi-process Firefox project
- CPOW ("ka-POW" or sometimes "SEE-pow") = Cross-Process Object Wrapper. See this blog post.
- Deserialize - "turn a serialized object back into the complex object”
- Serialize - "turn a complex object into something that can be represented as primitives, like strings, integers, etc
- Regression - something that made behaviour worse rather than better. Regress means to “go backward”, more or less.
- l10n - localization
- a11y - accessibility
- i18n - internationalization
- k8s - kubernetes
Feedback
- @mconley@fosstodon.org on Mastodon
- @mike_conley on Twitter
- You can chat with me on Matrix at @mconley:mozilla.org
- mikeconley.ca/blog
- mconley at mozilla dot com