diff --git a/.inferconfig b/.inferconfig deleted file mode 100644 index 7141b07a2302..000000000000 --- a/.inferconfig +++ /dev/null @@ -1,7 +0,0 @@ -{ - "infer-blacklist-path-regex": [ - // This is full of issues, and is a dependency we need to discard - // sooner rather than later anyway: - "mobile/android/thirdparty/ch/boye/httpclientandroidlib" - ] -} \ No newline at end of file diff --git a/accessible/interfaces/ia2/moz.build b/accessible/interfaces/ia2/moz.build index 5ba924822d5e..da3d1d39b058 100644 --- a/accessible/interfaces/ia2/moz.build +++ b/accessible/interfaces/ia2/moz.build @@ -98,6 +98,3 @@ if CONFIG['CC_TYPE'] == 'clang-cl': '-Wno-missing-braces', '-Wno-unused-const-variable', ] - -if CONFIG['MOZ_PGO'] and CONFIG['CC_TYPE'] == 'clang-cl': - AllowCompilerWarnings() # workaround for bug 1090497 diff --git a/accessible/interfaces/msaa/moz.build b/accessible/interfaces/msaa/moz.build index 2eb59bff56ce..14aabb852e2f 100644 --- a/accessible/interfaces/msaa/moz.build +++ b/accessible/interfaces/msaa/moz.build @@ -44,6 +44,3 @@ if CONFIG['CC_TYPE'] == 'clang-cl': '-Wno-missing-braces', '-Wno-unused-const-variable', ] - -if CONFIG['MOZ_PGO'] and CONFIG['CC_TYPE'] == 'clang-cl': - AllowCompilerWarnings() # workaround for bug 1090497 diff --git a/browser/app/winlauncher/DllBlocklistWin.cpp b/browser/app/winlauncher/DllBlocklistWin.cpp index 2ed8bc4dd75e..83fde38e737e 100644 --- a/browser/app/winlauncher/DllBlocklistWin.cpp +++ b/browser/app/winlauncher/DllBlocklistWin.cpp @@ -25,8 +25,7 @@ { MOZ_LITERAL_UNICODE_STRING(L##name), __VA_ARGS__ }, #define DLL_BLOCKLIST_STRING_TYPE UNICODE_STRING -// Restrict the blocklist definitions to Nightly-only for now -#if defined(NIGHTLY_BUILD) +#if defined(MOZ_LAUNCHER_PROCESS) || defined(NIGHTLY_BUILD) #include "mozilla/WindowsDllBlocklistDefs.h" #else #include "mozilla/WindowsDllBlocklistCommon.h" diff --git a/browser/app/winlauncher/LaunchUnelevated.cpp b/browser/app/winlauncher/LaunchUnelevated.cpp index 829984ebf4ef..ff0960eaf63e 100644 --- a/browser/app/winlauncher/LaunchUnelevated.cpp +++ b/browser/app/winlauncher/LaunchUnelevated.cpp @@ -6,6 +6,7 @@ #include "LaunchUnelevated.h" +#include "mozilla/Assertions.h" #include "mozilla/CmdLineAndEnvUtils.h" #include "mozilla/mscom/COMApartmentRegion.h" #include "mozilla/RefPtr.h" @@ -22,6 +23,76 @@ #include #include +static mozilla::Maybe +GetElevationType(const nsAutoHandle& aToken) +{ + DWORD retLen; + TOKEN_ELEVATION_TYPE elevationType; + if (!::GetTokenInformation(aToken.get(), TokenElevationType, &elevationType, + sizeof(elevationType), &retLen)) { + return mozilla::Nothing(); + } + + return mozilla::Some(elevationType); +} + +static mozilla::Maybe +IsHighIntegrity(const nsAutoHandle& aToken) +{ + DWORD reqdLen; + if (!::GetTokenInformation(aToken.get(), TokenIntegrityLevel, nullptr, 0, + &reqdLen) && + ::GetLastError() != ERROR_INSUFFICIENT_BUFFER) { + return mozilla::Nothing(); + } + + auto buf = mozilla::MakeUnique(reqdLen); + + if (!::GetTokenInformation(aToken.get(), TokenIntegrityLevel, buf.get(), + reqdLen, &reqdLen)) { + return mozilla::Nothing(); + } + + auto tokenLabel = reinterpret_cast(buf.get()); + + DWORD subAuthCount = *::GetSidSubAuthorityCount(tokenLabel->Label.Sid); + DWORD integrityLevel = *::GetSidSubAuthority(tokenLabel->Label.Sid, + subAuthCount - 1); + return mozilla::Some(integrityLevel > SECURITY_MANDATORY_MEDIUM_RID); +} + +static nsReturnRef +GetMediumIntegrityToken(const nsAutoHandle& aProcessToken) +{ + nsAutoHandle empty; + + HANDLE rawResult; + if (!::DuplicateTokenEx(aProcessToken.get(), 0, nullptr, + SecurityImpersonation, TokenPrimary, &rawResult)) { + return empty.out(); + } + + nsAutoHandle result(rawResult); + + BYTE mediumIlSid[SECURITY_MAX_SID_SIZE]; + DWORD mediumIlSidSize = sizeof(mediumIlSid); + if (!::CreateWellKnownSid(WinMediumLabelSid, nullptr, mediumIlSid, + &mediumIlSidSize)) { + return empty.out(); + } + + TOKEN_MANDATORY_LABEL integrityLevel = {}; + integrityLevel.Label.Attributes = SE_GROUP_INTEGRITY; + integrityLevel.Label.Sid = reinterpret_cast(mediumIlSid); + + if (!::SetTokenInformation(rawResult, TokenIntegrityLevel, &integrityLevel, + sizeof(integrityLevel))) { + return empty.out(); + } + + return result.out(); +} + namespace mozilla { // If we're running at an elevated integrity level, re-run ourselves at the @@ -125,36 +196,62 @@ LaunchUnelevated(int aArgc, wchar_t* aArgv[]) return SUCCEEDED(hr); } -mozilla::Maybe -IsElevated() +Maybe +GetElevationState(mozilla::LauncherFlags aFlags, nsAutoHandle& aOutMediumIlToken) { + aOutMediumIlToken.reset(); + + const DWORD tokenFlags = TOKEN_QUERY | TOKEN_DUPLICATE | + TOKEN_ADJUST_DEFAULT | TOKEN_ASSIGN_PRIMARY; HANDLE rawToken; - if (!::OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &rawToken)) { - return mozilla::Nothing(); + if (!::OpenProcessToken(::GetCurrentProcess(), tokenFlags, &rawToken)) { + return Nothing(); } nsAutoHandle token(rawToken); - DWORD reqdLen; - if (!::GetTokenInformation(token.get(), TokenIntegrityLevel, nullptr, 0, - &reqdLen) && - ::GetLastError() != ERROR_INSUFFICIENT_BUFFER) { - return mozilla::Nothing(); + Maybe elevationType = GetElevationType(token); + if (!elevationType) { + return Nothing(); } - auto buf = mozilla::MakeUnique(reqdLen); + switch (elevationType.value()) { + case TokenElevationTypeLimited: + return Some(ElevationState::eNormalUser); + case TokenElevationTypeFull: + // If we want to start a non-elevated browser process and wait on it, + // we're going to need a medium IL token. + if ((aFlags & (mozilla::LauncherFlags::eWaitForBrowser | + mozilla::LauncherFlags::eNoDeelevate)) == + mozilla::LauncherFlags::eWaitForBrowser) { + aOutMediumIlToken = GetMediumIntegrityToken(token); + } - if (!::GetTokenInformation(token.get(), TokenIntegrityLevel, buf.get(), - reqdLen, &reqdLen)) { - return mozilla::Nothing(); + return Some(ElevationState::eElevated); + case TokenElevationTypeDefault: + break; + default: + MOZ_ASSERT_UNREACHABLE("Was a new value added to the enumeration?"); + return Nothing(); } - auto tokenLabel = reinterpret_cast(buf.get()); + // In this case, UAC is disabled. We do not yet know whether or not we are + // running at high integrity. If we are at high integrity, we can't relaunch + // ourselves in a non-elevated state via Explorer, as we would just end up in + // an infinite loop of launcher processes re-launching themselves. - DWORD subAuthCount = *::GetSidSubAuthorityCount(tokenLabel->Label.Sid); - DWORD integrityLevel = *::GetSidSubAuthority(tokenLabel->Label.Sid, - subAuthCount - 1); - return mozilla::Some(integrityLevel > SECURITY_MANDATORY_MEDIUM_RID); + Maybe isHighIntegrity = IsHighIntegrity(token); + if (!isHighIntegrity) { + return Nothing(); + } + + if (!isHighIntegrity.value()) { + return Some(ElevationState::eNormalUser); + } + + aOutMediumIlToken = GetMediumIntegrityToken(token); + + return Some(ElevationState::eHighIntegrityNoUAC); } } // namespace mozilla diff --git a/browser/app/winlauncher/LaunchUnelevated.h b/browser/app/winlauncher/LaunchUnelevated.h index 01aa4351317e..27c7e4ffc2bd 100644 --- a/browser/app/winlauncher/LaunchUnelevated.h +++ b/browser/app/winlauncher/LaunchUnelevated.h @@ -7,11 +7,22 @@ #ifndef mozilla_LaunchUnelevated_h #define mozilla_LaunchUnelevated_h +#include "LauncherProcessWin.h" #include "mozilla/Maybe.h" +#include "nsWindowsHelpers.h" namespace mozilla { -mozilla::Maybe IsElevated(); +enum class ElevationState +{ + eNormalUser = 0, + eElevated = (1 << 0), + eHighIntegrityNoUAC = (1 << 1), +}; + +mozilla::Maybe +GetElevationState(LauncherFlags aFlags, nsAutoHandle& aOutMediumIlToken); + bool LaunchUnelevated(int aArgc, wchar_t* aArgv[]); } // namespace mozilla diff --git a/browser/app/winlauncher/LauncherProcessWin.cpp b/browser/app/winlauncher/LauncherProcessWin.cpp index bf31b59faf92..78227ccb04bd 100644 --- a/browser/app/winlauncher/LauncherProcessWin.cpp +++ b/browser/app/winlauncher/LauncherProcessWin.cpp @@ -82,16 +82,82 @@ ShowError(DWORD aError = ::GetLastError()) ::LocalFree(rawMsgBuf); } +static mozilla::LauncherFlags +ProcessCmdLine(int& aArgc, wchar_t* aArgv[]) +{ + mozilla::LauncherFlags result = mozilla::LauncherFlags::eNone; + + if (mozilla::CheckArg(aArgc, aArgv, L"wait-for-browser", + static_cast(nullptr), + mozilla::CheckArgFlag::RemoveArg) == mozilla::ARG_FOUND || + mozilla::EnvHasValue("MOZ_AUTOMATION")) { + result |= mozilla::LauncherFlags::eWaitForBrowser; + } + + if (mozilla::CheckArg(aArgc, aArgv, L"no-deelevate", + static_cast(nullptr), + mozilla::CheckArgFlag::CheckOSInt | + mozilla::CheckArgFlag::RemoveArg) == mozilla::ARG_FOUND) { + result |= mozilla::LauncherFlags::eNoDeelevate; + } + + return result; +} + +#if defined(MOZ_LAUNCHER_PROCESS) + +static mozilla::Maybe +IsSameBinaryAsParentProcess() +{ + mozilla::Maybe parentPid = mozilla::nt::GetParentProcessId(); + if (!parentPid) { + return mozilla::Nothing(); + } + + nsAutoHandle parentProcess(::OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, + FALSE, parentPid.value())); + if (!parentProcess.get()) { + return mozilla::Nothing(); + } + + WCHAR parentExe[MAX_PATH + 1] = {}; + DWORD parentExeLen = mozilla::ArrayLength(parentExe); + if (!::QueryFullProcessImageNameW(parentProcess.get(), 0, parentExe, + &parentExeLen)) { + return mozilla::Nothing(); + } + + WCHAR ourExe[MAX_PATH + 1] = {}; + DWORD ourExeOk = ::GetModuleFileNameW(nullptr, ourExe, + mozilla::ArrayLength(ourExe)); + if (!ourExeOk || ourExeOk == mozilla::ArrayLength(ourExe)) { + return mozilla::Nothing(); + } + + bool isSame = parentExeLen == ourExeOk && + !_wcsnicmp(ourExe, parentExe, ourExeOk); + return mozilla::Some(isSame); +} + +#endif // defined(MOZ_LAUNCHER_PROCESS) + namespace mozilla { -// Eventually we want to be able to set a build config flag such that, when set, -// this function will always return true. bool RunAsLauncherProcess(int& argc, wchar_t** argv) { +#if defined(MOZ_LAUNCHER_PROCESS) + Maybe isChildOfFirefox = IsSameBinaryAsParentProcess(); + if (!isChildOfFirefox) { + return true; + } + + return !isChildOfFirefox.value(); +#else return CheckArg(argc, argv, L"launcher", static_cast(nullptr), - CheckArgFlag::CheckOSInt | CheckArgFlag::RemoveArg); + CheckArgFlag::CheckOSInt | CheckArgFlag::RemoveArg) == ARG_FOUND; +#endif // defined(MOZ_LAUNCHER_PROCESS) } int @@ -117,13 +183,20 @@ LauncherMain(int argc, wchar_t* argv[]) return 1; } - // If we're elevated, we should relaunch ourselves as a normal user - Maybe isElevated = IsElevated(); - if (!isElevated) { + LauncherFlags flags = ProcessCmdLine(argc, argv); + + nsAutoHandle mediumIlToken; + Maybe elevationState = GetElevationState(flags, mediumIlToken); + if (!elevationState) { return 1; } - if (isElevated.value()) { + // If we're elevated, we should relaunch ourselves as a normal user. + // Note that we only call LaunchUnelevated when we don't need to wait for the + // browser process. + if (elevationState.value() == ElevationState::eElevated && + !(flags & (LauncherFlags::eWaitForBrowser | LauncherFlags::eNoDeelevate)) && + !mediumIlToken.get()) { return !LaunchUnelevated(argc, argv); } @@ -178,8 +251,20 @@ LauncherMain(int argc, wchar_t* argv[]) } PROCESS_INFORMATION pi = {}; - if (!::CreateProcessW(argv[0], cmdLine.get(), nullptr, nullptr, inheritHandles, - creationFlags, nullptr, nullptr, &siex.StartupInfo, &pi)) { + BOOL createOk; + + if (mediumIlToken.get()) { + createOk = ::CreateProcessAsUserW(mediumIlToken.get(), argv[0], cmdLine.get(), + nullptr, nullptr, inheritHandles, + creationFlags, nullptr, nullptr, + &siex.StartupInfo, &pi); + } else { + createOk = ::CreateProcessW(argv[0], cmdLine.get(), nullptr, nullptr, + inheritHandles, creationFlags, nullptr, nullptr, + &siex.StartupInfo, &pi); + } + + if (!createOk) { ShowError(); return 1; } @@ -194,13 +279,22 @@ LauncherMain(int argc, wchar_t* argv[]) return 1; } - const DWORD timeout = ::IsDebuggerPresent() ? INFINITE : - kWaitForInputIdleTimeoutMS; + if (flags & LauncherFlags::eWaitForBrowser) { + DWORD exitCode; + if (::WaitForSingleObject(process.get(), INFINITE) == WAIT_OBJECT_0 && + ::GetExitCodeProcess(process.get(), &exitCode)) { + // Propagate the browser process's exit code as our exit code. + return static_cast(exitCode); + } + } else { + const DWORD timeout = ::IsDebuggerPresent() ? INFINITE : + kWaitForInputIdleTimeoutMS; - // Keep the current process around until the callback process has created - // its message queue, to avoid the launched process's windows being forced - // into the background. - mozilla::WaitForInputIdle(process.get(), timeout); + // Keep the current process around until the callback process has created + // its message queue, to avoid the launched process's windows being forced + // into the background. + mozilla::WaitForInputIdle(process.get(), timeout); + } return 0; } diff --git a/browser/app/winlauncher/LauncherProcessWin.h b/browser/app/winlauncher/LauncherProcessWin.h index b198d30724f6..e904aa8b8a3b 100644 --- a/browser/app/winlauncher/LauncherProcessWin.h +++ b/browser/app/winlauncher/LauncherProcessWin.h @@ -7,11 +7,24 @@ #ifndef mozilla_LauncherProcessWin_h #define mozilla_LauncherProcessWin_h +#include "mozilla/TypedEnumBits.h" + +#include + namespace mozilla { bool RunAsLauncherProcess(int& argc, wchar_t* argv[]); int LauncherMain(int argc, wchar_t* argv[]); +enum class LauncherFlags : uint32_t +{ + eNone = 0, + eWaitForBrowser = (1 << 0), // Launcher should block until browser finishes + eNoDeelevate = (1 << 1), // If elevated, do not attempt to de-elevate +}; + +MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(LauncherFlags) + } // namespace mozilla #endif // mozilla_LauncherProcessWin_h diff --git a/browser/app/winlauncher/NativeNt.h b/browser/app/winlauncher/NativeNt.h index 40c087110b96..4c56a90090e9 100644 --- a/browser/app/winlauncher/NativeNt.h +++ b/browser/app/winlauncher/NativeNt.h @@ -18,6 +18,7 @@ #include "mozilla/ArrayUtils.h" #include "mozilla/Attributes.h" +#include "mozilla/Maybe.h" extern "C" { @@ -449,8 +450,15 @@ private: return; } + DWORD imageSize = mPeHeader->OptionalHeader.SizeOfImage; + // This is a coarse-grained check to ensure that the image size is + // reasonable. It we aren't big enough to contain headers, we have a problem! + if (imageSize < sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS)) { + return; + } + mImageLimit = - RVAToPtrUnchecked(mPeHeader->OptionalHeader.SizeOfImage - 1UL); + RVAToPtrUnchecked(imageSize - 1UL); } template @@ -511,8 +519,7 @@ private: GetFixedFileInfo(VS_VERSIONINFO_HEADER* aVerInfo) { WORD length = aVerInfo->wLength; - WORD offset = sizeof(VS_VERSIONINFO_HEADER); - if (!offset) { + if (length < sizeof(VS_VERSIONINFO_HEADER)) { return nullptr; } @@ -523,12 +530,19 @@ private: return nullptr; } + if (aVerInfo->wValueLength != sizeof(VS_FIXEDFILEINFO)) { + // Fixed file info does not exist + return nullptr; + } + + WORD offset = sizeof(VS_VERSIONINFO_HEADER); + uintptr_t base = reinterpret_cast(aVerInfo); // Align up to 4-byte boundary #pragma warning(suppress: 4146) offset += (-(base + offset) & 3); - if (offset > length) { + if (offset >= length) { return nullptr; } @@ -554,6 +568,32 @@ RtlGetProcessHeap() return peb->Reserved4[1]; } +inline Maybe +GetParentProcessId() +{ + struct PROCESS_BASIC_INFORMATION + { + NTSTATUS ExitStatus; + PPEB PebBaseAddress; + ULONG_PTR AffinityMask; + LONG BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; + }; + + ULONG returnLength; + PROCESS_BASIC_INFORMATION pbi = {}; + NTSTATUS status = ::NtQueryInformationProcess(::GetCurrentProcess(), + ProcessBasicInformation, + &pbi, sizeof(pbi), + &returnLength); + if (!NT_SUCCESS(status)) { + return Nothing(); + } + + return Some(static_cast(pbi.InheritedFromUniqueProcessId & 0xFFFFFFFF)); +} + } // namespace nt } // namespace mozilla diff --git a/browser/components/places/tests/browser/browser_views_iconsupdate.js b/browser/components/places/tests/browser/browser_views_iconsupdate.js index fb88dc02f892..57937773904b 100644 --- a/browser/components/places/tests/browser/browser_views_iconsupdate.js +++ b/browser/components/places/tests/browser/browser_views_iconsupdate.js @@ -108,12 +108,15 @@ async function getRectForSidebarItem(guid) { let sidebar = document.getElementById("sidebar"); let tree = sidebar.contentDocument.getElementById("bookmarks-view"); tree.selectItems([guid]); - let rect = {}; - [rect.left, rect.top, rect.width, rect.height] = tree.treeBoxObject - .selectionRegion - .getRects(); - // Adjust the position for the sidebar. - rect.left += sidebar.getBoundingClientRect().left; - rect.top += sidebar.getBoundingClientRect().top; - return rect; + let treerect = tree.getBoundingClientRect(); + let cellrect = tree.treeBoxObject. + getCoordsForCellItem(tree.currentIndex, tree.columns[0], "cell"); + + // Adjust the position for the tree and sidebar. + return { + left: treerect.left + cellrect.left + sidebar.getBoundingClientRect().left, + top: treerect.top + cellrect.top + sidebar.getBoundingClientRect().top, + width: cellrect.width, + height: cellrect.height + }; } diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure index 3b564eb2043b..9cdbf7c859ed 100755 --- a/build/moz.configure/toolchain.configure +++ b/build/moz.configure/toolchain.configure @@ -1267,6 +1267,7 @@ def pgo_flags(compiler, build_env, target): gen_cflags=['-fprofile-instr-generate'], gen_ldflags=['clang_rt.profile-x86_64.lib'], use_cflags=['-fprofile-instr-use=%s' % profdata, + '-Wno-error=profile-instr-out-of-date', '-Wno-error=profile-instr-unprofiled'], use_ldflags=[], ) diff --git a/build/unix/elfhack/elfhack.cpp b/build/unix/elfhack/elfhack.cpp index 0eb660b70ad9..1d1177ee1633 100644 --- a/build/unix/elfhack/elfhack.cpp +++ b/build/unix/elfhack/elfhack.cpp @@ -1079,8 +1079,11 @@ int do_relocation_section(Elf *elf, unsigned int rel_type, unsigned int rel_type relhackcode->insertBefore(first_executable); // Don't try further if we can't gain from the relocation section size change. + // We account for the fact we're going to split the PT_LOAD before the injected + // code section, so the overhead of the page alignment for section needs to be + // accounted for. size_t align = first_executable->getSegmentByType(PT_LOAD)->getAlign(); - size_t new_size = relhack->getSize() + relhackcode->getSize(); + size_t new_size = relhack->getSize() + relhackcode->getSize() + (relhackcode->getAddr() & (align - 1)); if (!force && (new_size >= old_size || old_size - new_size < align)) { fprintf(stderr, "No gain. Skipping\n"); return -1; diff --git a/devtools/shared/css/generated/properties-db.js b/devtools/shared/css/generated/properties-db.js index 16a43c1a7e20..f78068f02399 100644 --- a/devtools/shared/css/generated/properties-db.js +++ b/devtools/shared/css/generated/properties-db.js @@ -1632,6 +1632,146 @@ exports.CSS_PROPERTIES = { "unset" ] }, + "-webkit-appearance": { + "isInherited": false, + "subproperties": [ + "-moz-appearance" + ], + "supports": [], + "values": [ + "-moz-gtk-info-bar", + "-moz-mac-active-source-list-selection", + "-moz-mac-disclosure-button-closed", + "-moz-mac-disclosure-button-open", + "-moz-mac-fullscreen-button", + "-moz-mac-help-button", + "-moz-mac-source-list", + "-moz-mac-source-list-selection", + "-moz-mac-vibrancy-dark", + "-moz-mac-vibrancy-light", + "-moz-mac-vibrant-titlebar-dark", + "-moz-mac-vibrant-titlebar-light", + "-moz-menulist-button", + "-moz-win-borderless-glass", + "-moz-win-browsertabbar-toolbox", + "-moz-win-communications-toolbox", + "-moz-win-exclude-glass", + "-moz-win-glass", + "-moz-win-media-toolbox", + "-moz-window-button-box", + "-moz-window-button-box-maximized", + "-moz-window-button-close", + "-moz-window-button-maximize", + "-moz-window-button-minimize", + "-moz-window-button-restore", + "-moz-window-frame-bottom", + "-moz-window-frame-left", + "-moz-window-frame-right", + "-moz-window-titlebar", + "-moz-window-titlebar-maximized", + "button", + "button-arrow-down", + "button-arrow-next", + "button-arrow-previous", + "button-arrow-up", + "button-bevel", + "button-focus", + "caret", + "checkbox", + "checkbox-container", + "checkbox-label", + "checkmenuitem", + "dialog", + "dualbutton", + "groupbox", + "inherit", + "initial", + "inner-spin-button", + "listbox", + "listitem", + "menuarrow", + "menubar", + "menucheckbox", + "menuimage", + "menuitem", + "menuitemtext", + "menulist", + "menulist-button", + "menulist-text", + "menulist-textfield", + "menupopup", + "menuradio", + "menuseparator", + "meterbar", + "meterchunk", + "none", + "number-input", + "progressbar", + "progressbar-vertical", + "progresschunk", + "progresschunk-vertical", + "radio", + "radio-container", + "radio-label", + "radiomenuitem", + "range", + "range-thumb", + "resizer", + "resizerpanel", + "scale-horizontal", + "scale-vertical", + "scalethumb-horizontal", + "scalethumb-vertical", + "scalethumbend", + "scalethumbstart", + "scalethumbtick", + "scrollbar", + "scrollbar-horizontal", + "scrollbar-small", + "scrollbar-vertical", + "scrollbarbutton-down", + "scrollbarbutton-left", + "scrollbarbutton-right", + "scrollbarbutton-up", + "scrollbarthumb-horizontal", + "scrollbarthumb-vertical", + "scrollbartrack-horizontal", + "scrollbartrack-vertical", + "scrollcorner", + "searchfield", + "separator", + "spinner", + "spinner-downbutton", + "spinner-textfield", + "spinner-upbutton", + "splitter", + "statusbar", + "statusbarpanel", + "tab", + "tab-scroll-arrow-back", + "tab-scroll-arrow-forward", + "tabpanel", + "tabpanels", + "textfield", + "textfield-multiline", + "toolbar", + "toolbarbutton", + "toolbarbutton-dropdown", + "toolbargripper", + "toolbox", + "tooltip", + "treeheader", + "treeheadercell", + "treeheadersortarrow", + "treeitem", + "treeline", + "treetwisty", + "treetwistyopen", + "treeview", + "unset", + "window" + ] + }, "-webkit-backface-visibility": { "isInherited": false, "subproperties": [ diff --git a/devtools/shared/webconsole/test/test_bug819670_getter_throws.html b/devtools/shared/webconsole/test/test_bug819670_getter_throws.html index bbd1f76b3a13..ab1e3691be25 100644 --- a/devtools/shared/webconsole/test/test_bug819670_getter_throws.html +++ b/devtools/shared/webconsole/test/test_bug819670_getter_throws.html @@ -51,7 +51,6 @@ function onInspect(aState, aResponse) let expectedProps = { "addBroadcastListenerFor": { value: { type: "object" } }, - "commandDispatcher": { get: { type: "object" } }, }; let props = aResponse.ownProperties; diff --git a/dom/base/UseCounters.conf b/dom/base/UseCounters.conf index 8d495b39a69d..0ea2b9277c10 100644 --- a/dom/base/UseCounters.conf +++ b/dom/base/UseCounters.conf @@ -124,3 +124,5 @@ method console.profileEnd // document.open information custom DocumentOpen calls document.open in a way that creates a new Window object custom DocumentOpenReplace calls document.open in a way that creates a new Window object and replaces the old history entry. + +custom FilteredCrossOriginIFrame cross-origin