Bug 1746114 - Collect the third-party modules ping from socket process. r=mhowell,necko-reviewers,kershaw

Differential Revision: https://phabricator.services.mozilla.com/D133846
This commit is contained in:
Toshihito Kikuchi 2021-12-16 01:34:23 +00:00
parent 8b1e02f532
commit 8daad79c45
7 changed files with 76 additions and 0 deletions

View File

@ -50,6 +50,12 @@ using mozilla::net::SocketInfo from "mozilla/net/DashboardTypes.h";
using mozilla::net::DNSCacheEntries from "mozilla/net/DashboardTypes.h"; using mozilla::net::DNSCacheEntries from "mozilla/net/DashboardTypes.h";
using mozilla::net::HttpRetParams from "mozilla/net/DashboardTypes.h"; using mozilla::net::HttpRetParams from "mozilla/net/DashboardTypes.h";
#if defined(XP_WIN)
[MoveOnly] using mozilla::UntrustedModulesData from "mozilla/UntrustedModulesData.h";
[MoveOnly] using mozilla::ModulePaths from "mozilla/UntrustedModulesData.h";
[MoveOnly] using mozilla::ModulesMapResult from "mozilla/UntrustedModulesData.h";
#endif // defined(XP_WIN)
namespace mozilla { namespace mozilla {
namespace net { namespace net {
@ -147,6 +153,11 @@ parent:
// https://firefox-source-docs.mozilla.org/toolkit/components/glean/dev/ipc.html // https://firefox-source-docs.mozilla.org/toolkit/components/glean/dev/ipc.html
async FOGData(ByteBuf buf); async FOGData(ByteBuf buf);
#if defined(XP_WIN)
async GetModulesTrust(ModulePaths aModPaths, bool aRunAtNormalPriority)
returns (ModulesMapResult? modMapResult);
#endif // defined(XP_WIN)
child: child:
async Init(SocketPorcessInitAttributes aAttributes); async Init(SocketPorcessInitAttributes aAttributes);
async PreferenceUpdate(Pref pref); async PreferenceUpdate(Pref pref);
@ -207,6 +218,10 @@ child:
// The unused returned value is to have a promise we can await. // The unused returned value is to have a promise we can await.
async TestTriggerMetrics() returns (bool unused); async TestTriggerMetrics() returns (bool unused);
#if defined(XP_WIN)
async GetUntrustedModulesData() returns (UntrustedModulesData? data);
#endif // defined(XP_WIN)
both: both:
async PFileDescriptorSet(FileDescriptor fd); async PFileDescriptorSet(FileDescriptor fd);
async PDNSRequest(nsCString hostName, nsCString trrServer, uint16_t type, async PDNSRequest(nsCString hostName, nsCString trrServer, uint16_t type,

View File

@ -55,6 +55,8 @@
#if defined(XP_WIN) #if defined(XP_WIN)
# include <process.h> # include <process.h>
# include "mozilla/WinDllServices.h"
#else #else
# include <unistd.h> # include <unistd.h>
#endif #endif
@ -168,6 +170,12 @@ bool SocketProcessChild::Init(base::ProcessId aParentPid,
// Initialize DNS Service here, since it needs to be done in main thread. // Initialize DNS Service here, since it needs to be done in main thread.
nsCOMPtr<nsIDNSService> dns = nsCOMPtr<nsIDNSService> dns =
do_GetService("@mozilla.org/network/dns-service;1", &rv); do_GetService("@mozilla.org/network/dns-service;1", &rv);
#if defined(XP_WIN)
RefPtr<DllServices> dllSvc(DllServices::Get());
dllSvc->StartUntrustedModulesProcessor();
#endif // defined(XP_WIN)
return NS_SUCCEEDED(rv); return NS_SUCCEEDED(rv);
} }
@ -687,5 +695,19 @@ mozilla::ipc::IPCResult SocketProcessChild::RecvTestTriggerMetrics(
return IPC_OK(); return IPC_OK();
} }
#if defined(XP_WIN)
mozilla::ipc::IPCResult SocketProcessChild::RecvGetUntrustedModulesData(
GetUntrustedModulesDataResolver&& aResolver) {
RefPtr<DllServices> dllSvc(DllServices::Get());
dllSvc->GetUntrustedModulesData()->Then(
GetMainThreadSerialEventTarget(), __func__,
[aResolver](Maybe<UntrustedModulesData>&& aData) {
aResolver(std::move(aData));
},
[aResolver](nsresult aReason) { aResolver(Nothing()); });
return IPC_OK();
}
#endif // defined(XP_WIN)
} // namespace net } // namespace net
} // namespace mozilla } // namespace mozilla

View File

@ -153,6 +153,11 @@ class SocketProcessChild final
mozilla::ipc::IPCResult RecvTestTriggerMetrics( mozilla::ipc::IPCResult RecvTestTriggerMetrics(
TestTriggerMetricsResolver&& aResolve); TestTriggerMetricsResolver&& aResolve);
#if defined(XP_WIN)
mozilla::ipc::IPCResult RecvGetUntrustedModulesData(
GetUntrustedModulesDataResolver&& aResolver);
#endif // defined(XP_WIN)
protected: protected:
friend class SocketProcessImpl; friend class SocketProcessImpl;
~SocketProcessChild(); ~SocketProcessChild();

View File

@ -476,5 +476,21 @@ mozilla::ipc::IPCResult SocketProcessParent::RecvFOGData(ByteBuf&& aBuf) {
return IPC_OK(); return IPC_OK();
} }
#if defined(XP_WIN)
mozilla::ipc::IPCResult SocketProcessParent::RecvGetModulesTrust(
ModulePaths&& aModPaths, bool aRunAtNormalPriority,
GetModulesTrustResolver&& aResolver) {
RefPtr<DllServices> dllSvc(DllServices::Get());
dllSvc->GetModulesTrust(std::move(aModPaths), aRunAtNormalPriority)
->Then(
GetMainThreadSerialEventTarget(), __func__,
[aResolver](ModulesMapResult&& aResult) {
aResolver(Some(ModulesMapResult(std::move(aResult))));
},
[aResolver](nsresult aRv) { aResolver(Nothing()); });
return IPC_OK();
}
#endif // defined(XP_WIN)
} // namespace net } // namespace net
} // namespace mozilla } // namespace mozilla

