mirror of
https://github.com/mozilla-firefox/firefox
synced 2026-08-11 12:19:28 +00:00
STA initialization was initially introduced to nsWindowsShellService when pin checks were moved to a background thread in D106346, and only for `IsCurrentAppPinnedToTaskbarAsync`. Notably neither `PinCurrentAppToTaskbar` nor `CheckPinCurrentAppToTaskbar` enforce either main thread or STA, though the Taskband Pin COM API can only be created on an STA thread.
No Windows API called by `IsCurrentAppPinnedToTaskbarAsync` are documented or observed to rely on STA, notably `ShellLink` has `ThreadingModel=Both` in `HKCR\CLSID\{00021401-0000-0000-C000-000000000046}\InProcServer32`. `00021401-0000-0000-C000-000000000046` is UUID associated to `CLSID_ShellLink`.
Neither `ShellExecute` nor shell dialog opening functions are used herein. These are the two common sources of shell functions erring from `E_NOINTERFACE` on MTA threads as documented in "Calling shell functions and interfaces from a multithreaded apartment" at https://learn.microsoft.com/en-us/previous-versions/troubleshoot/windows/win32/shell-functions-multithreaded-apartment.
This initial use of STA predates implicit MTA on background threads introduced in Bug 1707954 by a few months.
Given the above context it is likely that the original intent was only to ensure COM was initialized for the background thread. It is unlikely STA was an intentional choice, and instead the result of choosing the smaller API between `CoInitialize` and `CoInitializeEx`.
Remaining STA initialization seems to have copy/pasted this original example without further consideration.
Differential Revision: https://phabricator.services.mozilla.com/D296211
69 lines
2.6 KiB
YAML
69 lines
2.6 KiB
YAML
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
---
|
|
forbid-mscom-init:
|
|
description: >-
|
|
New calls to CoInitialize, CoInitializeEx, OleInitialize, RoInitialize,
|
|
CoUninitialize, OleUninitialize, or RoUninitialize are forbidden. If you
|
|
have questions, please consult a peer of the IPC: MSCOM module.
|
|
level: error
|
|
include: ['.']
|
|
type: regex
|
|
payload: ([CR]o|Ole)(Uni|I)nitialize(Ex)?
|
|
ignore-case: false
|
|
extensions:
|
|
- h
|
|
- c
|
|
- cc
|
|
- cpp
|
|
- rs
|
|
exclude:
|
|
# These files contain utilities for using COM more safely.
|
|
- ipc/mscom/ApartmentRegion.h
|
|
- ipc/mscom/COMWrappers.cpp
|
|
- ipc/mscom/COMWrappers.h
|
|
- ipc/mscom/EnsureMTA.cpp
|
|
# These files have been reviewed by MSCOM peers, and the use of
|
|
# CoInitialize within them has been confirmed to be necessary and
|
|
# proper.
|
|
- ipc/mscom/ProcessRuntime.cpp
|
|
# These files are existing legacy uses of CoInitialize (and so forth)
|
|
# that must eventually be fixed -- probably by converting them to use
|
|
# ApartmentRegion and moving them to _that_ lint's exception-list.
|
|
- image/DecodePool.cpp
|
|
- ipc/glue/IOThread.cpp
|
|
- netwerk/system/win32/nsNotifyAddrListener.cpp
|
|
- toolkit/components/bitsdownload/bits_client/bits/src/lib.rs
|
|
- toolkit/crashreporter/google-breakpad/src/common/windows/pdb_source_line_writer.cc
|
|
- toolkit/mozapps/defaultagent/proxy/main.cpp
|
|
- uriloader/exthandler/win/nsOSHelperAppService.cpp
|
|
- widget/windows/TaskbarPreview.cpp
|
|
- widget/windows/WinTaskbar.cpp
|
|
- widget/windows/nsWindow.cpp
|
|
- widget/windows/nsWindow.h
|
|
- widget/windows/tests/TestUriValidation.cpp
|
|
- xpcom/io/nsLocalFileWin.cpp
|
|
|
|
forbid-apartment-region:
|
|
description: >-
|
|
New uses of ApartmentRegion, ApartmentRegionT, MTARegion, or STARegion
|
|
require approval by a peer of the IPC: MSCOM module.
|
|
level: error
|
|
include: ['.']
|
|
type: regex
|
|
payload: ApartmentRegion(T)?|[MS]TARegion
|
|
ignore-case: false
|
|
extensions:
|
|
- h
|
|
- c
|
|
- cc
|
|
- cpp
|
|
exclude:
|
|
# ApartmentRegion's definition.
|
|
- ipc/mscom/ApartmentRegion.h
|
|
# These files have been reviewed and approved by MSCOM peers.
|
|
- ipc/mscom/ProcessRuntime.cpp
|
|
- ipc/mscom/ProcessRuntime.h
|
|
- widget/windows/filedialog/WinFileDialogCommands.cpp
|