The main-thread requirements for DXVA appear to have been needed when we initialized a crash guard. We now only run DXVA in the GPU and RDD processes, which don't support crash guards. This removes the main thread dispatch and the crashguard code, and enforces that we're in the GPU/RDD process to init DXVA.
This also removes the DLL blocklist code. This was disabled via pref when in the GPU process, which should be the majority of the time. In rare cases we would have been running DXVA in the RDD process (on older win7 when the GPU process isn't available). In these cases we can just do the same as the GPU process, allowing crashes and recovering from them (and disabling DXVA).
Differential Revision: https://phabricator.services.mozilla.com/D98036
The main-thread requirements for DXVA appear to have been needed when we initialized a crash guard. We now only run DXVA in the GPU and RDD processes, which don't support crash guards. This removes the main thread dispatch and the crashguard code, and enforces that we're in the GPU/RDD process to init DXVA.
This also removes the DLL blocklist code. This was disabled via pref when in the GPU process, which should be the majority of the time. In rare cases we would have been running DXVA in the RDD process (on older win7 when the GPU process isn't available). In these cases we can just do the same as the GPU process, allowing crashes and recovering from them (and disabling DXVA).
Differential Revision: https://phabricator.services.mozilla.com/D98036
UPDATED
-------
browser/base/content/test/plugins/browser_CTP_favorfallback.js
Test that plugin fallback behavior is correct.
Updated to reflect that plugins always show "alternate" content, which is either the user fallback of the browser's transparent fallback, regardless of the HTML.
browser/base/content/test/plugins/browser_CTP_outsideScrollArea.js
Test that overlay is visible (in layout sense) only if plugin is partially or completely visible.
Changed to test new fallback behavior where overlay is a hidden element with "blockall" atribute.
browser/base/content/test/plugins/browser_CTP_zoom.js
Test that overlay is present and visible at multiple zoom levels.
Adjusted to work with hidden overlay.
browser/base/content/test/performance/browser_startup_mainthreadio.js
Track IO done at browser startup
Removed `UserPlugins.parent` from list since we no longer scan for plugins.
browser/base/content/test/plugins/browser_bug797677.js
bug 797677
Test that plugin instantiation fails (with PLUGIN_UNSUPPORTED and no console error) when MIME type missing.
Removed the cleanup of (unused) test plugin.
browser/base/content/test/contextMenu/browser_contextmenu.js
Test context menu for many types of elements
Removed plugin element portion.
REMOVED
-------
browser/base/content/test/plugins/browser_CTP_contextmenu.js
Test that the CTP activate action in content menus for plugins works
browser/base/content/test/plugins/browser_CTP_crashreporting.js
Test that plugin crash submissions still work properly after click-to-play activation.
browser/base/content/test/plugins/browser_CTP_drag_drop.js
Test that plugin CTP dialog behaves correctly when dragging tab out of/into a window
browser/base/content/test/plugins/browser_CTP_hide_overlay.js
Test ability to close plugin "overlay" placeholder (the grey lego element)
browser/base/content/test/plugins/browser_CTP_iframe.js
Test that overlay can be interacted with (closed) when in an iframe
browser/base/content/test/plugins/browser_CTP_nonplugins.js
Bug 926605
Says it tests that non-plugin <object> elements don't show CTP but it doesn't. It tests that removing a CTP plugin from a page does not remove CTP dialog (in case, for example, page shows, then quickly removes plugin).
browser/base/content/test/plugins/browser_CTP_overlay_styles.js
Verify that styling on overlay elements, based on sizing, is correct.
browser/base/content/test/plugins/browser_CTP_resize.js
Test that a resize properly updates the overlay styling, which is only visible when large enough.
browser/base/content/test/plugins/browser_CTP_shouldShowOverlay.js
Test that partially obscured plugins show the overlay, properly styled (when they should).
browser/base/content/test/plugins/browser_blocking.js
bug 1129040
Test CTP behavior -- overlay dialog behavior, vulnerable plugin user approval, plugin's infoURL, etc.
browser/base/content/test/plugins/browser_blocklist_content.js
bug 1129040
Test (plugin) blocklist, including attempt to "hack" it in a content process.
browser/base/content/test/plugins/browser_bug743421.js
Test CTP approval persists for new plugin instances in page.
browser/base/content/test/plugins/browser_bug744745.js
Test that CTP notification correctly appears despite plugin with opacity: 0 !important
browser/base/content/test/plugins/browser_bug787619.js
bug 787619
Make sure CTP works for plugins nested inside <a></a> elements.
browser/base/content/test/plugins/browser_bug812562.js
bug 812562
Navigating away from, then back to a page should restore its CTP status.
browser/base/content/test/plugins/browser_bug818118.js
bug 818118
Test that CTP plugin and "unknown" plugin type work correctly on same page.
browser/base/content/test/plugins/browser_clearplugindata.js
Test clearing plugin data using Sanitizer.jsm
browser/base/content/test/plugins/browser_iterate_hidden_plugins.js
Bug 1318383
Test `plugins.navigator.hidden_ctp_plugin`, which hides CTP plugins from `navigator.plugins`.
browser/base/content/test/plugins/browser_pluginCrashCommentAndURL.js
Test plugin crash detection and reporting
browser/base/content/test/plugins/browser_pluginCrashReportNonDeterminism.js
Bug 1110887
Test both "plugin process crash notification" orders -- content proc before main proc and vice-versa.
browser/base/content/test/plugins/browser_plugin_reloading.js
Bug 1129040
Re-instantiating plugin (using `plugin.src = new_value`) should retain CTP approval.
browser/base/content/test/plugins/browser_plugin_framed_domain.js
Plugin CTP prompts should adopt top-level page's principal for instead of closest frame's principal.
browser/base/content/test/plugins/browser_pluginnotification.js
Tests many CTP interface behavior cases -- doorhangers, overlays, multiple plugin instances, CTP choices (always, allow, never)
browser/base/content/test/plugins/browser_private_clicktoplay.js
Make sure CTP interface works in private windows
browser/base/content/test/plugins/browser_subframe_access_hidden_plugins.js
Allow navigator.plugins to list plugin after CTP approval, even if it listed in `plugins.navigator.hidden_ctp_plugin`
Differential Revision: https://phabricator.services.mozilla.com/D95906
UPDATED
-------
browser/base/content/test/plugins/browser_CTP_favorfallback.js
Test that plugin fallback behavior is correct.
Updated to reflect that plugins always show "alternate" content, which is either the user fallback of the browser's transparent fallback, regardless of the HTML.
browser/base/content/test/plugins/browser_CTP_outsideScrollArea.js
Test that overlay is visible (in layout sense) only if plugin is partially or completely visible.
Changed to test new fallback behavior where overlay is a hidden element with "blockall" atribute.
browser/base/content/test/plugins/browser_CTP_zoom.js
Test that overlay is present and visible at multiple zoom levels.
Adjusted to work with hidden overlay.
browser/base/content/test/performance/browser_startup_mainthreadio.js
Track IO done at browser startup
Removed `UserPlugins.parent` from list since we no longer scan for plugins.
browser/base/content/test/plugins/browser_bug797677.js
bug 797677
Test that plugin instantiation fails (with PLUGIN_UNSUPPORTED and no console error) when MIME type missing.
Removed the cleanup of (unused) test plugin.
browser/base/content/test/contextMenu/browser_contextmenu.js
Test context menu for many types of elements
Removed plugin element portion.
REMOVED
-------
browser/base/content/test/plugins/browser_CTP_contextmenu.js
Test that the CTP activate action in content menus for plugins works
browser/base/content/test/plugins/browser_CTP_crashreporting.js
Test that plugin crash submissions still work properly after click-to-play activation.
browser/base/content/test/plugins/browser_CTP_drag_drop.js
Test that plugin CTP dialog behaves correctly when dragging tab out of/into a window
browser/base/content/test/plugins/browser_CTP_hide_overlay.js
Test ability to close plugin "overlay" placeholder (the grey lego element)
browser/base/content/test/plugins/browser_CTP_iframe.js
Test that overlay can be interacted with (closed) when in an iframe
browser/base/content/test/plugins/browser_CTP_nonplugins.js
Bug 926605
Says it tests that non-plugin <object> elements don't show CTP but it doesn't. It tests that removing a CTP plugin from a page does not remove CTP dialog (in case, for example, page shows, then quickly removes plugin).
browser/base/content/test/plugins/browser_CTP_overlay_styles.js
Verify that styling on overlay elements, based on sizing, is correct.
browser/base/content/test/plugins/browser_CTP_resize.js
Test that a resize properly updates the overlay styling, which is only visible when large enough.
browser/base/content/test/plugins/browser_CTP_shouldShowOverlay.js
Test that partially obscured plugins show the overlay, properly styled (when they should).
browser/base/content/test/plugins/browser_blocking.js
bug 1129040
Test CTP behavior -- overlay dialog behavior, vulnerable plugin user approval, plugin's infoURL, etc.
browser/base/content/test/plugins/browser_blocklist_content.js
bug 1129040
Test (plugin) blocklist, including attempt to "hack" it in a content process.
browser/base/content/test/plugins/browser_bug743421.js
Test CTP approval persists for new plugin instances in page.
browser/base/content/test/plugins/browser_bug744745.js
Test that CTP notification correctly appears despite plugin with opacity: 0 !important
browser/base/content/test/plugins/browser_bug787619.js
bug 787619
Make sure CTP works for plugins nested inside <a></a> elements.
browser/base/content/test/plugins/browser_bug812562.js
bug 812562
Navigating away from, then back to a page should restore its CTP status.
browser/base/content/test/plugins/browser_bug818118.js
bug 818118
Test that CTP plugin and "unknown" plugin type work correctly on same page.
browser/base/content/test/plugins/browser_clearplugindata.js
Test clearing plugin data using Sanitizer.jsm
browser/base/content/test/plugins/browser_iterate_hidden_plugins.js
Bug 1318383
Test `plugins.navigator.hidden_ctp_plugin`, which hides CTP plugins from `navigator.plugins`.
browser/base/content/test/plugins/browser_pluginCrashCommentAndURL.js
Test plugin crash detection and reporting
browser/base/content/test/plugins/browser_pluginCrashReportNonDeterminism.js
Bug 1110887
Test both "plugin process crash notification" orders -- content proc before main proc and vice-versa.
browser/base/content/test/plugins/browser_plugin_reloading.js
Bug 1129040
Re-instantiating plugin (using `plugin.src = new_value`) should retain CTP approval.
browser/base/content/test/plugins/browser_plugin_framed_domain.js
Plugin CTP prompts should adopt top-level page's principal for instead of closest frame's principal.
browser/base/content/test/plugins/browser_pluginnotification.js
Tests many CTP interface behavior cases -- doorhangers, overlays, multiple plugin instances, CTP choices (always, allow, never)
browser/base/content/test/plugins/browser_private_clicktoplay.js
Make sure CTP interface works in private windows
browser/base/content/test/plugins/browser_subframe_access_hidden_plugins.js
Allow navigator.plugins to list plugin after CTP approval, even if it listed in `plugins.navigator.hidden_ctp_plugin`
Differential Revision: https://phabricator.services.mozilla.com/D95906
This commit uses the new Markers 2.0 API for FileIO Markers. I had to
create another option for the MarkerStack class in order to conditionally
capture a backtrace inside of the Macro. Otherwise the macro invocation
failed.
Differential Revision: https://phabricator.services.mozilla.com/D93848
When the SandboxBrokerPolicyFactory is constructed, prefs aren't
available, which constrains the cached subset of the content process
policy to entries that don't depend on prefs. Delaying the computation
until a content process is started removes that restriction.
(This also delays the reading of dynamic linker configuration to discover
library directories, so a test needs to be adjusted.)
Differential Revision: https://phabricator.services.mozilla.com/D81423
Use `GetFileType(HANDLE)` on Windows.
Unlike `HandleToFilename`, `GetFileType` is fast enough that we don't need to use a `SmallArrayLRUCache` for it.
The pipe I/Os should not be visible anymore in the startup tests.
Differential Revision: https://phabricator.services.mozilla.com/D82303
Caching filenames in 32-entry LRU array covers >95% of calls, and makes the average `Filename()` call 5 to 10 times cheaper.
browser_start_content_mainthreadio.js needed to be updated to handle operations that now have a filename thanks to the cache.
Since `ClearPoisonIOInterposer()` is never called (see bug 1647107), during Firefox shutdown we put LRUCache in a shutdown mode, which bypasses the cache in case it is still used at that time.
Differential Revision: https://phabricator.services.mozilla.com/D79767
Caching filenames in 32-entry LRU array covers >95% of calls, and makes the average `Filename()` call 5 to 10 times cheaper.
browser_start_content_mainthreadio.js needed to be updated to handle operations that now have a filename thanks to the cache.
Differential Revision: https://phabricator.services.mozilla.com/D79767
Add a new extension location in the user profile that Normandy will use to install mozilla signed addons. These are used to update builtin addons, experiments, etc. as well as take over functionality currently supported by Balrog.
Differential Revision: https://phabricator.services.mozilla.com/D70636
For Win32k lockdown, we need to remove the content processes' ability to
call GetICMProfileW(). Since it needs this to retrieve the output color
profile, a new synchronous call is added that allows it to request the
parent process to read this file on its behalf.
The contents of the file are now being cached as well, as this should help
ease some of the increased parent process I/O caused by the children not
being able to do this in their process anymore.
For performance reasons, during launch this information is passed directly
to the child through the SetXPCOMProcessAttributes call
Differential Revision: https://phabricator.services.mozilla.com/D66126
--HG--
extra : moz-landing-system : lando
I'm taking the opportunity to remove isDefaultHandlerApp messaging as the
content-side calls were removed in bug 1353029.
Depends on D59788
Differential Revision: https://phabricator.services.mozilla.com/D59789
--HG--
extra : moz-landing-system : lando
I'm taking the opportunity to remove isDefaultHandlerApp messaging as the
content-side calls were removed in bug 1353029.
Depends on D59788
Differential Revision: https://phabricator.services.mozilla.com/D59789
--HG--
extra : moz-landing-system : lando
This permission manager migration drops the granted origin part of the
permission type.
Differential Revision: https://phabricator.services.mozilla.com/D57494
--HG--
extra : moz-landing-system : lando
This permission manager migration drops the granted origin part of the
permission type.
Differential Revision: https://phabricator.services.mozilla.com/D57494
--HG--
extra : moz-landing-system : lando
Probably caused by Bug 1577803, which is a good change, so updating the tests.
Differential Revision: https://phabricator.services.mozilla.com/D53050
--HG--
extra : moz-landing-system : lando
Finally, let's move the actual IO away from the main thread.
This means there are now 3 ways of looking for plugins:
1. looking for changes from ReloadPlugins. This runs the PluginFinder runnable
on the main thread.
2. loading plugins from LoadPlugins. This will:
a) first check prefs and report the flash plugin based on that information,
if the prefs indicate it exists (using the callback provided by
nsPluginHost).
b) then hopefully dispatch to a background thread, where it will read
pluginreg.dat, scan the appropriate folders on disk, and see if
anything changed. Once done, it sets mFinishedFinding to true and
re-dispatches itself to the main thread.
c) then on the main thread, it reports any changes to nsPluginHost.
3. if dispatching in 2(b) fails, we will run steps (b) and (c) on the main
thread.
Note: if ReloadPlugins is called, we intiially do (1), but if we find
changes, we clear out the set of known plugins and then run LoadPlugins
again (meaning we go through 2 (or 3 if 2(b) fails)). This is how
reloading plugins worked prior to my changes and I've attempted not to
change it.
In order for this to work, there are some other changes in this commit:
- the sandbox prefs are being read "early" and cached for flash vs
"everything else". We can't access prefs on non-main threads without
using StaticPrefs, which doesn't seem worth it here.
- some of the plugin tag classes are moved to threadsafe refcounting.
This is a bit unfortunate, but because they're instantiated on a non-
mainthread, and then later used on the main thread, despite the
fact that the architecture means nothing tries to touch them from
more than one thread at once, without threadsafe refcounting we hit
asserts in debug mode if we add references to them back on the main thread.
- we add shutdown blocking for pluginfinding. We don't really want to
be halfway through finding plugins and then trying to shut them down,
or re-instantiating plugins after they've been unloaded.
- we keep a reference to the "pending" pluginfinder instance while
doing lookups away from the main thread (ie (2)), to avoid re-entrancy or
trying to write to pluginreg while we're reading it somewhere else,
etc. If there's an attempt to do more plugin finding while this is
ongoing, we flip mDoReloadOnceFindingFinished and do a reload once
our initial lookups are complete.
Depends on D48331
Differential Revision: https://phabricator.services.mozilla.com/D48332
--HG--
extra : moz-landing-system : lando