Bug 1400317 - Win32k Lockdown: Remote IsAppThemed() r=jmathies

Differential Revision: https://phabricator.services.mozilla.com/D80566
This commit is contained in:
Chris Martin 2020-06-26 13:16:13 +00:00
Родитель f26e59ad61
Коммит 22b263e21b
3 изменённых файлов: 34 добавлений и 1 удалений

Просмотреть файл

@ -25,6 +25,9 @@ struct WinContentSystemParameters::Detail {
bool cachedIsPerMonitorDPIAware{false};
float cachedSystemDPI{0.0f};
bool cachedFlatMenusEnabled{false};
// Almost-always true in Windows 7, always true starting in Windows 8
bool cachedIsAppThemed{true};
};
// static
@ -63,6 +66,14 @@ bool WinContentSystemParameters::AreFlatMenusEnabled() {
return mDetail->cachedFlatMenusEnabled;
}
bool WinContentSystemParameters::IsAppThemed() {
MOZ_ASSERT(XRE_IsContentProcess());
OffTheBooksMutexAutoLock lock(mDetail->mutex);
MOZ_RELEASE_ASSERT(IsCachedValueValid(SystemParameterId::IsAppThemed));
return mDetail->cachedIsAppThemed;
}
void WinContentSystemParameters::SetContentValueInternal(
const SystemParameterKVPair& aKVPair) {
MOZ_ASSERT(XRE_IsContentProcess());
@ -87,6 +98,10 @@ void WinContentSystemParameters::SetContentValueInternal(
mDetail->cachedFlatMenusEnabled = aKVPair.value();
return;
case SystemParameterId::IsAppThemed:
mDetail->cachedIsAppThemed = aKVPair.value();
return;
case SystemParameterId::Count:
MOZ_CRASH("Invalid SystemParameterId");
}
@ -124,6 +139,10 @@ bool WinContentSystemParameters::GetParentValueInternal(
aKVPair->value() = nsUXThemeData::AreFlatMenusEnabled();
return true;
case SystemParameterId::IsAppThemed:
aKVPair->value() = nsUXThemeData::IsAppThemed();
return true;
case SystemParameterId::Count:
MOZ_CRASH("Invalid SystemParameterId");
}
@ -154,6 +173,12 @@ void WinContentSystemParameters::OnThemeChanged() {
updates.AppendElement(std::move(kvPair));
}
{
dom::SystemParameterKVPair kvPair{};
GetParentValueInternal(SystemParameterId::IsAppThemed, &kvPair);
updates.AppendElement(std::move(kvPair));
}
nsTArray<dom::ContentParent*> contentProcesses{};
dom::ContentParent::GetAll(contentProcesses);
for (auto contentProcess : contentProcesses) {

Просмотреть файл

@ -22,6 +22,7 @@ enum class SystemParameterId : uint8_t {
IsPerMonitorDPIAware = 0,
SystemDPI,
FlatMenusEnabled,
IsAppThemed,
Count,
};
@ -35,6 +36,8 @@ class WinContentSystemParameters {
bool AreFlatMenusEnabled();
bool IsAppThemed();
void SetContentValues(const nsTArray<dom::SystemParameterKVPair>& values);
nsTArray<dom::SystemParameterKVPair> GetParentValues();

Просмотреть файл

@ -402,4 +402,9 @@ bool nsUXThemeData::AreFlatMenusEnabled() {
}
// static
bool nsUXThemeData::IsAppThemed() { return !!::IsAppThemed(); }
bool nsUXThemeData::IsAppThemed() {
if (XRE_IsContentProcess()) {
return WinContentSystemParameters::GetSingleton()->IsAppThemed();
}
return !!::IsAppThemed();
}