View File

@ -127,6 +127,12 @@ class SocketProcessParent final
mozilla::ipc::IPCResult RecvFOGData(ByteBuf&& aBuf); mozilla::ipc::IPCResult RecvFOGData(ByteBuf&& aBuf);
#if defined(XP_WIN)
mozilla::ipc::IPCResult RecvGetModulesTrust(
ModulePaths&& aModPaths, bool aRunAtNormalPriority,
GetModulesTrustResolver&& aResolver);
#endif // defined(XP_WIN)
private: private:
SocketProcessHost* mHost; SocketProcessHost* mHost;
UniquePtr<dom::MemoryReportRequestHost> mMemoryReportRequest; UniquePtr<dom::MemoryReportRequestHost> mMemoryReportRequest;

View File

@ -8,6 +8,7 @@
#include "mozilla/dom/ContentParent.h" #include "mozilla/dom/ContentParent.h"
#include "mozilla/MozPromise.h" #include "mozilla/MozPromise.h"
#include "mozilla/net/SocketProcessParent.h"
#include "mozilla/RDDChild.h" #include "mozilla/RDDChild.h"
#include "mozilla/RDDProcessManager.h" #include "mozilla/RDDProcessManager.h"
#include "mozilla/WinDllServices.h" #include "mozilla/WinDllServices.h"
@ -131,6 +132,10 @@ MultiGetUntrustedModulesData::GetUntrustedModuleLoadEvents() {
AddPending(contentParent->SendGetUntrustedModulesData()); AddPending(contentParent->SendGetUntrustedModulesData());
} }
if (auto* socketActor = net::SocketProcessParent::GetSingleton()) {
AddPending(socketActor->SendGetUntrustedModulesData());
}
if (RDDProcessManager* rddMgr = RDDProcessManager::Get()) { if (RDDProcessManager* rddMgr = RDDProcessManager::Get()) {
if (RDDChild* rddChild = rddMgr->GetRDDChild()) { if (RDDChild* rddChild = rddMgr->GetRDDChild()) {
AddPending(rddChild->SendGetUntrustedModulesData()); AddPending(rddChild->SendGetUntrustedModulesData());

View File

@ -12,6 +12,7 @@
#include "mozilla/DebugOnly.h" #include "mozilla/DebugOnly.h"
#include "mozilla/dom/ContentChild.h" #include "mozilla/dom/ContentChild.h"
#include "mozilla/Likely.h" #include "mozilla/Likely.h"
#include "mozilla/net/SocketProcessChild.h"
#include "mozilla/RDDParent.h" #include "mozilla/RDDParent.h"
#include "mozilla/ScopeExit.h" #include "mozilla/ScopeExit.h"
#include "mozilla/Services.h" #include "mozilla/Services.h"
@ -92,6 +93,7 @@ bool UntrustedModulesProcessor::IsSupportedProcessType() {
switch (XRE_GetProcessType()) { switch (XRE_GetProcessType()) {
case GeckoProcessType_Default: case GeckoProcessType_Default:
case GeckoProcessType_Content: case GeckoProcessType_Content:
case GeckoProcessType_Socket:
return Telemetry::CanRecordReleaseData(); return Telemetry::CanRecordReleaseData();
case GeckoProcessType_RDD: case GeckoProcessType_RDD:
// For RDD process, we check the telemetry settings in RDDChild::Init() // For RDD process, we check the telemetry settings in RDDChild::Init()
@ -695,6 +697,11 @@ UntrustedModulesProcessor::SendGetModulesTrust(ModulePaths&& aModules,
return ::mozilla::SendGetModulesTrust(RDDParent::GetSingleton(), return ::mozilla::SendGetModulesTrust(RDDParent::GetSingleton(),
std::move(aModules), runNormal); std::move(aModules), runNormal);
} }
case GeckoProcessType_Socket: {
return ::mozilla::SendGetModulesTrust(
net::SocketProcessChild::GetSingleton(), std::move(aModules),
runNormal);
}
default: { default: {
MOZ_ASSERT_UNREACHABLE("Unsupported process type"); MOZ_ASSERT_UNREACHABLE("Unsupported process type");
return GetModulesTrustIpcPromise::CreateAndReject( return GetModulesTrustIpcPromise::CreateAndReject(