forked from mirrors/gecko-dev
merge mozilla-inbound to mozilla-central. r=merge a=merge
This commit is contained in:
commit
1b0413a887
142 changed files with 1427 additions and 738 deletions
|
|
@ -697,7 +697,7 @@ nsAccessibilityService::UpdateListBullet(nsIPresShell* aPresShell,
|
||||||
void
|
void
|
||||||
nsAccessibilityService::UpdateImageMap(nsImageFrame* aImageFrame)
|
nsAccessibilityService::UpdateImageMap(nsImageFrame* aImageFrame)
|
||||||
{
|
{
|
||||||
nsIPresShell* presShell = aImageFrame->PresContext()->PresShell();
|
nsIPresShell* presShell = aImageFrame->PresShell();
|
||||||
DocAccessible* document = GetDocAccessible(presShell);
|
DocAccessible* document = GetDocAccessible(presShell);
|
||||||
if (document) {
|
if (document) {
|
||||||
Accessible* accessible =
|
Accessible* accessible =
|
||||||
|
|
|
||||||
14
accessible/tests/crashtests/890760.html
Normal file
14
accessible/tests/crashtests/890760.html
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
function boom()
|
||||||
|
{
|
||||||
|
window.getSelection().collapse(document.createTextNode("."), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="setTimeout(boom, 0);"></body>
|
||||||
|
</html>
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
load 448064.xhtml # This test instantiates a11y, so be careful about adding tests before it
|
load 448064.xhtml # This test instantiates a11y, so be careful about adding tests before it
|
||||||
load 471493.xul
|
load 471493.xul
|
||||||
asserts-if(!browserIsRemote,2) load 884202.html
|
asserts-if(!browserIsRemote,2) load 884202.html
|
||||||
|
load 890760.html
|
||||||
load 893515.html
|
load 893515.html
|
||||||
load 1072792.xhtml
|
load 1072792.xhtml
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -951,7 +951,8 @@ nsContextMenu.prototype = {
|
||||||
this.browser.contentPrincipal,
|
this.browser.contentPrincipal,
|
||||||
Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT);
|
Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT);
|
||||||
openUILink(this.mediaURL, e, { disallowInheritPrincipal: true,
|
openUILink(this.mediaURL, e, { disallowInheritPrincipal: true,
|
||||||
referrerURI });
|
referrerURI,
|
||||||
|
forceAllowDataURI: true });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -207,6 +207,7 @@ function openUILinkIn(url, where, aAllowThirdPartyFixup, aPostData, aReferrerURI
|
||||||
openLinkIn(url, where, params);
|
openLinkIn(url, where, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-disable complexity */
|
||||||
function openLinkIn(url, where, params) {
|
function openLinkIn(url, where, params) {
|
||||||
if (!where || !url)
|
if (!where || !url)
|
||||||
return;
|
return;
|
||||||
|
|
@ -222,6 +223,7 @@ function openLinkIn(url, where, params) {
|
||||||
params.referrerPolicy : Ci.nsIHttpChannel.REFERRER_POLICY_UNSET);
|
params.referrerPolicy : Ci.nsIHttpChannel.REFERRER_POLICY_UNSET);
|
||||||
var aRelatedToCurrent = params.relatedToCurrent;
|
var aRelatedToCurrent = params.relatedToCurrent;
|
||||||
var aAllowMixedContent = params.allowMixedContent;
|
var aAllowMixedContent = params.allowMixedContent;
|
||||||
|
var aForceAllowDataURI = params.forceAllowDataURI;
|
||||||
var aInBackground = params.inBackground;
|
var aInBackground = params.inBackground;
|
||||||
var aDisallowInheritPrincipal = params.disallowInheritPrincipal;
|
var aDisallowInheritPrincipal = params.disallowInheritPrincipal;
|
||||||
var aInitiatingDoc = params.initiatingDoc;
|
var aInitiatingDoc = params.initiatingDoc;
|
||||||
|
|
@ -433,6 +435,9 @@ function openLinkIn(url, where, params) {
|
||||||
if (aIndicateErrorPageLoad) {
|
if (aIndicateErrorPageLoad) {
|
||||||
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ERROR_LOAD_CHANGES_RV;
|
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ERROR_LOAD_CHANGES_RV;
|
||||||
}
|
}
|
||||||
|
if (aForceAllowDataURI) {
|
||||||
|
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FORCE_ALLOW_DATA_URI;
|
||||||
|
}
|
||||||
|
|
||||||
let {URI_INHERITS_SECURITY_CONTEXT} = Ci.nsIProtocolHandler;
|
let {URI_INHERITS_SECURITY_CONTEXT} = Ci.nsIProtocolHandler;
|
||||||
if (aForceAboutBlankViewerInCurrent &&
|
if (aForceAboutBlankViewerInCurrent &&
|
||||||
|
|
|
||||||
|
|
@ -495,17 +495,35 @@ Section "-Application" APP_IDX
|
||||||
; since this will either add it for the user if unelevated or All Users if
|
; since this will either add it for the user if unelevated or All Users if
|
||||||
; elevated.
|
; elevated.
|
||||||
${If} $AddStartMenuSC == 1
|
${If} $AddStartMenuSC == 1
|
||||||
CreateShortCut "$SMPROGRAMS\${BrandShortName}.lnk" "$INSTDIR\${FileMainEXE}"
|
; See if there's an existing shortcut for this installation using the old
|
||||||
${If} ${FileExists} "$SMPROGRAMS\${BrandShortName}.lnk"
|
; name that we should just rename, instead of creating a new shortcut.
|
||||||
ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandShortName}.lnk" \
|
; We could do this renaming even when $AddStartMenuSC is false; the idea
|
||||||
"$INSTDIR"
|
; behind not doing that is to interpret "false" as "don't do anything
|
||||||
${If} ${AtLeastWin7}
|
; involving start menu shortcuts at all." We could also try to do this for
|
||||||
${AndIf} "$AppUserModelID" != ""
|
; both shell contexts, but that won't typically accomplish anything.
|
||||||
ApplicationID::Set "$SMPROGRAMS\${BrandShortName}.lnk" "$AppUserModelID" "true"
|
${If} ${FileExists} "$SMPROGRAMS\${BrandFullName}.lnk"
|
||||||
|
ShellLink::GetShortCutTarget "$SMPROGRAMS\${BrandFullName}.lnk"
|
||||||
|
Pop $0
|
||||||
|
${GetLongPath} "$0" $0
|
||||||
|
${If} $0 == "$INSTDIR\${FileMainEXE}"
|
||||||
|
${AndIfNot} ${FileExists} "$SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
|
Rename "$SMPROGRAMS\${BrandFullName}.lnk" \
|
||||||
|
"$SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
|
${LogMsg} "Renamed existing shortcut to $SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${LogMsg} "Added Shortcut: $SMPROGRAMS\${BrandShortName}.lnk"
|
|
||||||
${Else}
|
${Else}
|
||||||
${LogMsg} "** ERROR Adding Shortcut: $SMPROGRAMS\${BrandShortName}.lnk"
|
CreateShortCut "$SMPROGRAMS\${BrandShortName}.lnk" "$INSTDIR\${FileMainEXE}"
|
||||||
|
${If} ${FileExists} "$SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
|
ShellLink::SetShortCutWorkingDirectory "$SMPROGRAMS\${BrandShortName}.lnk" \
|
||||||
|
"$INSTDIR"
|
||||||
|
${If} "$AppUserModelID" != ""
|
||||||
|
ApplicationID::Set "$SMPROGRAMS\${BrandShortName}.lnk" \
|
||||||
|
"$AppUserModelID" "true"
|
||||||
|
${EndIf}
|
||||||
|
${LogMsg} "Added Shortcut: $SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
|
${Else}
|
||||||
|
${LogMsg} "** ERROR Adding Shortcut: $SMPROGRAMS\${BrandShortName}.lnk"
|
||||||
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
|
|
@ -525,17 +543,28 @@ Section "-Application" APP_IDX
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
${If} $AddDesktopSC == 1
|
${If} $AddDesktopSC == 1
|
||||||
CreateShortCut "$DESKTOP\${BrandShortName}.lnk" "$INSTDIR\${FileMainEXE}"
|
${If} ${FileExists} "$DESKTOP\${BrandFullName}.lnk"
|
||||||
${If} ${FileExists} "$DESKTOP\${BrandShortName}.lnk"
|
ShellLink::GetShortCutTarget "$DESKTOP\${BrandFullName}.lnk"
|
||||||
ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandShortName}.lnk" \
|
Pop $0
|
||||||
"$INSTDIR"
|
${GetLongPath} "$0" $0
|
||||||
${If} ${AtLeastWin7}
|
${If} $0 == "$INSTDIR\${FileMainEXE}"
|
||||||
${AndIf} "$AppUserModelID" != ""
|
${AndIfNot} ${FileExists} "$DESKTOP\${BrandShortName}.lnk"
|
||||||
ApplicationID::Set "$DESKTOP\${BrandShortName}.lnk" "$AppUserModelID" "true"
|
Rename "$DESKTOP\${BrandFullName}.lnk" "$DESKTOP\${BrandShortName}.lnk"
|
||||||
|
${LogMsg} "Renamed existing shortcut to $DESKTOP\${BrandShortName}.lnk"
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${LogMsg} "Added Shortcut: $DESKTOP\${BrandShortName}.lnk"
|
|
||||||
${Else}
|
${Else}
|
||||||
${LogMsg} "** ERROR Adding Shortcut: $DESKTOP\${BrandShortName}.lnk"
|
CreateShortCut "$DESKTOP\${BrandShortName}.lnk" "$INSTDIR\${FileMainEXE}"
|
||||||
|
${If} ${FileExists} "$DESKTOP\${BrandShortName}.lnk"
|
||||||
|
ShellLink::SetShortCutWorkingDirectory "$DESKTOP\${BrandShortName}.lnk" \
|
||||||
|
"$INSTDIR"
|
||||||
|
${If} "$AppUserModelID" != ""
|
||||||
|
ApplicationID::Set "$DESKTOP\${BrandShortName}.lnk" \
|
||||||
|
"$AppUserModelID" "true"
|
||||||
|
${EndIf}
|
||||||
|
${LogMsg} "Added Shortcut: $DESKTOP\${BrandShortName}.lnk"
|
||||||
|
${Else}
|
||||||
|
${LogMsg} "** ERROR Adding Shortcut: $DESKTOP\${BrandShortName}.lnk"
|
||||||
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -72,13 +72,13 @@
|
||||||
; Do this for both shell contexts in case the user has shortcuts in multiple
|
; Do this for both shell contexts in case the user has shortcuts in multiple
|
||||||
; locations, then restore the previous context at the end.
|
; locations, then restore the previous context at the end.
|
||||||
SetShellVarContext all
|
SetShellVarContext all
|
||||||
${UpdateShortcutBranding}
|
${UpdateShortcutsBranding}
|
||||||
${If} ${AtLeastWin8}
|
${If} ${AtLeastWin8}
|
||||||
${TouchStartMenuShortcut}
|
${TouchStartMenuShortcut}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
Call FixShortcutAppModelIDs
|
Call FixShortcutAppModelIDs
|
||||||
SetShellVarContext current
|
SetShellVarContext current
|
||||||
${UpdateShortcutBranding}
|
${UpdateShortcutsBranding}
|
||||||
${If} ${AtLeastWin8}
|
${If} ${AtLeastWin8}
|
||||||
${TouchStartMenuShortcut}
|
${TouchStartMenuShortcut}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
@ -339,130 +339,51 @@
|
||||||
!macroend
|
!macroend
|
||||||
!define ShowShortcuts "!insertmacro ShowShortcuts"
|
!define ShowShortcuts "!insertmacro ShowShortcuts"
|
||||||
|
|
||||||
; Update the branding information on all shortcuts our installer created,
|
; Update the branding name on all shortcuts our installer created
|
||||||
; to convert from BrandFullName (which is what we used to name shortcuts)
|
; to convert from BrandFullName (which is what we used to name shortcuts)
|
||||||
; to BrandShortName (which is what we now name shortcuts). Also update the
|
; to BrandShortName (which is what we now name shortcuts). We only rename
|
||||||
; icon if it's been changed.
|
; desktop and start menu shortcuts, because touching taskbar pins often
|
||||||
; This should only be called sometime after both MigrateStartMenuShortcut
|
; (but inconsistently) triggers various broken behaviors in the shell.
|
||||||
; and MigrateTaskBarShurtcut, and it assumes SHCTX is set correctly.
|
; This should only be called sometime after MigrateStartMenuShortcut,
|
||||||
!macro UpdateShortcutBranding
|
; and it assumes SHCTX is set correctly.
|
||||||
|
!macro UpdateShortcutsBranding
|
||||||
|
${UpdateOneShortcutBranding} "STARTMENU" "$SMPROGRAMS"
|
||||||
|
${UpdateOneShortcutBranding} "DESKTOP" "$DESKTOP"
|
||||||
|
!macroend
|
||||||
|
!define UpdateShortcutsBranding "!insertmacro UpdateShortcutsBranding"
|
||||||
|
|
||||||
|
!macro UpdateOneShortcutBranding LOG_SECTION SHORTCUT_DIR
|
||||||
|
; Only try to rename the shortcuts found in the shortcuts log, to avoid
|
||||||
|
; blowing away a name that the user created.
|
||||||
${GetLongPath} "$INSTDIR\uninstall\${SHORTCUTS_LOG}" $R9
|
${GetLongPath} "$INSTDIR\uninstall\${SHORTCUTS_LOG}" $R9
|
||||||
${If} ${FileExists} "$R9"
|
${If} ${FileExists} "$R9"
|
||||||
ClearErrors
|
ClearErrors
|
||||||
; The entries in the shortcut log are numbered, but we never actually
|
; The shortcuts log contains a numbered list of entries for each section,
|
||||||
; create more than one shortcut (or log entry) in each location.
|
; but we never actually create more than one.
|
||||||
ReadINIStr $R8 "$R9" "STARTMENU" "Shortcut0"
|
ReadINIStr $R8 "$R9" "${LOG_SECTION}" "Shortcut0"
|
||||||
${IfNot} ${Errors}
|
${IfNot} ${Errors}
|
||||||
${If} ${FileExists} "$SMPROGRAMS\$R8"
|
${If} ${FileExists} "${SHORTCUT_DIR}\$R8"
|
||||||
ShellLink::GetShortCutTarget "$SMPROGRAMS\$R8"
|
ShellLink::GetShortCutTarget "${SHORTCUT_DIR}\$R8"
|
||||||
Pop $R7
|
Pop $R7
|
||||||
${GetLongPath} "$R7" $R7
|
${GetLongPath} "$R7" $R7
|
||||||
${If} $R7 == "$INSTDIR\${FileMainEXE}"
|
${If} $R7 == "$INSTDIR\${FileMainEXE}"
|
||||||
ShellLink::GetShortCutIconLocation "$SMPROGRAMS\$R8"
|
${AndIf} $R8 != "${BrandShortName}.lnk"
|
||||||
Pop $R6
|
${AndIfNot} ${FileExists} "${SHORTCUT_DIR}\${BrandShortName}.lnk"
|
||||||
${GetLongPath} "$R6" $R6
|
ClearErrors
|
||||||
${If} $R6 != "$INSTDIR\firefox.ico"
|
Rename "${SHORTCUT_DIR}\$R8" "${SHORTCUT_DIR}\${BrandShortName}.lnk"
|
||||||
${AndIf} ${FileExists} "$INSTDIR\firefox.ico"
|
${IfNot} ${Errors}
|
||||||
StrCpy $R5 "1"
|
; Update the shortcut log manually instead of calling LogShortcut
|
||||||
${ElseIf} $R6 == "$INSTDIR\firefox.ico"
|
; because it would add a Shortcut1 entry, and we really do want to
|
||||||
${AndIfNot} ${FileExists} "$INSTDIR\firefox.ico"
|
; overwrite the existing entry 0, since we just renamed the file.
|
||||||
StrCpy $R5 "1"
|
WriteINIStr "$R9" "${LOG_SECTION}" "Shortcut0" \
|
||||||
${Else}
|
"${BrandShortName}.lnk"
|
||||||
StrCpy $R5 "0"
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
${If} $R5 == "1"
|
|
||||||
${OrIf} $R8 != "${BrandShortName}.lnk"
|
|
||||||
Delete "$SMPROGRAMS\$R8"
|
|
||||||
${If} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
CreateShortcut "$SMPROGRAMS\${BrandShortName}.lnk" \
|
|
||||||
"$INSTDIR\${FileMainEXE}" "" "$INSTDIR\firefox.ico"
|
|
||||||
${Else}
|
|
||||||
CreateShortcut "$SMPROGRAMS\${BrandShortName}.lnk" \
|
|
||||||
"$INSTDIR\${FileMainEXE}"
|
|
||||||
${EndIf}
|
|
||||||
WriteINIStr "$R9" "STARTMENU" "Shortcut0" "${BrandShortName}.lnk"
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
ReadINIStr $R8 "$R9" "DESKTOP" "Shortcut0"
|
|
||||||
${IfNot} ${Errors}
|
|
||||||
${If} ${FileExists} "$DESKTOP\$R8"
|
|
||||||
ShellLink::GetShortCutTarget "$DESKTOP\$R8"
|
|
||||||
Pop $R7
|
|
||||||
${GetLongPath} "$R7" $R7
|
|
||||||
${If} $R7 == "$INSTDIR\${FileMainEXE}"
|
|
||||||
ShellLink::GetShortCutIconLocation "$DESKTOP\$R8"
|
|
||||||
Pop $R6
|
|
||||||
${GetLongPath} "$R6" $R6
|
|
||||||
${If} $R6 != "$INSTDIR\firefox.ico"
|
|
||||||
${AndIf} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
StrCpy $R5 "1"
|
|
||||||
${ElseIf} $R6 == "$INSTDIR\firefox.ico"
|
|
||||||
${AndIfNot} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
StrCpy $R5 "1"
|
|
||||||
${Else}
|
|
||||||
StrCpy $R5 "0"
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
${If} $R5 == "1"
|
|
||||||
${OrIf} $R8 != "${BrandShortName}.lnk"
|
|
||||||
Delete "$DESKTOP\$R8"
|
|
||||||
${If} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
CreateShortcut "$DESKTOP\${BrandShortName}.lnk" \
|
|
||||||
"$INSTDIR\${FileMainEXE}" "" "$INSTDIR\firefox.ico"
|
|
||||||
${Else}
|
|
||||||
CreateShortcut "$DESKTOP\${BrandShortName}.lnk" \
|
|
||||||
"$INSTDIR\${FileMainEXE}"
|
|
||||||
${EndIf}
|
|
||||||
WriteINIStr "$R9" "DESKTOP" "Shortcut0" "${BrandShortName}.lnk"
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
ClearErrors
|
|
||||||
ReadINIStr $R8 "$R9" "QUICKLAUNCH" "Shortcut0"
|
|
||||||
${IfNot} ${Errors}
|
|
||||||
; "QUICKLAUNCH" actually means a taskbar pin.
|
|
||||||
; We can't simultaneously rename and change the icon for a taskbar pin
|
|
||||||
; without the icon breaking, and the icon is more important than the name,
|
|
||||||
; so we'll forget about changing the name and just overwrite the icon.
|
|
||||||
${If} ${FileExists} "$QUICKLAUNCH\User Pinned\TaskBar\$R8"
|
|
||||||
ShellLink::GetShortCutTarget "$QUICKLAUNCH\User Pinned\TaskBar\$R8"
|
|
||||||
Pop $R7
|
|
||||||
${GetLongPath} "$R7" $R7
|
|
||||||
${If} "$INSTDIR\${FileMainEXE}" == "$R7"
|
|
||||||
ShellLink::GetShortCutIconLocation "$QUICKLAUNCH\User Pinned\TaskBar\$R8"
|
|
||||||
Pop $R6
|
|
||||||
${GetLongPath} "$R6" $R6
|
|
||||||
${If} $R6 != "$INSTDIR\firefox.ico"
|
|
||||||
${AndIf} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
StrCpy $R5 "1"
|
|
||||||
${ElseIf} $R6 == "$INSTDIR\firefox.ico"
|
|
||||||
${AndIfNot} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
StrCpy $R5 "1"
|
|
||||||
${Else}
|
|
||||||
StrCpy $R5 "0"
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
${If} $R5 == "1"
|
|
||||||
${If} ${FileExists} "$INSTDIR\firefox.ico"
|
|
||||||
CreateShortcut "$QUICKLAUNCH\User Pinned\TaskBar\$R8" "$R7" "" \
|
|
||||||
"$INSTDIR\firefox.ico"
|
|
||||||
${Else}
|
|
||||||
CreateShortcut "$QUICKLAUNCH\User Pinned\TaskBar\$R8" "$R7"
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
!macroend
|
!macroend
|
||||||
!define UpdateShortcutBranding "!insertmacro UpdateShortcutBranding"
|
!define UpdateOneShortcutBranding "!insertmacro UpdateOneShortcutBranding"
|
||||||
|
|
||||||
!macro AddAssociationIfNoneExist FILE_TYPE KEY
|
!macro AddAssociationIfNoneExist FILE_TYPE KEY
|
||||||
ClearErrors
|
ClearErrors
|
||||||
|
|
|
||||||
|
|
@ -456,15 +456,15 @@ if __name__ == "__main__":
|
||||||
for p in config.get("patches", []):
|
for p in config.get("patches", []):
|
||||||
patch(p, source_dir)
|
patch(p, source_dir)
|
||||||
|
|
||||||
symlinks = [(source_dir + "/clang",
|
symlinks = [(clang_source_dir,
|
||||||
llvm_source_dir + "/tools/clang"),
|
llvm_source_dir + "/tools/clang"),
|
||||||
(source_dir + "/extra",
|
(extra_source_dir,
|
||||||
llvm_source_dir + "/tools/clang/tools/extra"),
|
llvm_source_dir + "/tools/clang/tools/extra"),
|
||||||
(source_dir + "/compiler-rt",
|
(compiler_rt_source_dir,
|
||||||
llvm_source_dir + "/projects/compiler-rt"),
|
llvm_source_dir + "/projects/compiler-rt"),
|
||||||
(source_dir + "/libcxx",
|
(libcxx_source_dir,
|
||||||
llvm_source_dir + "/projects/libcxx"),
|
llvm_source_dir + "/projects/libcxx"),
|
||||||
(source_dir + "/libcxxabi",
|
(libcxxabi_source_dir,
|
||||||
llvm_source_dir + "/projects/libcxxabi")]
|
llvm_source_dir + "/projects/libcxxabi")]
|
||||||
for l in symlinks:
|
for l in symlinks:
|
||||||
# On Windows, we have to re-copy the whole directory every time.
|
# On Windows, we have to re-copy the whole directory every time.
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
"cc": "cl.exe",
|
"cc": "cl.exe",
|
||||||
"cxx": "cl.exe",
|
"cxx": "cl.exe",
|
||||||
"patches": [
|
"patches": [
|
||||||
"build/src/build/build-clang/msvc-host-x64.patch",
|
"msvc-host-x64.patch",
|
||||||
"build/src/build/build-clang/loosen-msvc-detection.patch"
|
"loosen-msvc-detection.patch"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,6 @@
|
||||||
"cxx": "cl.exe",
|
"cxx": "cl.exe",
|
||||||
"ml": "ml64.exe",
|
"ml": "ml64.exe",
|
||||||
"patches": [
|
"patches": [
|
||||||
"build/src/build/build-clang/loosen-msvc-detection.patch"
|
"loosen-msvc-detection.patch"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1310,6 +1310,7 @@ nsDocShell::LoadURI(nsIURI* aURI,
|
||||||
nsCOMPtr<nsISHEntry> shEntry;
|
nsCOMPtr<nsISHEntry> shEntry;
|
||||||
nsString target;
|
nsString target;
|
||||||
nsAutoString srcdoc;
|
nsAutoString srcdoc;
|
||||||
|
bool forceAllowDataURI = false;
|
||||||
nsCOMPtr<nsIDocShell> sourceDocShell;
|
nsCOMPtr<nsIDocShell> sourceDocShell;
|
||||||
nsCOMPtr<nsIURI> baseURI;
|
nsCOMPtr<nsIURI> baseURI;
|
||||||
|
|
||||||
|
|
@ -1346,6 +1347,7 @@ nsDocShell::LoadURI(nsIURI* aURI,
|
||||||
aLoadInfo->GetSrcdocData(srcdoc);
|
aLoadInfo->GetSrcdocData(srcdoc);
|
||||||
aLoadInfo->GetSourceDocShell(getter_AddRefs(sourceDocShell));
|
aLoadInfo->GetSourceDocShell(getter_AddRefs(sourceDocShell));
|
||||||
aLoadInfo->GetBaseURI(getter_AddRefs(baseURI));
|
aLoadInfo->GetBaseURI(getter_AddRefs(baseURI));
|
||||||
|
aLoadInfo->GetForceAllowDataURI(&forceAllowDataURI);
|
||||||
}
|
}
|
||||||
|
|
||||||
MOZ_LOG(gDocShellLeakLog, LogLevel::Debug,
|
MOZ_LOG(gDocShellLeakLog, LogLevel::Debug,
|
||||||
|
|
@ -1609,6 +1611,10 @@ nsDocShell::LoadURI(nsIURI* aURI,
|
||||||
flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
|
flags |= INTERNAL_LOAD_FLAGS_IS_SRCDOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (forceAllowDataURI) {
|
||||||
|
flags |= INTERNAL_LOAD_FLAGS_FORCE_ALLOW_DATA_URI;
|
||||||
|
}
|
||||||
|
|
||||||
return InternalLoad(aURI,
|
return InternalLoad(aURI,
|
||||||
originalURI,
|
originalURI,
|
||||||
resultPrincipalURI,
|
resultPrincipalURI,
|
||||||
|
|
@ -4917,6 +4923,9 @@ nsDocShell::LoadURIWithOptions(const char16_t* aURI,
|
||||||
}
|
}
|
||||||
nsAutoPopupStatePusher statePusher(popupState);
|
nsAutoPopupStatePusher statePusher(popupState);
|
||||||
|
|
||||||
|
bool forceAllowDataURI =
|
||||||
|
aLoadFlags & LOAD_FLAGS_FORCE_ALLOW_DATA_URI;
|
||||||
|
|
||||||
// Don't pass certain flags that aren't needed and end up confusing
|
// Don't pass certain flags that aren't needed and end up confusing
|
||||||
// ConvertLoadTypeToDocShellLoadInfo. We do need to ensure that they are
|
// ConvertLoadTypeToDocShellLoadInfo. We do need to ensure that they are
|
||||||
// passed to LoadURI though, since it uses them.
|
// passed to LoadURI though, since it uses them.
|
||||||
|
|
@ -4947,6 +4956,7 @@ nsDocShell::LoadURIWithOptions(const char16_t* aURI,
|
||||||
loadInfo->SetHeadersStream(aHeaderStream);
|
loadInfo->SetHeadersStream(aHeaderStream);
|
||||||
loadInfo->SetBaseURI(aBaseURI);
|
loadInfo->SetBaseURI(aBaseURI);
|
||||||
loadInfo->SetTriggeringPrincipal(aTriggeringPrincipal);
|
loadInfo->SetTriggeringPrincipal(aTriggeringPrincipal);
|
||||||
|
loadInfo->SetForceAllowDataURI(forceAllowDataURI);
|
||||||
|
|
||||||
if (fixupInfo) {
|
if (fixupInfo) {
|
||||||
nsAutoString searchProvider, keyword;
|
nsAutoString searchProvider, keyword;
|
||||||
|
|
@ -8850,7 +8860,7 @@ nsDocShell::RestoreFromHistory()
|
||||||
if (rootViewSibling) {
|
if (rootViewSibling) {
|
||||||
nsIFrame* frame = rootViewSibling->GetFrame();
|
nsIFrame* frame = rootViewSibling->GetFrame();
|
||||||
sibling =
|
sibling =
|
||||||
frame ? frame->PresContext()->PresShell()->GetDocument() : nullptr;
|
frame ? frame->PresShell()->GetDocument() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer ownership to mContentViewer. By ensuring that either the
|
// Transfer ownership to mContentViewer. By ensuring that either the
|
||||||
|
|
@ -10189,6 +10199,7 @@ nsDocShell::InternalLoad(nsIURI* aURI,
|
||||||
// principal to inherit is: it should be aTriggeringPrincipal.
|
// principal to inherit is: it should be aTriggeringPrincipal.
|
||||||
loadInfo->SetPrincipalIsExplicit(true);
|
loadInfo->SetPrincipalIsExplicit(true);
|
||||||
loadInfo->SetLoadType(ConvertLoadTypeToDocShellLoadInfo(LOAD_LINK));
|
loadInfo->SetLoadType(ConvertLoadTypeToDocShellLoadInfo(LOAD_LINK));
|
||||||
|
loadInfo->SetForceAllowDataURI(aFlags & INTERNAL_LOAD_FLAGS_FORCE_ALLOW_DATA_URI);
|
||||||
|
|
||||||
rv = win->Open(NS_ConvertUTF8toUTF16(spec),
|
rv = win->Open(NS_ConvertUTF8toUTF16(spec),
|
||||||
aWindowTarget, // window name
|
aWindowTarget, // window name
|
||||||
|
|
@ -10866,7 +10877,9 @@ nsDocShell::InternalLoad(nsIURI* aURI,
|
||||||
|
|
||||||
nsCOMPtr<nsIRequest> req;
|
nsCOMPtr<nsIRequest> req;
|
||||||
rv = DoURILoad(aURI, aOriginalURI, aResultPrincipalURI, aLoadReplace,
|
rv = DoURILoad(aURI, aOriginalURI, aResultPrincipalURI, aLoadReplace,
|
||||||
loadFromExternal, aReferrer,
|
loadFromExternal,
|
||||||
|
(aFlags & INTERNAL_LOAD_FLAGS_FORCE_ALLOW_DATA_URI),
|
||||||
|
aReferrer,
|
||||||
!(aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER),
|
!(aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER),
|
||||||
aReferrerPolicy,
|
aReferrerPolicy,
|
||||||
aTriggeringPrincipal, principalToInherit, aTypeHint,
|
aTriggeringPrincipal, principalToInherit, aTypeHint,
|
||||||
|
|
@ -11004,6 +11017,7 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||||
Maybe<nsCOMPtr<nsIURI>> const& aResultPrincipalURI,
|
Maybe<nsCOMPtr<nsIURI>> const& aResultPrincipalURI,
|
||||||
bool aLoadReplace,
|
bool aLoadReplace,
|
||||||
bool aLoadFromExternal,
|
bool aLoadFromExternal,
|
||||||
|
bool aForceAllowDataURI,
|
||||||
nsIURI* aReferrerURI,
|
nsIURI* aReferrerURI,
|
||||||
bool aSendReferrer,
|
bool aSendReferrer,
|
||||||
uint32_t aReferrerPolicy,
|
uint32_t aReferrerPolicy,
|
||||||
|
|
@ -11184,6 +11198,7 @@ nsDocShell::DoURILoad(nsIURI* aURI,
|
||||||
loadInfo->SetPrincipalToInherit(aPrincipalToInherit);
|
loadInfo->SetPrincipalToInherit(aPrincipalToInherit);
|
||||||
}
|
}
|
||||||
loadInfo->SetLoadTriggeredFromExternal(aLoadFromExternal);
|
loadInfo->SetLoadTriggeredFromExternal(aLoadFromExternal);
|
||||||
|
loadInfo->SetForceAllowDataURI(aForceAllowDataURI);
|
||||||
|
|
||||||
// We have to do this in case our OriginAttributes are different from the
|
// We have to do this in case our OriginAttributes are different from the
|
||||||
// OriginAttributes of the parent document. Or in case there isn't a
|
// OriginAttributes of the parent document. Or in case there isn't a
|
||||||
|
|
|
||||||
|
|
@ -452,6 +452,7 @@ protected:
|
||||||
mozilla::Maybe<nsCOMPtr<nsIURI>> const& aResultPrincipalURI,
|
mozilla::Maybe<nsCOMPtr<nsIURI>> const& aResultPrincipalURI,
|
||||||
bool aLoadReplace,
|
bool aLoadReplace,
|
||||||
bool aLoadFromExternal,
|
bool aLoadFromExternal,
|
||||||
|
bool aForceAllowDataURI,
|
||||||
nsIURI* aReferrer,
|
nsIURI* aReferrer,
|
||||||
bool aSendReferrer,
|
bool aSendReferrer,
|
||||||
uint32_t aReferrerPolicy,
|
uint32_t aReferrerPolicy,
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ nsDocShellLoadInfo::nsDocShellLoadInfo()
|
||||||
, mLoadReplace(false)
|
, mLoadReplace(false)
|
||||||
, mInheritPrincipal(false)
|
, mInheritPrincipal(false)
|
||||||
, mPrincipalIsExplicit(false)
|
, mPrincipalIsExplicit(false)
|
||||||
|
, mForceAllowDataURI(false)
|
||||||
, mSendReferrer(true)
|
, mSendReferrer(true)
|
||||||
, mReferrerPolicy(mozilla::net::RP_Unset)
|
, mReferrerPolicy(mozilla::net::RP_Unset)
|
||||||
, mLoadType(nsIDocShellLoadInfo::loadNormal)
|
, mLoadType(nsIDocShellLoadInfo::loadNormal)
|
||||||
|
|
@ -209,6 +210,20 @@ nsDocShellLoadInfo::SetPrincipalIsExplicit(bool aPrincipalIsExplicit)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsDocShellLoadInfo::GetForceAllowDataURI(bool* aForceAllowDataURI)
|
||||||
|
{
|
||||||
|
*aForceAllowDataURI = mForceAllowDataURI;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMETHODIMP
|
||||||
|
nsDocShellLoadInfo::SetForceAllowDataURI(bool aForceAllowDataURI)
|
||||||
|
{
|
||||||
|
mForceAllowDataURI = aForceAllowDataURI;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
nsDocShellLoadInfo::GetLoadType(nsDocShellInfoLoadType* aLoadType)
|
nsDocShellLoadInfo::GetLoadType(nsDocShellInfoLoadType* aLoadType)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ protected:
|
||||||
bool mLoadReplace;
|
bool mLoadReplace;
|
||||||
bool mInheritPrincipal;
|
bool mInheritPrincipal;
|
||||||
bool mPrincipalIsExplicit;
|
bool mPrincipalIsExplicit;
|
||||||
|
bool mForceAllowDataURI;
|
||||||
bool mSendReferrer;
|
bool mSendReferrer;
|
||||||
nsDocShellInfoReferrerPolicy mReferrerPolicy;
|
nsDocShellInfoReferrerPolicy mReferrerPolicy;
|
||||||
nsDocShellInfoLoadType mLoadType;
|
nsDocShellInfoLoadType mLoadType;
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,9 @@ interface nsIDocShell : nsIDocShellTreeItem
|
||||||
|
|
||||||
const long INTERNAL_LOAD_FLAGS_NO_OPENER = 0x100;
|
const long INTERNAL_LOAD_FLAGS_NO_OPENER = 0x100;
|
||||||
|
|
||||||
|
// Whether a top-level data URI navigation is allowed for that load
|
||||||
|
const long INTERNAL_LOAD_FLAGS_FORCE_ALLOW_DATA_URI = 0x200;
|
||||||
|
|
||||||
// NB: 0x80 is available.
|
// NB: 0x80 is available.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,12 @@ interface nsIDocShellLoadInfo : nsISupports
|
||||||
*/
|
*/
|
||||||
attribute boolean principalIsExplicit;
|
attribute boolean principalIsExplicit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this attribute is true, then a top-level navigation
|
||||||
|
* to a data URI will be allowed.
|
||||||
|
*/
|
||||||
|
attribute boolean forceAllowDataURI;
|
||||||
|
|
||||||
/* these are load type enums... */
|
/* these are load type enums... */
|
||||||
const long loadNormal = 0; // Normal Load
|
const long loadNormal = 0; // Normal Load
|
||||||
const long loadNormalReplace = 1; // Normal Load but replaces current history slot
|
const long loadNormalReplace = 1; // Normal Load but replaces current history slot
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,12 @@ interface nsIWebNavigation : nsISupports
|
||||||
*/
|
*/
|
||||||
const unsigned long LOAD_FLAGS_FIXUP_SCHEME_TYPOS = 0x200000;
|
const unsigned long LOAD_FLAGS_FIXUP_SCHEME_TYPOS = 0x200000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows a top-level data: navigation to occur. E.g. view-image
|
||||||
|
* is an explicit user action which should be allowed.
|
||||||
|
*/
|
||||||
|
const unsigned long LOAD_FLAGS_FORCE_ALLOW_DATA_URI = 0x400000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a given URI. This will give priority to loading the requested URI
|
* Loads a given URI. This will give priority to loading the requested URI
|
||||||
* in the object implementing this interface. If it can't be loaded here
|
* in the object implementing this interface. If it can't be loaded here
|
||||||
|
|
|
||||||
|
|
@ -783,7 +783,6 @@ CustomElementRegistry::Define(const nsAString& aName,
|
||||||
* observedAttributesIterable to a sequence<DOMString>. Rethrow
|
* observedAttributesIterable to a sequence<DOMString>. Rethrow
|
||||||
* any exceptions from the conversion.
|
* any exceptions from the conversion.
|
||||||
*/
|
*/
|
||||||
// TODO: Bug 1293921 - Implement connected/disconnected/adopted/attributeChanged lifecycle callbacks for custom elements
|
|
||||||
if (callbacksHolder->mAttributeChangedCallback.WasPassed()) {
|
if (callbacksHolder->mAttributeChangedCallback.WasPassed()) {
|
||||||
// Enter constructor's compartment.
|
// Enter constructor's compartment.
|
||||||
JSAutoCompartment ac(cx, constructor);
|
JSAutoCompartment ac(cx, constructor);
|
||||||
|
|
@ -796,12 +795,22 @@ CustomElementRegistry::Define(const nsAString& aName,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!observedAttributesIterable.isUndefined()) {
|
if (!observedAttributesIterable.isUndefined()) {
|
||||||
|
if (!observedAttributesIterable.isObject()) {
|
||||||
|
aRv.ThrowTypeError<MSG_NOT_SEQUENCE>(NS_LITERAL_STRING("observedAttributes"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JS::ForOfIterator iter(cx);
|
JS::ForOfIterator iter(cx);
|
||||||
if (!iter.init(observedAttributesIterable)) {
|
if (!iter.init(observedAttributesIterable, JS::ForOfIterator::AllowNonIterable)) {
|
||||||
aRv.StealExceptionFromJSContext(cx);
|
aRv.StealExceptionFromJSContext(cx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!iter.valueIsIterable()) {
|
||||||
|
aRv.ThrowTypeError<MSG_NOT_SEQUENCE>(NS_LITERAL_STRING("observedAttributes"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
JS::Rooted<JS::Value> attribute(cx);
|
JS::Rooted<JS::Value> attribute(cx);
|
||||||
while (true) {
|
while (true) {
|
||||||
bool done;
|
bool done;
|
||||||
|
|
@ -813,13 +822,16 @@ CustomElementRegistry::Define(const nsAString& aName,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSString *attrJSStr = attribute.toString();
|
nsAutoString attrStr;
|
||||||
nsAutoJSString attrStr;
|
if (!ConvertJSValueToString(cx, attribute, eStringify, eStringify, attrStr)) {
|
||||||
if (!attrStr.init(cx, attrJSStr)) {
|
|
||||||
aRv.StealExceptionFromJSContext(cx);
|
aRv.StealExceptionFromJSContext(cx);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
observedAttributes.AppendElement(NS_Atomize(attrStr));
|
|
||||||
|
if (!observedAttributes.AppendElement(NS_Atomize(attrStr))) {
|
||||||
|
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // Leave constructor's compartment.
|
} // Leave constructor's compartment.
|
||||||
|
|
|
||||||
20
dom/base/crashtests/1413815.html
Normal file
20
dom/base/crashtests/1413815.html
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript">
|
||||||
|
class XFoo extends HTMLElement {
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
static get observedAttributes() {
|
||||||
|
return [3.76277868767527e-310, Symbol("Ashitaka"), {}];
|
||||||
|
}
|
||||||
|
|
||||||
|
attributeChangedCallback(aName, aOldValue, aNewValue) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
customElements.define('x-foo', XFoo);
|
||||||
|
</script>
|
||||||
|
</html>
|
||||||
|
|
@ -234,3 +234,4 @@ load 1403377.html
|
||||||
load 1405771.html
|
load 1405771.html
|
||||||
load 1406109-1.html
|
load 1406109-1.html
|
||||||
pref(dom.webcomponents.enabled,true) load 1324463.html
|
pref(dom.webcomponents.enabled,true) load 1324463.html
|
||||||
|
pref(dom.webcomponents.customelements.enabled,true) load 1413815.html
|
||||||
|
|
|
||||||
|
|
@ -3030,16 +3030,16 @@ nsFrameLoader::SetClipSubdocument(bool aClip)
|
||||||
nsIFrame* frame = GetPrimaryFrameOfOwningContent();
|
nsIFrame* frame = GetPrimaryFrameOfOwningContent();
|
||||||
if (frame) {
|
if (frame) {
|
||||||
frame->InvalidateFrame();
|
frame->InvalidateFrame();
|
||||||
frame->PresContext()->PresShell()->
|
frame->PresShell()->
|
||||||
FrameNeedsReflow(frame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(frame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
nsSubDocumentFrame* subdocFrame = do_QueryFrame(frame);
|
nsSubDocumentFrame* subdocFrame = do_QueryFrame(frame);
|
||||||
if (subdocFrame) {
|
if (subdocFrame) {
|
||||||
nsIFrame* subdocRootFrame = subdocFrame->GetSubdocumentRootFrame();
|
nsIFrame* subdocRootFrame = subdocFrame->GetSubdocumentRootFrame();
|
||||||
if (subdocRootFrame) {
|
if (subdocRootFrame) {
|
||||||
nsIFrame* subdocRootScrollFrame = subdocRootFrame->PresContext()->PresShell()->
|
nsIFrame* subdocRootScrollFrame = subdocRootFrame->PresShell()->
|
||||||
GetRootScrollFrame();
|
GetRootScrollFrame();
|
||||||
if (subdocRootScrollFrame) {
|
if (subdocRootScrollFrame) {
|
||||||
frame->PresContext()->PresShell()->
|
frame->PresShell()->
|
||||||
FrameNeedsReflow(frame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(frame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3067,7 +3067,7 @@ nsFrameLoader::SetClampScrollPosition(bool aClamp)
|
||||||
if (subdocFrame) {
|
if (subdocFrame) {
|
||||||
nsIFrame* subdocRootFrame = subdocFrame->GetSubdocumentRootFrame();
|
nsIFrame* subdocRootFrame = subdocFrame->GetSubdocumentRootFrame();
|
||||||
if (subdocRootFrame) {
|
if (subdocRootFrame) {
|
||||||
nsIScrollableFrame* subdocRootScrollFrame = subdocRootFrame->PresContext()->PresShell()->
|
nsIScrollableFrame* subdocRootScrollFrame = subdocRootFrame->PresShell()->
|
||||||
GetRootScrollFrameAsScrollable();
|
GetRootScrollFrameAsScrollable();
|
||||||
if (subdocRootScrollFrame) {
|
if (subdocRootScrollFrame) {
|
||||||
subdocRootScrollFrame->ScrollTo(subdocRootScrollFrame->GetScrollPosition(), nsIScrollableFrame::INSTANT);
|
subdocRootScrollFrame->ScrollTo(subdocRootScrollFrame->GetScrollPosition(), nsIScrollableFrame::INSTANT);
|
||||||
|
|
|
||||||
|
|
@ -3250,7 +3250,7 @@ ContentEventHandler::FrameRelativeRect::RectRelativeTo(
|
||||||
return mRect;
|
return mRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsIFrame* rootFrame = mBaseFrame->PresContext()->PresShell()->GetRootFrame();
|
nsIFrame* rootFrame = mBaseFrame->PresShell()->GetRootFrame();
|
||||||
nsRect baseFrameRectInRootFrame =
|
nsRect baseFrameRectInRootFrame =
|
||||||
nsLayoutUtils::TransformFrameRectToAncestor(mBaseFrame, nsRect(),
|
nsLayoutUtils::TransformFrameRectToAncestor(mBaseFrame, nsRect(),
|
||||||
rootFrame);
|
rootFrame);
|
||||||
|
|
|
||||||
|
|
@ -3310,7 +3310,7 @@ EventStateManager::PostHandleEvent(nsPresContext* aPresContext,
|
||||||
ScrollbarsForWheel::SetActiveScrollTarget(scrollTarget);
|
ScrollbarsForWheel::SetActiveScrollTarget(scrollTarget);
|
||||||
|
|
||||||
nsIFrame* rootScrollFrame = !mCurrentTarget ? nullptr :
|
nsIFrame* rootScrollFrame = !mCurrentTarget ? nullptr :
|
||||||
mCurrentTarget->PresContext()->PresShell()->GetRootScrollFrame();
|
mCurrentTarget->PresShell()->GetRootScrollFrame();
|
||||||
nsIScrollableFrame* rootScrollableFrame = nullptr;
|
nsIScrollableFrame* rootScrollableFrame = nullptr;
|
||||||
if (rootScrollFrame) {
|
if (rootScrollFrame) {
|
||||||
rootScrollableFrame = do_QueryFrame(rootScrollFrame);
|
rootScrollableFrame = do_QueryFrame(rootScrollFrame);
|
||||||
|
|
|
||||||
|
|
@ -4132,9 +4132,8 @@ void HTMLMediaElement::SetPlayedOrSeeked(bool aValue)
|
||||||
if (!frame) {
|
if (!frame) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
frame->PresContext()->PresShell()->FrameNeedsReflow(frame,
|
frame->PresShell()->FrameNeedsReflow(frame, nsIPresShell::eTreeChange,
|
||||||
nsIPresShell::eTreeChange,
|
NS_FRAME_IS_DIRTY);
|
||||||
NS_FRAME_IS_DIRTY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -275,8 +275,7 @@ IDBFactory::CreateForJSInternal(JSContext* aCx,
|
||||||
factory->mPrincipalInfo = aPrincipalInfo.forget();
|
factory->mPrincipalInfo = aPrincipalInfo.forget();
|
||||||
factory->mOwningObject = aOwningObject;
|
factory->mOwningObject = aOwningObject;
|
||||||
mozilla::HoldJSObjects(factory.get());
|
mozilla::HoldJSObjects(factory.get());
|
||||||
factory->mEventTarget = NS_IsMainThread() ?
|
factory->mEventTarget = GetCurrentThreadEventTarget();
|
||||||
SystemGroup::EventTargetFor(TaskCategory::Other) : GetCurrentThreadEventTarget();
|
|
||||||
factory->mInnerWindowID = aInnerWindowID;
|
factory->mInnerWindowID = aInnerWindowID;
|
||||||
|
|
||||||
factory.forget(aFactory);
|
factory.forget(aFactory);
|
||||||
|
|
|
||||||
|
|
@ -71,9 +71,8 @@ class IDBFactory final
|
||||||
|
|
||||||
indexedDB::BackgroundFactoryChild* mBackgroundActor;
|
indexedDB::BackgroundFactoryChild* mBackgroundActor;
|
||||||
|
|
||||||
// A DocGroup-specific EventTarget if created by CreateForWindow().
|
// It is either set to a DocGroup-specific EventTarget if created by
|
||||||
// Otherwise, it must either be set to SystemGroup on main thread or
|
// CreateForWindow() or set to GetCurrentThreadEventTarget() otherwise.
|
||||||
// NS_GetCurrentThread() off main thread.
|
|
||||||
nsCOMPtr<nsIEventTarget> mEventTarget;
|
nsCOMPtr<nsIEventTarget> mEventTarget;
|
||||||
|
|
||||||
uint64_t mInnerWindowID;
|
uint64_t mInnerWindowID;
|
||||||
|
|
|
||||||
|
|
@ -36,11 +36,11 @@ public:
|
||||||
return mTaskQueue->TailDispatcher();
|
return mTaskQueue->TailDispatcher();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dispatch(already_AddRefed<nsIRunnable> aRunnable,
|
nsresult Dispatch(already_AddRefed<nsIRunnable> aRunnable,
|
||||||
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
|
DispatchFailureHandling aFailureHandling = AssertDispatchSuccess,
|
||||||
DispatchReason aReason = NormalDispatch) override
|
DispatchReason aReason = NormalDispatch) override
|
||||||
{
|
{
|
||||||
mTaskQueue->Dispatch(Move(aRunnable), aFailureHandling, aReason);
|
return mTaskQueue->Dispatch(Move(aRunnable), aFailureHandling, aReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prevent a GCC warning about the other overload of Dispatch being hidden.
|
// Prevent a GCC warning about the other overload of Dispatch being hidden.
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,10 @@ nsContentSecurityManager::AllowTopLevelNavigationToDataURI(nsIChannel* aChannel)
|
||||||
if (loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_DOCUMENT) {
|
if (loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_DOCUMENT) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (loadInfo->GetForceAllowDataURI()) {
|
||||||
|
// if the loadinfo explicitly allows the data URI navigation, let's allow it now
|
||||||
|
return true;
|
||||||
|
}
|
||||||
nsCOMPtr<nsIURI> uri;
|
nsCOMPtr<nsIURI> uri;
|
||||||
nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri));
|
nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri));
|
||||||
NS_ENSURE_SUCCESS(rv, true);
|
NS_ENSURE_SUCCESS(rv, true);
|
||||||
|
|
|
||||||
|
|
@ -9,3 +9,6 @@ support-files =
|
||||||
[browser_test_data_text_csv.js]
|
[browser_test_data_text_csv.js]
|
||||||
support-files =
|
support-files =
|
||||||
file_data_text_csv.html
|
file_data_text_csv.html
|
||||||
|
[browser_test_view_image_data_navigation.js]
|
||||||
|
support-files =
|
||||||
|
file_view_image_data_navigation.html
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const TEST_PAGE = getRootDirectory(gTestPath) + "file_view_image_data_navigation.html";
|
||||||
|
|
||||||
|
add_task(async function test_principal_right_click_open_link_in_new_tab() {
|
||||||
|
await SpecialPowers.pushPrefEnv({
|
||||||
|
"set": [["security.data_uri.block_toplevel_data_uri_navigations", true]],
|
||||||
|
});
|
||||||
|
|
||||||
|
await BrowserTestUtils.withNewTab(TEST_PAGE, async function(browser) {
|
||||||
|
let loadPromise = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser, true);
|
||||||
|
|
||||||
|
// simulate right-click->view-image
|
||||||
|
BrowserTestUtils.waitForEvent(document, "popupshown", false, event => {
|
||||||
|
// These are operations that must be executed synchronously with the event.
|
||||||
|
document.getElementById("context-viewimage").doCommand();
|
||||||
|
event.target.hidePopup();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
BrowserTestUtils.synthesizeMouseAtCenter("#testimage",
|
||||||
|
{ type: "contextmenu", button: 2 },
|
||||||
|
gBrowser.selectedBrowser);
|
||||||
|
await loadPromise;
|
||||||
|
|
||||||
|
await ContentTask.spawn(gBrowser.selectedBrowser, {}, async function() {
|
||||||
|
ok(content.document.location.toString().startsWith("data:image/svg+xml;"),
|
||||||
|
"data:image/svg navigation allowed through right-click view-image")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Bug 1407891: Test navigation for right-click view-image on data:image/svg</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<img id="testimage" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij4KICA8cGF0aCBkPSJNOCwxMkwzLDcsNCw2bDQsNCw0LTQsMSwxWiIgZmlsbD0iIzZBNkE2QSIgLz4KPC9zdmc+Cg=="></img>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -50,6 +50,8 @@
|
||||||
#include "ScaledFontDWrite.h"
|
#include "ScaledFontDWrite.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
||||||
|
|
@ -276,6 +278,7 @@ GetSkImageForSurface(SourceSurface* aSurface, const Rect* aBounds = nullptr, con
|
||||||
|
|
||||||
DrawTargetSkia::DrawTargetSkia()
|
DrawTargetSkia::DrawTargetSkia()
|
||||||
: mSnapshot(nullptr)
|
: mSnapshot(nullptr)
|
||||||
|
, mSnapshotLock{make_shared<Mutex>("DrawTargetSkia::mSnapshotLock")}
|
||||||
#ifdef MOZ_WIDGET_COCOA
|
#ifdef MOZ_WIDGET_COCOA
|
||||||
, mCG(nullptr)
|
, mCG(nullptr)
|
||||||
, mColorSpace(nullptr)
|
, mColorSpace(nullptr)
|
||||||
|
|
@ -316,7 +319,7 @@ DrawTargetSkia::Snapshot()
|
||||||
} else {
|
} else {
|
||||||
image = mSurface->makeImageSnapshot();
|
image = mSurface->makeImageSnapshot();
|
||||||
}
|
}
|
||||||
if (!snapshot->InitFromImage(image, mFormat, this)) {
|
if (!snapshot->InitFromImage(image, mFormat, this, mSnapshotLock)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
mSnapshot = snapshot;
|
mSnapshot = snapshot;
|
||||||
|
|
@ -2214,6 +2217,7 @@ DrawTargetSkia::CreateFilter(FilterType aType)
|
||||||
void
|
void
|
||||||
DrawTargetSkia::MarkChanged()
|
DrawTargetSkia::MarkChanged()
|
||||||
{
|
{
|
||||||
|
MutexAutoLock lock(*mSnapshotLock);
|
||||||
if (mSnapshot) {
|
if (mSnapshot) {
|
||||||
mSnapshot->DrawTargetWillChange();
|
mSnapshot->DrawTargetWillChange();
|
||||||
mSnapshot = nullptr;
|
mSnapshot = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,7 @@ private:
|
||||||
sk_sp<SkSurface> mSurface;
|
sk_sp<SkSurface> mSurface;
|
||||||
SkCanvas* mCanvas;
|
SkCanvas* mCanvas;
|
||||||
SourceSurfaceSkia* mSnapshot;
|
SourceSurfaceSkia* mSnapshot;
|
||||||
|
std::shared_ptr<Mutex> mSnapshotLock;
|
||||||
|
|
||||||
#ifdef MOZ_WIDGET_COCOA
|
#ifdef MOZ_WIDGET_COCOA
|
||||||
friend class BorrowedCGContext;
|
friend class BorrowedCGContext;
|
||||||
|
|
|
||||||
|
|
@ -475,7 +475,7 @@ enum UnpremultiplyInputs
|
||||||
IN_UNPREMULTIPLY_IN = 0
|
IN_UNPREMULTIPLY_IN = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
class FilterNode : public RefCounted<FilterNode>
|
class FilterNode : public external::AtomicRefCounted<FilterNode>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
|
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(FilterNode)
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@
|
||||||
#include "skia/include/core/SkData.h"
|
#include "skia/include/core/SkData.h"
|
||||||
#include "mozilla/CheckedInt.h"
|
#include "mozilla/CheckedInt.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
||||||
|
|
@ -24,9 +26,12 @@ SourceSurfaceSkia::SourceSurfaceSkia()
|
||||||
|
|
||||||
SourceSurfaceSkia::~SourceSurfaceSkia()
|
SourceSurfaceSkia::~SourceSurfaceSkia()
|
||||||
{
|
{
|
||||||
if (mDrawTarget) {
|
if (mSnapshotLock) {
|
||||||
mDrawTarget->SnapshotDestroyed();
|
MutexAutoLock lock{*mSnapshotLock};
|
||||||
mDrawTarget = nullptr;
|
if (mDrawTarget) {
|
||||||
|
mDrawTarget->SnapshotDestroyed();
|
||||||
|
mDrawTarget = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -104,7 +109,8 @@ SourceSurfaceSkia::InitFromData(unsigned char* aData,
|
||||||
bool
|
bool
|
||||||
SourceSurfaceSkia::InitFromImage(const sk_sp<SkImage>& aImage,
|
SourceSurfaceSkia::InitFromImage(const sk_sp<SkImage>& aImage,
|
||||||
SurfaceFormat aFormat,
|
SurfaceFormat aFormat,
|
||||||
DrawTargetSkia* aOwner)
|
DrawTargetSkia* aOwner,
|
||||||
|
shared_ptr<Mutex> aSnapshotLock)
|
||||||
{
|
{
|
||||||
if (!aImage) {
|
if (!aImage) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -137,6 +143,8 @@ SourceSurfaceSkia::InitFromImage(const sk_sp<SkImage>& aImage,
|
||||||
mImage = aImage;
|
mImage = aImage;
|
||||||
|
|
||||||
if (aOwner) {
|
if (aOwner) {
|
||||||
|
MOZ_ASSERT(aSnapshotLock);
|
||||||
|
mSnapshotLock = move(aSnapshotLock);
|
||||||
mDrawTarget = aOwner;
|
mDrawTarget = aOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -186,6 +194,10 @@ SourceSurfaceSkia::Unmap()
|
||||||
void
|
void
|
||||||
SourceSurfaceSkia::DrawTargetWillChange()
|
SourceSurfaceSkia::DrawTargetWillChange()
|
||||||
{
|
{
|
||||||
|
// In this case synchronisation on destroy should be guaranteed!
|
||||||
|
MOZ_ASSERT(mSnapshotLock);
|
||||||
|
mSnapshotLock->AssertCurrentThreadOwns();
|
||||||
|
|
||||||
MutexAutoLock lock(mChangeMutex);
|
MutexAutoLock lock(mChangeMutex);
|
||||||
if (mDrawTarget) {
|
if (mDrawTarget) {
|
||||||
// Raster snapshots do not use Skia's internal copy-on-write mechanism,
|
// Raster snapshots do not use Skia's internal copy-on-write mechanism,
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ namespace mozilla {
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
|
|
||||||
class DrawTargetSkia;
|
class DrawTargetSkia;
|
||||||
|
class SnapshotLock;
|
||||||
|
|
||||||
class SourceSurfaceSkia : public DataSourceSurface
|
class SourceSurfaceSkia : public DataSourceSurface
|
||||||
{
|
{
|
||||||
|
|
@ -39,7 +40,8 @@ public:
|
||||||
|
|
||||||
bool InitFromImage(const sk_sp<SkImage>& aImage,
|
bool InitFromImage(const sk_sp<SkImage>& aImage,
|
||||||
SurfaceFormat aFormat = SurfaceFormat::UNKNOWN,
|
SurfaceFormat aFormat = SurfaceFormat::UNKNOWN,
|
||||||
DrawTargetSkia* aOwner = nullptr);
|
DrawTargetSkia* aOwner = nullptr,
|
||||||
|
std::shared_ptr<Mutex> aSnapshotLock = std::shared_ptr<Mutex>{});
|
||||||
|
|
||||||
virtual uint8_t* GetData();
|
virtual uint8_t* GetData();
|
||||||
|
|
||||||
|
|
@ -62,6 +64,7 @@ private:
|
||||||
IntSize mSize;
|
IntSize mSize;
|
||||||
int32_t mStride;
|
int32_t mStride;
|
||||||
RefPtr<DrawTargetSkia> mDrawTarget;
|
RefPtr<DrawTargetSkia> mDrawTarget;
|
||||||
|
std::shared_ptr<Mutex> mSnapshotLock;
|
||||||
Mutex mChangeMutex;
|
Mutex mChangeMutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,15 @@ GPUParent::RecvInit(nsTArray<GfxPrefSetting>&& prefs,
|
||||||
} else {
|
} else {
|
||||||
gtk_init(nullptr, nullptr);
|
gtk_init(nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure we have an FT library for font instantiation.
|
||||||
|
// This would normally be set by gfxPlatform::Init().
|
||||||
|
// Since we bypass that, we must do it here instead.
|
||||||
|
if (gfxVars::UseWebRender()) {
|
||||||
|
FT_Library library = Factory::NewFTLibrary();
|
||||||
|
MOZ_ASSERT(library);
|
||||||
|
Factory::SetFTLibrary(library);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Make sure to do this *after* we update gfxVars above.
|
// Make sure to do this *after* we update gfxVars above.
|
||||||
|
|
|
||||||
|
|
@ -613,7 +613,7 @@ UpdateRootFrameForTouchTargetDocument(nsIFrame* aRootFrame)
|
||||||
// Re-target so that the hit test is performed relative to the frame for the
|
// Re-target so that the hit test is performed relative to the frame for the
|
||||||
// Root Content Document instead of the Root Document which are different in
|
// Root Content Document instead of the Root Document which are different in
|
||||||
// Android. See bug 1229752 comment 16 for an explanation of why this is necessary.
|
// Android. See bug 1229752 comment 16 for an explanation of why this is necessary.
|
||||||
if (nsIDocument* doc = aRootFrame->PresContext()->PresShell()->GetPrimaryContentDocument()) {
|
if (nsIDocument* doc = aRootFrame->PresShell()->GetPrimaryContentDocument()) {
|
||||||
if (nsIPresShell* shell = doc->GetShell()) {
|
if (nsIPresShell* shell = doc->GetShell()) {
|
||||||
if (nsIFrame* frame = shell->GetRootFrame()) {
|
if (nsIFrame* frame = shell->GetRootFrame()) {
|
||||||
return frame;
|
return frame;
|
||||||
|
|
@ -648,7 +648,7 @@ PrepareForSetTargetAPZCNotification(nsIWidget* aWidget,
|
||||||
nsLayoutUtils::GetFrameForPoint(aRootFrame, point, flags);
|
nsLayoutUtils::GetFrameForPoint(aRootFrame, point, flags);
|
||||||
nsIScrollableFrame* scrollAncestor = target
|
nsIScrollableFrame* scrollAncestor = target
|
||||||
? nsLayoutUtils::GetAsyncScrollableAncestorFrame(target)
|
? nsLayoutUtils::GetAsyncScrollableAncestorFrame(target)
|
||||||
: aRootFrame->PresContext()->PresShell()->GetRootScrollFrameAsScrollable();
|
: aRootFrame->PresShell()->GetRootScrollFrameAsScrollable();
|
||||||
|
|
||||||
// Assuming that if there's no scrollAncestor, there's already a displayPort.
|
// Assuming that if there's no scrollAncestor, there's already a displayPort.
|
||||||
nsCOMPtr<dom::Element> dpElement = scrollAncestor
|
nsCOMPtr<dom::Element> dpElement = scrollAncestor
|
||||||
|
|
@ -685,7 +685,7 @@ PrepareForSetTargetAPZCNotification(nsIWidget* aWidget,
|
||||||
// element again and bail out on this operation.
|
// element again and bail out on this operation.
|
||||||
APZCCH_LOG("Widget %p's document element %p didn't have a displayport\n",
|
APZCCH_LOG("Widget %p's document element %p didn't have a displayport\n",
|
||||||
aWidget, dpElement.get());
|
aWidget, dpElement.get());
|
||||||
APZCCallbackHelper::InitializeRootDisplayport(aRootFrame->PresContext()->PresShell());
|
APZCCallbackHelper::InitializeRootDisplayport(aRootFrame->PresShell());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -268,7 +268,7 @@ static already_AddRefed<TextureClient>
|
||||||
TexClientFromReadback(SharedSurface* src, CompositableForwarder* allocator,
|
TexClientFromReadback(SharedSurface* src, CompositableForwarder* allocator,
|
||||||
TextureFlags baseFlags, LayersBackend layersBackend)
|
TextureFlags baseFlags, LayersBackend layersBackend)
|
||||||
{
|
{
|
||||||
auto backendType = gfx::BackendType::CAIRO;
|
auto backendType = gfx::BackendType::SKIA;
|
||||||
TexClientFactory factory(allocator, src->mHasAlpha, src->mSize, backendType,
|
TexClientFactory factory(allocator, src->mHasAlpha, src->mSize, backendType,
|
||||||
baseFlags, layersBackend);
|
baseFlags, layersBackend);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1141,11 +1141,6 @@ TextureClient::CreateForDrawing(TextureForwarder* aAllocator,
|
||||||
return MakeAndAddRef<TextureClient>(data, aTextureFlags, aAllocator);
|
return MakeAndAddRef<TextureClient>(data, aTextureFlags, aAllocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moz2DBackend == BackendType::SKIA && aFormat == SurfaceFormat::B8G8R8X8) {
|
|
||||||
// Skia doesn't support RGBX, so ensure we clear the buffer for the proper alpha values.
|
|
||||||
aAllocFlags = TextureAllocationFlags(aAllocFlags | ALLOC_CLEAR_BUFFER);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't do any better than a buffer texture client.
|
// Can't do any better than a buffer texture client.
|
||||||
return TextureClient::CreateForRawBufferAccess(aAllocator, aFormat, aSize,
|
return TextureClient::CreateForRawBufferAccess(aAllocator, aFormat, aSize,
|
||||||
moz2DBackend, aLayersBackend,
|
moz2DBackend, aLayersBackend,
|
||||||
|
|
@ -1250,13 +1245,20 @@ TextureClient::CreateForRawBufferAccess(LayersIPCChannel* aAllocator,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// D2D backend does not support CreateDrawTargetForData(). Use CAIRO instead.
|
if (aFormat == SurfaceFormat::B8G8R8X8) {
|
||||||
if (aMoz2DBackend == gfx::BackendType::DIRECT2D ||
|
// Skia doesn't support RGBX, so ensure we clear the buffer for the proper alpha values.
|
||||||
aMoz2DBackend == gfx::BackendType::DIRECT2D1_1) {
|
aAllocFlags = TextureAllocationFlags(aAllocFlags | ALLOC_CLEAR_BUFFER);
|
||||||
aMoz2DBackend = gfx::BackendType::CAIRO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureData* texData = BufferTextureData::Create(aSize, aFormat, aMoz2DBackend,
|
// Note that we ignore the backend type if we get here. It should only be D2D
|
||||||
|
// or Skia, and D2D does not support data surfaces. Therefore it is safe to
|
||||||
|
// force the buffer to be Skia.
|
||||||
|
NS_WARNING_ASSERTION(aMoz2DBackend != gfx::BackendType::SKIA &&
|
||||||
|
aMoz2DBackend != gfx::BackendType::DIRECT2D &&
|
||||||
|
aMoz2DBackend != gfx::BackendType::DIRECT2D1_1,
|
||||||
|
"Unsupported TextureClient backend type");
|
||||||
|
|
||||||
|
TextureData* texData = BufferTextureData::Create(aSize, aFormat, gfx::BackendType::SKIA,
|
||||||
aLayersBackend, aTextureFlags,
|
aLayersBackend, aTextureFlags,
|
||||||
aAllocFlags, aAllocator);
|
aAllocFlags, aAllocator);
|
||||||
if (!texData) {
|
if (!texData) {
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ WebRenderCommandBuilder::BuildWebRenderCommands(wr::DisplayListBuilder& aBuilder
|
||||||
mLayerScrollData.emplace_back();
|
mLayerScrollData.emplace_back();
|
||||||
mLayerScrollData.back().InitializeRoot(mLayerScrollData.size() - 1);
|
mLayerScrollData.back().InitializeRoot(mLayerScrollData.size() - 1);
|
||||||
if (aDisplayListBuilder->IsBuildingLayerEventRegions()) {
|
if (aDisplayListBuilder->IsBuildingLayerEventRegions()) {
|
||||||
nsIPresShell* shell = aDisplayListBuilder->RootReferenceFrame()->PresContext()->PresShell();
|
nsIPresShell* shell = aDisplayListBuilder->RootReferenceFrame()->PresShell();
|
||||||
if (nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(shell)) {
|
if (nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(shell)) {
|
||||||
mLayerScrollData.back().SetEventRegionsOverride(EventRegionsOverride::ForceDispatchToContent);
|
mLayerScrollData.back().SetEventRegionsOverride(EventRegionsOverride::ForceDispatchToContent);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ protected:
|
||||||
|
|
||||||
if (mHonoringInvalidations && !mDocWrapper->ShouldIgnoreInvalidation()) {
|
if (mHonoringInvalidations && !mDocWrapper->ShouldIgnoreInvalidation()) {
|
||||||
nsIFrame* frame = elem->GetPrimaryFrame();
|
nsIFrame* frame = elem->GetPrimaryFrame();
|
||||||
if (!frame || frame->PresContext()->PresShell()->IsDestroying()) {
|
if (!frame || frame->PresShell()->IsDestroying()) {
|
||||||
// We're being destroyed. Bail out.
|
// We're being destroyed. Bail out.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -387,6 +387,7 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
|
||||||
aLoadInfo->GetUpgradeInsecureRequests(),
|
aLoadInfo->GetUpgradeInsecureRequests(),
|
||||||
aLoadInfo->GetVerifySignedContent(),
|
aLoadInfo->GetVerifySignedContent(),
|
||||||
aLoadInfo->GetEnforceSRI(),
|
aLoadInfo->GetEnforceSRI(),
|
||||||
|
aLoadInfo->GetForceAllowDataURI(),
|
||||||
aLoadInfo->GetForceInheritPrincipalDropped(),
|
aLoadInfo->GetForceInheritPrincipalDropped(),
|
||||||
aLoadInfo->GetInnerWindowID(),
|
aLoadInfo->GetInnerWindowID(),
|
||||||
aLoadInfo->GetOuterWindowID(),
|
aLoadInfo->GetOuterWindowID(),
|
||||||
|
|
@ -495,6 +496,7 @@ LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
|
||||||
loadInfoArgs.upgradeInsecureRequests(),
|
loadInfoArgs.upgradeInsecureRequests(),
|
||||||
loadInfoArgs.verifySignedContent(),
|
loadInfoArgs.verifySignedContent(),
|
||||||
loadInfoArgs.enforceSRI(),
|
loadInfoArgs.enforceSRI(),
|
||||||
|
loadInfoArgs.forceAllowDataURI(),
|
||||||
loadInfoArgs.forceInheritPrincipalDropped(),
|
loadInfoArgs.forceInheritPrincipalDropped(),
|
||||||
loadInfoArgs.innerWindowID(),
|
loadInfoArgs.innerWindowID(),
|
||||||
loadInfoArgs.outerWindowID(),
|
loadInfoArgs.outerWindowID(),
|
||||||
|
|
|
||||||
|
|
@ -3130,8 +3130,17 @@ Parser<ParseHandler, CharT>::functionArguments(YieldHandling yieldHandling,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The next step is to detect arguments with default expressions,
|
||||||
|
// e.g. |function parseInt(str, radix = 10) {}|. But if we have a
|
||||||
|
// parentheses-free arrow function, |a => ...|, the '=' necessary
|
||||||
|
// for a default expression would really be an assignment operator:
|
||||||
|
// that is, |a = b => 42;| would parse as |a = (b => 42);|. So we
|
||||||
|
// should stop parsing arguments here.
|
||||||
|
if (parenFreeArrow)
|
||||||
|
break;
|
||||||
|
|
||||||
bool matched;
|
bool matched;
|
||||||
if (!tokenStream.matchToken(&matched, TOK_ASSIGN))
|
if (!tokenStream.matchToken(&matched, TOK_ASSIGN, TokenStream::Operand))
|
||||||
return false;
|
return false;
|
||||||
if (matched) {
|
if (matched) {
|
||||||
// A default argument without parentheses would look like:
|
// A default argument without parentheses would look like:
|
||||||
|
|
@ -3166,10 +3175,11 @@ Parser<ParseHandler, CharT>::functionArguments(YieldHandling yieldHandling,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parenFreeArrow || IsSetterKind(kind))
|
// Setter syntax uniquely requires exactly one argument.
|
||||||
|
if (IsSetterKind(kind))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!tokenStream.matchToken(&matched, TOK_COMMA))
|
if (!tokenStream.matchToken(&matched, TOK_COMMA, TokenStream::Operand))
|
||||||
return false;
|
return false;
|
||||||
if (!matched)
|
if (!matched)
|
||||||
break;
|
break;
|
||||||
|
|
@ -3177,16 +3187,14 @@ Parser<ParseHandler, CharT>::functionArguments(YieldHandling yieldHandling,
|
||||||
if (!hasRest) {
|
if (!hasRest) {
|
||||||
if (!tokenStream.peekToken(&tt, TokenStream::Operand))
|
if (!tokenStream.peekToken(&tt, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
if (tt == TOK_RP) {
|
if (tt == TOK_RP)
|
||||||
tokenStream.addModifierException(TokenStream::NoneIsOperand);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!parenFreeArrow) {
|
if (!parenFreeArrow) {
|
||||||
TokenKind tt;
|
TokenKind tt;
|
||||||
if (!tokenStream.getToken(&tt))
|
if (!tokenStream.getToken(&tt, TokenStream::Operand))
|
||||||
return false;
|
return false;
|
||||||
if (tt != TOK_RP) {
|
if (tt != TOK_RP) {
|
||||||
if (IsSetterKind(kind)) {
|
if (IsSetterKind(kind)) {
|
||||||
|
|
@ -4443,8 +4451,10 @@ Parser<ParseHandler, CharT>::objectBindingPattern(DeclarationKind kind,
|
||||||
TokenKind tt;
|
TokenKind tt;
|
||||||
if (!tokenStream.peekToken(&tt))
|
if (!tokenStream.peekToken(&tt))
|
||||||
return null();
|
return null();
|
||||||
if (tt == TOK_RC)
|
if (tt == TOK_RC) {
|
||||||
|
tokenStream.addModifierException(TokenStream::OperandIsNone);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (tt == TOK_TRIPLEDOT) {
|
if (tt == TOK_TRIPLEDOT) {
|
||||||
tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
|
tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
|
||||||
|
|
@ -4484,7 +4494,7 @@ Parser<ParseHandler, CharT>::objectBindingPattern(DeclarationKind kind,
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
bool hasInitializer;
|
bool hasInitializer;
|
||||||
if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN))
|
if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
Node bindingExpr = hasInitializer
|
Node bindingExpr = hasInitializer
|
||||||
|
|
@ -4530,7 +4540,7 @@ Parser<ParseHandler, CharT>::objectBindingPattern(DeclarationKind kind,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool matched;
|
bool matched;
|
||||||
if (!tokenStream.matchToken(&matched, TOK_COMMA))
|
if (!tokenStream.matchToken(&matched, TOK_COMMA, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
if (!matched)
|
if (!matched)
|
||||||
break;
|
break;
|
||||||
|
|
@ -4540,7 +4550,7 @@ Parser<ParseHandler, CharT>::objectBindingPattern(DeclarationKind kind,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::None,
|
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
|
||||||
reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
|
reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
|
||||||
JSMSG_CURLY_OPENED, begin));
|
JSMSG_CURLY_OPENED, begin));
|
||||||
|
|
||||||
|
|
@ -4575,6 +4585,7 @@ Parser<ParseHandler, CharT>::arrayBindingPattern(DeclarationKind kind, YieldHand
|
||||||
|
|
||||||
if (tt == TOK_RB) {
|
if (tt == TOK_RB) {
|
||||||
tokenStream.ungetToken();
|
tokenStream.ungetToken();
|
||||||
|
tokenStream.addModifierException(TokenStream::OperandIsNone);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4600,7 +4611,7 @@ Parser<ParseHandler, CharT>::arrayBindingPattern(DeclarationKind kind, YieldHand
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
bool hasInitializer;
|
bool hasInitializer;
|
||||||
if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN))
|
if (!tokenStream.matchToken(&hasInitializer, TOK_ASSIGN, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
Node element = hasInitializer
|
Node element = hasInitializer
|
||||||
|
|
@ -4615,7 +4626,7 @@ Parser<ParseHandler, CharT>::arrayBindingPattern(DeclarationKind kind, YieldHand
|
||||||
if (tt != TOK_COMMA) {
|
if (tt != TOK_COMMA) {
|
||||||
// If we didn't already match TOK_COMMA in above case.
|
// If we didn't already match TOK_COMMA in above case.
|
||||||
bool matched;
|
bool matched;
|
||||||
if (!tokenStream.matchToken(&matched, TOK_COMMA))
|
if (!tokenStream.matchToken(&matched, TOK_COMMA, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
if (!matched)
|
if (!matched)
|
||||||
break;
|
break;
|
||||||
|
|
@ -4627,7 +4638,7 @@ Parser<ParseHandler, CharT>::arrayBindingPattern(DeclarationKind kind, YieldHand
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RB, TokenStream::None,
|
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RB, TokenStream::Operand,
|
||||||
reportMissingClosing(JSMSG_BRACKET_AFTER_LIST,
|
reportMissingClosing(JSMSG_BRACKET_AFTER_LIST,
|
||||||
JSMSG_BRACKET_OPENED, begin));
|
JSMSG_BRACKET_OPENED, begin));
|
||||||
|
|
||||||
|
|
@ -7931,7 +7942,7 @@ Parser<ParseHandler, CharT>::condExpr(InHandling inHandling, YieldHandling yield
|
||||||
if (!thenExpr)
|
if (!thenExpr)
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
MUST_MATCH_TOKEN(TOK_COLON, JSMSG_COLON_IN_COND);
|
MUST_MATCH_TOKEN_MOD(TOK_COLON, TokenStream::Operand, JSMSG_COLON_IN_COND);
|
||||||
|
|
||||||
Node elseExpr = assignExpr(inHandling, yieldHandling, TripledotProhibited);
|
Node elseExpr = assignExpr(inHandling, yieldHandling, TripledotProhibited);
|
||||||
if (!elseExpr)
|
if (!elseExpr)
|
||||||
|
|
@ -8021,6 +8032,7 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||||
PossibleError possibleErrorInner(*this);
|
PossibleError possibleErrorInner(*this);
|
||||||
Node lhs;
|
Node lhs;
|
||||||
TokenKind tokenAfterLHS;
|
TokenKind tokenAfterLHS;
|
||||||
|
bool isArrow;
|
||||||
if (maybeAsyncArrow) {
|
if (maybeAsyncArrow) {
|
||||||
tokenStream.consumeKnownToken(TOK_ASYNC, TokenStream::Operand);
|
tokenStream.consumeKnownToken(TOK_ASYNC, TokenStream::Operand);
|
||||||
|
|
||||||
|
|
@ -8034,54 +8046,33 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||||
if (!name)
|
if (!name)
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
if (!tokenStream.getToken(&tokenAfterLHS))
|
if (!tokenStream.peekTokenSameLine(&tokenAfterLHS))
|
||||||
return null();
|
return null();
|
||||||
if (tokenAfterLHS != TOK_ARROW) {
|
if (tokenAfterLHS != TOK_ARROW) {
|
||||||
error(JSMSG_UNEXPECTED_TOKEN,
|
error(JSMSG_UNEXPECTED_TOKEN,
|
||||||
"'=>' after argument list", TokenKindToDesc(tokenAfterLHS));
|
"'=>' on the same line after an argument list", TokenKindToDesc(tokenAfterLHS));
|
||||||
return null();
|
return null();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isArrow = true;
|
||||||
} else {
|
} else {
|
||||||
lhs = condExpr(inHandling, yieldHandling, tripledotHandling, &possibleErrorInner, invoked);
|
lhs = condExpr(inHandling, yieldHandling, tripledotHandling, &possibleErrorInner, invoked);
|
||||||
if (!lhs)
|
if (!lhs)
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
if (!tokenStream.getToken(&tokenAfterLHS))
|
// Use Operand here because the ConditionalExpression parsed above
|
||||||
|
// could be the entirety of this AssignmentExpression, and then ASI
|
||||||
|
// permits this token to be a regular expression.
|
||||||
|
if (!tokenStream.peekTokenSameLine(&tokenAfterLHS, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
|
isArrow = tokenAfterLHS == TOK_ARROW;
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseNodeKind kind;
|
if (isArrow) {
|
||||||
switch (tokenAfterLHS) {
|
|
||||||
case TOK_ASSIGN: kind = PNK_ASSIGN; break;
|
|
||||||
case TOK_ADDASSIGN: kind = PNK_ADDASSIGN; break;
|
|
||||||
case TOK_SUBASSIGN: kind = PNK_SUBASSIGN; break;
|
|
||||||
case TOK_BITORASSIGN: kind = PNK_BITORASSIGN; break;
|
|
||||||
case TOK_BITXORASSIGN: kind = PNK_BITXORASSIGN; break;
|
|
||||||
case TOK_BITANDASSIGN: kind = PNK_BITANDASSIGN; break;
|
|
||||||
case TOK_LSHASSIGN: kind = PNK_LSHASSIGN; break;
|
|
||||||
case TOK_RSHASSIGN: kind = PNK_RSHASSIGN; break;
|
|
||||||
case TOK_URSHASSIGN: kind = PNK_URSHASSIGN; break;
|
|
||||||
case TOK_MULASSIGN: kind = PNK_MULASSIGN; break;
|
|
||||||
case TOK_DIVASSIGN: kind = PNK_DIVASSIGN; break;
|
|
||||||
case TOK_MODASSIGN: kind = PNK_MODASSIGN; break;
|
|
||||||
case TOK_POWASSIGN: kind = PNK_POWASSIGN; break;
|
|
||||||
|
|
||||||
case TOK_ARROW: {
|
|
||||||
|
|
||||||
// A line terminator between ArrowParameters and the => should trigger a SyntaxError.
|
|
||||||
tokenStream.ungetToken();
|
|
||||||
TokenKind next;
|
|
||||||
if (!tokenStream.peekTokenSameLine(&next))
|
|
||||||
return null();
|
|
||||||
MOZ_ASSERT(next == TOK_ARROW || next == TOK_EOL);
|
|
||||||
|
|
||||||
if (next != TOK_ARROW) {
|
|
||||||
error(JSMSG_LINE_BREAK_BEFORE_ARROW);
|
|
||||||
return null();
|
|
||||||
}
|
|
||||||
|
|
||||||
tokenStream.seek(start);
|
tokenStream.seek(start);
|
||||||
|
|
||||||
|
TokenKind next;
|
||||||
if (!tokenStream.getToken(&next, TokenStream::Operand))
|
if (!tokenStream.getToken(&next, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
uint32_t toStringStart = pos().begin;
|
uint32_t toStringStart = pos().begin;
|
||||||
|
|
@ -8111,7 +8102,25 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||||
|
|
||||||
return functionDefinition(pn, toStringStart, inHandling, yieldHandling, nullptr,
|
return functionDefinition(pn, toStringStart, inHandling, yieldHandling, nullptr,
|
||||||
Arrow, GeneratorKind::NotGenerator, asyncKind);
|
Arrow, GeneratorKind::NotGenerator, asyncKind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MOZ_ALWAYS_TRUE(tokenStream.getToken(&tokenAfterLHS, TokenStream::Operand));
|
||||||
|
|
||||||
|
ParseNodeKind kind;
|
||||||
|
switch (tokenAfterLHS) {
|
||||||
|
case TOK_ASSIGN: kind = PNK_ASSIGN; break;
|
||||||
|
case TOK_ADDASSIGN: kind = PNK_ADDASSIGN; break;
|
||||||
|
case TOK_SUBASSIGN: kind = PNK_SUBASSIGN; break;
|
||||||
|
case TOK_BITORASSIGN: kind = PNK_BITORASSIGN; break;
|
||||||
|
case TOK_BITXORASSIGN: kind = PNK_BITXORASSIGN; break;
|
||||||
|
case TOK_BITANDASSIGN: kind = PNK_BITANDASSIGN; break;
|
||||||
|
case TOK_LSHASSIGN: kind = PNK_LSHASSIGN; break;
|
||||||
|
case TOK_RSHASSIGN: kind = PNK_RSHASSIGN; break;
|
||||||
|
case TOK_URSHASSIGN: kind = PNK_URSHASSIGN; break;
|
||||||
|
case TOK_MULASSIGN: kind = PNK_MULASSIGN; break;
|
||||||
|
case TOK_DIVASSIGN: kind = PNK_DIVASSIGN; break;
|
||||||
|
case TOK_MODASSIGN: kind = PNK_MODASSIGN; break;
|
||||||
|
case TOK_POWASSIGN: kind = PNK_POWASSIGN; break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
MOZ_ASSERT(!tokenStream.isCurrentTokenAssignment());
|
MOZ_ASSERT(!tokenStream.isCurrentTokenAssignment());
|
||||||
|
|
@ -8123,7 +8132,6 @@ Parser<ParseHandler, CharT>::assignExpr(InHandling inHandling, YieldHandling yie
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenStream.ungetToken();
|
tokenStream.ungetToken();
|
||||||
tokenStream.addModifierException(TokenStream::OperandIsNone);
|
|
||||||
return lhs;
|
return lhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -8711,7 +8719,7 @@ Parser<ParseHandler, CharT>::argumentList(YieldHandling yieldHandling, Node list
|
||||||
handler.addList(listNode, argNode);
|
handler.addList(listNode, argNode);
|
||||||
|
|
||||||
bool matched;
|
bool matched;
|
||||||
if (!tokenStream.matchToken(&matched, TOK_COMMA))
|
if (!tokenStream.matchToken(&matched, TOK_COMMA, TokenStream::Operand))
|
||||||
return false;
|
return false;
|
||||||
if (!matched)
|
if (!matched)
|
||||||
break;
|
break;
|
||||||
|
|
@ -8719,13 +8727,11 @@ Parser<ParseHandler, CharT>::argumentList(YieldHandling yieldHandling, Node list
|
||||||
TokenKind tt;
|
TokenKind tt;
|
||||||
if (!tokenStream.peekToken(&tt, TokenStream::Operand))
|
if (!tokenStream.peekToken(&tt, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
if (tt == TOK_RP) {
|
if (tt == TOK_RP)
|
||||||
tokenStream.addModifierException(TokenStream::NoneIsOperand);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MUST_MATCH_TOKEN(TOK_RP, JSMSG_PAREN_AFTER_ARGS);
|
MUST_MATCH_TOKEN_MOD(TOK_RP, TokenStream::Operand, JSMSG_PAREN_AFTER_ARGS);
|
||||||
|
|
||||||
handler.setEndPosition(listNode, pos().end);
|
handler.setEndPosition(listNode, pos().end);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -9593,15 +9599,18 @@ Parser<ParseHandler, CharT>::propertyName(YieldHandling yieldHandling,
|
||||||
error(JSMSG_BAD_PROP_ID);
|
error(JSMSG_BAD_PROP_ID);
|
||||||
return null();
|
return null();
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenStream.ungetToken();
|
tokenStream.ungetToken();
|
||||||
*propType = tt == TOK_ASSIGN ?
|
tokenStream.addModifierException(TokenStream::OperandIsNone);
|
||||||
PropertyType::CoverInitializedName :
|
*propType = tt == TOK_ASSIGN
|
||||||
PropertyType::Shorthand;
|
? PropertyType::CoverInitializedName
|
||||||
|
: PropertyType::Shorthand;
|
||||||
return propName;
|
return propName;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tt == TOK_LP) {
|
if (tt == TOK_LP) {
|
||||||
tokenStream.ungetToken();
|
tokenStream.ungetToken();
|
||||||
|
|
||||||
if (isGenerator && isAsync)
|
if (isGenerator && isAsync)
|
||||||
*propType = PropertyType::AsyncGeneratorMethod;
|
*propType = PropertyType::AsyncGeneratorMethod;
|
||||||
else if (isGenerator)
|
else if (isGenerator)
|
||||||
|
|
@ -9638,7 +9647,7 @@ Parser<ParseHandler, CharT>::computedPropertyName(YieldHandling yieldHandling,
|
||||||
if (!assignNode)
|
if (!assignNode)
|
||||||
return null();
|
return null();
|
||||||
|
|
||||||
MUST_MATCH_TOKEN(TOK_RB, JSMSG_COMP_PROP_UNTERM_EXPR);
|
MUST_MATCH_TOKEN_MOD(TOK_RB, TokenStream::Operand, JSMSG_COMP_PROP_UNTERM_EXPR);
|
||||||
return handler.newComputedName(assignNode, begin, pos().end);
|
return handler.newComputedName(assignNode, begin, pos().end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -9663,8 +9672,10 @@ Parser<ParseHandler, CharT>::objectLiteral(YieldHandling yieldHandling,
|
||||||
TokenKind tt;
|
TokenKind tt;
|
||||||
if (!tokenStream.peekToken(&tt))
|
if (!tokenStream.peekToken(&tt))
|
||||||
return null();
|
return null();
|
||||||
if (tt == TOK_RC)
|
if (tt == TOK_RC) {
|
||||||
|
tokenStream.addModifierException(TokenStream::OperandIsNone);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (tt == TOK_TRIPLEDOT) {
|
if (tt == TOK_TRIPLEDOT) {
|
||||||
tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
|
tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
|
||||||
|
|
@ -9850,7 +9861,7 @@ Parser<ParseHandler, CharT>::objectLiteral(YieldHandling yieldHandling,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool matched;
|
bool matched;
|
||||||
if (!tokenStream.matchToken(&matched, TOK_COMMA))
|
if (!tokenStream.matchToken(&matched, TOK_COMMA, TokenStream::Operand))
|
||||||
return null();
|
return null();
|
||||||
if (!matched)
|
if (!matched)
|
||||||
break;
|
break;
|
||||||
|
|
@ -9858,7 +9869,7 @@ Parser<ParseHandler, CharT>::objectLiteral(YieldHandling yieldHandling,
|
||||||
possibleError->setPendingDestructuringErrorAt(pos(), JSMSG_REST_WITH_COMMA);
|
possibleError->setPendingDestructuringErrorAt(pos(), JSMSG_REST_WITH_COMMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::None,
|
MUST_MATCH_TOKEN_MOD_WITH_REPORT(TOK_RC, TokenStream::Operand,
|
||||||
reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
|
reportMissingClosing(JSMSG_CURLY_AFTER_LIST,
|
||||||
JSMSG_CURLY_OPENED, openedPos));
|
JSMSG_CURLY_OPENED, openedPos));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@ JS Trace Test Suite
|
||||||
|
|
||||||
* PURPOSE
|
* PURPOSE
|
||||||
|
|
||||||
This is a test suite for testing TraceMonkey. All tests are run in the JS shell
|
This is a test suite for testing the SpiderMonkey JIT. All tests are run in the JS shell
|
||||||
with tracing enabled (-j).
|
with tracing enabled (-j).
|
||||||
|
|
||||||
* REQUIREMENTS
|
* REQUIREMENTS
|
||||||
|
|
||||||
Python 2.5. This is already a standard requirement for building our tree.
|
Python 2.7. This is already a standard requirement for building our tree.
|
||||||
|
|
||||||
* RUNNING THE TESTS
|
* RUNNING THE TESTS
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,14 @@ JS Test Suite Readme
|
||||||
The JS test suite is a fairly extensive collection of correctness and regression
|
The JS test suite is a fairly extensive collection of correctness and regression
|
||||||
tests for the Spidermonkey engine. Two harnesses run these tests: the shell test
|
tests for the Spidermonkey engine. Two harnesses run these tests: the shell test
|
||||||
harness in this directory and the "reftest" harness built into the browser, used
|
harness in this directory and the "reftest" harness built into the browser, used
|
||||||
by Tinderbox. The browser reftests require additional manifest files; these are
|
in continuous integration. The browser reftests require additional manifest files; these are
|
||||||
generated automatically by the build phase 'package-tests' using the
|
generated automatically by the build phase 'package-tests' using the
|
||||||
'--make-manifests' option to jstests.py.
|
'--make-manifests' option to jstests.py.
|
||||||
|
|
||||||
Creating a test
|
Creating a test
|
||||||
---------------
|
---------------
|
||||||
For general information, see
|
For general information, see
|
||||||
https://developer.mozilla.org/en-US/docs/SpiderMonkey/Creating_JavaScript_tests
|
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Creating_JavaScript_tests
|
||||||
|
|
||||||
Adding a test
|
Adding a test
|
||||||
-------------
|
-------------
|
||||||
|
|
|
||||||
|
|
@ -8,12 +8,64 @@
|
||||||
|
|
||||||
assertEq(`x ${a => {}} z`, "x a => {} z");
|
assertEq(`x ${a => {}} z`, "x a => {} z");
|
||||||
|
|
||||||
|
for (a => {}; ; )
|
||||||
|
break;
|
||||||
|
|
||||||
for (; a => {}; )
|
for (; a => {}; )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
for (; ; a => {})
|
for (; ; a => {})
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Function.prototype[Symbol.iterator] = function() { return { next() { return { done: true }; } }; };
|
||||||
|
for (let m of 0 ? 1 : a => {})
|
||||||
|
assertEq(true, false);
|
||||||
|
for (let [m] of 0 ? 1 : a => {})
|
||||||
|
assertEq(true, false);
|
||||||
|
delete Function.prototype[Symbol.iterator];
|
||||||
|
|
||||||
|
for (let w in 0 ? 1 : a => {})
|
||||||
|
break;
|
||||||
|
for (let [w] in 0 ? 1 : a => {})
|
||||||
|
break;
|
||||||
|
|
||||||
|
function* stargen()
|
||||||
|
{
|
||||||
|
yield a => {}
|
||||||
|
/Q/g;
|
||||||
|
|
||||||
|
var first = true;
|
||||||
|
Function.prototype[Symbol.iterator] = function() {
|
||||||
|
return {
|
||||||
|
next() {
|
||||||
|
var res = { done: true, value: 8675309 };
|
||||||
|
if (first)
|
||||||
|
{
|
||||||
|
res = { value: "fnord", done: false };
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
yield* a => {}
|
||||||
|
/Q/g;
|
||||||
|
|
||||||
|
delete Function.prototype[Symbol.iterator];
|
||||||
|
|
||||||
|
yield 99;
|
||||||
|
}
|
||||||
|
var gen = stargen();
|
||||||
|
assertEq(typeof gen.next().value, "function");
|
||||||
|
var result = gen.next();
|
||||||
|
assertEq(result.value, "fnord");
|
||||||
|
assertEq(result.done, false);
|
||||||
|
assertEq(gen.next().value, 99);
|
||||||
|
assertEq(gen.next().done, true);
|
||||||
|
|
||||||
switch (1)
|
switch (1)
|
||||||
{
|
{
|
||||||
case a => {}:
|
case a => {}:
|
||||||
|
|
@ -53,15 +105,106 @@ switch (a => {})
|
||||||
with (a => {});
|
with (a => {});
|
||||||
|
|
||||||
assertEq(typeof (a => {}), "function");
|
assertEq(typeof (a => {}), "function");
|
||||||
|
assertEq(typeof (a => b => {}), "function");
|
||||||
|
|
||||||
for (var x in y => {})
|
for (var x in y => {})
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
assertEq(eval("a => {}, 17, 42;"), 42);
|
||||||
|
assertEq(eval("42, a => {}, 17;"), 17);
|
||||||
|
assertEq(typeof eval("17, 42, a => {};"), "function");
|
||||||
|
|
||||||
|
assertEq(eval("1 ? 0 : a => {}, 17, 42;"), 42);
|
||||||
|
assertEq(eval("42, 1 ? 0 : a => {}, 17;"), 17);
|
||||||
|
assertEq(eval("17, 42, 1 ? 0 : a => {};"), 0);
|
||||||
|
|
||||||
var z = { x: 0 ? 1 : async a => {} };
|
var z = { x: 0 ? 1 : async a => {} };
|
||||||
assertEq(typeof z.x, "function");
|
assertEq(typeof z.x, "function");
|
||||||
|
|
||||||
var q = 0 ? 1 : async () => {};
|
var q = 0 ? 1 : async () => {};
|
||||||
assertEq(typeof q, "function");
|
assertEq(typeof q, "function");
|
||||||
|
|
||||||
|
var m = 0 ? 42 : m = foo => {} // ASI
|
||||||
|
/Q/g;
|
||||||
|
assertEq(typeof m, "function");
|
||||||
|
|
||||||
|
var { q: w = 0 ? 1 : a => {} } = {};
|
||||||
|
assertEq(typeof w, "function");
|
||||||
|
|
||||||
|
Function.prototype.c = 42;
|
||||||
|
var { c } = 0 ? 1 : a => {} // ASI
|
||||||
|
/Q/g;
|
||||||
|
assertEq(c, 42);
|
||||||
|
|
||||||
|
var c = 0 ? 1 : a => {}
|
||||||
|
/Q/g;
|
||||||
|
assertEq(typeof c, "function");
|
||||||
|
delete Function.prototype.c;
|
||||||
|
|
||||||
|
assertEq(typeof eval(0 ? 1 : a => {}), "function");
|
||||||
|
|
||||||
|
var zoom = 1 ? a => {} : 357;
|
||||||
|
assertEq(typeof zoom, "function");
|
||||||
|
|
||||||
|
var { b = 0 ? 1 : a => {} } = {};
|
||||||
|
assertEq(typeof b, "function");
|
||||||
|
|
||||||
|
var [k = 0 ? 1 : a => {}] = [];
|
||||||
|
assertEq(typeof k, "function");
|
||||||
|
|
||||||
|
assertEq(typeof [0 ? 1 : a => {}][0], "function");
|
||||||
|
|
||||||
|
Function.prototype[Symbol.iterator] = function() { return { next() { return { done: true }; } }; };
|
||||||
|
assertEq([...0 ? 1 : a => {}].length, 0);
|
||||||
|
delete Function.prototype[Symbol.iterator];
|
||||||
|
|
||||||
|
var props = Object.getOwnPropertyNames({ ...0 ? 1 : a => {} }).sort();
|
||||||
|
assertEq(props.length, 0);
|
||||||
|
|
||||||
|
function f1(x = 0 ? 1 : a => {}) { return x; }
|
||||||
|
assertEq(typeof f1(), "function");
|
||||||
|
assertEq(f1(5), 5);
|
||||||
|
|
||||||
|
var g1 = (x = 0 ? 1 : a => {}) => { return x; };
|
||||||
|
assertEq(typeof g1(), "function");
|
||||||
|
assertEq(g1(5), 5);
|
||||||
|
|
||||||
|
var h1 = async (x = 0 ? 1 : a => {}) => { return x; };
|
||||||
|
assertEq(typeof h1, "function");
|
||||||
|
|
||||||
|
function f2(m, x = 0 ? 1 : a => {}) { return x; }
|
||||||
|
assertEq(typeof f2(1), "function");
|
||||||
|
assertEq(f2(1, 5), 5);
|
||||||
|
|
||||||
|
var g2 = (m, x = 0 ? 1 : a => {}) => { return x; };
|
||||||
|
assertEq(typeof g2(1), "function");
|
||||||
|
assertEq(g2(1, 5), 5);
|
||||||
|
|
||||||
|
var h2 = async (m, x = 0 ? 1 : a => {}) => { return x; };
|
||||||
|
assertEq(typeof h2, "function");
|
||||||
|
|
||||||
|
function f3(x = 0 ? 1 : a => {}, q) { return x; }
|
||||||
|
assertEq(typeof f3(), "function");
|
||||||
|
assertEq(f3(5), 5);
|
||||||
|
|
||||||
|
var g3 = (x = 0 ? 1 : a => {}, q) => { return x; };
|
||||||
|
assertEq(typeof g3(), "function");
|
||||||
|
assertEq(g3(5), 5);
|
||||||
|
|
||||||
|
var h3 = async (x = 0 ? 1 : a => {}, q) => { return x; };
|
||||||
|
assertEq(typeof h3, "function");
|
||||||
|
|
||||||
|
var asyncf = async () => {};
|
||||||
|
assertEq(typeof asyncf, "function");
|
||||||
|
|
||||||
|
var { [0 ? 1 : a => {}]: h } = { "a => {}": "boo-urns!" };
|
||||||
|
assertEq(h, "boo-urns!");
|
||||||
|
|
||||||
|
var gencomp = (for (prop of [0]) 0 ? 1 : a => {});
|
||||||
|
assertEq(typeof gencomp.next().value, "function");
|
||||||
|
|
||||||
|
var arrcomp = [for (prop of [0]) 0 ? 1 : a => {}];
|
||||||
|
assertEq(typeof arrcomp[0], "function");
|
||||||
|
|
||||||
if (typeof reportCompare === "function")
|
if (typeof reportCompare === "function")
|
||||||
reportCompare(true, true);
|
reportCompare(true, true);
|
||||||
|
|
|
||||||
32
js/src/tests/ecma_6/Comprehensions/inside-derived-class.js
Normal file
32
js/src/tests/ecma_6/Comprehensions/inside-derived-class.js
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
* Any copyright is dedicated to the Public Domain.
|
||||||
|
* http://creativecommons.org/licenses/publicdomain/
|
||||||
|
*/
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
var BUGNUMBER = 1299519;
|
||||||
|
var summary =
|
||||||
|
"Generator comprehension lambdas in derived constructors shouldn't assert";
|
||||||
|
|
||||||
|
print(BUGNUMBER + ": " + summary);
|
||||||
|
|
||||||
|
/**************
|
||||||
|
* BEGIN TEST *
|
||||||
|
**************/
|
||||||
|
|
||||||
|
class Base {};
|
||||||
|
|
||||||
|
class Derived extends Base
|
||||||
|
{
|
||||||
|
constructor() {
|
||||||
|
var a = (for (_ of []) _);
|
||||||
|
var b = [for (_ of []) _];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
if (typeof reportCompare === "function")
|
||||||
|
reportCompare(true, true);
|
||||||
|
|
||||||
|
print("Tests complete");
|
||||||
|
|
@ -269,7 +269,7 @@ AccessibleCaret::RemoveCaretElement(nsIDocument* aDocument)
|
||||||
frame = frame->GetPlaceholderFrame();
|
frame = frame->GetPlaceholderFrame();
|
||||||
}
|
}
|
||||||
nsAutoScriptBlocker scriptBlocker;
|
nsAutoScriptBlocker scriptBlocker;
|
||||||
nsCSSFrameConstructor* fc = frame->PresContext()->PresShell()->FrameConstructor();
|
nsCSSFrameConstructor* fc = frame->PresShell()->FrameConstructor();
|
||||||
fc->BeginUpdate();
|
fc->BeginUpdate();
|
||||||
frame->GetParent()->RemoveFrame(nsIFrame::kPrincipalList, frame);
|
frame->GetParent()->RemoveFrame(nsIFrame::kPrincipalList, frame);
|
||||||
fc->EndUpdate();
|
fc->EndUpdate();
|
||||||
|
|
|
||||||
|
|
@ -584,7 +584,7 @@ FindFrameTargetedByInputEvent(WidgetGUIEvent* aEvent,
|
||||||
// never be targeted --- something nsSubDocumentFrame in an ancestor document
|
// never be targeted --- something nsSubDocumentFrame in an ancestor document
|
||||||
// would be targeted instead.
|
// would be targeted instead.
|
||||||
nsIFrame* restrictToDescendants = target ?
|
nsIFrame* restrictToDescendants = target ?
|
||||||
target->PresContext()->PresShell()->GetRootFrame() : aRootFrame;
|
target->PresShell()->GetRootFrame() : aRootFrame;
|
||||||
|
|
||||||
nsRect targetRect = GetTargetRect(aRootFrame, aPointRelativeToRootFrame,
|
nsRect targetRect = GetTargetRect(aRootFrame, aPointRelativeToRootFrame,
|
||||||
restrictToDescendants, prefs, aFlags);
|
restrictToDescendants, prefs, aFlags);
|
||||||
|
|
|
||||||
|
|
@ -5277,7 +5277,7 @@ PresShell::AddCanvasBackgroundColorItem(nsDisplayListBuilder& aBuilder,
|
||||||
bool addedScrollingBackgroundColor = (aFlags & APPEND_UNSCROLLED_ONLY);
|
bool addedScrollingBackgroundColor = (aFlags & APPEND_UNSCROLLED_ONLY);
|
||||||
if (!aFrame->GetParent() && !addedScrollingBackgroundColor) {
|
if (!aFrame->GetParent() && !addedScrollingBackgroundColor) {
|
||||||
nsIScrollableFrame* sf =
|
nsIScrollableFrame* sf =
|
||||||
aFrame->PresContext()->PresShell()->GetRootScrollFrameAsScrollable();
|
aFrame->PresShell()->GetRootScrollFrameAsScrollable();
|
||||||
if (sf) {
|
if (sf) {
|
||||||
nsCanvasFrame* canvasFrame = do_QueryFrame(sf->GetScrolledFrame());
|
nsCanvasFrame* canvasFrame = do_QueryFrame(sf->GetScrolledFrame());
|
||||||
if (canvasFrame && canvasFrame->IsVisibleForPainting(&aBuilder)) {
|
if (canvasFrame && canvasFrame->IsVisibleForPainting(&aBuilder)) {
|
||||||
|
|
@ -5566,7 +5566,7 @@ static nsView* FindFloatingViewContaining(nsView* aView, nsPoint aPt)
|
||||||
nsIFrame* frame = aView->GetFrame();
|
nsIFrame* frame = aView->GetFrame();
|
||||||
if (frame) {
|
if (frame) {
|
||||||
if (!frame->IsVisibleConsideringAncestors(nsIFrame::VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY) ||
|
if (!frame->IsVisibleConsideringAncestors(nsIFrame::VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY) ||
|
||||||
!frame->PresContext()->PresShell()->IsActive()) {
|
!frame->PresShell()->IsActive()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5603,7 +5603,7 @@ static nsView* FindViewContaining(nsView* aView, nsPoint aPt)
|
||||||
nsIFrame* frame = aView->GetFrame();
|
nsIFrame* frame = aView->GetFrame();
|
||||||
if (frame) {
|
if (frame) {
|
||||||
if (!frame->IsVisibleConsideringAncestors(nsIFrame::VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY) ||
|
if (!frame->IsVisibleConsideringAncestors(nsIFrame::VISIBILITY_CROSS_CHROME_CONTENT_BOUNDARY) ||
|
||||||
!frame->PresContext()->PresShell()->IsActive()) {
|
!frame->PresShell()->IsActive()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5785,7 +5785,7 @@ PresShell::MarkFramesInListApproximatelyVisible(const nsDisplayList& aList,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the presshell containing the frame.
|
// Use the presshell containing the frame.
|
||||||
auto* presShell = static_cast<PresShell*>(frame->PresContext()->PresShell());
|
auto* presShell = static_cast<PresShell*>(frame->PresShell());
|
||||||
MOZ_ASSERT(!presShell->AssumeAllFramesVisible());
|
MOZ_ASSERT(!presShell->AssumeAllFramesVisible());
|
||||||
if (presShell->mApproximatelyVisibleFrames.EnsureInserted(frame)) {
|
if (presShell->mApproximatelyVisibleFrames.EnsureInserted(frame)) {
|
||||||
// The frame was added to mApproximatelyVisibleFrames, so increment its visible count.
|
// The frame was added to mApproximatelyVisibleFrames, so increment its visible count.
|
||||||
|
|
@ -5919,7 +5919,7 @@ PresShell::MarkFramesInSubtreeApproximatelyVisible(nsIFrame* aFrame,
|
||||||
Maybe<VisibleRegions>& aVisibleRegions,
|
Maybe<VisibleRegions>& aVisibleRegions,
|
||||||
bool aRemoveOnly /* = false */)
|
bool aRemoveOnly /* = false */)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aFrame->PresContext()->PresShell() == this, "wrong presshell");
|
MOZ_ASSERT(aFrame->PresShell() == this, "wrong presshell");
|
||||||
|
|
||||||
if (aFrame->TrackingVisibility() &&
|
if (aFrame->TrackingVisibility() &&
|
||||||
aFrame->StyleVisibility()->IsVisible() &&
|
aFrame->StyleVisibility()->IsVisible() &&
|
||||||
|
|
@ -7266,8 +7266,7 @@ PresShell::HandleEvent(nsIFrame* aFrame,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
PresShell* shell =
|
PresShell* shell = static_cast<PresShell*>(frame->PresShell());
|
||||||
static_cast<PresShell*>(frame->PresContext()->PresShell());
|
|
||||||
switch (aEvent->mMessage) {
|
switch (aEvent->mMessage) {
|
||||||
case eTouchMove:
|
case eTouchMove:
|
||||||
case eTouchCancel:
|
case eTouchCancel:
|
||||||
|
|
@ -7296,8 +7295,7 @@ PresShell::HandleEvent(nsIFrame* aFrame,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
shell = static_cast<PresShell*>(
|
shell = static_cast<PresShell*>(contentFrame->PresShell());
|
||||||
contentFrame->PresContext()->PresShell());
|
|
||||||
if (shell) {
|
if (shell) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -728,6 +728,16 @@ RecomputePosition(nsIFrame* aFrame)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Flexbox and Grid layout supports CSS Align and the optimizations below
|
||||||
|
// don't support that yet.
|
||||||
|
if (aFrame->HasAnyStateBits(NS_FRAME_OUT_OF_FLOW)) {
|
||||||
|
nsIFrame* ph = aFrame->GetPlaceholderFrame();
|
||||||
|
if (ph && ph->HasAnyStateBits(PLACEHOLDER_STATICPOS_NEEDS_CSSALIGN)) {
|
||||||
|
StyleChangeReflow(aFrame, nsChangeHint_NeedReflow);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
aFrame->SchedulePaint();
|
aFrame->SchedulePaint();
|
||||||
|
|
||||||
// For relative positioning, we can simply update the frame rect
|
// For relative positioning, we can simply update the frame rect
|
||||||
|
|
@ -797,7 +807,7 @@ RecomputePosition(nsIFrame* aFrame)
|
||||||
// doesn't need to change, we can simply update the frame position. Otherwise
|
// doesn't need to change, we can simply update the frame position. Otherwise
|
||||||
// we fall back to a reflow.
|
// we fall back to a reflow.
|
||||||
RefPtr<gfxContext> rc =
|
RefPtr<gfxContext> rc =
|
||||||
aFrame->PresContext()->PresShell()->CreateReferenceRenderingContext();
|
aFrame->PresShell()->CreateReferenceRenderingContext();
|
||||||
|
|
||||||
// Construct a bogus parent reflow state so that there's a usable
|
// Construct a bogus parent reflow state so that there's a usable
|
||||||
// containing block reflow state.
|
// containing block reflow state.
|
||||||
|
|
@ -1235,7 +1245,7 @@ StyleChangeReflow(nsIFrame* aFrame, nsChangeHint aHint)
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
aFrame->PresContext()->PresShell()->FrameNeedsReflow(
|
aFrame->PresShell()->FrameNeedsReflow(
|
||||||
aFrame, dirtyType, dirtyBits, rootHandling);
|
aFrame, dirtyType, dirtyBits, rootHandling);
|
||||||
aFrame = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(aFrame);
|
aFrame = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(aFrame);
|
||||||
} while (aFrame);
|
} while (aFrame);
|
||||||
|
|
|
||||||
|
|
@ -855,7 +855,7 @@ GetScrollFrameFromContent(nsIContent* aContent)
|
||||||
{
|
{
|
||||||
nsIFrame* frame = aContent->GetPrimaryFrame();
|
nsIFrame* frame = aContent->GetPrimaryFrame();
|
||||||
if (aContent->OwnerDoc()->GetRootElement() == aContent) {
|
if (aContent->OwnerDoc()->GetRootElement() == aContent) {
|
||||||
nsIPresShell* presShell = frame ? frame->PresContext()->PresShell() : nullptr;
|
nsIPresShell* presShell = frame ? frame->PresShell() : nullptr;
|
||||||
if (!presShell) {
|
if (!presShell) {
|
||||||
presShell = aContent->OwnerDoc()->GetShell();
|
presShell = aContent->OwnerDoc()->GetShell();
|
||||||
}
|
}
|
||||||
|
|
@ -2176,7 +2176,7 @@ nsLayoutUtils::GetNearestScrollableFrame(nsIFrame* aFrame, uint32_t aFlags)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (aFlags & SCROLLABLE_ALWAYS_MATCH_ROOT) {
|
if (aFlags & SCROLLABLE_ALWAYS_MATCH_ROOT) {
|
||||||
nsIPresShell* ps = f->PresContext()->PresShell();
|
nsIPresShell* ps = f->PresShell();
|
||||||
if (ps->GetRootScrollFrame() == f &&
|
if (ps->GetRootScrollFrame() == f &&
|
||||||
ps->GetDocument() && ps->GetDocument()->IsRootDisplayDocument()) {
|
ps->GetDocument() && ps->GetDocument()->IsRootDisplayDocument()) {
|
||||||
return scrollableFrame;
|
return scrollableFrame;
|
||||||
|
|
@ -2186,7 +2186,7 @@ nsLayoutUtils::GetNearestScrollableFrame(nsIFrame* aFrame, uint32_t aFlags)
|
||||||
if ((aFlags & SCROLLABLE_FIXEDPOS_FINDS_ROOT) &&
|
if ((aFlags & SCROLLABLE_FIXEDPOS_FINDS_ROOT) &&
|
||||||
f->StyleDisplay()->mPosition == NS_STYLE_POSITION_FIXED &&
|
f->StyleDisplay()->mPosition == NS_STYLE_POSITION_FIXED &&
|
||||||
nsLayoutUtils::IsReallyFixedPos(f)) {
|
nsLayoutUtils::IsReallyFixedPos(f)) {
|
||||||
return f->PresContext()->PresShell()->GetRootScrollFrameAsScrollable();
|
return f->PresShell()->GetRootScrollFrameAsScrollable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
@ -2376,7 +2376,7 @@ nsLayoutUtils::GetEventCoordinatesRelativeTo(nsIWidget* aWidget,
|
||||||
int32_t rootAPD = rootFrame->PresContext()->AppUnitsPerDevPixel();
|
int32_t rootAPD = rootFrame->PresContext()->AppUnitsPerDevPixel();
|
||||||
int32_t localAPD = aFrame->PresContext()->AppUnitsPerDevPixel();
|
int32_t localAPD = aFrame->PresContext()->AppUnitsPerDevPixel();
|
||||||
widgetToView = widgetToView.ScaleToOtherAppUnits(rootAPD, localAPD);
|
widgetToView = widgetToView.ScaleToOtherAppUnits(rootAPD, localAPD);
|
||||||
nsIPresShell* shell = aFrame->PresContext()->PresShell();
|
nsIPresShell* shell = aFrame->PresShell();
|
||||||
|
|
||||||
// XXX Bug 1224748 - Update nsLayoutUtils functions to correctly handle nsPresShell resolution
|
// XXX Bug 1224748 - Update nsLayoutUtils functions to correctly handle nsPresShell resolution
|
||||||
widgetToView = widgetToView.RemoveResolution(GetCurrentAPZResolutionScale(shell));
|
widgetToView = widgetToView.RemoveResolution(GetCurrentAPZResolutionScale(shell));
|
||||||
|
|
@ -2777,7 +2777,7 @@ nsLayoutUtils::FindNearestCommonAncestorFrame(nsIFrame* aFrame1, nsIFrame* aFram
|
||||||
AutoTArray<nsIFrame*,100> ancestors2;
|
AutoTArray<nsIFrame*,100> ancestors2;
|
||||||
nsIFrame* commonAncestor = nullptr;
|
nsIFrame* commonAncestor = nullptr;
|
||||||
if (aFrame1->PresContext() == aFrame2->PresContext()) {
|
if (aFrame1->PresContext() == aFrame2->PresContext()) {
|
||||||
commonAncestor = aFrame1->PresContext()->PresShell()->GetRootFrame();
|
commonAncestor = aFrame1->PresShell()->GetRootFrame();
|
||||||
}
|
}
|
||||||
for (nsIFrame* f = aFrame1; f != commonAncestor;
|
for (nsIFrame* f = aFrame1; f != commonAncestor;
|
||||||
f = nsLayoutUtils::GetCrossDocParentFrame(f)) {
|
f = nsLayoutUtils::GetCrossDocParentFrame(f)) {
|
||||||
|
|
@ -3278,8 +3278,7 @@ nsLayoutUtils::GetFramesForArea(nsIFrame* aFrame, const nsRect& aRect,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aFlags & IGNORE_ROOT_SCROLL_FRAME) {
|
if (aFlags & IGNORE_ROOT_SCROLL_FRAME) {
|
||||||
nsIFrame* rootScrollFrame =
|
nsIFrame* rootScrollFrame = aFrame->PresShell()->GetRootScrollFrame();
|
||||||
aFrame->PresContext()->PresShell()->GetRootScrollFrame();
|
|
||||||
if (rootScrollFrame) {
|
if (rootScrollFrame) {
|
||||||
builder.SetIgnoreScrollFrame(rootScrollFrame);
|
builder.SetIgnoreScrollFrame(rootScrollFrame);
|
||||||
}
|
}
|
||||||
|
|
@ -3460,11 +3459,11 @@ nsLayoutUtils::SetZeroMarginDisplayPortOnAsyncScrollableAncestors(nsIFrame* aFra
|
||||||
frame = do_QueryFrame(scrollAncestor);
|
frame = do_QueryFrame(scrollAncestor);
|
||||||
MOZ_ASSERT(frame);
|
MOZ_ASSERT(frame);
|
||||||
MOZ_ASSERT(scrollAncestor->WantAsyncScroll() ||
|
MOZ_ASSERT(scrollAncestor->WantAsyncScroll() ||
|
||||||
frame->PresContext()->PresShell()->GetRootScrollFrame() == frame);
|
frame->PresShell()->GetRootScrollFrame() == frame);
|
||||||
if (nsLayoutUtils::AsyncPanZoomEnabled(frame) &&
|
if (nsLayoutUtils::AsyncPanZoomEnabled(frame) &&
|
||||||
!nsLayoutUtils::HasDisplayPort(frame->GetContent())) {
|
!nsLayoutUtils::HasDisplayPort(frame->GetContent())) {
|
||||||
nsLayoutUtils::SetDisplayPortMargins(
|
nsLayoutUtils::SetDisplayPortMargins(
|
||||||
frame->GetContent(), frame->PresContext()->PresShell(), ScreenMargin(), 0,
|
frame->GetContent(), frame->PresShell(), ScreenMargin(), 0,
|
||||||
aRepaintMode);
|
aRepaintMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3533,7 +3532,7 @@ nsLayoutUtils::ExpireDisplayPortOnAsyncScrollableAncestor(nsIFrame* aFrame)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
MOZ_ASSERT(scrollAncestor->WantAsyncScroll() ||
|
MOZ_ASSERT(scrollAncestor->WantAsyncScroll() ||
|
||||||
frame->PresContext()->PresShell()->GetRootScrollFrame() == frame);
|
frame->PresShell()->GetRootScrollFrame() == frame);
|
||||||
if (nsLayoutUtils::HasDisplayPort(frame->GetContent())) {
|
if (nsLayoutUtils::HasDisplayPort(frame->GetContent())) {
|
||||||
scrollAncestor->TriggerDisplayPortExpiration();
|
scrollAncestor->TriggerDisplayPortExpiration();
|
||||||
// Stop after the first trigger. If it failed, there's no point in
|
// Stop after the first trigger. If it failed, there's no point in
|
||||||
|
|
@ -4283,7 +4282,7 @@ void nsLayoutUtils::RectListBuilder::AddRect(const nsRect& aRect) {
|
||||||
|
|
||||||
nsIFrame* nsLayoutUtils::GetContainingBlockForClientRect(nsIFrame* aFrame)
|
nsIFrame* nsLayoutUtils::GetContainingBlockForClientRect(nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
return aFrame->PresContext()->PresShell()->GetRootFrame();
|
return aFrame->PresShell()->GetRootFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect
|
nsRect
|
||||||
|
|
@ -4763,8 +4762,7 @@ nsLayoutUtils::IsViewportScrollbarFrame(nsIFrame* aFrame)
|
||||||
if (!aFrame)
|
if (!aFrame)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
nsIFrame* rootScrollFrame =
|
nsIFrame* rootScrollFrame = aFrame->PresShell()->GetRootScrollFrame();
|
||||||
aFrame->PresContext()->PresShell()->GetRootScrollFrame();
|
|
||||||
if (!rootScrollFrame)
|
if (!rootScrollFrame)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
@ -6489,7 +6487,7 @@ nsLayoutUtils::GetClosestLayer(nsIFrame* aFrame)
|
||||||
}
|
}
|
||||||
if (layer)
|
if (layer)
|
||||||
return layer;
|
return layer;
|
||||||
return aFrame->PresContext()->PresShell()->FrameManager()->GetRootFrame();
|
return aFrame->PresShell()->FrameManager()->GetRootFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
SamplingFilter
|
SamplingFilter
|
||||||
|
|
@ -8834,13 +8832,13 @@ nsLayoutUtils::CalculateExpandedScrollableRect(nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
nsRect scrollableRect =
|
nsRect scrollableRect =
|
||||||
CalculateScrollableRectForFrame(aFrame->GetScrollTargetFrame(),
|
CalculateScrollableRectForFrame(aFrame->GetScrollTargetFrame(),
|
||||||
aFrame->PresContext()->PresShell()->GetRootFrame());
|
aFrame->PresShell()->GetRootFrame());
|
||||||
nsSize compSize = CalculateCompositionSizeForFrame(aFrame);
|
nsSize compSize = CalculateCompositionSizeForFrame(aFrame);
|
||||||
|
|
||||||
if (aFrame == aFrame->PresContext()->PresShell()->GetRootScrollFrame()) {
|
if (aFrame == aFrame->PresShell()->GetRootScrollFrame()) {
|
||||||
// the composition size for the root scroll frame does not include the
|
// the composition size for the root scroll frame does not include the
|
||||||
// local resolution, so we adjust.
|
// local resolution, so we adjust.
|
||||||
float res = aFrame->PresContext()->PresShell()->GetResolution();
|
float res = aFrame->PresShell()->GetResolution();
|
||||||
compSize.width = NSToCoordRound(compSize.width / res);
|
compSize.width = NSToCoordRound(compSize.width / res);
|
||||||
compSize.height = NSToCoordRound(compSize.height / res);
|
compSize.height = NSToCoordRound(compSize.height / res);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -552,7 +552,7 @@ public:
|
||||||
static_cast<nsComboboxControlFrame*>(mFrame.GetFrame());
|
static_cast<nsComboboxControlFrame*>(mFrame.GetFrame());
|
||||||
static_cast<nsListControlFrame*>(combo->mDropdownFrame)->
|
static_cast<nsListControlFrame*>(combo->mDropdownFrame)->
|
||||||
SetSuppressScrollbarUpdate(true);
|
SetSuppressScrollbarUpdate(true);
|
||||||
nsCOMPtr<nsIPresShell> shell = mFrame->PresContext()->PresShell();
|
nsCOMPtr<nsIPresShell> shell = mFrame->PresShell();
|
||||||
shell->FrameNeedsReflow(combo->mDropdownFrame, nsIPresShell::eResize,
|
shell->FrameNeedsReflow(combo->mDropdownFrame, nsIPresShell::eResize,
|
||||||
NS_FRAME_IS_DIRTY);
|
NS_FRAME_IS_DIRTY);
|
||||||
shell->FlushPendingNotifications(FlushType::Layout);
|
shell->FlushPendingNotifications(FlushType::Layout);
|
||||||
|
|
@ -1046,7 +1046,7 @@ nsComboboxControlFrame::HandleRedisplayTextEvent()
|
||||||
|
|
||||||
ActuallyDisplayText(true);
|
ActuallyDisplayText(true);
|
||||||
// XXXbz This should perhaps be eResize. Check.
|
// XXXbz This should perhaps be eResize. Check.
|
||||||
PresContext()->PresShell()->FrameNeedsReflow(mDisplayFrame,
|
PresShell()->FrameNeedsReflow(mDisplayFrame,
|
||||||
nsIPresShell::eStyleChange,
|
nsIPresShell::eStyleChange,
|
||||||
NS_FRAME_IS_DIRTY);
|
NS_FRAME_IS_DIRTY);
|
||||||
|
|
||||||
|
|
@ -1364,7 +1364,7 @@ nsComboboxControlFrame::CreateFrameForDisplayNode()
|
||||||
MOZ_ASSERT(mDisplayContent);
|
MOZ_ASSERT(mDisplayContent);
|
||||||
|
|
||||||
// Get PresShell
|
// Get PresShell
|
||||||
nsIPresShell *shell = PresContext()->PresShell();
|
nsIPresShell *shell = PresShell();
|
||||||
StyleSetHandle styleSet = shell->StyleSet();
|
StyleSetHandle styleSet = shell->StyleSet();
|
||||||
|
|
||||||
// create the style contexts for the anonymous block frame and text frame
|
// create the style contexts for the anonymous block frame and text frame
|
||||||
|
|
|
||||||
|
|
@ -1982,7 +1982,7 @@ nsListControlFrame::ScrollToFrame(dom::HTMLOptionElement& aOptElement)
|
||||||
// otherwise we find the content's frame and scroll to it
|
// otherwise we find the content's frame and scroll to it
|
||||||
nsIFrame* childFrame = aOptElement.GetPrimaryFrame();
|
nsIFrame* childFrame = aOptElement.GetPrimaryFrame();
|
||||||
if (childFrame) {
|
if (childFrame) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
ScrollFrameRectIntoView(childFrame,
|
ScrollFrameRectIntoView(childFrame,
|
||||||
nsRect(nsPoint(0, 0), childFrame->GetSize()),
|
nsRect(nsPoint(0, 0), childFrame->GetSize()),
|
||||||
nsIPresShell::ScrollAxis(), nsIPresShell::ScrollAxis(),
|
nsIPresShell::ScrollAxis(), nsIPresShell::ScrollAxis(),
|
||||||
|
|
|
||||||
|
|
@ -200,9 +200,8 @@ nsMeterFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
aAttribute == nsGkAtoms::min )) {
|
aAttribute == nsGkAtoms::min )) {
|
||||||
nsIFrame* barFrame = mBarDiv->GetPrimaryFrame();
|
nsIFrame* barFrame = mBarDiv->GetPrimaryFrame();
|
||||||
NS_ASSERTION(barFrame, "The meter frame should have a child with a frame!");
|
NS_ASSERTION(barFrame, "The meter frame should have a child with a frame!");
|
||||||
PresContext()->PresShell()->FrameNeedsReflow(barFrame,
|
PresShell()->FrameNeedsReflow(barFrame, nsIPresShell::eResize,
|
||||||
nsIPresShell::eResize,
|
NS_FRAME_IS_DIRTY);
|
||||||
NS_FRAME_IS_DIRTY);
|
|
||||||
InvalidateFrame();
|
InvalidateFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -212,7 +212,7 @@ nsProgressFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
|
|
||||||
if (aNameSpaceID == kNameSpaceID_None &&
|
if (aNameSpaceID == kNameSpaceID_None &&
|
||||||
(aAttribute == nsGkAtoms::value || aAttribute == nsGkAtoms::max)) {
|
(aAttribute == nsGkAtoms::value || aAttribute == nsGkAtoms::max)) {
|
||||||
auto shell = PresContext()->PresShell();
|
auto shell = PresShell();
|
||||||
for (auto childFrame : PrincipalChildList()) {
|
for (auto childFrame : PrincipalChildList()) {
|
||||||
shell->FrameNeedsReflow(childFrame, nsIPresShell::eResize,
|
shell->FrameNeedsReflow(childFrame, nsIPresShell::eResize,
|
||||||
NS_FRAME_IS_DIRTY);
|
NS_FRAME_IS_DIRTY);
|
||||||
|
|
|
||||||
|
|
@ -630,7 +630,7 @@ nsRangeFrame::UpdateForValueChange()
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
nsAccessibilityService* accService = nsIPresShell::AccService();
|
nsAccessibilityService* accService = nsIPresShell::AccService();
|
||||||
if (accService) {
|
if (accService) {
|
||||||
accService->RangeValueChanged(PresContext()->PresShell(), mContent);
|
accService->RangeValueChanged(PresShell(), mContent);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -760,8 +760,8 @@ nsRangeFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
UpdateForValueChange();
|
UpdateForValueChange();
|
||||||
}
|
}
|
||||||
} else if (aAttribute == nsGkAtoms::orient) {
|
} else if (aAttribute == nsGkAtoms::orient) {
|
||||||
PresContext()->PresShell()->FrameNeedsReflow(this, nsIPresShell::eResize,
|
PresShell()->FrameNeedsReflow(this, nsIPresShell::eResize,
|
||||||
NS_FRAME_IS_DIRTY);
|
NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ public:
|
||||||
virtual already_AddRefed<DrawTarget> GetRefDrawTarget() override
|
virtual already_AddRefed<DrawTarget> GetRefDrawTarget() override
|
||||||
{
|
{
|
||||||
RefPtr<gfxContext> ctx =
|
RefPtr<gfxContext> ctx =
|
||||||
mFrame->PresContext()->PresShell()->CreateReferenceRenderingContext();
|
mFrame->PresShell()->CreateReferenceRenderingContext();
|
||||||
RefPtr<DrawTarget> dt = ctx->GetDrawTarget();
|
RefPtr<DrawTarget> dt = ctx->GetDrawTarget();
|
||||||
return dt.forget();
|
return dt.forget();
|
||||||
}
|
}
|
||||||
|
|
@ -822,7 +822,7 @@ TextOverflow::CanHaveTextOverflow(nsIFrame* aBlockFrame)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inhibit the markers if a descendant content owns the caret.
|
// Inhibit the markers if a descendant content owns the caret.
|
||||||
RefPtr<nsCaret> caret = aBlockFrame->PresContext()->PresShell()->GetCaret();
|
RefPtr<nsCaret> caret = aBlockFrame->PresShell()->GetCaret();
|
||||||
if (caret && caret->IsVisible()) {
|
if (caret && caret->IsVisible()) {
|
||||||
nsCOMPtr<nsISelection> domSelection = caret->GetSelection();
|
nsCOMPtr<nsISelection> domSelection = caret->GetSelection();
|
||||||
if (domSelection) {
|
if (domSelection) {
|
||||||
|
|
@ -896,7 +896,7 @@ TextOverflow::Marker::SetupString(nsIFrame* aFrame)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
RefPtr<gfxContext> rc =
|
RefPtr<gfxContext> rc =
|
||||||
aFrame->PresContext()->PresShell()->CreateReferenceRenderingContext();
|
aFrame->PresShell()->CreateReferenceRenderingContext();
|
||||||
RefPtr<nsFontMetrics> fm =
|
RefPtr<nsFontMetrics> fm =
|
||||||
nsLayoutUtils::GetInflatedFontMetricsForFrame(aFrame);
|
nsLayoutUtils::GetInflatedFontMetricsForFrame(aFrame);
|
||||||
mISize = nsLayoutUtils::AppUnitWidthOfStringBidi(mStyle->mString, aFrame,
|
mISize = nsLayoutUtils::AppUnitWidthOfStringBidi(mStyle->mString, aFrame,
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ ViewportFrame::BuildDisplayListForTopLayer(nsDisplayListBuilder* aBuilder,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nsIPresShell* shell = PresContext()->PresShell();
|
nsIPresShell* shell = PresShell();
|
||||||
if (nsCanvasFrame* canvasFrame = shell->GetCanvasFrame()) {
|
if (nsCanvasFrame* canvasFrame = shell->GetCanvasFrame()) {
|
||||||
if (Element* container = canvasFrame->GetCustomContentContainer()) {
|
if (Element* container = canvasFrame->GetCustomContentContainer()) {
|
||||||
if (nsIFrame* frame = container->GetPrimaryFrame()) {
|
if (nsIFrame* frame = container->GetPrimaryFrame()) {
|
||||||
|
|
@ -279,7 +279,7 @@ ViewportFrame::AdjustReflowInputAsContainingBlock(ReflowInput* aReflowInput) con
|
||||||
// If a scroll position clamping scroll-port size has been set, layout
|
// If a scroll position clamping scroll-port size has been set, layout
|
||||||
// fixed position elements to this size instead of the computed size.
|
// fixed position elements to this size instead of the computed size.
|
||||||
nsRect rect(0, 0, aReflowInput->ComputedWidth(), aReflowInput->ComputedHeight());
|
nsRect rect(0, 0, aReflowInput->ComputedWidth(), aReflowInput->ComputedHeight());
|
||||||
nsIPresShell* ps = PresContext()->PresShell();
|
nsIPresShell* ps = PresShell();
|
||||||
if (ps->IsScrollPositionClampingScrollPortSizeSet()) {
|
if (ps->IsScrollPositionClampingScrollPortSizeSet()) {
|
||||||
rect.SizeTo(ps->GetScrollPositionClampingScrollPortSize());
|
rect.SizeTo(ps->GetScrollPositionClampingScrollPortSize());
|
||||||
}
|
}
|
||||||
|
|
@ -399,7 +399,7 @@ ViewportFrame::Reflow(nsPresContext* aPresContext,
|
||||||
nsSubDocumentFrame* container = static_cast<nsSubDocumentFrame*>
|
nsSubDocumentFrame* container = static_cast<nsSubDocumentFrame*>
|
||||||
(nsLayoutUtils::GetCrossDocParentFrame(this));
|
(nsLayoutUtils::GetCrossDocParentFrame(this));
|
||||||
if (container && !container->ShouldClipSubdocument()) {
|
if (container && !container->ShouldClipSubdocument()) {
|
||||||
container->PresContext()->PresShell()->
|
container->PresShell()->
|
||||||
FrameNeedsReflow(container, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(container, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -412,7 +412,7 @@ bool
|
||||||
ViewportFrame::ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas)
|
ViewportFrame::ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas)
|
||||||
{
|
{
|
||||||
nsIScrollableFrame* rootScrollFrame =
|
nsIScrollableFrame* rootScrollFrame =
|
||||||
PresContext()->PresShell()->GetRootScrollFrameAsScrollable();
|
PresShell()->GetRootScrollFrameAsScrollable();
|
||||||
if (rootScrollFrame && !rootScrollFrame->IsIgnoringViewportClipping()) {
|
if (rootScrollFrame && !rootScrollFrame->IsIgnoringViewportClipping()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ nsAbsoluteContainingBlock::AppendFrames(nsIFrame* aDelegatingFrame,
|
||||||
|
|
||||||
// no damage to intrinsic widths, since absolutely positioned frames can't
|
// no damage to intrinsic widths, since absolutely positioned frames can't
|
||||||
// change them
|
// change them
|
||||||
aDelegatingFrame->PresContext()->PresShell()->
|
aDelegatingFrame->PresShell()->
|
||||||
FrameNeedsReflow(aDelegatingFrame, nsIPresShell::eResize,
|
FrameNeedsReflow(aDelegatingFrame, nsIPresShell::eResize,
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
}
|
}
|
||||||
|
|
@ -92,7 +92,7 @@ nsAbsoluteContainingBlock::InsertFrames(nsIFrame* aDelegatingFrame,
|
||||||
|
|
||||||
// no damage to intrinsic widths, since absolutely positioned frames can't
|
// no damage to intrinsic widths, since absolutely positioned frames can't
|
||||||
// change them
|
// change them
|
||||||
aDelegatingFrame->PresContext()->PresShell()->
|
aDelegatingFrame->PresShell()->
|
||||||
FrameNeedsReflow(aDelegatingFrame, nsIPresShell::eResize,
|
FrameNeedsReflow(aDelegatingFrame, nsIPresShell::eResize,
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3044,9 +3044,8 @@ nsBlockFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
if (ancestor) {
|
if (ancestor) {
|
||||||
// XXX Not sure if this is necessary anymore
|
// XXX Not sure if this is necessary anymore
|
||||||
if (ancestor->RenumberList()) {
|
if (ancestor->RenumberList()) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->FrameNeedsReflow(ancestor, nsIPresShell::eStyleChange,
|
||||||
FrameNeedsReflow(ancestor, nsIPresShell::eStyleChange,
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5103,7 +5102,7 @@ nsBlockFrame::SetOverflowOutOfFlows(const nsFrameList& aList,
|
||||||
nsFrameList* list = RemovePropTableFrames(OverflowOutOfFlowsProperty());
|
nsFrameList* list = RemovePropTableFrames(OverflowOutOfFlowsProperty());
|
||||||
NS_ASSERTION(aPropValue == list, "prop value mismatch");
|
NS_ASSERTION(aPropValue == list, "prop value mismatch");
|
||||||
list->Clear();
|
list->Clear();
|
||||||
list->Delete(PresContext()->PresShell());
|
list->Delete(PresShell());
|
||||||
RemoveStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS);
|
RemoveStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS);
|
||||||
}
|
}
|
||||||
else if (GetStateBits() & NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS) {
|
else if (GetStateBits() & NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS) {
|
||||||
|
|
@ -5112,7 +5111,7 @@ nsBlockFrame::SetOverflowOutOfFlows(const nsFrameList& aList,
|
||||||
*aPropValue = aList;
|
*aPropValue = aList;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
SetPropTableFrames(new (PresContext()->PresShell()) nsFrameList(aList),
|
SetPropTableFrames(new (PresShell()) nsFrameList(aList),
|
||||||
OverflowOutOfFlowsProperty());
|
OverflowOutOfFlowsProperty());
|
||||||
AddStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS);
|
AddStateBits(NS_BLOCK_HAS_OVERFLOW_OUT_OF_FLOWS);
|
||||||
}
|
}
|
||||||
|
|
@ -5170,7 +5169,7 @@ nsBlockFrame::EnsurePushedFloats()
|
||||||
if (result)
|
if (result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
result = new (PresContext()->PresShell()) nsFrameList;
|
result = new (PresShell()) nsFrameList;
|
||||||
SetProperty(PushedFloatProperty(), result);
|
SetProperty(PushedFloatProperty(), result);
|
||||||
AddStateBits(NS_BLOCK_HAS_PUSHED_FLOATS);
|
AddStateBits(NS_BLOCK_HAS_PUSHED_FLOATS);
|
||||||
|
|
||||||
|
|
@ -5234,7 +5233,7 @@ nsBlockFrame::AppendFrames(ChildListID aListID,
|
||||||
|
|
||||||
AddFrames(aFrameList, lastKid);
|
AddFrames(aFrameList, lastKid);
|
||||||
if (aListID != kNoReflowPrincipalList) {
|
if (aListID != kNoReflowPrincipalList) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
||||||
}
|
}
|
||||||
|
|
@ -5270,7 +5269,7 @@ nsBlockFrame::InsertFrames(ChildListID aListID,
|
||||||
|
|
||||||
AddFrames(aFrameList, aPrevFrame);
|
AddFrames(aFrameList, aPrevFrame);
|
||||||
if (aListID != kNoReflowPrincipalList) {
|
if (aListID != kNoReflowPrincipalList) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
||||||
}
|
}
|
||||||
|
|
@ -5316,7 +5315,7 @@ nsBlockFrame::RemoveFrame(ChildListID aListID,
|
||||||
MOZ_CRASH("unexpected child list");
|
MOZ_CRASH("unexpected child list");
|
||||||
}
|
}
|
||||||
|
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
NS_FRAME_HAS_DIRTY_CHILDREN); // XXX sufficient?
|
||||||
}
|
}
|
||||||
|
|
@ -7095,7 +7094,7 @@ void
|
||||||
nsBlockFrame::CreateBulletFrameForListItem(bool aCreateBulletList,
|
nsBlockFrame::CreateBulletFrameForListItem(bool aCreateBulletList,
|
||||||
bool aListStylePositionInside)
|
bool aListStylePositionInside)
|
||||||
{
|
{
|
||||||
nsIPresShell* shell = PresContext()->PresShell();
|
nsIPresShell* shell = PresShell();
|
||||||
|
|
||||||
CSSPseudoElementType pseudoType = aCreateBulletList ?
|
CSSPseudoElementType pseudoType = aCreateBulletList ?
|
||||||
CSSPseudoElementType::mozListBullet :
|
CSSPseudoElementType::mozListBullet :
|
||||||
|
|
|
||||||
|
|
@ -440,16 +440,16 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
nsLineBox* NewLineBox(nsIFrame* aFrame, bool aIsBlock) {
|
nsLineBox* NewLineBox(nsIFrame* aFrame, bool aIsBlock) {
|
||||||
return NS_NewLineBox(PresContext()->PresShell(), aFrame, aIsBlock);
|
return NS_NewLineBox(PresShell(), aFrame, aIsBlock);
|
||||||
}
|
}
|
||||||
nsLineBox* NewLineBox(nsLineBox* aFromLine, nsIFrame* aFrame, int32_t aCount) {
|
nsLineBox* NewLineBox(nsLineBox* aFromLine, nsIFrame* aFrame, int32_t aCount) {
|
||||||
return NS_NewLineBox(PresContext()->PresShell(), aFromLine, aFrame, aCount);
|
return NS_NewLineBox(PresShell(), aFromLine, aFrame, aCount);
|
||||||
}
|
}
|
||||||
void FreeLineBox(nsLineBox* aLine) {
|
void FreeLineBox(nsLineBox* aLine) {
|
||||||
if (aLine == GetLineCursor()) {
|
if (aLine == GetLineCursor()) {
|
||||||
ClearLineCursor();
|
ClearLineCursor();
|
||||||
}
|
}
|
||||||
aLine->Destroy(PresContext()->PresShell());
|
aLine->Destroy(PresShell());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Helper method for StealFrame.
|
* Helper method for StealFrame.
|
||||||
|
|
|
||||||
|
|
@ -95,8 +95,7 @@ nsContainerFrame::SetInitialChildList(ChildListID aListID,
|
||||||
"The placeholder should points to a backdrop frame");
|
"The placeholder should points to a backdrop frame");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
nsFrameList* list =
|
nsFrameList* list = new (PresShell()) nsFrameList(aChildList);
|
||||||
new (PresContext()->PresShell()) nsFrameList(aChildList);
|
|
||||||
SetProperty(BackdropProperty(), list);
|
SetProperty(BackdropProperty(), list);
|
||||||
} else {
|
} else {
|
||||||
MOZ_ASSERT_UNREACHABLE("Unexpected child list");
|
MOZ_ASSERT_UNREACHABLE("Unexpected child list");
|
||||||
|
|
@ -118,9 +117,8 @@ nsContainerFrame::AppendFrames(ChildListID aListID,
|
||||||
mFrames.AppendFrames(this, aFrameList);
|
mFrames.AppendFrames(this, aFrameList);
|
||||||
|
|
||||||
if (aListID != kNoReflowPrincipalList) {
|
if (aListID != kNoReflowPrincipalList) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,9 +140,8 @@ nsContainerFrame::InsertFrames(ChildListID aListID,
|
||||||
mFrames.InsertFrames(this, aPrevFrame, aFrameList);
|
mFrames.InsertFrames(this, aPrevFrame, aFrameList);
|
||||||
|
|
||||||
if (aListID != kNoReflowPrincipalList) {
|
if (aListID != kNoReflowPrincipalList) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange,
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,7 +159,7 @@ nsContainerFrame::RemoveFrame(ChildListID aListID,
|
||||||
if (kNoReflowPrincipalList == aListID) {
|
if (kNoReflowPrincipalList == aListID) {
|
||||||
generateReflowCommand = false;
|
generateReflowCommand = false;
|
||||||
}
|
}
|
||||||
nsIPresShell* shell = PresContext()->PresShell();
|
nsIPresShell* shell = PresShell();
|
||||||
nsContainerFrame* lastParent = nullptr;
|
nsContainerFrame* lastParent = nullptr;
|
||||||
while (aOldFrame) {
|
while (aOldFrame) {
|
||||||
nsIFrame* oldFrameNextContinuation = aOldFrame->GetNextContinuation();
|
nsIFrame* oldFrameNextContinuation = aOldFrame->GetNextContinuation();
|
||||||
|
|
@ -1257,7 +1254,7 @@ TryRemoveFrame(nsIFrame* aFrame,
|
||||||
// aChildToRemove *may* have been removed from this list.
|
// aChildToRemove *may* have been removed from this list.
|
||||||
if (list->IsEmpty()) {
|
if (list->IsEmpty()) {
|
||||||
aFrame->RemoveProperty(aProp);
|
aFrame->RemoveProperty(aProp);
|
||||||
list->Delete(aFrame->PresContext()->PresShell());
|
list->Delete(aFrame->PresShell());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -1641,7 +1638,7 @@ nsContainerFrame::DrainExcessOverflowContainersList(ChildFrameMerger aMergeFunc)
|
||||||
} else if (overflowContainers) {
|
} else if (overflowContainers) {
|
||||||
aMergeFunc(*overflowContainers, toMove, this);
|
aMergeFunc(*overflowContainers, toMove, this);
|
||||||
if (selfExcessOCFrames->IsEmpty()) {
|
if (selfExcessOCFrames->IsEmpty()) {
|
||||||
selfExcessOCFrames->Delete(PresContext()->PresShell());
|
selfExcessOCFrames->Delete(PresShell());
|
||||||
} else {
|
} else {
|
||||||
SetPropTableFrames(selfExcessOCFrames, ExcessOverflowContainersProperty());
|
SetPropTableFrames(selfExcessOCFrames, ExcessOverflowContainersProperty());
|
||||||
}
|
}
|
||||||
|
|
@ -1651,7 +1648,7 @@ nsContainerFrame::DrainExcessOverflowContainersList(ChildFrameMerger aMergeFunc)
|
||||||
overflowContainers = selfExcessOCFrames;
|
overflowContainers = selfExcessOCFrames;
|
||||||
} else {
|
} else {
|
||||||
SetPropTableFrames(selfExcessOCFrames, ExcessOverflowContainersProperty());
|
SetPropTableFrames(selfExcessOCFrames, ExcessOverflowContainersProperty());
|
||||||
auto shell = PresContext()->PresShell();
|
auto shell = PresShell();
|
||||||
overflowContainers = new (shell) nsFrameList(toMove);
|
overflowContainers = new (shell) nsFrameList(toMove);
|
||||||
}
|
}
|
||||||
SetPropTableFrames(overflowContainers, OverflowContainersProperty());
|
SetPropTableFrames(overflowContainers, OverflowContainersProperty());
|
||||||
|
|
@ -1987,9 +1984,8 @@ nsContainerFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
|
|
||||||
// XXX Not sure if this is necessary anymore
|
// XXX Not sure if this is necessary anymore
|
||||||
if (RenumberList()) {
|
if (RenumberList()) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->FrameNeedsReflow(this, nsIPresShell::eStyleChange,
|
||||||
FrameNeedsReflow(this, nsIPresShell::eStyleChange,
|
NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
NS_FRAME_HAS_DIRTY_CHILDREN);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
|
|
|
||||||
|
|
@ -937,7 +937,7 @@ nsContainerFrame::DestroyOverflowList()
|
||||||
{
|
{
|
||||||
nsFrameList* list = RemovePropTableFrames(OverflowProperty());
|
nsFrameList* list = RemovePropTableFrames(OverflowProperty());
|
||||||
MOZ_ASSERT(list && list->IsEmpty());
|
MOZ_ASSERT(list && list->IsEmpty());
|
||||||
list->Delete(PresContext()->PresShell());
|
list->Delete(PresShell());
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* nsContainerFrame_h___ */
|
#endif /* nsContainerFrame_h___ */
|
||||||
|
|
|
||||||
|
|
@ -204,7 +204,7 @@ nsFontInflationData::UpdateISize(const ReflowInput &aReflowInput)
|
||||||
|
|
||||||
// See comment above "font.size.inflation.lineThreshold" in
|
// See comment above "font.size.inflation.lineThreshold" in
|
||||||
// modules/libpref/src/init/all.js .
|
// modules/libpref/src/init/all.js .
|
||||||
nsIPresShell* presShell = bfc->PresContext()->PresShell();
|
nsIPresShell* presShell = bfc->PresShell();
|
||||||
uint32_t lineThreshold = presShell->FontSizeInflationLineThreshold();
|
uint32_t lineThreshold = presShell->FontSizeInflationLineThreshold();
|
||||||
nscoord newTextThreshold = (newNCAISize * lineThreshold) / 100;
|
nscoord newTextThreshold = (newNCAISize * lineThreshold) / 100;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -715,7 +715,7 @@ nsFrame::Init(nsIContent* aContent,
|
||||||
"root frame should always be a container");
|
"root frame should always be a container");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PresContext()->PresShell()->AssumeAllFramesVisible() &&
|
if (PresShell()->AssumeAllFramesVisible() &&
|
||||||
TrackingVisibility()) {
|
TrackingVisibility()) {
|
||||||
IncApproximateVisibleCount();
|
IncApproximateVisibleCount();
|
||||||
}
|
}
|
||||||
|
|
@ -1946,7 +1946,7 @@ nsIFrame::GetVisibility() const
|
||||||
void
|
void
|
||||||
nsIFrame::UpdateVisibilitySynchronously()
|
nsIFrame::UpdateVisibilitySynchronously()
|
||||||
{
|
{
|
||||||
nsIPresShell* presShell = PresContext()->PresShell();
|
nsIPresShell* presShell = PresShell();
|
||||||
if (!presShell) {
|
if (!presShell) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2015,7 +2015,7 @@ nsIFrame::EnableVisibilityTracking()
|
||||||
AddStateBits(NS_FRAME_VISIBILITY_IS_TRACKED);
|
AddStateBits(NS_FRAME_VISIBILITY_IS_TRACKED);
|
||||||
SetProperty(VisibilityStateProperty(), 0);
|
SetProperty(VisibilityStateProperty(), 0);
|
||||||
|
|
||||||
nsIPresShell* presShell = PresContext()->PresShell();
|
nsIPresShell* presShell = PresShell();
|
||||||
if (!presShell) {
|
if (!presShell) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -2477,7 +2477,7 @@ DisplayDebugBorders(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||||
}
|
}
|
||||||
// Draw a border around the current event target
|
// Draw a border around the current event target
|
||||||
if (nsFrame::GetShowEventTargetFrameBorder() &&
|
if (nsFrame::GetShowEventTargetFrameBorder() &&
|
||||||
aFrame->PresContext()->PresShell()->GetDrawEventTargetFrame() == aFrame) {
|
aFrame->PresShell()->GetDrawEventTargetFrame() == aFrame) {
|
||||||
aLists.Outlines()->AppendNewToTop(new (aBuilder)
|
aLists.Outlines()->AppendNewToTop(new (aBuilder)
|
||||||
nsDisplayGeneric(aBuilder, aFrame, PaintEventTargetBorder, "EventTargetBorder",
|
nsDisplayGeneric(aBuilder, aFrame, PaintEventTargetBorder, "EventTargetBorder",
|
||||||
DisplayItemType::TYPE_EVENT_TARGET_BORDER));
|
DisplayItemType::TYPE_EVENT_TARGET_BORDER));
|
||||||
|
|
@ -3369,7 +3369,7 @@ DescendIntoChild(nsDisplayListBuilder* aBuilder, nsIFrame *aChild,
|
||||||
// There are cases where the "ignore scroll frame" on the builder is not set
|
// There are cases where the "ignore scroll frame" on the builder is not set
|
||||||
// correctly, and so we additionally want to catch cases where the child is
|
// correctly, and so we additionally want to catch cases where the child is
|
||||||
// a root scrollframe and we are ignoring scrolling on the viewport.
|
// a root scrollframe and we are ignoring scrolling on the viewport.
|
||||||
nsIPresShell* shell = child->PresContext()->PresShell();
|
nsIPresShell* shell = child->PresShell();
|
||||||
bool keepDescending = child == aBuilder->GetIgnoreScrollFrame() ||
|
bool keepDescending = child == aBuilder->GetIgnoreScrollFrame() ||
|
||||||
(shell->IgnoringViewportScrolling() && child == shell->GetRootScrollFrame());
|
(shell->IgnoringViewportScrolling() && child == shell->GetRootScrollFrame());
|
||||||
if (!keepDescending) {
|
if (!keepDescending) {
|
||||||
|
|
@ -3556,7 +3556,7 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
||||||
// (which means we're painting it, modulo occlusion), mark it as visible
|
// (which means we're painting it, modulo occlusion), mark it as visible
|
||||||
// within the displayport.
|
// within the displayport.
|
||||||
if (aBuilder->IsPaintingToWindow() && child->TrackingVisibility()) {
|
if (aBuilder->IsPaintingToWindow() && child->TrackingVisibility()) {
|
||||||
child->PresContext()->PresShell()->EnsureFrameInApproximatelyVisibleList(child);
|
child->PresShell()->EnsureFrameInApproximatelyVisibleList(child);
|
||||||
awayFromCommonPath = true;
|
awayFromCommonPath = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4594,7 +4594,7 @@ NS_IMETHODIMP nsFrame::HandleRelease(nsPresContext* aPresContext,
|
||||||
offsets = GetContentOffsetsFromPoint(pt, SKIP_HIDDEN);
|
offsets = GetContentOffsetsFromPoint(pt, SKIP_HIDDEN);
|
||||||
handleTableSelection = false;
|
handleTableSelection = false;
|
||||||
} else {
|
} else {
|
||||||
GetDataForTableSelection(frameselection, PresContext()->PresShell(),
|
GetDataForTableSelection(frameselection, PresShell(),
|
||||||
aEvent->AsMouseEvent(),
|
aEvent->AsMouseEvent(),
|
||||||
getter_AddRefs(parentContent),
|
getter_AddRefs(parentContent),
|
||||||
&contentOffsetForTableSel,
|
&contentOffsetForTableSel,
|
||||||
|
|
@ -7924,7 +7924,7 @@ nsIFrame::GetConstFrameSelection() const
|
||||||
frame = frame->GetParent();
|
frame = frame->GetParent();
|
||||||
}
|
}
|
||||||
|
|
||||||
return PresContext()->PresShell()->ConstFrameSelection();
|
return PresShell()->ConstFrameSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -542,7 +542,7 @@ nsFrameSelection::ConstrainFrameAndPointToAnchorSubtree(nsIFrame *aFrame,
|
||||||
|
|
||||||
// If the mouse cursor in on a frame which is descendant of same
|
// If the mouse cursor in on a frame which is descendant of same
|
||||||
// selection root, we can expand the selection to the frame.
|
// selection root, we can expand the selection to the frame.
|
||||||
if (cursorFrame && cursorFrame->PresContext()->PresShell() == mShell)
|
if (cursorFrame && cursorFrame->PresShell() == mShell)
|
||||||
{
|
{
|
||||||
nsIContent* cursorContent = cursorFrame->GetContent();
|
nsIContent* cursorContent = cursorFrame->GetContent();
|
||||||
NS_ENSURE_TRUE(cursorContent, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(cursorContent, NS_ERROR_FAILURE);
|
||||||
|
|
|
||||||
|
|
@ -381,7 +381,7 @@ nsHTMLScrollFrame::TryLayout(ScrollReflowInput* aState,
|
||||||
std::max(0, aState->mInsideBorderSize.height - hScrollbarDesiredHeight));
|
std::max(0, aState->mInsideBorderSize.height - hScrollbarDesiredHeight));
|
||||||
|
|
||||||
nsSize visualScrollPortSize = scrollPortSize;
|
nsSize visualScrollPortSize = scrollPortSize;
|
||||||
nsIPresShell* presShell = PresContext()->PresShell();
|
nsIPresShell* presShell = PresShell();
|
||||||
if (mHelper.mIsRoot && presShell->IsScrollPositionClampingScrollPortSizeSet()) {
|
if (mHelper.mIsRoot && presShell->IsScrollPositionClampingScrollPortSizeSet()) {
|
||||||
nsSize compositionSize = nsLayoutUtils::CalculateCompositionSizeForFrame(this, false);
|
nsSize compositionSize = nsLayoutUtils::CalculateCompositionSizeForFrame(this, false);
|
||||||
float resolution = presShell->GetResolution();
|
float resolution = presShell->GetResolution();
|
||||||
|
|
@ -1055,7 +1055,7 @@ nsHTMLScrollFrame::Reflow(nsPresContext* aPresContext,
|
||||||
PlaceScrollArea(state, oldScrollPosition);
|
PlaceScrollArea(state, oldScrollPosition);
|
||||||
if (!mHelper.mPostedReflowCallback) {
|
if (!mHelper.mPostedReflowCallback) {
|
||||||
// Make sure we'll try scrolling to restored position
|
// Make sure we'll try scrolling to restored position
|
||||||
PresContext()->PresShell()->PostReflowCallback(&mHelper);
|
PresShell()->PostReflowCallback(&mHelper);
|
||||||
mHelper.mPostedReflowCallback = true;
|
mHelper.mPostedReflowCallback = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1879,7 +1879,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
mCallee = aCallee;
|
mCallee = aCallee;
|
||||||
APZCCallbackHelper::SuppressDisplayport(true, mCallee->mOuter->PresContext()->PresShell());
|
APZCCallbackHelper::SuppressDisplayport(true, mCallee->mOuter->PresShell());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1904,7 +1904,7 @@ private:
|
||||||
void RemoveObserver() {
|
void RemoveObserver() {
|
||||||
if (mCallee) {
|
if (mCallee) {
|
||||||
RefreshDriver(mCallee)->RemoveRefreshObserver(this, FlushType::Style);
|
RefreshDriver(mCallee)->RemoveRefreshObserver(this, FlushType::Style);
|
||||||
APZCCallbackHelper::SuppressDisplayport(false, mCallee->mOuter->PresContext()->PresShell());
|
APZCCallbackHelper::SuppressDisplayport(false, mCallee->mOuter->PresShell());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -2091,7 +2091,7 @@ ScrollFrameHelper::ScrollFrameHelper(nsContainerFrame* aOuter,
|
||||||
// active scroll containers so that we paint by whole tile increments
|
// active scroll containers so that we paint by whole tile increments
|
||||||
// when scrolling.
|
// when scrolling.
|
||||||
nsLayoutUtils::SetDisplayPortMargins(mOuter->GetContent(),
|
nsLayoutUtils::SetDisplayPortMargins(mOuter->GetContent(),
|
||||||
mOuter->PresContext()->PresShell(),
|
mOuter->PresShell(),
|
||||||
ScreenMargin(),
|
ScreenMargin(),
|
||||||
0,
|
0,
|
||||||
nsLayoutUtils::RepaintMode::DoNotRepaint);
|
nsLayoutUtils::RepaintMode::DoNotRepaint);
|
||||||
|
|
@ -2452,13 +2452,13 @@ bool ScrollFrameHelper::IsIgnoringViewportClipping() const
|
||||||
if (!mIsRoot)
|
if (!mIsRoot)
|
||||||
return false;
|
return false;
|
||||||
nsSubDocumentFrame* subdocFrame = static_cast<nsSubDocumentFrame*>
|
nsSubDocumentFrame* subdocFrame = static_cast<nsSubDocumentFrame*>
|
||||||
(nsLayoutUtils::GetCrossDocParentFrame(mOuter->PresContext()->PresShell()->GetRootFrame()));
|
(nsLayoutUtils::GetCrossDocParentFrame(mOuter->PresShell()->GetRootFrame()));
|
||||||
return subdocFrame && !subdocFrame->ShouldClipSubdocument();
|
return subdocFrame && !subdocFrame->ShouldClipSubdocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScrollFrameHelper::MarkScrollbarsDirtyForReflow() const
|
void ScrollFrameHelper::MarkScrollbarsDirtyForReflow() const
|
||||||
{
|
{
|
||||||
nsIPresShell* presShell = mOuter->PresContext()->PresShell();
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
if (mVScrollbarBox) {
|
if (mVScrollbarBox) {
|
||||||
presShell->FrameNeedsReflow(mVScrollbarBox, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
presShell->FrameNeedsReflow(mVScrollbarBox, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
|
|
@ -2472,7 +2472,7 @@ bool ScrollFrameHelper::ShouldClampScrollPosition() const
|
||||||
if (!mIsRoot)
|
if (!mIsRoot)
|
||||||
return true;
|
return true;
|
||||||
nsSubDocumentFrame* subdocFrame = static_cast<nsSubDocumentFrame*>
|
nsSubDocumentFrame* subdocFrame = static_cast<nsSubDocumentFrame*>
|
||||||
(nsLayoutUtils::GetCrossDocParentFrame(mOuter->PresContext()->PresShell()->GetRootFrame()));
|
(nsLayoutUtils::GetCrossDocParentFrame(mOuter->PresShell()->GetRootFrame()));
|
||||||
return !subdocFrame || subdocFrame->ShouldClampScrollPosition();
|
return !subdocFrame || subdocFrame->ShouldClampScrollPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2719,7 +2719,7 @@ ScrollFrameHelper::ScrollActivityCallback(nsITimer *aTimer, void* anInstance)
|
||||||
// Fire the synth mouse move.
|
// Fire the synth mouse move.
|
||||||
self->mScrollActivityTimer->Cancel();
|
self->mScrollActivityTimer->Cancel();
|
||||||
self->mScrollActivityTimer = nullptr;
|
self->mScrollActivityTimer = nullptr;
|
||||||
self->mOuter->PresContext()->PresShell()->SynthesizeMouseMove(true);
|
self->mOuter->PresShell()->SynthesizeMouseMove(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3394,7 +3394,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||||
// Root scrollframes have FrameMetrics and clipping on their container
|
// Root scrollframes have FrameMetrics and clipping on their container
|
||||||
// layers, so don't apply clipping again.
|
// layers, so don't apply clipping again.
|
||||||
mAddClipRectToLayer =
|
mAddClipRectToLayer =
|
||||||
!(mIsRoot && mOuter->PresContext()->PresShell()->GetIsViewportOverridden());
|
!(mIsRoot && mOuter->PresShell()->GetIsViewportOverridden());
|
||||||
|
|
||||||
// Whether we might want to build a scrollable layer for this scroll frame
|
// Whether we might want to build a scrollable layer for this scroll frame
|
||||||
// at some point in the future. This controls whether we add the information
|
// at some point in the future. This controls whether we add the information
|
||||||
|
|
@ -3493,7 +3493,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||||
if (mIsRoot) {
|
if (mIsRoot) {
|
||||||
clipRect.SizeTo(nsLayoutUtils::CalculateCompositionSizeForFrame(mOuter));
|
clipRect.SizeTo(nsLayoutUtils::CalculateCompositionSizeForFrame(mOuter));
|
||||||
if (mOuter->PresContext()->IsRootContentDocument()) {
|
if (mOuter->PresContext()->IsRootContentDocument()) {
|
||||||
double res = mOuter->PresContext()->PresShell()->GetResolution();
|
double res = mOuter->PresShell()->GetResolution();
|
||||||
clipRect.width = NSToCoordRound(clipRect.width / res);
|
clipRect.width = NSToCoordRound(clipRect.width / res);
|
||||||
clipRect.height = NSToCoordRound(clipRect.height / res);
|
clipRect.height = NSToCoordRound(clipRect.height / res);
|
||||||
}
|
}
|
||||||
|
|
@ -3596,7 +3596,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||||
// Set a displayport so next paint we don't have to force layerization
|
// Set a displayport so next paint we don't have to force layerization
|
||||||
// after the fact.
|
// after the fact.
|
||||||
nsLayoutUtils::SetDisplayPortMargins(mOuter->GetContent(),
|
nsLayoutUtils::SetDisplayPortMargins(mOuter->GetContent(),
|
||||||
mOuter->PresContext()->PresShell(),
|
mOuter->PresShell(),
|
||||||
ScreenMargin(),
|
ScreenMargin(),
|
||||||
0,
|
0,
|
||||||
nsLayoutUtils::RepaintMode::DoNotRepaint);
|
nsLayoutUtils::RepaintMode::DoNotRepaint);
|
||||||
|
|
@ -3778,7 +3778,7 @@ ScrollFrameHelper::DecideScrollableLayer(nsDisplayListBuilder* aBuilder,
|
||||||
// The displayPort getter takes care of adjusting for resolution. So if
|
// The displayPort getter takes care of adjusting for resolution. So if
|
||||||
// we have resolution but no displayPort then we need to adjust for
|
// we have resolution but no displayPort then we need to adjust for
|
||||||
// resolution here.
|
// resolution here.
|
||||||
nsIPresShell* presShell = mOuter->PresContext()->PresShell();
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
*aVisibleRect = aVisibleRect->RemoveResolution(
|
*aVisibleRect = aVisibleRect->RemoveResolution(
|
||||||
presShell->ScaleToResolution() ? presShell->GetResolution () : 1.0f);
|
presShell->ScaleToResolution() ? presShell->GetResolution () : 1.0f);
|
||||||
*aDirtyRect = aDirtyRect->RemoveResolution(
|
*aDirtyRect = aDirtyRect->RemoveResolution(
|
||||||
|
|
@ -3947,7 +3947,7 @@ ScrollFrameHelper::GetScrollRangeForClamping() const
|
||||||
nsSize
|
nsSize
|
||||||
ScrollFrameHelper::GetScrollPositionClampingScrollPortSize() const
|
ScrollFrameHelper::GetScrollPositionClampingScrollPortSize() const
|
||||||
{
|
{
|
||||||
nsIPresShell* presShell = mOuter->PresContext()->PresShell();
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
if (mIsRoot && presShell->IsScrollPositionClampingScrollPortSizeSet()) {
|
if (mIsRoot && presShell->IsScrollPositionClampingScrollPortSizeSet()) {
|
||||||
return presShell->GetScrollPositionClampingScrollPortSize();
|
return presShell->GetScrollPositionClampingScrollPortSize();
|
||||||
}
|
}
|
||||||
|
|
@ -4261,7 +4261,7 @@ ScrollFrameHelper::GetPageScrollAmount() const
|
||||||
if (mIsRoot) {
|
if (mIsRoot) {
|
||||||
// Reduce effective scrollport height by the height of any fixed-pos
|
// Reduce effective scrollport height by the height of any fixed-pos
|
||||||
// headers or footers
|
// headers or footers
|
||||||
nsIFrame* root = mOuter->PresContext()->PresShell()->GetRootFrame();
|
nsIFrame* root = mOuter->PresShell()->GetRootFrame();
|
||||||
effectiveScrollPortSize =
|
effectiveScrollPortSize =
|
||||||
GetScrollPortSizeExcludingHeadersAndFooters(root, mScrollPort);
|
GetScrollPortSizeExcludingHeadersAndFooters(root, mScrollPort);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -4659,7 +4659,7 @@ ScrollFrameHelper::Destroy(PostDestroyData& aPostDestroyData)
|
||||||
aPostDestroyData.AddAnonymousContent(mResizerContent.forget());
|
aPostDestroyData.AddAnonymousContent(mResizerContent.forget());
|
||||||
|
|
||||||
if (mPostedReflowCallback) {
|
if (mPostedReflowCallback) {
|
||||||
mOuter->PresContext()->PresShell()->CancelReflowCallback(this);
|
mOuter->PresShell()->CancelReflowCallback(this);
|
||||||
mPostedReflowCallback = false;
|
mPostedReflowCallback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5326,7 +5326,7 @@ nsXULScrollFrame::XULLayout(nsBoxLayoutState& aState)
|
||||||
}
|
}
|
||||||
if (!mHelper.mPostedReflowCallback) {
|
if (!mHelper.mPostedReflowCallback) {
|
||||||
// Make sure we'll try scrolling to restored position
|
// Make sure we'll try scrolling to restored position
|
||||||
PresContext()->PresShell()->PostReflowCallback(&mHelper);
|
PresShell()->PostReflowCallback(&mHelper);
|
||||||
mHelper.mPostedReflowCallback = true;
|
mHelper.mPostedReflowCallback = true;
|
||||||
}
|
}
|
||||||
if (!(GetStateBits() & NS_FRAME_FIRST_REFLOW)) {
|
if (!(GetStateBits() & NS_FRAME_FIRST_REFLOW)) {
|
||||||
|
|
@ -5531,7 +5531,7 @@ ScrollFrameHelper::ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas)
|
||||||
// needing reflow. Don't use NS_FRAME_IS_DIRTY as dirty as that means
|
// needing reflow. Don't use NS_FRAME_IS_DIRTY as dirty as that means
|
||||||
// we have to reflow the frame and all its descendants, and we don't
|
// we have to reflow the frame and all its descendants, and we don't
|
||||||
// have to do that here. Only this frame needs to be reflowed.
|
// have to do that here. Only this frame needs to be reflowed.
|
||||||
mOuter->PresContext()->PresShell()->FrameNeedsReflow(
|
mOuter->PresShell()->FrameNeedsReflow(
|
||||||
mOuter, nsIPresShell::eResize, NS_FRAME_HAS_DIRTY_CHILDREN);
|
mOuter, nsIPresShell::eResize, NS_FRAME_HAS_DIRTY_CHILDREN);
|
||||||
// Ensure that next time nsHTMLScrollFrame::Reflow runs, we don't skip
|
// Ensure that next time nsHTMLScrollFrame::Reflow runs, we don't skip
|
||||||
// updating the scrollbars. (Because the overflow area of the scrolled
|
// updating the scrollbars. (Because the overflow area of the scrolled
|
||||||
|
|
@ -5634,7 +5634,7 @@ ScrollFrameHelper::LayoutScrollbars(nsBoxLayoutState& aState,
|
||||||
NS_ASSERTION(!mSuppressScrollbarUpdate,
|
NS_ASSERTION(!mSuppressScrollbarUpdate,
|
||||||
"This should have been suppressed");
|
"This should have been suppressed");
|
||||||
|
|
||||||
nsIPresShell* presShell = mOuter->PresContext()->PresShell();
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
|
|
||||||
bool hasResizer = HasResizer();
|
bool hasResizer = HasResizer();
|
||||||
bool scrollbarOnLeft = !IsScrollbarOnRight();
|
bool scrollbarOnLeft = !IsScrollbarOnRight();
|
||||||
|
|
@ -5762,7 +5762,7 @@ ScrollFrameHelper::LayoutScrollbars(nsBoxLayoutState& aState,
|
||||||
// post reflow callback to modify scrollbar attributes
|
// post reflow callback to modify scrollbar attributes
|
||||||
mUpdateScrollbarAttributes = true;
|
mUpdateScrollbarAttributes = true;
|
||||||
if (!mPostedReflowCallback) {
|
if (!mPostedReflowCallback) {
|
||||||
aState.PresContext()->PresShell()->PostReflowCallback(this);
|
aState.PresShell()->PostReflowCallback(this);
|
||||||
mPostedReflowCallback = true;
|
mPostedReflowCallback = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -5779,7 +5779,7 @@ void
|
||||||
ScrollFrameHelper::SetScrollbarEnabled(nsIContent* aContent, nscoord aMaxPos)
|
ScrollFrameHelper::SetScrollbarEnabled(nsIContent* aContent, nscoord aMaxPos)
|
||||||
{
|
{
|
||||||
DebugOnly<nsWeakPtr> weakShell(
|
DebugOnly<nsWeakPtr> weakShell(
|
||||||
do_GetWeakReference(mOuter->PresContext()->PresShell()));
|
do_GetWeakReference(mOuter->PresShell()));
|
||||||
if (aMaxPos) {
|
if (aMaxPos) {
|
||||||
aContent->UnsetAttr(kNameSpaceID_None, nsGkAtoms::disabled, true);
|
aContent->UnsetAttr(kNameSpaceID_None, nsGkAtoms::disabled, true);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -5794,7 +5794,7 @@ ScrollFrameHelper::SetCoordAttribute(nsIContent* aContent, nsAtom* aAtom,
|
||||||
nscoord aSize)
|
nscoord aSize)
|
||||||
{
|
{
|
||||||
DebugOnly<nsWeakPtr> weakShell(
|
DebugOnly<nsWeakPtr> weakShell(
|
||||||
do_GetWeakReference(mOuter->PresContext()->PresShell()));
|
do_GetWeakReference(mOuter->PresShell()));
|
||||||
// convert to pixels
|
// convert to pixels
|
||||||
int32_t pixelSize = nsPresContext::AppUnitsToIntCSSPixels(aSize);
|
int32_t pixelSize = nsPresContext::AppUnitsToIntCSSPixels(aSize);
|
||||||
|
|
||||||
|
|
@ -6093,7 +6093,7 @@ ScrollFrameHelper::SaveState() const
|
||||||
state->SetAllowScrollOriginDowngrade(allowScrollOriginDowngrade);
|
state->SetAllowScrollOriginDowngrade(allowScrollOriginDowngrade);
|
||||||
if (mIsRoot) {
|
if (mIsRoot) {
|
||||||
// Only save resolution properties for root scroll frames
|
// Only save resolution properties for root scroll frames
|
||||||
nsIPresShell* shell = mOuter->PresContext()->PresShell();
|
nsIPresShell* shell = mOuter->PresShell();
|
||||||
state->SetResolution(shell->GetResolution());
|
state->SetResolution(shell->GetResolution());
|
||||||
state->SetScaleToResolution(shell->ScaleToResolution());
|
state->SetScaleToResolution(shell->ScaleToResolution());
|
||||||
}
|
}
|
||||||
|
|
@ -6114,7 +6114,7 @@ ScrollFrameHelper::RestoreState(nsPresState* aState)
|
||||||
aState->GetResolution() == 1.0));
|
aState->GetResolution() == 1.0));
|
||||||
|
|
||||||
if (mIsRoot) {
|
if (mIsRoot) {
|
||||||
nsIPresShell* presShell = mOuter->PresContext()->PresShell();
|
nsIPresShell* presShell = mOuter->PresShell();
|
||||||
if (aState->GetScaleToResolution()) {
|
if (aState->GetScaleToResolution()) {
|
||||||
presShell->SetResolutionAndScaleTo(aState->GetResolution());
|
presShell->SetResolutionAndScaleTo(aState->GetResolution());
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -6687,7 +6687,7 @@ nsGridContainerFrame::NoteNewChildren(ChildListID aListID,
|
||||||
MOZ_ASSERT(supportedLists.Contains(aListID), "unexpected child list");
|
MOZ_ASSERT(supportedLists.Contains(aListID), "unexpected child list");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
nsIPresShell* shell = PresContext()->PresShell();
|
nsIPresShell* shell = PresShell();
|
||||||
for (auto pif = GetPrevInFlow(); pif; pif = pif->GetPrevInFlow()) {
|
for (auto pif = GetPrevInFlow(); pif; pif = pif->GetPrevInFlow()) {
|
||||||
if (aListID == kPrincipalList) {
|
if (aListID == kPrincipalList) {
|
||||||
pif->AddStateBits(NS_STATE_GRID_DID_PUSH_ITEMS);
|
pif->AddStateBits(NS_STATE_GRID_DID_PUSH_ITEMS);
|
||||||
|
|
@ -6726,7 +6726,7 @@ nsGridContainerFrame::MergeSortedExcessOverflowContainers(nsFrameList& aList)
|
||||||
if (eoc) {
|
if (eoc) {
|
||||||
::MergeSortedFrameLists(*eoc, aList, GetContent());
|
::MergeSortedFrameLists(*eoc, aList, GetContent());
|
||||||
} else {
|
} else {
|
||||||
SetPropTableFrames(new (PresContext()->PresShell()) nsFrameList(aList),
|
SetPropTableFrames(new (PresShell()) nsFrameList(aList),
|
||||||
ExcessOverflowContainersProperty());
|
ExcessOverflowContainersProperty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6915,7 +6915,7 @@ nsGridContainerFrame::GetGridFrameWithComputedInfo(nsIFrame* aFrame)
|
||||||
|
|
||||||
if (reflowNeeded) {
|
if (reflowNeeded) {
|
||||||
// Trigger a reflow that generates additional grid property data.
|
// Trigger a reflow that generates additional grid property data.
|
||||||
nsIPresShell* shell = gridFrame->PresContext()->PresShell();
|
nsIPresShell* shell = gridFrame->PresShell();
|
||||||
gridFrame->AddStateBits(NS_STATE_GRID_GENERATE_COMPUTED_VALUES);
|
gridFrame->AddStateBits(NS_STATE_GRID_GENERATE_COMPUTED_VALUES);
|
||||||
shell->FrameNeedsReflow(gridFrame,
|
shell->FrameNeedsReflow(gridFrame,
|
||||||
nsIPresShell::eResize,
|
nsIPresShell::eResize,
|
||||||
|
|
|
||||||
|
|
@ -641,6 +641,10 @@ public:
|
||||||
return StyleContext()->PresContext();
|
return StyleContext()->PresContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsIPresShell* PresShell() const {
|
||||||
|
return PresContext()->PresShell();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called to initialize the frame. This is called immediately after creating
|
* Called to initialize the frame. This is called immediately after creating
|
||||||
* the frame.
|
* the frame.
|
||||||
|
|
|
||||||
|
|
@ -188,7 +188,7 @@ nsImageFrame::DisconnectMap()
|
||||||
|
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
if (nsAccessibilityService* accService = GetAccService()) {
|
if (nsAccessibilityService* accService = GetAccService()) {
|
||||||
accService->RecreateAccessible(PresContext()->PresShell(), mContent);
|
accService->RecreateAccessible(PresShell(), mContent);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -197,7 +197,7 @@ void
|
||||||
nsImageFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
nsImageFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
||||||
{
|
{
|
||||||
if (mReflowCallbackPosted) {
|
if (mReflowCallbackPosted) {
|
||||||
PresContext()->PresShell()->CancelReflowCallback(this);
|
PresShell()->CancelReflowCallback(this);
|
||||||
mReflowCallbackPosted = false;
|
mReflowCallbackPosted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1072,7 +1072,7 @@ nsImageFrame::Reflow(nsPresContext* aPresContext,
|
||||||
FinishAndStoreOverflow(&aMetrics, aReflowInput.mStyleDisplay);
|
FinishAndStoreOverflow(&aMetrics, aReflowInput.mStyleDisplay);
|
||||||
|
|
||||||
if ((GetStateBits() & NS_FRAME_FIRST_REFLOW) && !mReflowCallbackPosted) {
|
if ((GetStateBits() & NS_FRAME_FIRST_REFLOW) && !mReflowCallbackPosted) {
|
||||||
nsIPresShell* shell = PresContext()->PresShell();
|
nsIPresShell* shell = PresShell();
|
||||||
mReflowCallbackPosted = true;
|
mReflowCallbackPosted = true;
|
||||||
shell->PostReflowCallback(this);
|
shell->PostReflowCallback(this);
|
||||||
}
|
}
|
||||||
|
|
@ -2124,7 +2124,7 @@ nsImageFrame::GetCursor(const nsPoint& aPoint,
|
||||||
// here, since it means that areas on which the cursor isn't
|
// here, since it means that areas on which the cursor isn't
|
||||||
// specified will inherit the style from the image.
|
// specified will inherit the style from the image.
|
||||||
RefPtr<nsStyleContext> areaStyle =
|
RefPtr<nsStyleContext> areaStyle =
|
||||||
PresContext()->PresShell()->StyleSet()->
|
PresShell()->StyleSet()->
|
||||||
ResolveStyleFor(area->AsElement(), StyleContext(),
|
ResolveStyleFor(area->AsElement(), StyleContext(),
|
||||||
LazyComputeBehavior::Allow);
|
LazyComputeBehavior::Allow);
|
||||||
FillCursorInformationFromStyle(areaStyle->StyleUserInterface(),
|
FillCursorInformationFromStyle(areaStyle->StyleUserInterface(),
|
||||||
|
|
@ -2150,9 +2150,8 @@ nsImageFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
}
|
}
|
||||||
if (nsGkAtoms::alt == aAttribute)
|
if (nsGkAtoms::alt == aAttribute)
|
||||||
{
|
{
|
||||||
PresContext()->PresShell()->FrameNeedsReflow(this,
|
PresShell()->FrameNeedsReflow(this, nsIPresShell::eStyleChange,
|
||||||
nsIPresShell::eStyleChange,
|
NS_FRAME_IS_DIRTY);
|
||||||
NS_FRAME_IS_DIRTY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
||||||
|
|
@ -195,7 +195,7 @@ void
|
||||||
nsPluginFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
nsPluginFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
||||||
{
|
{
|
||||||
if (mReflowCallbackPosted) {
|
if (mReflowCallbackPosted) {
|
||||||
PresContext()->PresShell()->CancelReflowCallback(this);
|
PresShell()->CancelReflowCallback(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure our DidComposite observer is gone.
|
// Ensure our DidComposite observer is gone.
|
||||||
|
|
@ -359,7 +359,7 @@ nsPluginFrame::PrepForDrawing(nsIWidget *aWidget)
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
nsAccessibilityService* accService = nsIPresShell::AccService();
|
nsAccessibilityService* accService = nsIPresShell::AccService();
|
||||||
if (accService) {
|
if (accService) {
|
||||||
accService->RecreateAccessible(PresContext()->PresShell(), mContent);
|
accService->RecreateAccessible(PresShell(), mContent);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ nsSubDocumentFrame::GetSubdocumentPresShellForPainting(uint32_t aFlags)
|
||||||
|
|
||||||
nsIFrame* subdocRootFrame = subdocView->GetFrame();
|
nsIFrame* subdocRootFrame = subdocView->GetFrame();
|
||||||
if (subdocRootFrame) {
|
if (subdocRootFrame) {
|
||||||
presShell = subdocRootFrame->PresContext()->PresShell();
|
presShell = subdocRootFrame->PresShell();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If painting is suppressed in the presshell, we try to look for a better
|
// If painting is suppressed in the presshell, we try to look for a better
|
||||||
|
|
@ -237,7 +237,7 @@ nsSubDocumentFrame::GetSubdocumentPresShellForPainting(uint32_t aFlags)
|
||||||
frame = nextView->GetFrame();
|
frame = nextView->GetFrame();
|
||||||
}
|
}
|
||||||
if (frame) {
|
if (frame) {
|
||||||
nsIPresShell* ps = frame->PresContext()->PresShell();
|
nsIPresShell* ps = frame->PresShell();
|
||||||
if (!presShell || (ps && !ps->IsPaintingSuppressed() && sShowPreviousPage)) {
|
if (!presShell || (ps && !ps->IsPaintingSuppressed() && sShowPreviousPage)) {
|
||||||
subdocView = nextView;
|
subdocView = nextView;
|
||||||
subdocRootFrame = frame;
|
subdocRootFrame = frame;
|
||||||
|
|
@ -847,7 +847,7 @@ nsSubDocumentFrame::Reflow(nsPresContext* aPresContext,
|
||||||
FinishAndStoreOverflow(&aDesiredSize);
|
FinishAndStoreOverflow(&aDesiredSize);
|
||||||
|
|
||||||
if (!aPresContext->IsPaginated() && !mPostedReflowCallback) {
|
if (!aPresContext->IsPaginated() && !mPostedReflowCallback) {
|
||||||
PresContext()->PresShell()->PostReflowCallback(this);
|
PresShell()->PostReflowCallback(this);
|
||||||
mPostedReflowCallback = true;
|
mPostedReflowCallback = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -911,7 +911,7 @@ nsSubDocumentFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
else if (aAttribute == nsGkAtoms::showresizer) {
|
else if (aAttribute == nsGkAtoms::showresizer) {
|
||||||
nsIFrame* rootFrame = GetSubdocumentRootFrame();
|
nsIFrame* rootFrame = GetSubdocumentRootFrame();
|
||||||
if (rootFrame) {
|
if (rootFrame) {
|
||||||
rootFrame->PresContext()->PresShell()->
|
rootFrame->PresShell()->
|
||||||
FrameNeedsReflow(rootFrame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(rootFrame, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1000,7 +1000,7 @@ void
|
||||||
nsSubDocumentFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
nsSubDocumentFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData)
|
||||||
{
|
{
|
||||||
if (mPostedReflowCallback) {
|
if (mPostedReflowCallback) {
|
||||||
PresContext()->PresShell()->CancelReflowCallback(this);
|
PresShell()->CancelReflowCallback(this);
|
||||||
mPostedReflowCallback = false;
|
mPostedReflowCallback = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1021,7 +1021,7 @@ nsSubDocumentFrame::DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostD
|
||||||
nsContentUtils::AddScriptRunner(
|
nsContentUtils::AddScriptRunner(
|
||||||
new nsHideViewer(mContent,
|
new nsHideViewer(mContent,
|
||||||
frameloader,
|
frameloader,
|
||||||
PresContext()->PresShell(),
|
PresShell(),
|
||||||
(mDidCreateDoc || mCallingShow)));
|
(mDidCreateDoc || mCallingShow)));
|
||||||
} else {
|
} else {
|
||||||
frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
|
frameloader->SetDetachedSubdocFrame(nullptr, nullptr);
|
||||||
|
|
@ -1254,12 +1254,12 @@ nsSubDocumentFrame::EndSwapDocShells(nsIFrame* aOther)
|
||||||
// And repaint them, for good measure, in case there's nothing
|
// And repaint them, for good measure, in case there's nothing
|
||||||
// interesting that happens during reflow.
|
// interesting that happens during reflow.
|
||||||
if (weakThis.IsAlive()) {
|
if (weakThis.IsAlive()) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(this, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
||||||
InvalidateFrameSubtree();
|
InvalidateFrameSubtree();
|
||||||
}
|
}
|
||||||
if (weakOther.IsAlive()) {
|
if (weakOther.IsAlive()) {
|
||||||
other->PresContext()->PresShell()->
|
other->PresShell()->
|
||||||
FrameNeedsReflow(other, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(other, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
||||||
other->InvalidateFrameSubtree();
|
other->InvalidateFrameSubtree();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -681,7 +681,7 @@ InvalidateFrameDueToGlyphsChanged(nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(aFrame);
|
MOZ_ASSERT(aFrame);
|
||||||
|
|
||||||
nsIPresShell* shell = aFrame->PresContext()->PresShell();
|
nsIPresShell* shell = aFrame->PresShell();
|
||||||
for (nsIFrame* f = aFrame; f;
|
for (nsIFrame* f = aFrame; f;
|
||||||
f = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(f)) {
|
f = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(f)) {
|
||||||
f->InvalidateFrame();
|
f->InvalidateFrame();
|
||||||
|
|
@ -2036,7 +2036,7 @@ static already_AddRefed<DrawTarget>
|
||||||
CreateReferenceDrawTarget(const nsTextFrame* aTextFrame)
|
CreateReferenceDrawTarget(const nsTextFrame* aTextFrame)
|
||||||
{
|
{
|
||||||
RefPtr<gfxContext> ctx =
|
RefPtr<gfxContext> ctx =
|
||||||
aTextFrame->PresContext()->PresShell()->CreateReferenceRenderingContext();
|
aTextFrame->PresShell()->CreateReferenceRenderingContext();
|
||||||
RefPtr<DrawTarget> dt = ctx->GetDrawTarget();
|
RefPtr<DrawTarget> dt = ctx->GetDrawTarget();
|
||||||
return dt.forget();
|
return dt.forget();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@ nsDisplayRemote::nsDisplayRemote(nsDisplayListBuilder* aBuilder,
|
||||||
if (aBuilder->IsInsidePointerEventsNoneDoc() || frameIsPointerEventsNone) {
|
if (aBuilder->IsInsidePointerEventsNoneDoc() || frameIsPointerEventsNone) {
|
||||||
mEventRegionsOverride |= EventRegionsOverride::ForceEmptyHitRegion;
|
mEventRegionsOverride |= EventRegionsOverride::ForceEmptyHitRegion;
|
||||||
}
|
}
|
||||||
if (nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(aFrame->PresContext()->PresShell())) {
|
if (nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(aFrame->PresShell())) {
|
||||||
mEventRegionsOverride |= EventRegionsOverride::ForceDispatchToContent;
|
mEventRegionsOverride |= EventRegionsOverride::ForceDispatchToContent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -705,7 +705,7 @@ nsMathMLContainerFrame::ReLayoutChildren(nsIFrame* aParentFrame)
|
||||||
if (!parent)
|
if (!parent)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
frame->PresContext()->PresShell()->
|
frame->PresShell()->
|
||||||
FrameNeedsReflow(frame, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(frame, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
@ -770,7 +770,7 @@ nsMathMLContainerFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
// XXX Since they are numerous MathML attributes that affect layout, and
|
// XXX Since they are numerous MathML attributes that affect layout, and
|
||||||
// we can't check all of them here, play safe by requesting a reflow.
|
// we can't check all of them here, play safe by requesting a reflow.
|
||||||
// XXXldb This should only do work for attributes that cause changes!
|
// XXXldb This should only do work for attributes that cause changes!
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(this, nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
|
||||||
|
|
@ -226,7 +226,7 @@ nsMathMLmactionFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsReflow) {
|
if (needsReflow) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(this, nsIPresShell::eTreeChange, NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -333,7 +333,7 @@ nsMathMLmactionFrame::MouseClick()
|
||||||
mContent->SetAttr(kNameSpaceID_None, nsGkAtoms::selection_, value, notify);
|
mContent->SetAttr(kNameSpaceID_None, nsGkAtoms::selection_, value, notify);
|
||||||
|
|
||||||
// Now trigger a content-changed reflow...
|
// Now trigger a content-changed reflow...
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(mSelectedFrame, nsIPresShell::eTreeChange,
|
FrameNeedsReflow(mSelectedFrame, nsIPresShell::eTreeChange,
|
||||||
NS_FRAME_IS_DIRTY);
|
NS_FRAME_IS_DIRTY);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -743,7 +743,7 @@ nsMathMLmtableWrapperFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
|
|
||||||
// align - just need to issue a dirty (resize) reflow command
|
// align - just need to issue a dirty (resize) reflow command
|
||||||
if (aAttribute == nsGkAtoms::align) {
|
if (aAttribute == nsGkAtoms::align) {
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(this, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(this, nsIPresShell::eResize, NS_FRAME_IS_DIRTY);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
@ -755,7 +755,7 @@ nsMathMLmtableWrapperFrame::AttributeChanged(int32_t aNameSpaceID,
|
||||||
nsMathMLContainerFrame::RebuildAutomaticDataForChildren(GetParent());
|
nsMathMLContainerFrame::RebuildAutomaticDataForChildren(GetParent());
|
||||||
// Need to reflow the parent, not us, because this can actually
|
// Need to reflow the parent, not us, because this can actually
|
||||||
// affect siblings.
|
// affect siblings.
|
||||||
PresContext()->PresShell()->
|
PresShell()->
|
||||||
FrameNeedsReflow(GetParent(), nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
FrameNeedsReflow(GetParent(), nsIPresShell::eStyleChange, NS_FRAME_IS_DIRTY);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ void
|
||||||
nsMathMLmunderoverFrame::DestroyFrom(nsIFrame* aDestroyRoot, PostDestroyData& aPostDestroyData)
|
nsMathMLmunderoverFrame::DestroyFrom(nsIFrame* aDestroyRoot, PostDestroyData& aPostDestroyData)
|
||||||
{
|
{
|
||||||
if (!mPostReflowIncrementScriptLevelCommands.IsEmpty()) {
|
if (!mPostReflowIncrementScriptLevelCommands.IsEmpty()) {
|
||||||
PresContext()->PresShell()->CancelReflowCallback(this);
|
PresShell()->CancelReflowCallback(this);
|
||||||
}
|
}
|
||||||
nsMathMLContainerFrame::DestroyFrom(aDestroyRoot, aPostDestroyData);
|
nsMathMLContainerFrame::DestroyFrom(aDestroyRoot, aPostDestroyData);
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +119,7 @@ nsMathMLmunderoverFrame::SetIncrementScriptLevel(uint32_t aChildIndex,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mPostReflowIncrementScriptLevelCommands.IsEmpty()) {
|
if (mPostReflowIncrementScriptLevelCommands.IsEmpty()) {
|
||||||
PresContext()->PresShell()->PostReflowCallback(this);
|
PresShell()->PostReflowCallback(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
mPostReflowIncrementScriptLevelCommands.AppendElement(
|
mPostReflowIncrementScriptLevelCommands.AppendElement(
|
||||||
|
|
|
||||||
|
|
@ -1460,7 +1460,7 @@ nsCSSRendering::FindBackgroundFrame(nsIFrame* aForFrame,
|
||||||
nsIFrame** aBackgroundFrame)
|
nsIFrame** aBackgroundFrame)
|
||||||
{
|
{
|
||||||
nsIFrame* rootElementFrame =
|
nsIFrame* rootElementFrame =
|
||||||
aForFrame->PresContext()->PresShell()->FrameConstructor()->GetRootElementStyleFrame();
|
aForFrame->PresShell()->FrameConstructor()->GetRootElementStyleFrame();
|
||||||
if (IsCanvasFrame(aForFrame)) {
|
if (IsCanvasFrame(aForFrame)) {
|
||||||
*aBackgroundFrame = FindCanvasBackgroundFrame(aForFrame, rootElementFrame);
|
*aBackgroundFrame = FindCanvasBackgroundFrame(aForFrame, rootElementFrame);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -1125,7 +1125,7 @@ void nsDisplayListBuilder::MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame,
|
||||||
// position: fixed items are reflowed into and only drawn inside the
|
// position: fixed items are reflowed into and only drawn inside the
|
||||||
// viewport, or the scroll position clamping scrollport size, if one is
|
// viewport, or the scroll position clamping scrollport size, if one is
|
||||||
// set.
|
// set.
|
||||||
nsIPresShell* ps = aFrame->PresContext()->PresShell();
|
nsIPresShell* ps = aFrame->PresShell();
|
||||||
if (ps->IsScrollPositionClampingScrollPortSizeSet()) {
|
if (ps->IsScrollPositionClampingScrollPortSizeSet()) {
|
||||||
dirtyRectRelativeToDirtyFrame =
|
dirtyRectRelativeToDirtyFrame =
|
||||||
nsRect(nsPoint(0, 0), ps->GetScrollPositionClampingScrollPortSize());
|
nsRect(nsPoint(0, 0), ps->GetScrollPositionClampingScrollPortSize());
|
||||||
|
|
@ -1266,7 +1266,7 @@ nsDisplayListBuilder::EnterPresShell(nsIFrame* aReferenceFrame,
|
||||||
bool aPointerEventsNoneDoc)
|
bool aPointerEventsNoneDoc)
|
||||||
{
|
{
|
||||||
PresShellState* state = mPresShellStates.AppendElement();
|
PresShellState* state = mPresShellStates.AppendElement();
|
||||||
state->mPresShell = aReferenceFrame->PresContext()->PresShell();
|
state->mPresShell = aReferenceFrame->PresShell();
|
||||||
state->mCaretFrame = nullptr;
|
state->mCaretFrame = nullptr;
|
||||||
state->mFirstFrameMarkedForDisplay = mFramesMarkedForDisplay.Length();
|
state->mFirstFrameMarkedForDisplay = mFramesMarkedForDisplay.Length();
|
||||||
|
|
||||||
|
|
@ -1349,7 +1349,7 @@ void
|
||||||
nsDisplayListBuilder::LeavePresShell(nsIFrame* aReferenceFrame, nsDisplayList* aPaintedContents)
|
nsDisplayListBuilder::LeavePresShell(nsIFrame* aReferenceFrame, nsDisplayList* aPaintedContents)
|
||||||
{
|
{
|
||||||
NS_ASSERTION(CurrentPresShellState()->mPresShell ==
|
NS_ASSERTION(CurrentPresShellState()->mPresShell ==
|
||||||
aReferenceFrame->PresContext()->PresShell(),
|
aReferenceFrame->PresShell(),
|
||||||
"Presshell mismatch");
|
"Presshell mismatch");
|
||||||
|
|
||||||
if (mIsPaintingToWindow) {
|
if (mIsPaintingToWindow) {
|
||||||
|
|
@ -1444,7 +1444,7 @@ nsDisplayListBuilder::MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
|
||||||
// Store the current display data so that it can be used for fixed
|
// Store the current display data so that it can be used for fixed
|
||||||
// background images.
|
// background images.
|
||||||
NS_ASSERTION(CurrentPresShellState()->mPresShell ==
|
NS_ASSERTION(CurrentPresShellState()->mPresShell ==
|
||||||
aDirtyFrame->PresContext()->PresShell(),
|
aDirtyFrame->PresShell(),
|
||||||
"Presshell mismatch");
|
"Presshell mismatch");
|
||||||
MOZ_ASSERT(!CurrentPresShellState()->mFixedBackgroundDisplayData,
|
MOZ_ASSERT(!CurrentPresShellState()->mFixedBackgroundDisplayData,
|
||||||
"already traversed this presshell's root frame?");
|
"already traversed this presshell's root frame?");
|
||||||
|
|
@ -3274,7 +3274,7 @@ static Maybe<nsRect>
|
||||||
GetViewportRectRelativeToReferenceFrame(nsDisplayListBuilder* aBuilder,
|
GetViewportRectRelativeToReferenceFrame(nsDisplayListBuilder* aBuilder,
|
||||||
nsIFrame* aFrame)
|
nsIFrame* aFrame)
|
||||||
{
|
{
|
||||||
nsIFrame* rootFrame = aFrame->PresContext()->PresShell()->GetRootFrame();
|
nsIFrame* rootFrame = aFrame->PresShell()->GetRootFrame();
|
||||||
nsRect rootRect = rootFrame->GetRectRelativeToSelf();
|
nsRect rootRect = rootFrame->GetRectRelativeToSelf();
|
||||||
if (nsLayoutUtils::TransformRect(rootFrame, aFrame, rootRect) == nsLayoutUtils::TRANSFORM_SUCCEEDED) {
|
if (nsLayoutUtils::TransformRect(rootFrame, aFrame, rootRect) == nsLayoutUtils::TRANSFORM_SUCCEEDED) {
|
||||||
return Some(rootRect + aBuilder->ToReferenceFrame(aFrame));
|
return Some(rootRect + aBuilder->ToReferenceFrame(aFrame));
|
||||||
|
|
@ -6863,7 +6863,7 @@ nsDisplaySubDocument::nsDisplaySubDocument(nsDisplayListBuilder* aBuilder,
|
||||||
MOZ_COUNT_CTOR(nsDisplaySubDocument);
|
MOZ_COUNT_CTOR(nsDisplaySubDocument);
|
||||||
mForceDispatchToContentRegion =
|
mForceDispatchToContentRegion =
|
||||||
aBuilder->IsBuildingLayerEventRegions() &&
|
aBuilder->IsBuildingLayerEventRegions() &&
|
||||||
nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(aFrame->PresContext()->PresShell());
|
nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(aFrame->PresShell());
|
||||||
|
|
||||||
// The SubDocument display item is conceptually outside the viewport frame,
|
// The SubDocument display item is conceptually outside the viewport frame,
|
||||||
// so in cases where the viewport frame is an AGR, the SubDocument's AGR
|
// so in cases where the viewport frame is an AGR, the SubDocument's AGR
|
||||||
|
|
@ -6950,7 +6950,7 @@ nsDisplaySubDocument::ComputeVisibility(nsDisplayListBuilder* aBuilder,
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect displayport;
|
nsRect displayport;
|
||||||
nsIFrame* rootScrollFrame = mFrame->PresContext()->PresShell()->GetRootScrollFrame();
|
nsIFrame* rootScrollFrame = mFrame->PresShell()->GetRootScrollFrame();
|
||||||
MOZ_ASSERT(rootScrollFrame);
|
MOZ_ASSERT(rootScrollFrame);
|
||||||
Unused << nsLayoutUtils::GetDisplayPort(rootScrollFrame->GetContent(), &displayport,
|
Unused << nsLayoutUtils::GetDisplayPort(rootScrollFrame->GetContent(), &displayport,
|
||||||
RelativeTo::ScrollFrame);
|
RelativeTo::ScrollFrame);
|
||||||
|
|
@ -7027,7 +7027,7 @@ nsDisplayResolution::HitTest(nsDisplayListBuilder* aBuilder,
|
||||||
HitTestState* aState,
|
HitTestState* aState,
|
||||||
nsTArray<nsIFrame*> *aOutFrames)
|
nsTArray<nsIFrame*> *aOutFrames)
|
||||||
{
|
{
|
||||||
nsIPresShell* presShell = mFrame->PresContext()->PresShell();
|
nsIPresShell* presShell = mFrame->PresShell();
|
||||||
nsRect rect = aRect.RemoveResolution(presShell->ScaleToResolution() ? presShell->GetResolution () : 1.0f);
|
nsRect rect = aRect.RemoveResolution(presShell->ScaleToResolution() ? presShell->GetResolution () : 1.0f);
|
||||||
mList.HitTest(aBuilder, rect, aState, aOutFrames);
|
mList.HitTest(aBuilder, rect, aState, aOutFrames);
|
||||||
}
|
}
|
||||||
|
|
@ -7036,7 +7036,7 @@ already_AddRefed<Layer>
|
||||||
nsDisplayResolution::BuildLayer(nsDisplayListBuilder* aBuilder,
|
nsDisplayResolution::BuildLayer(nsDisplayListBuilder* aBuilder,
|
||||||
LayerManager* aManager,
|
LayerManager* aManager,
|
||||||
const ContainerLayerParameters& aContainerParameters) {
|
const ContainerLayerParameters& aContainerParameters) {
|
||||||
nsIPresShell* presShell = mFrame->PresContext()->PresShell();
|
nsIPresShell* presShell = mFrame->PresShell();
|
||||||
ContainerLayerParameters containerParameters(
|
ContainerLayerParameters containerParameters(
|
||||||
presShell->GetResolution(), presShell->GetResolution(), nsIntPoint(),
|
presShell->GetResolution(), presShell->GetResolution(), nsIntPoint(),
|
||||||
aContainerParameters);
|
aContainerParameters);
|
||||||
|
|
|
||||||
|
|
@ -3310,10 +3310,10 @@ public:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual void Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) override {
|
virtual void Paint(nsDisplayListBuilder* aBuilder, gfxContext* aCtx) override {
|
||||||
mFrame->PresContext()->PresShell()->PaintCount(mFrameName, aCtx,
|
mFrame->PresShell()->PaintCount(mFrameName, aCtx,
|
||||||
mFrame->PresContext(),
|
mFrame->PresContext(),
|
||||||
mFrame, ToReferenceFrame(),
|
mFrame, ToReferenceFrame(),
|
||||||
mColor);
|
mColor);
|
||||||
}
|
}
|
||||||
NS_DISPLAY_DECL_NAME("nsDisplayReflowCount", TYPE_REFLOW_COUNT)
|
NS_DISPLAY_DECL_NAME("nsDisplayReflowCount", TYPE_REFLOW_COUNT)
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -3324,7 +3324,7 @@ protected:
|
||||||
#define DO_GLOBAL_REFLOW_COUNT_DSP(_name) \
|
#define DO_GLOBAL_REFLOW_COUNT_DSP(_name) \
|
||||||
PR_BEGIN_MACRO \
|
PR_BEGIN_MACRO \
|
||||||
if (!aBuilder->IsBackgroundOnly() && !aBuilder->IsForEventDelivery() && \
|
if (!aBuilder->IsBackgroundOnly() && !aBuilder->IsForEventDelivery() && \
|
||||||
PresContext()->PresShell()->IsPaintingFrameCounts()) { \
|
PresShell()->IsPaintingFrameCounts()) { \
|
||||||
aLists.Outlines()->AppendNewToTop( \
|
aLists.Outlines()->AppendNewToTop( \
|
||||||
new (aBuilder) nsDisplayReflowCount(aBuilder, this, _name)); \
|
new (aBuilder) nsDisplayReflowCount(aBuilder, this, _name)); \
|
||||||
} \
|
} \
|
||||||
|
|
@ -3333,7 +3333,7 @@ protected:
|
||||||
#define DO_GLOBAL_REFLOW_COUNT_DSP_COLOR(_name, _color) \
|
#define DO_GLOBAL_REFLOW_COUNT_DSP_COLOR(_name, _color) \
|
||||||
PR_BEGIN_MACRO \
|
PR_BEGIN_MACRO \
|
||||||
if (!aBuilder->IsBackgroundOnly() && !aBuilder->IsForEventDelivery() && \
|
if (!aBuilder->IsBackgroundOnly() && !aBuilder->IsForEventDelivery() && \
|
||||||
PresContext()->PresShell()->IsPaintingFrameCounts()) { \
|
PresShell()->IsPaintingFrameCounts()) { \
|
||||||
aLists.Outlines()->AppendNewToTop( \
|
aLists.Outlines()->AppendNewToTop( \
|
||||||
new (aBuilder) nsDisplayReflowCount(aBuilder, this, _name, _color)); \
|
new (aBuilder) nsDisplayReflowCount(aBuilder, this, _name, _color)); \
|
||||||
} \
|
} \
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ skip-if(!asyncPan) == bg-fixed-cover-3.html bg-fixed-cover-3-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-child.html bg-fixed-child-ref.html
|
skip-if(!asyncPan) == bg-fixed-child.html bg-fixed-child-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-child-clip-1.html bg-fixed-child-clip-ref.html
|
skip-if(!asyncPan) == bg-fixed-child-clip-1.html bg-fixed-child-clip-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-child-clip-2.html bg-fixed-child-clip-ref.html
|
skip-if(!asyncPan) == bg-fixed-child-clip-2.html bg-fixed-child-clip-ref.html
|
||||||
fuzzy(1,246) fuzzy-if(skiaContent,2,170) fuzzy-if(browserIsRemote&&d2d,53,185) skip-if(!asyncPan) == bg-fixed-child-mask.html bg-fixed-child-mask-ref.html
|
fuzzy(1,246) fuzzy-if(skiaContent,2,170) fuzzy-if(browserIsRemote&&d2d,53,187) skip-if(!asyncPan) == bg-fixed-child-mask.html bg-fixed-child-mask-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-in-opacity.html bg-fixed-in-opacity-ref.html
|
skip-if(!asyncPan) == bg-fixed-in-opacity.html bg-fixed-in-opacity-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-child-no-culling-1.html bg-fixed-child-no-culling-1-ref.html
|
skip-if(!asyncPan) == bg-fixed-child-no-culling-1.html bg-fixed-child-no-culling-1-ref.html
|
||||||
skip-if(!asyncPan) == bg-fixed-child-no-culling-2.html bg-fixed-child-no-culling-2-ref.html
|
skip-if(!asyncPan) == bg-fixed-child-no-culling-2.html bg-fixed-child-no-culling-2-ref.html
|
||||||
|
|
|
||||||
|
|
@ -43,22 +43,22 @@ fuzzy-if(skiaContent,17,62) fuzzy-if(webrender,41-41,66-66) == clipping-3.html c
|
||||||
|
|
||||||
# Tests for clipping the contents of replaced elements and overflow!=visible
|
# Tests for clipping the contents of replaced elements and overflow!=visible
|
||||||
!= clipping-4-ref.html clipping-4-notref.html
|
!= clipping-4-ref.html clipping-4-notref.html
|
||||||
fuzzy-if(true,1,20) fuzzy-if(d2d,64,196) fuzzy-if(cocoaWidget,1,180) fuzzy-if(Android,140,237) == clipping-4-canvas.html clipping-4-ref.html # bug 732535
|
fuzzy-if(true,1,20) fuzzy-if(d2d,72,196) fuzzy-if(cocoaWidget,1,180) fuzzy-if(Android,140,237) == clipping-4-canvas.html clipping-4-ref.html # bug 732535
|
||||||
fuzzy-if(Android,5,54) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,10) fuzzy-if(skiaContent,1,172) == clipping-4-image.html clipping-4-ref.html
|
fuzzy-if(Android,5,54) fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,10) fuzzy-if(skiaContent,1,172) == clipping-4-image.html clipping-4-ref.html
|
||||||
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,10) fuzzy-if(skiaContent,1,77) == clipping-4-overflow-hidden.html clipping-4-ref.html
|
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,10) fuzzy-if(skiaContent,1,77) == clipping-4-overflow-hidden.html clipping-4-ref.html
|
||||||
== clipping-5-canvas.html clipping-5-refc.html
|
== clipping-5-canvas.html clipping-5-refc.html
|
||||||
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) == clipping-5-image.html clipping-5-refi.html
|
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) == clipping-5-image.html clipping-5-refi.html
|
||||||
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) fuzzy-if(skiaContent,1,77) == clipping-5-overflow-hidden.html clipping-5-ref.html
|
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) fuzzy-if(skiaContent,1,77) == clipping-5-overflow-hidden.html clipping-5-ref.html
|
||||||
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) fuzzy-if(Android,5,21) fuzzy-if(skiaContent,1,97) == clipping-5-refi.html clipping-5-ref.html
|
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) fuzzy-if(Android,5,21) fuzzy-if(skiaContent,1,97) == clipping-5-refi.html clipping-5-ref.html
|
||||||
fuzzy-if(true,1,7) fuzzy-if(d2d,48,94) fuzzy-if(cocoaWidget,1,99) fuzzy-if(Android,99,115) fuzzy-if(skiaContent,1,77) == clipping-5-refc.html clipping-5-ref.html # bug 732535
|
fuzzy-if(true,1,7) fuzzy-if(d2d,55,94) fuzzy-if(cocoaWidget,1,99) fuzzy-if(Android,99,115) fuzzy-if(skiaContent,1,77) == clipping-5-refc.html clipping-5-ref.html # bug 732535
|
||||||
fuzzy-if(winWidget,105,71) fuzzy-if(Android,8,469) fuzzy-if(skiaContent,7,58) fuzzy-if(d3d11&&advancedLayers,120,319) fuzzy-if(winWidget&&stylo,137,319) == clipping-6.html clipping-6-ref.html # PaintedLayer and MaskLayer with transforms that aren't identical
|
fuzzy-if(winWidget,105,71) fuzzy-if(Android,8,469) fuzzy-if(skiaContent,7,58) fuzzy-if(d3d11&&advancedLayers,120,319) fuzzy-if(winWidget&&stylo,137,319) == clipping-6.html clipping-6-ref.html # PaintedLayer and MaskLayer with transforms that aren't identical
|
||||||
fuzzy-if(true,2,29) fuzzy-if(d2d,46,71) fuzzy-if(Android,255,586) fuzzy-if(skiaContent,28,96) == clipping-7.html clipping-7-ref.html # ColorLayer and MaskLayer with transforms that aren't identical. Reference image rendered without using layers (which causes fuzzy failures).
|
fuzzy-if(true,2,29) fuzzy-if(d2d,46,71) fuzzy-if(Android,255,586) fuzzy-if(skiaContent,28,96) == clipping-7.html clipping-7-ref.html # ColorLayer and MaskLayer with transforms that aren't identical. Reference image rendered without using layers (which causes fuzzy failures).
|
||||||
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) == clipping-and-zindex-1.html clipping-and-zindex-1-ref.html
|
fuzzy-if(/^Windows\x20NT\x206\.2/.test(http.oscpu),1,5) == clipping-and-zindex-1.html clipping-and-zindex-1-ref.html
|
||||||
fuzzy-if(cocoaWidget,1,4) fuzzy-if(d3d11&&advancedLayers,30,3) == intersecting-clipping-1-canvas.html intersecting-clipping-1-refc.html
|
fuzzy-if(cocoaWidget,1,4) fuzzy-if(d2d,59,342) fuzzy-if(d3d11&&advancedLayers&&!d2d,30,3) == intersecting-clipping-1-canvas.html intersecting-clipping-1-refc.html
|
||||||
== intersecting-clipping-1-image.html intersecting-clipping-1-refi.html
|
== intersecting-clipping-1-image.html intersecting-clipping-1-refi.html
|
||||||
== intersecting-clipping-1-overflow-hidden.html intersecting-clipping-1-ref.html
|
== intersecting-clipping-1-overflow-hidden.html intersecting-clipping-1-ref.html
|
||||||
fuzzy-if(Android,5,105) fuzzy-if(d2d,1,20) fuzzy-if(skiaContent,1,300) == intersecting-clipping-1-refi.html intersecting-clipping-1-ref.html
|
fuzzy-if(Android,5,105) fuzzy-if(d2d,1,20) fuzzy-if(skiaContent,1,300) == intersecting-clipping-1-refi.html intersecting-clipping-1-ref.html
|
||||||
fuzzy-if(true,1,33) fuzzy-if(d2d,48,350) fuzzy-if(cocoaWidget,1,332) fuzzy-if(Android,124,440) fuzzy-if(skiaContent,1,135) fuzzy-if(d3d11&&advancedLayers,48,353) == intersecting-clipping-1-refc.html intersecting-clipping-1-ref.html # bug 732535
|
fuzzy-if(true,1,33) fuzzy-if(d2d,59,350) fuzzy-if(cocoaWidget,1,332) fuzzy-if(Android,124,440) fuzzy-if(skiaContent,1,135) fuzzy-if(d3d11&&advancedLayers,59,353) == intersecting-clipping-1-refc.html intersecting-clipping-1-ref.html # bug 732535
|
||||||
|
|
||||||
# Inheritance
|
# Inheritance
|
||||||
== inherit-1.html inherit-1-ref.html # border-radius shouldn't inherit
|
== inherit-1.html inherit-1-ref.html # border-radius shouldn't inherit
|
||||||
|
|
|
||||||
|
|
@ -1714,7 +1714,7 @@ needs-focus != 703186-1.html 703186-2.html
|
||||||
== 714519-1-q.html 714519-1-ref.html
|
== 714519-1-q.html 714519-1-ref.html
|
||||||
== 714519-2-as.html 714519-2-ref.html
|
== 714519-2-as.html 714519-2-ref.html
|
||||||
== 714519-2-q.html 714519-2-ref.html
|
== 714519-2-q.html 714519-2-ref.html
|
||||||
fuzzy-if(true,1,21) fuzzy-if(d2d,69,173) fuzzy-if(cocoaWidget,1,170) == 718521.html 718521-ref.html # bug 773482
|
fuzzy-if(true,1,21) fuzzy-if(d2d,71,173) fuzzy-if(cocoaWidget,1,170) == 718521.html 718521-ref.html # bug 773482
|
||||||
== 720987.html 720987-ref.html
|
== 720987.html 720987-ref.html
|
||||||
== 722888-1.html 722888-1-ref.html
|
== 722888-1.html 722888-1-ref.html
|
||||||
fuzzy(2,40000) == 722923-1.html 722923-1-ref.html
|
fuzzy(2,40000) == 722923-1.html 722923-1-ref.html
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>Reference: dynamic change .left on abs.pos. item w. align-self:center</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
position: relative;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: center;
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>CSS Grid Test: dynamic change .left on abs.pos. item w. align-self:center</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self">
|
||||||
|
<link rel="match" href="grid-item-align-dynamic-pos-001-ref.html">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
position: relative;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: center;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.offsetLeft;
|
||||||
|
var items = Array.prototype.slice.call(document.querySelectorAll('#item'));
|
||||||
|
items.map(item => item.style.left = "20px");
|
||||||
|
document.body.offsetLeft;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>Reference: dynamic change .left on abs.pos. item w. align-self:end</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
position: relative;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: end;
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>CSS Grid Test: dynamic change .left on abs.pos. item w. align-self:end</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self">
|
||||||
|
<link rel="match" href="grid-item-align-dynamic-pos-002-ref.html">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: end;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.offsetLeft;
|
||||||
|
var items = Array.prototype.slice.call(document.querySelectorAll('#item'));
|
||||||
|
items.map(item => item.style.left = "20px");
|
||||||
|
document.body.offsetLeft;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>Reference: dynamic change .left on abs.pos. item w. align-self:start</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
position: relative;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: start;
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div style="align-self: start; font-size:32pt">X</div>
|
||||||
|
<div id="item" style="grid-area:2/2">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>CSS Grid Test: dynamic change .left on abs.pos. item w. align-self:start</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self">
|
||||||
|
<link rel="match" href="grid-item-align-dynamic-pos-003-ref.html">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid {
|
||||||
|
display: inline-grid;
|
||||||
|
position: relative;
|
||||||
|
background: lightgrey;
|
||||||
|
grid: 50px 50px / 50px 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: start;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<div style="align-self: start; font-size:32pt">X</div>
|
||||||
|
<div id="item" style="grid-area:2/2">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.offsetLeft;
|
||||||
|
var items = Array.prototype.slice.call(document.querySelectorAll('#item'));
|
||||||
|
items.map(item => item.style.left = "20px");
|
||||||
|
document.body.offsetLeft;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -278,5 +278,9 @@ asserts(0-10) == grid-fragmentation-015.html grid-fragmentation-015-ref.html # b
|
||||||
== grid-fragmentation-dyn2-029.html grid-fragmentation-029-ref.html
|
== grid-fragmentation-dyn2-029.html grid-fragmentation-029-ref.html
|
||||||
== grid-fragmentation-dyn2-030.html grid-fragmentation-030-ref.html
|
== grid-fragmentation-dyn2-030.html grid-fragmentation-030-ref.html
|
||||||
== grid-fragmentation-dyn2-031.html grid-fragmentation-031-ref.html
|
== grid-fragmentation-dyn2-031.html grid-fragmentation-031-ref.html
|
||||||
|
|
||||||
== bug1306106.html bug1306106-ref.html
|
== bug1306106.html bug1306106-ref.html
|
||||||
== grid-percent-intrinsic-sizing-001.html grid-percent-intrinsic-sizing-001-ref.html
|
== grid-percent-intrinsic-sizing-001.html grid-percent-intrinsic-sizing-001-ref.html
|
||||||
|
== grid-item-align-dynamic-pos-001.html grid-item-align-dynamic-pos-001-ref.html
|
||||||
|
== grid-item-align-dynamic-pos-002.html grid-item-align-dynamic-pos-002-ref.html
|
||||||
|
== grid-item-align-dynamic-pos-003.html grid-item-align-dynamic-pos-003-ref.html
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>Reference: dynamic change .left on abs.pos. item w. align-self:center</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: relative;
|
||||||
|
align-self: center;
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="flexbox">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>CSS Flexbox Test: dynamic change .left on abs.pos. item w. align-self:center</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self">
|
||||||
|
<link rel="match" href="flexbox-item-align-self-dynamic-pos-001-ref.html">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: center;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="flexbox">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.offsetLeft;
|
||||||
|
var items = Array.prototype.slice.call(document.querySelectorAll('#item'));
|
||||||
|
items.map(item => item.style.left = "20px");
|
||||||
|
document.body.offsetLeft;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>Reference: dynamic change .left on abs.pos. item w. align-self:end</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: relative;
|
||||||
|
align-self: end;
|
||||||
|
left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="flexbox">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<!--
|
||||||
|
Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/
|
||||||
|
-->
|
||||||
|
<html><head>
|
||||||
|
<title>CSS Flexbox Test: dynamic change .left on abs.pos. item w. align-self:end</title>
|
||||||
|
<link rel="author" title="Mats Palmgren" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1405319">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-self">
|
||||||
|
<link rel="match" href="flexbox-item-align-self-dynamic-pos-002-ref.html">
|
||||||
|
<style type="text/css">
|
||||||
|
html,body {
|
||||||
|
color:black; background-color:white; font:16px/1 monospace; padding:0; margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flexbox {
|
||||||
|
display: flex;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#item {
|
||||||
|
background: grey;
|
||||||
|
position: absolute;
|
||||||
|
align-self: end;
|
||||||
|
left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="flexbox">
|
||||||
|
<div id="item">X</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.body.offsetLeft;
|
||||||
|
var items = Array.prototype.slice.call(document.querySelectorAll('#item'));
|
||||||
|
items.map(item => item.style.left = "20px");
|
||||||
|
document.body.offsetLeft;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -19,6 +19,8 @@ fails == flexbox-align-self-baseline-horiz-2.xhtml flexbox-align-self-baseline-
|
||||||
# background size in test vs. ref
|
# background size in test vs. ref
|
||||||
fuzzy-if(cocoaWidget,1,2) random-if(winWidget||gtkWidget) skip-if(Android) == flexbox-align-self-baseline-horiz-3.xhtml flexbox-align-self-baseline-horiz-3-ref.xhtml # XXXdholbert investigate the random-if. The skip-if(Android) is because checkbox/radio appearance:none doesn't work as expected.
|
fuzzy-if(cocoaWidget,1,2) random-if(winWidget||gtkWidget) skip-if(Android) == flexbox-align-self-baseline-horiz-3.xhtml flexbox-align-self-baseline-horiz-3-ref.xhtml # XXXdholbert investigate the random-if. The skip-if(Android) is because checkbox/radio appearance:none doesn't work as expected.
|
||||||
== flexbox-align-self-baseline-horiz-4.xhtml flexbox-align-self-baseline-horiz-4-ref.xhtml
|
== flexbox-align-self-baseline-horiz-4.xhtml flexbox-align-self-baseline-horiz-4-ref.xhtml
|
||||||
|
== flexbox-item-align-self-dynamic-pos-001.html flexbox-item-align-self-dynamic-pos-001-ref.html
|
||||||
|
== flexbox-item-align-self-dynamic-pos-002.html flexbox-item-align-self-dynamic-pos-002-ref.html
|
||||||
|
|
||||||
# Tests for box-sizing on flex containers and flex items.
|
# Tests for box-sizing on flex containers and flex items.
|
||||||
== flexbox-box-sizing-on-container-horiz-1.html flexbox-box-sizing-on-container-horiz-1-ref.html
|
== flexbox-box-sizing-on-container-horiz-1.html flexbox-box-sizing-on-container-horiz-1-ref.html
|
||||||
|
|
|
||||||
13
layout/style/crashtests/1415663.html
Normal file
13
layout/style/crashtests/1415663.html
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
function boom() {
|
||||||
|
document.getElementById('x').createShadowRoot()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload=boom()>
|
||||||
|
<marquee id='x'>
|
||||||
|
<table id='x'>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -260,4 +260,5 @@ load 1411143.html
|
||||||
load 1411478.html
|
load 1411478.html
|
||||||
load 1413288.html
|
load 1413288.html
|
||||||
load 1413361.html
|
load 1413361.html
|
||||||
|
load 1415663.html
|
||||||
pref(dom.webcomponents.enabled,true) load 1415353.html
|
pref(dom.webcomponents.enabled,true) load 1415353.html
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue