Because plugin state in the content now contains blocklist state, and is updated
when the blocklist updates, we don't need to ask the parent if we're checking
blocklist state. All the consumers should now be asking the plugin code directly,
so we can stub out the last API here. We should look at removing the content side
of this service entirely, but that's something for a follow-up bug.
MozReview-Commit-ID: DE8s8RwT42r
This changes the pluginreg.dat format to include the blocklist state.
There is now only the saved blocklist state in a plugin tag instance, rather than
looking it up from in there using the blocklist service, so it was renamed from
mCachedBlocklistState to mBlocklistState. We pass the 'right' state to the plugin
instance when the plugintag is constructed. If we don't have state, we mark it as
unblocked.
mCachedBlocklistStateChanged was never read so it's being removed.
Bug 1439519 adds a 'blocklist-loaded' notification that is fired once the blocklist is loaded.
The plugin host implementation will listen to this in the parent process and update the
blocklist state of all the plugins, and broadcast changes to the child process, just like when
we update the blocklist from the server. We now also avoid re-sending plugin content to the
content processes if the plugin state hasn't changed as a result of the blocklist having been
loaded.
Finally, because new plugins should still get an up-to-date blocklist state, and
telemetry should get up-to-date data about which plugins are and aren't enabled
once we have that data, we ensure that once we've loaded the blocklist async,
we schedule an idle task to parse it and consider it loaded.
All this means that plugin blocklist information could be mistaken between the points where
a new plugin is installed and we first run Firefox with the new plugin, and the point where
we load the blocklist. Given the trade-offs, that size of window (tiny) seems OK, also given
that there's already a much larger window in blocklist updates (which only happen once every 24h).
MozReview-Commit-ID: 1gsojRkUzTw
This adds some more use of Services.jsm, does proper fallback for the app
blocklist if the profile one is unavailable, and avoids parsing the XML
from an updated blocklist twice.
Originally this also switched to using XHR instead of the awful manual
sync-on-mainthread-IO stream parsing, but sync XHR uses event loop
spinning, which breaks random things working the way they should, so
that bit is left until we make this code (hopefully) more async in
nature.
MozReview-Commit-ID: FgXyWl1NNaV
This patch was autogenerated by my decomponents.py
It covers almost every file with the extension js, jsm, html, py,
xhtml, or xul.
It removes blank lines after removed lines, when the removed lines are
preceded by either blank lines or the start of a new block. The "start
of a new block" is defined fairly hackily: either the line starts with
//, ends with */, ends with {, <![CDATA[, """ or '''. The first two
cover comments, the third one covers JS, the fourth covers JS embedded
in XUL, and the final two cover JS embedded in Python. This also
applies if the removed line was the first line of the file.
It covers the pattern matching cases like "var {classes: Cc,
interfaces: Ci, utils: Cu, results: Cr} = Components;". It'll remove
the entire thing if they are all either Ci, Cr, Cc or Cu, or it will
remove the appropriate ones and leave the residue behind. If there's
only one behind, then it will turn it into a normal, non-pattern
matching variable definition. (For instance, "const { classes: Cc,
Constructor: CC, interfaces: Ci, utils: Cu } = Components" becomes
"const CC = Components.Constructor".)
MozReview-Commit-ID: DeSHcClQ7cG
On my MacBook Pro, this change reduces this loop's time from ~4 ms to ~3 ms. This loop is not hot, but moving these xpconnect calls out of the loop is still a good idea.
MozReview-Commit-ID: ASwb6xZb6ur
Once we add fallback chain to GetRequestedLocales we can slightly improve the
locale negotiation for extensions. I made it tighter against just `en-US` because
in the future it is possible that RequestedLocales fallback chain will not contain
en-US in some scenarios, and it seems that for WebExtensions en-US should be the
last resort no matter what.
The other change is a fix to a regression I introduced when switching to LocaleService,
that somehow noone noticed.
MozReview-Commit-ID: FH6cePcoi0R
Once we add fallback chain to GetRequestedLocales we can slightly improve the
locale negotiation for extensions. I made it tighter against just `en-US` because
in the future it is possible that RequestedLocales fallback chain will not contain
en-US in some scenarios, and it seems that for WebExtensions en-US should be the
last resort no matter what.
The other change is a fix to a regression I introduced when switching to LocaleService,
that somehow noone noticed.
MozReview-Commit-ID: FH6cePcoi0R
Importing the blocklist-updater module on each notification in nsBlocklistService
could cause us to periodically jank the browser UI.
This patch now lazy loads as many dependencies as possible.
MozReview-Commit-ID: HBGjSJi5PwE
I'm adding a helper function mozILocaleService::GetRequestedLocale to simplify
most of the callsites that are looking for the first of the requested locales.
In most cases, I'm just matching the behavior of the code with reusing
LocaleService API instead of direct manipulation on the prefs.
That includes how I handle error case scenarios.
In case of sdk/l10n/locale.js I am reusing LocaleService heuristics over
the custom one from the file since the ones in LocaleService are just
more correct and unified accross the whole platform.
In case of FallbackEncoding I have to turn it into a nsIObserver to listen
to intl:requested-locales-changed.
MozReview-Commit-ID: 7rOr2CovLK
I'm adding a helper function mozILocaleService::GetRequestedLocale to simplify
most of the callsites that are looking for the first of the requested locales.
In most cases, I'm just matching the behavior of the code with reusing
LocaleService API instead of direct manipulation on the prefs.
That includes how I handle error case scenarios.
In case of sdk/l10n/locale.js I am reusing LocaleService heuristics over
the custom one from the file since the ones in LocaleService are just
more correct and unified accross the whole platform.
In case of FallbackEncoding I have to turn it into a nsIObserver to listen
to intl:requested-locales-changed.
MozReview-Commit-ID: 7rOr2CovLK