Persist permission request decisions for a session
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Oxide |
Fix Released
|
High
|
Chris Coulson |
Bug Description
When a user responds to a permission request in Firefox or Chrome, they allow that decision to be remembered for each site.
- Chrome seems to always permanently remember a decision (at least for geolocation and notifications).
- Firefox has the option of remembering for the rest of the session, or remembering permanently.
Ultimately, we want to be where Firefox is and we'll achieve that by having content settings (or site settings) in Oxide. This will consist of the permanent storage, an API for managing site settings and the internal logic for deciding when we need to ask the embedder for a permission.
However, currently we have no persistence in Oxide (every time a permission is requested, we ping the embedder to ask for it). Whilst this works ok for geolocation, it really sucks in the browser because it means that it pops up a permission request every time a user navigates to google.com. What's worse is that for some other permission types (notably, notification), Chromium expects to be able to ask the embedder via the content API if permission was granted for a site after a permission request was responded to. This implies that there must be some persistence in Oxide for it to work correctly.
As part of the content settings work, we should persist all permission request decisions per-WebContext, for the life of the context. This means that when opening the browser, it will only request geolocation permissions for google.com once. The decision will be remembered across tabs until the browser is closed.
Eventually we'll have a mechanism for storing decisions permanently as well as an API for forgetting previously remembered decisions, but that's for another bug.
Related branches
Changed in oxide: | |
importance: | Undecided → High |
status: | New → Triaged |
assignee: | nobody → Chris Coulson (chrisccoulson) |
milestone: | none → branch-1.7 |
Changed in oxide: | |
milestone: | branch-1.7 → branch-1.8 |
status: | Triaged → In Progress |
Changed in oxide: | |
milestone: | branch-1.8 → branch-1.9 |
Changed in oxide: | |
status: | In Progress → Fix Released |