As discussed in this thread IMO the root problem is that the user action must be handled synchronously. I don’t think this requirement makes sense in a world where the background context is started in response to events and must asynchronously fetch data in order to process an event. (In Firefox you may be able to work around this by synchronously accessing pre-fetched data saved to localStorage in your event handler, but that won’t work in all browsers since service workers don’t have access to that API.)
I’d very much like to start a conversation in the WECG about adopting a concept like transient activation for WebExtensions events like action.onClicked and commands.onCommand some time in the next couple weeks.