From 0ed4d27300e6f3b21e5ff7d0d58c66170a4df813 Mon Sep 17 00:00:00 2001 From: Fedor Date: Sat, 1 Jun 2024 19:28:12 +0300 Subject: [PATCH] 68.14.2 - everything else --- browser/actors/ContextMenuChild.jsm | 27 +- browser/actors/OfflineAppsChild.jsm | 26 - browser/app/nsBrowserApp.cpp | 1 + .../content/aboutDialog-appUpdater-legacy.js | 495 ++ .../base/content/aboutDialog-appUpdater.js | 470 +- browser/base/content/browser-siteIdentity.js | 7 +- browser/base/content/browser.js | 127 +- browser/base/content/nsContextMenu.js | 15 +- browser/base/content/test/about/head.js | 14 +- .../test_view_image_revoked_cached_blob.html | 40 + browser/base/content/test/general/browser.ini | 9 - .../test/general/browser_gZipOfflineChild.js | 92 - .../browser_offlineQuotaNotification.js | 106 - .../general/gZipOfflineChild.cacheManifest | 2 - .../gZipOfflineChild.cacheManifest^headers^ | 1 - .../test/general/gZipOfflineChild.html | Bin 303 -> 0 bytes .../general/gZipOfflineChild.html^headers^ | 2 - .../offlineQuotaNotification.cacheManifest | 7 - .../general/offlineQuotaNotification.html | 9 - .../test/general/test_offline_gzip.html | 21 - .../base/content/test/sanitize/browser.ini | 3 + .../browser_cookiePermission_subDomains.js | 230 +- browser/base/content/test/sanitize/head.js | 2 +- browser/base/jar.mn | 1 + ...I_cookie_getCookiesWithOriginAttributes.js | 10 +- .../test/browser/browser_forgetaboutsite.js | 10 +- ..._restore_getCookiesWithOriginAttributes.js | 16 +- .../enterprisepolicies/Policies.jsm | 6 +- .../browser/browser_policy_cookie_settings.js | 5 +- .../extensions/parent/ext-browsingData.js | 2 +- ..._ext_devtools_inspectedWindow_eval_file.js | 54 + .../browser_ext_tabs_create_invalid_url.js | 5 + .../browser_ext_tabs_executeScript_file.js | 91 + .../tests/marionette/test_refresh_firefox.py | 6 +- .../tests/unit/test_Chrome_cookies.js | 6 +- .../migration/tests/unit/test_IE_cookies.js | 6 +- .../test/browser/browser_cache.js | 1 + .../browser/browser_firstPartyIsolation.js | 2 +- .../tests/siteData/browser_siteData.js | 9 +- .../preferences/siteDataRemoveSelected.js | 18 +- .../preferences/siteDataSettings.js | 5 +- .../sessionstore/SessionCookies.jsm | 2 +- .../sessionstore/test/browser_423132.js | 4 +- .../shell/nsWindowsShellService.cpp | 1 + ...peculative_connect_not_with_client_cert.js | 5 +- browser/config/version.txt | 2 +- browser/config/version_display.txt | 2 +- browser/fonts/TwemojiMozilla.ttf | Bin 1474284 -> 1462780 bytes .../browser/preferences/siteDataSettings.ftl | 3 + .../en-US/chrome/browser/browser.properties | 4 - browser/modules/AppUpdater.jsm | 508 ++ browser/modules/FaviconLoader.jsm | 9 - browser/modules/Sanitizer.jsm | 7 +- browser/modules/SiteDataManager.jsm | 33 +- browser/modules/moz.build | 1 + caps/BasePrincipal.cpp | 45 + caps/BasePrincipal.h | 1 + caps/nsIPrincipal.idl | 6 + chrome/nsChromeRegistry.cpp | 1 + config/Makefile.in | 2 - config/milestone.txt | 2 +- .../src/object-inspector/actions.js | 3 +- .../object-inspector/utils/load-properties.js | 13 +- .../debugger/src/client/firefox/commands.js | 7 +- devtools/client/netmonitor/src/constants.js | 1 + .../test/browser_net_copy_headers.js | 2 +- .../client/shared/components/reps/reps.js | 8 +- .../client/webconsole/actions/autocomplete.js | 14 +- devtools/client/webconsole/actions/index.js | 2 - devtools/client/webconsole/actions/input.js | 171 +- .../client/webconsole/actions/messages.js | 31 +- devtools/client/webconsole/actions/moz.build | 2 - devtools/client/webconsole/actions/object.js | 53 - devtools/client/webconsole/actions/toolbox.js | 22 - devtools/client/webconsole/actions/ui.js | 21 - devtools/client/webconsole/commands.js | 59 - .../webconsole/components/Output/Message.js | 27 +- devtools/client/webconsole/moz.build | 1 - .../client/webconsole/service-container.js | 373 +- devtools/client/webconsole/store.js | 11 +- .../webconsole/test/browser/browser.ini | 2 + .../browser_webconsole_eval_sources.js | 2 +- ...nsole_stacktrace_location_debugger_link.js | 2 +- ...er_webconsole_trackingprotection_errors.js | 9 +- ...bconsole_warning_group_content_blocking.js | 12 + .../webconsole/test/browser/cookieSetter.html | 7 + .../client/webconsole/test/browser/head.js | 2 +- .../test/browser/test-image.png^headers^ | 1 + ...est-trackingprotection-securityerrors.html | 2 +- .../test/node/fixtures/serviceContainer.js | 2 +- .../client/webconsole/utils/context-menu.js | 136 +- devtools/client/webconsole/webconsole-ui.js | 61 - .../client/webconsole/webconsole-wrapper.js | 33 +- devtools/client/webconsole/webconsole.js | 110 +- .../network-response-listener.js | 2 +- devtools/server/actors/storage.js | 4 +- docshell/base/nsDocShell.cpp | 4 +- editor/libeditor/EditorBase.cpp | 1 + editor/libeditor/HTMLEditor.cpp | 1 + extensions/auth/nsAuthSSPI.cpp | 1 + extensions/permissions/nsContentBlocker.cpp | 4 +- gfx/2d/SVGTurbulenceRenderer-inl.h | 2 +- gfx/2d/Tools.h | 6 +- gfx/gl/GLReadTexImageHelper.cpp | 2 +- gfx/gl/SharedSurface.cpp | 2 +- gfx/layers/D3D11YCbCrImage.h | 6 +- gfx/layers/D3D9SurfaceImage.cpp | 2 +- gfx/layers/ImageContainer.cpp | 35 +- gfx/layers/ImageContainer.h | 113 +- gfx/layers/LayerScope.cpp | 2 +- gfx/layers/basic/BasicImages.cpp | 1 - gfx/layers/client/CanvasClient.cpp | 2 +- .../client/TextureClientRecycleAllocator.cpp | 16 +- .../client/TextureClientRecycleAllocator.h | 10 +- gfx/layers/ipc/SharedRGBImage.cpp | 32 +- gfx/layers/ipc/SharedRGBImage.h | 6 +- gfx/layers/mlgpu/LayerMLGPU.cpp | 3 + gfx/layers/mlgpu/LayerMLGPU.h | 1 + gfx/layers/mlgpu/LayerManagerMLGPU.cpp | 1 + gfx/layers/mlgpu/MLGPUScreenshotGrabber.cpp | 3 + gfx/layers/mlgpu/MLGPUScreenshotGrabber.h | 2 +- gfx/thebes/PrintTargetPS.cpp | 2 +- gfx/thebes/gfxFcPlatformFontList.cpp | 52 +- gfx/thebes/gfxFcPlatformFontList.h | 33 +- gfx/thebes/gfxFont.cpp | 2 +- gfx/thebes/gfxMacFont.cpp | 5 +- gfx/thebes/gfxPlatform.cpp | 12 +- hal/sandbox/SandboxHal.cpp | 1 - image/SurfaceFilters.h | 2 +- image/decoders/icon/mac/nsIconChannelCocoa.mm | 9 +- image/decoders/icon/win/nsIconChannel.cpp | 13 +- image/imgILoader.idl | 10 +- image/imgLoader.cpp | 428 +- image/imgLoader.h | 53 +- image/imgRequest.cpp | 30 +- image/imgRequest.h | 20 +- image/imgRequestProxy.cpp | 34 +- image/imgRequestProxy.h | 14 +- image/imgTools.cpp | 1 + image/test/gtest/TestAnimationFrameBuffer.cpp | 4 +- image/test/gtest/TestSourceBuffer.cpp | 7 +- intl/locale/nsCollation.cpp | 36 +- intl/locale/nsICollation.idl | 14 +- intl/locale/tests/gtest/TestCollation.cpp | 19 +- ipc/contentproc/plugin-container.cpp | 1 + ipc/glue/BackgroundUtils.cpp | 102 +- ipc/glue/TransportSecurityInfoUtils.cpp | 33 - ipc/glue/TransportSecurityInfoUtils.h | 7 - js/src/gc/Memory.cpp | 4 +- js/src/gc/moz.build | 6 + js/xpconnect/shell/xpcshell.cpp | 3 +- js/xpconnect/src/XPCJSRuntime.cpp | 3 +- layout/base/PresShell.cpp | 6 + layout/forms/nsFileControlFrame.cpp | 1 + layout/generic/nsImageFrame.cpp | 1 + .../test/test_selection_expanding.html | 2 +- layout/inspector/InspectorUtils.cpp | 23 +- layout/reftests/bugs/reftest.list | 2 +- layout/reftests/line-breaking/reftest.list | 2 +- layout/reftests/mathml/reftest.list | 4 +- layout/reftests/svg/reftest.list | 2 + .../reftests/svg/svg-integration/reftest.list | 2 +- .../svg/transform-origin-presentation-01.svg | 4 + .../w3c-css/submitted/variables/reftest.list | 6 +- layout/style/FontFaceSet.cpp | 118 +- layout/style/FontPreloader.cpp | 118 + layout/style/FontPreloader.h | 40 + layout/style/Loader.cpp | 180 +- layout/style/Loader.h | 53 +- layout/style/PaintWorkletImpl.h | 4 + layout/style/SheetLoadData.h | 28 +- layout/style/StreamLoader.cpp | 25 +- layout/style/StreamLoader.h | 11 +- layout/style/StyleSheet.cpp | 7 +- layout/style/moz.build | 2 + layout/tools/reftest/runreftest.py | 2 +- media/mtransport/WebrtcTCPSocketWrapper.cpp | 1 + media/mtransport/ipc/WebrtcTCPSocket.cpp | 2 +- mfbt/InitializedOnce.h | 58 +- mfbt/Move.h | 8 - mfbt/NotNull.h | 90 +- mfbt/UniquePtrExtensions.h | 1 + mfbt/WeakPtr.h | 8 +- mfbt/tests/TestNotNull.cpp | 37 +- mfbt/tests/gtest/TestInitializedOnce.cpp | 33 +- mobile/android/app/mobile.js | 1 - mobile/android/components/NSSDialogService.js | 20 +- .../components/extensions/ext-browsingData.js | 2 +- modules/libjar/nsJARChannel.cpp | 9 +- modules/libjar/nsJARProtocolHandler.cpp | 2 +- modules/libjar/nsJARURI.cpp | 1 - modules/libjar/nsZipArchive.cpp | 2 +- modules/libjar/nsZipArchive.h | 3 +- modules/libjar/zipwriter/nsZipDataStream.h | 1 - modules/libpref/Preferences.cpp | 19 +- modules/libpref/init/StaticPrefList.yaml | 97 +- modules/libpref/init/all.js | 47 +- nsprpub/.arcconfig | 5 + nsprpub/.hg-annotate-ignore-revs | 2 + nsprpub/TAG-INFO | 2 +- nsprpub/admin/makeTargetDirs.sh | 4 - nsprpub/admin/symlinks.sh | 3 - nsprpub/config/Makefile.in | 18 +- nsprpub/config/autoconf.mk.in | 1 - nsprpub/config/libc_r.h | 6 +- nsprpub/config/nsinstall.c | 535 +- nsprpub/config/prdepend.h | 1 - nsprpub/config/rules.mk | 7 +- nsprpub/configure | 470 +- nsprpub/configure.in | 344 +- nsprpub/lib/ds/Makefile.in | 4 - nsprpub/lib/ds/plarena.c | 64 +- nsprpub/lib/ds/plhash.c | 44 +- nsprpub/lib/ds/plvrsion.c | 6 +- nsprpub/lib/libc/include/plbase64.h | 8 +- nsprpub/lib/libc/include/plgetopt.h | 68 +- nsprpub/lib/libc/include/plstr.h | 30 +- nsprpub/lib/libc/src/Makefile.in | 4 - nsprpub/lib/libc/src/base64.c | 8 +- nsprpub/lib/libc/src/plerror.c | 20 +- nsprpub/lib/libc/src/plgetopt.c | 33 +- nsprpub/lib/libc/src/plvrsion.c | 6 +- nsprpub/lib/libc/src/strcase.c | 80 +- nsprpub/lib/libc/src/strcat.c | 13 +- nsprpub/lib/libc/src/strchr.c | 30 +- nsprpub/lib/libc/src/strcmp.c | 12 +- nsprpub/lib/libc/src/strcpy.c | 31 +- nsprpub/lib/libc/src/strdup.c | 14 +- nsprpub/lib/libc/src/strlen.c | 13 +- nsprpub/lib/libc/src/strpbrk.c | 25 +- nsprpub/lib/libc/src/strstr.c | 53 +- nsprpub/lib/libc/src/strtok.c | 15 +- nsprpub/lib/prstreams/Makefile.in | 6 - nsprpub/lib/prstreams/plvrsion.c | 6 +- nsprpub/lib/prstreams/prstrms.cpp | 7 +- nsprpub/lib/prstreams/prstrms.h | 44 +- .../prstreams/tests/testprstrm/Makefile.in | 8 - .../prstreams/tests/testprstrm/testprstrm.cpp | 233 +- nsprpub/lib/tests/Makefile.in | 8 - nsprpub/lib/tests/arena.c | 220 +- nsprpub/lib/tests/base64t.c | 3643 +++++---- nsprpub/lib/tests/getopt.c | 23 +- nsprpub/lib/tests/string.c | 2734 +++---- nsprpub/pr/include/gencfg.c | 118 +- nsprpub/pr/include/md/_aix.h | 106 +- nsprpub/pr/include/md/_beos.cfg | 119 - nsprpub/pr/include/md/_beos.h | 582 -- nsprpub/pr/include/md/_bsdi.h | 74 +- nsprpub/pr/include/md/_darwin.h | 58 +- nsprpub/pr/include/md/_dgux.cfg | 107 - nsprpub/pr/include/md/_dgux.h | 187 - nsprpub/pr/include/md/_freebsd.h | 54 +- nsprpub/pr/include/md/_hpux.h | 56 +- nsprpub/pr/include/md/_irix.h | 437 -- nsprpub/pr/include/md/_irix32.cfg | 118 - nsprpub/pr/include/md/_irix64.cfg | 117 - nsprpub/pr/include/md/_linux.cfg | 45 + nsprpub/pr/include/md/_linux.h | 50 +- nsprpub/pr/include/md/_netbsd.h | 52 +- nsprpub/pr/include/md/_nspr_pthread.h | 170 +- nsprpub/pr/include/md/_nto.h | 122 +- nsprpub/pr/include/md/_openbsd.h | 50 +- nsprpub/pr/include/md/_os2.h | 52 +- nsprpub/pr/include/md/_os2_errors.h | 78 +- nsprpub/pr/include/md/_osf1.cfg | 115 - nsprpub/pr/include/md/_osf1.h | 221 - nsprpub/pr/include/md/_pcos.h | 2 +- nsprpub/pr/include/md/_pth.h | 67 +- nsprpub/pr/include/md/_qnx.h | 118 +- nsprpub/pr/include/md/_riscos.h | 98 +- nsprpub/pr/include/md/_scoos.h | 102 +- nsprpub/pr/include/md/_solaris.h | 304 +- nsprpub/pr/include/md/_symbian.cfg | 169 - nsprpub/pr/include/md/_symbian.h | 49 - nsprpub/pr/include/md/_unix_errors.h | 78 +- nsprpub/pr/include/md/_unixos.h | 342 +- nsprpub/pr/include/md/_unixware.h | 86 +- nsprpub/pr/include/md/_win32_errors.h | 70 +- nsprpub/pr/include/md/_win95.h | 52 +- nsprpub/pr/include/md/_winnt.h | 58 +- nsprpub/pr/include/md/prosdep.h | 19 +- nsprpub/pr/include/obsolete/pralarm.h | 28 +- nsprpub/pr/include/obsolete/probslet.h | 48 +- nsprpub/pr/include/obsolete/protypes.h | 32 +- nsprpub/pr/include/obsolete/prsem.h | 26 +- nsprpub/pr/include/pratom.h | 36 +- nsprpub/pr/include/prbit.h | 44 +- nsprpub/pr/include/prclist.h | 60 +- nsprpub/pr/include/prcountr.h | 306 +- nsprpub/pr/include/prcvar.h | 4 +- nsprpub/pr/include/prdtoa.h | 2 +- nsprpub/pr/include/prenv.h | 52 +- nsprpub/pr/include/prerror.h | 30 +- nsprpub/pr/include/prinet.h | 8 +- nsprpub/pr/include/prinit.h | 14 +- nsprpub/pr/include/prinrval.h | 20 +- nsprpub/pr/include/prio.h | 196 +- nsprpub/pr/include/private/pprio.h | 48 +- nsprpub/pr/include/private/pprthred.h | 82 +- nsprpub/pr/include/private/primpl.h | 279 +- nsprpub/pr/include/prlink.h | 10 +- nsprpub/pr/include/prlock.h | 12 +- nsprpub/pr/include/prlog.h | 38 +- nsprpub/pr/include/prlong.h | 2 +- nsprpub/pr/include/prmem.h | 54 +- nsprpub/pr/include/prmwait.h | 4 +- nsprpub/pr/include/prnetdb.h | 52 +- nsprpub/pr/include/prolock.h | 86 +- nsprpub/pr/include/prpdce.h | 10 +- nsprpub/pr/include/prprf.h | 26 +- nsprpub/pr/include/prproces.h | 2 +- nsprpub/pr/include/prrng.h | 6 +- nsprpub/pr/include/prrwlock.h | 14 +- nsprpub/pr/include/prshm.h | 70 +- nsprpub/pr/include/prshma.h | 48 +- nsprpub/pr/include/prsystem.h | 4 +- nsprpub/pr/include/prthread.h | 40 +- nsprpub/pr/include/prtime.h | 34 +- nsprpub/pr/include/prtpool.h | 16 +- nsprpub/pr/include/prtrace.h | 414 +- nsprpub/pr/include/prtypes.h | 41 +- nsprpub/pr/include/prvrsion.h | 16 +- nsprpub/pr/include/prwin16.h | 26 +- nsprpub/pr/src/Makefile.in | 16 - nsprpub/pr/src/bthreads/Makefile.in | 31 - nsprpub/pr/src/bthreads/bsrcs.mk | 17 - nsprpub/pr/src/bthreads/btcvar.c | 243 - nsprpub/pr/src/bthreads/btlocks.c | 90 - nsprpub/pr/src/bthreads/btmisc.c | 71 - nsprpub/pr/src/bthreads/btmon.c | 200 - nsprpub/pr/src/bthreads/btsem.c | 97 - nsprpub/pr/src/bthreads/btthread.c | 661 -- nsprpub/pr/src/bthreads/objs.mk | 11 - nsprpub/pr/src/cplus/rcascii.h | 2 +- nsprpub/pr/src/cplus/rcbase.cpp | 16 +- nsprpub/pr/src/cplus/rcbase.h | 8 +- nsprpub/pr/src/cplus/rccv.cpp | 11 +- nsprpub/pr/src/cplus/rccv.h | 2 +- nsprpub/pr/src/cplus/rcfileio.cpp | 140 +- nsprpub/pr/src/cplus/rcfileio.h | 40 +- nsprpub/pr/src/cplus/rcinrval.cpp | 22 +- nsprpub/pr/src/cplus/rcinrval.h | 106 +- nsprpub/pr/src/cplus/rcio.h | 39 +- nsprpub/pr/src/cplus/rclock.cpp | 4 +- nsprpub/pr/src/cplus/rclock.h | 14 +- nsprpub/pr/src/cplus/rcnetdb.cpp | 75 +- nsprpub/pr/src/cplus/rcnetdb.h | 14 +- nsprpub/pr/src/cplus/rcnetio.cpp | 128 +- nsprpub/pr/src/cplus/rcnetio.h | 34 +- nsprpub/pr/src/cplus/rcthread.cpp | 81 +- nsprpub/pr/src/cplus/rcthread.h | 22 +- nsprpub/pr/src/cplus/rctime.cpp | 40 +- nsprpub/pr/src/cplus/rctime.h | 58 +- nsprpub/pr/src/cplus/tests/Makefile.in | 22 - nsprpub/pr/src/cplus/tests/ranfile.cpp | 205 +- nsprpub/pr/src/cplus/tests/switch.cpp | 168 +- nsprpub/pr/src/cplus/tests/thread.cpp | 6 +- nsprpub/pr/src/cplus/tests/tpd.cpp | 57 +- nsprpub/pr/src/io/prdir.c | 92 +- nsprpub/pr/src/io/prfdcach.c | 52 +- nsprpub/pr/src/io/prfile.c | 349 +- nsprpub/pr/src/io/prio.c | 130 +- nsprpub/pr/src/io/priometh.c | 139 +- nsprpub/pr/src/io/pripv6.c | 332 +- nsprpub/pr/src/io/prlayer.c | 279 +- nsprpub/pr/src/io/prlog.c | 52 +- nsprpub/pr/src/io/prmapopt.c | 66 +- nsprpub/pr/src/io/prmmap.c | 14 +- nsprpub/pr/src/io/prmwait.c | 267 +- nsprpub/pr/src/io/prpolevt.c | 50 +- nsprpub/pr/src/io/prprf.c | 1486 ++-- nsprpub/pr/src/io/prscanf.c | 82 +- nsprpub/pr/src/io/prsocket.c | 2011 ++--- nsprpub/pr/src/linking/prlink.c | 618 +- nsprpub/pr/src/malloc/prmalloc.c | 800 +- nsprpub/pr/src/malloc/prmem.c | 210 +- nsprpub/pr/src/md/beos/Makefile.in | 28 - nsprpub/pr/src/md/beos/bcpu.c | 22 - nsprpub/pr/src/md/beos/beos.c | 231 - nsprpub/pr/src/md/beos/beos_errors.c | 1493 ---- nsprpub/pr/src/md/beos/bfile.c | 872 --- nsprpub/pr/src/md/beos/bmemory.c | 9 - nsprpub/pr/src/md/beos/bmisc.c | 90 - nsprpub/pr/src/md/beos/bmmap.c | 40 - nsprpub/pr/src/md/beos/bnet.c | 910 --- nsprpub/pr/src/md/beos/bproc.c | 211 - nsprpub/pr/src/md/beos/brng.c | 39 - nsprpub/pr/src/md/beos/bseg.c | 21 - nsprpub/pr/src/md/beos/bsrcs.mk | 22 - nsprpub/pr/src/md/beos/btime.c | 42 - nsprpub/pr/src/md/beos/objs.mk | 11 - nsprpub/pr/src/md/os2/os2_errors.c | 1684 ++--- nsprpub/pr/src/md/os2/os2cv.c | 96 +- nsprpub/pr/src/md/os2/os2gc.c | 10 +- nsprpub/pr/src/md/os2/os2inrval.c | 11 +- nsprpub/pr/src/md/os2/os2io.c | 438 +- nsprpub/pr/src/md/os2/os2misc.c | 83 +- nsprpub/pr/src/md/os2/os2poll.c | 85 +- nsprpub/pr/src/md/os2/os2rng.c | 25 +- nsprpub/pr/src/md/os2/os2sem.c | 20 +- nsprpub/pr/src/md/os2/os2sock.c | 145 +- nsprpub/pr/src/md/os2/os2thred.c | 114 +- nsprpub/pr/src/md/prosdep.c | 19 +- nsprpub/pr/src/md/unix/aix.c | 133 +- nsprpub/pr/src/md/unix/aixwrap.c | 2 +- nsprpub/pr/src/md/unix/bsdi.c | 8 +- nsprpub/pr/src/md/unix/darwin.c | 12 +- nsprpub/pr/src/md/unix/freebsd.c | 12 +- nsprpub/pr/src/md/unix/hpux.c | 26 +- nsprpub/pr/src/md/unix/irix.c | 1647 ---- nsprpub/pr/src/md/unix/linux.c | 24 +- nsprpub/pr/src/md/unix/nto.c | 10 +- nsprpub/pr/src/md/unix/os_Irix.s | 133 - nsprpub/pr/src/md/unix/osf1.c | 74 - nsprpub/pr/src/md/unix/pthreads_user.c | 424 +- nsprpub/pr/src/md/unix/qnx.c | 6 +- nsprpub/pr/src/md/unix/riscos.c | 24 +- nsprpub/pr/src/md/unix/scoos.c | 13 +- nsprpub/pr/src/md/unix/solaris.c | 24 +- nsprpub/pr/src/md/unix/symbian.c | 15 - nsprpub/pr/src/md/unix/unix.c | 935 ++- nsprpub/pr/src/md/unix/unix_errors.c | 36 +- nsprpub/pr/src/md/unix/unixware.c | 218 +- nsprpub/pr/src/md/unix/uxpoll.c | 158 +- nsprpub/pr/src/md/unix/uxproces.c | 336 +- nsprpub/pr/src/md/unix/uxrng.c | 111 +- nsprpub/pr/src/md/unix/uxshm.c | 243 +- nsprpub/pr/src/md/unix/uxwrap.c | 119 +- nsprpub/pr/src/md/windows/ntdllmn.c | 5 +- nsprpub/pr/src/md/windows/ntgc.c | 16 +- nsprpub/pr/src/md/windows/ntinrval.c | 6 +- nsprpub/pr/src/md/windows/ntio.c | 2066 ++--- nsprpub/pr/src/md/windows/ntmisc.c | 645 +- nsprpub/pr/src/md/windows/ntsec.c | 66 +- nsprpub/pr/src/md/windows/ntsem.c | 16 +- nsprpub/pr/src/md/windows/ntthread.c | 185 +- nsprpub/pr/src/md/windows/w32ipcsem.c | 20 +- nsprpub/pr/src/md/windows/w32poll.c | 58 +- nsprpub/pr/src/md/windows/w32rng.c | 15 +- nsprpub/pr/src/md/windows/w32shm.c | 139 +- nsprpub/pr/src/md/windows/w95cv.c | 30 +- nsprpub/pr/src/md/windows/w95dllmain.c | 5 +- nsprpub/pr/src/md/windows/w95io.c | 363 +- nsprpub/pr/src/md/windows/w95sock.c | 114 +- nsprpub/pr/src/md/windows/w95thred.c | 143 +- nsprpub/pr/src/md/windows/win32_errors.c | 6 +- nsprpub/pr/src/memory/prseg.c | 26 +- nsprpub/pr/src/memory/prshm.c | 54 +- nsprpub/pr/src/memory/prshma.c | 22 +- nsprpub/pr/src/misc/dtoa.c | 6650 +++++++++-------- nsprpub/pr/src/misc/pralarm.c | 65 +- nsprpub/pr/src/misc/pratom.c | 215 +- nsprpub/pr/src/misc/praton.c | 87 +- nsprpub/pr/src/misc/prcountr.c | 211 +- nsprpub/pr/src/misc/prdtoa.c | 5042 +++++++------ nsprpub/pr/src/misc/prenv.c | 68 +- nsprpub/pr/src/misc/prerr.c | 156 +- nsprpub/pr/src/misc/prerror.c | 21 +- nsprpub/pr/src/misc/prerrortable.c | 94 +- nsprpub/pr/src/misc/prinit.c | 216 +- nsprpub/pr/src/misc/prinrval.c | 12 +- nsprpub/pr/src/misc/pripc.c | 2 +- nsprpub/pr/src/misc/pripcsem.c | 12 +- nsprpub/pr/src/misc/prlong.c | 355 +- nsprpub/pr/src/misc/prnetdb.c | 1301 ++-- nsprpub/pr/src/misc/prolock.c | 30 +- nsprpub/pr/src/misc/prrng.c | 16 +- nsprpub/pr/src/misc/prsystem.c | 141 +- nsprpub/pr/src/misc/prthinfo.c | 29 +- nsprpub/pr/src/misc/prtime.c | 1978 ++--- nsprpub/pr/src/misc/prtpool.c | 1919 ++--- nsprpub/pr/src/misc/prtrace.c | 369 +- nsprpub/pr/src/prvrsion.c | 6 +- nsprpub/pr/src/pthreads/ptio.c | 2310 +++--- nsprpub/pr/src/pthreads/ptmisc.c | 18 +- nsprpub/pr/src/pthreads/ptsynch.c | 164 +- nsprpub/pr/src/pthreads/ptthread.c | 562 +- nsprpub/pr/src/threads/combined/prucpu.c | 83 +- nsprpub/pr/src/threads/combined/prucv.c | 256 +- nsprpub/pr/src/threads/combined/prulock.c | 201 +- nsprpub/pr/src/threads/combined/prustack.c | 133 +- nsprpub/pr/src/threads/combined/pruthr.c | 765 +- nsprpub/pr/src/threads/prcmon.c | 56 +- nsprpub/pr/src/threads/prcthr.c | 199 +- nsprpub/pr/src/threads/prdump.c | 40 +- nsprpub/pr/src/threads/prmon.c | 37 +- nsprpub/pr/src/threads/prrwlock.c | 559 +- nsprpub/pr/src/threads/prsem.c | 89 +- nsprpub/pr/src/threads/prtpd.c | 42 +- nsprpub/pr/tests/Makefile.in | 45 - nsprpub/pr/tests/README.TXT | 6 - nsprpub/pr/tests/abstract.c | 244 +- nsprpub/pr/tests/accept.c | 369 +- nsprpub/pr/tests/acceptread.c | 75 +- nsprpub/pr/tests/acceptreademu.c | 81 +- nsprpub/pr/tests/addrstr.c | 40 +- nsprpub/pr/tests/affinity.c | 120 +- nsprpub/pr/tests/alarm.c | 259 +- nsprpub/pr/tests/anonfm.c | 142 +- nsprpub/pr/tests/append.c | 68 +- nsprpub/pr/tests/atomic.c | 2 +- nsprpub/pr/tests/attach.c | 276 +- nsprpub/pr/tests/bigfile.c | 203 +- nsprpub/pr/tests/bigfile2.c | 4 +- nsprpub/pr/tests/bigfile3.c | 2 +- nsprpub/pr/tests/bug1test.c | 273 +- nsprpub/pr/tests/cleanup.c | 72 +- nsprpub/pr/tests/cltsrv.c | 373 +- nsprpub/pr/tests/concur.c | 79 +- nsprpub/pr/tests/cvar.c | 242 +- nsprpub/pr/tests/cvar2.c | 162 +- nsprpub/pr/tests/dbmalloc.c | 91 +- nsprpub/pr/tests/dbmalloc1.c | 50 +- nsprpub/pr/tests/dceemu.c | 48 +- nsprpub/pr/tests/depend.c | 33 +- nsprpub/pr/tests/dll/mygetval.c | 2 +- nsprpub/pr/tests/dlltest.c | 74 +- nsprpub/pr/tests/dtoa.c | 98 +- nsprpub/pr/tests/env.c | 204 +- nsprpub/pr/tests/errcodes.c | 180 +- nsprpub/pr/tests/errset.c | 176 +- nsprpub/pr/tests/exit.c | 51 +- nsprpub/pr/tests/fdcach.c | 16 +- nsprpub/pr/tests/fileio.c | 218 +- nsprpub/pr/tests/foreign.c | 291 +- nsprpub/pr/tests/forktest.c | 57 +- nsprpub/pr/tests/formattm.c | 10 +- nsprpub/pr/tests/freeif.c | 12 +- nsprpub/pr/tests/fsync.c | 51 +- nsprpub/pr/tests/getai.c | 2 +- nsprpub/pr/tests/gethost.c | 86 +- nsprpub/pr/tests/getproto.c | 16 +- nsprpub/pr/tests/i2l.c | 30 +- nsprpub/pr/tests/initclk.c | 20 +- nsprpub/pr/tests/inrval.c | 131 +- nsprpub/pr/tests/instrumt.c | 243 +- nsprpub/pr/tests/intrio.c | 17 +- nsprpub/pr/tests/intrupt.c | 165 +- nsprpub/pr/tests/io_timeout.c | 205 +- nsprpub/pr/tests/io_timeoutk.c | 132 +- nsprpub/pr/tests/io_timeoutu.c | 136 +- nsprpub/pr/tests/ioconthr.c | 8 +- nsprpub/pr/tests/ipv6.c | 48 +- nsprpub/pr/tests/join.c | 154 +- nsprpub/pr/tests/joinkk.c | 180 +- nsprpub/pr/tests/joinku.c | 182 +- nsprpub/pr/tests/joinuk.c | 174 +- nsprpub/pr/tests/joinuu.c | 174 +- nsprpub/pr/tests/layer.c | 205 +- nsprpub/pr/tests/lazyinit.c | 45 +- nsprpub/pr/tests/libfilename.c | 8 +- nsprpub/pr/tests/lltest.c | 682 +- nsprpub/pr/tests/lock.c | 173 +- nsprpub/pr/tests/lockfile.c | 122 +- nsprpub/pr/tests/logger.c | 24 +- nsprpub/pr/tests/many_cv.c | 46 +- nsprpub/pr/tests/mbcs.c | 66 +- nsprpub/pr/tests/multiacc.c | 10 +- nsprpub/pr/tests/multiwait.c | 292 +- nsprpub/pr/tests/nameshm1.c | 235 +- nsprpub/pr/tests/nbconn.c | 815 +- nsprpub/pr/tests/nblayer.c | 415 +- nsprpub/pr/tests/nonblock.c | 106 +- nsprpub/pr/tests/ntioto.c | 141 +- nsprpub/pr/tests/ntoh.c | 24 +- nsprpub/pr/tests/obsints.c | 2 +- nsprpub/pr/tests/op_2long.c | 60 +- nsprpub/pr/tests/op_excl.c | 54 +- nsprpub/pr/tests/op_filnf.c | 38 +- nsprpub/pr/tests/op_filok.c | 32 +- nsprpub/pr/tests/op_nofil.c | 40 +- nsprpub/pr/tests/openfile.c | 2 +- nsprpub/pr/tests/parent.c | 20 +- nsprpub/pr/tests/parsetm.c | 26 +- nsprpub/pr/tests/peek.c | 30 +- nsprpub/pr/tests/perf.c | 171 +- nsprpub/pr/tests/pipeself.c | 124 +- nsprpub/pr/tests/poll_er.c | 156 +- nsprpub/pr/tests/poll_nm.c | 326 +- nsprpub/pr/tests/poll_to.c | 156 +- nsprpub/pr/tests/pollable.c | 26 +- nsprpub/pr/tests/prftest.c | 24 +- nsprpub/pr/tests/prftest1.c | 87 +- nsprpub/pr/tests/prftest2.c | 82 +- nsprpub/pr/tests/primblok.c | 4 +- nsprpub/pr/tests/priotest.c | 62 +- nsprpub/pr/tests/provider.c | 473 +- nsprpub/pr/tests/prpoll.c | 338 +- nsprpub/pr/tests/prpollml.c | 28 +- nsprpub/pr/tests/prselect.c | 340 +- nsprpub/pr/tests/randseed.c | 54 +- nsprpub/pr/tests/ranfile.c | 201 +- nsprpub/pr/tests/rmdir.c | 26 +- nsprpub/pr/tests/runtests.sh | 2 - nsprpub/pr/tests/rwlockrank.c | 14 +- nsprpub/pr/tests/rwlocktest.c | 288 +- nsprpub/pr/tests/sel_spd.c | 628 +- nsprpub/pr/tests/selct_er.c | 170 +- nsprpub/pr/tests/selct_nm.c | 286 +- nsprpub/pr/tests/selct_to.c | 150 +- nsprpub/pr/tests/select2.c | 219 +- nsprpub/pr/tests/selintr.c | 3 - nsprpub/pr/tests/sem.c | 245 +- nsprpub/pr/tests/sema.c | 14 +- nsprpub/pr/tests/semaerr.c | 10 +- nsprpub/pr/tests/semaerr1.c | 11 +- nsprpub/pr/tests/semaping.c | 15 +- nsprpub/pr/tests/semapong.c | 14 +- nsprpub/pr/tests/sendzlf.c | 22 +- nsprpub/pr/tests/server_test.c | 401 +- nsprpub/pr/tests/servr_kk.c | 377 +- nsprpub/pr/tests/servr_ku.c | 373 +- nsprpub/pr/tests/servr_uk.c | 374 +- nsprpub/pr/tests/servr_uu.c | 379 +- nsprpub/pr/tests/short_thread.c | 66 +- nsprpub/pr/tests/sigpipe.c | 7 +- nsprpub/pr/tests/sleep.c | 54 +- nsprpub/pr/tests/socket.c | 1162 ++- nsprpub/pr/tests/sockopt.c | 111 +- nsprpub/pr/tests/sprintf.c | 404 +- nsprpub/pr/tests/sproc_ch.c | 86 - nsprpub/pr/tests/sproc_p.c | 68 - nsprpub/pr/tests/stack.c | 448 +- nsprpub/pr/tests/stat.c | 16 +- nsprpub/pr/tests/stdio.c | 12 +- nsprpub/pr/tests/strod.c | 30 +- nsprpub/pr/tests/suspend.c | 56 +- nsprpub/pr/tests/switch.c | 185 +- nsprpub/pr/tests/system.c | 8 +- nsprpub/pr/tests/testbit.c | 50 +- nsprpub/pr/tests/testfile.c | 1530 ++-- nsprpub/pr/tests/threads.c | 64 +- nsprpub/pr/tests/thrpool_client.c | 83 +- nsprpub/pr/tests/thrpool_server.c | 499 +- nsprpub/pr/tests/thruput.c | 134 +- nsprpub/pr/tests/time.c | 78 +- nsprpub/pr/tests/timemac.c | 75 +- nsprpub/pr/tests/timetest.c | 1010 +-- nsprpub/pr/tests/tmoacc.c | 152 +- nsprpub/pr/tests/tmocon.c | 196 +- nsprpub/pr/tests/tpd.c | 60 +- nsprpub/pr/tests/udpsrv.c | 234 +- nsprpub/pr/tests/vercheck.c | 6 +- nsprpub/pr/tests/version.c | 93 +- nsprpub/pr/tests/writev.c | 103 +- nsprpub/pr/tests/xnotify.c | 212 +- nsprpub/pr/tests/y2k.c | 479 +- nsprpub/pr/tests/y2ktmo.c | 56 +- nsprpub/pr/tests/yield.c | 17 +- nsprpub/pr/tests/zerolen.c | 32 +- nsprpub/tools/Makefile.in | 8 - nsprpub/tools/httpget.c | 314 +- nsprpub/tools/tail.c | 164 +- old-configure.in | 4 +- parser/html/javasrc/AttributeName.java | 998 +-- parser/html/nsHtml5AttributeName.cpp | 910 +-- parser/html/nsHtml5AttributeName.h | 4 + parser/html/nsHtml5DocumentBuilder.cpp | 13 +- parser/html/nsHtml5Parser.cpp | 14 +- parser/html/nsHtml5Parser.h | 12 +- parser/html/nsHtml5Speculation.h | 6 +- parser/html/nsHtml5SpeculativeLoad.cpp | 26 +- parser/html/nsHtml5SpeculativeLoad.h | 59 +- parser/html/nsHtml5StreamParser.cpp | 9 +- parser/html/nsHtml5StreamParser.h | 10 +- parser/html/nsHtml5StringParser.cpp | 2 +- parser/html/nsHtml5StringParser.h | 5 +- parser/html/nsHtml5Tokenizer.cpp | 814 +- parser/html/nsHtml5TokenizerCppSupplement.h | 2 +- parser/html/nsHtml5TokenizerHSupplement.h | 2 +- parser/html/nsHtml5TreeBuilderCppSupplement.h | 66 +- parser/html/nsHtml5TreeOpExecutor.cpp | 58 +- parser/html/nsHtml5TreeOpExecutor.h | 13 +- parser/html/nsHtml5TreeOperation.cpp | 26 +- parser/html/nsParserUtils.cpp | 2 +- parser/htmlparser/nsExpatDriver.cpp | 1 + .../common/tests/unit/test_restrequest.js | 2 +- .../component/IdentityCryptoService.cpp | 22 +- startupcache/StartupCacheUtils.cpp | 1 - storage/StatementCache.h | 1 - storage/StorageBaseStatementInternal.h | 1 - storage/mozStorageAsyncStatement.h | 1 - storage/mozStorageAsyncStatementExecution.cpp | 2 - storage/mozStorageAsyncStatementExecution.h | 1 - storage/mozStorageBindingParamsArray.h | 1 - storage/mozStorageConnection.cpp | 1 - storage/mozStorageConnection.h | 1 - storage/mozStorageHelper.h | 1 - storage/mozStoragePrivateHelpers.h | 1 - storage/mozStorageService.cpp | 1 - storage/mozStorageStatement.h | 1 - storage/mozStorageStatementData.h | 1 - taskcluster/ci/source-test/python.yml | 34 + taskcluster/ci/test/misc.yml | 12 + taskcluster/ci/test/xpcshell.yml | 12 + .../scripts/genHPKPStaticPins.js | 2 +- toolkit/actors/WebNavigationChild.jsm | 6 +- .../antitracking/AntiTrackingCommon.cpp | 457 +- .../antitracking/AntiTrackingCommon.h | 8 +- toolkit/components/bitsdownload/Bits.jsm | 12 +- .../src/bits_interface/request.rs | 10 +- toolkit/components/browser/nsWebBrowser.cpp | 1 + .../components/cleardata/ClearDataService.jsm | 83 +- .../cleardata/SiteDataTestUtils.jsm | 34 + .../cleardata/nsIClearDataService.idl | 24 +- .../cleardata/tests/unit/test_certs.js | 107 + .../cleardata/tests/unit/test_cookies.js | 27 + .../cleardata/tests/unit/xpcshell.ini | 1 + .../ContextualIdentityService.jsm | 2 +- toolkit/components/downloads/DownloadCore.jsm | 5 +- .../extensions/WebExtensionPolicy.h | 6 +- .../extensions/parent/ext-cookies.js | 8 +- .../data/file_do_load_script_subresource.html | 9 + .../test/xpcshell/data/file_script.html | 14 + .../test/xpcshell/test_ext_cookieBehaviors.js | 387 +- .../test/xpcshell/test_ext_file_access.js | 145 + .../xpcshell/test_ext_webRequest_cached.js | 313 + .../test_ext_webRequest_cancelWithReason.js | 69 + .../test_ext_webRequest_filterResponseData.js | 105 + .../test/xpcshell/xpcshell-common.ini | 4 + .../extensions/webrequest/ChannelWrapper.cpp | 29 +- .../extensions/webrequest/ChannelWrapper.h | 2 +- .../extensions/webrequest/SecurityInfo.jsm | 4 +- .../webrequest/StreamFilterParent.cpp | 46 +- .../extensions/webrequest/WebRequest.jsm | 12 +- toolkit/components/find/nsWebBrowserFind.cpp | 1 + toolkit/components/places/nsFaviconService.h | 22 +- .../printingui/nsPrintingPromptService.cpp | 1 + .../components/remote/nsWinRemoteServer.cpp | 1 + toolkit/components/search/SearchEngine.jsm | 4 +- .../xpcshell/test_searchSuggest_cookies.js | 4 +- toolkit/components/telemetry/Histograms.json | 71 - toolkit/components/telemetry/core/Telemetry.h | 1 + .../telemetry/core/nsITelemetry.idl | 1 - .../telemetry/histogram-whitelists.json | 1 - .../tests/unit/test_TelemetrySend.js | 2 +- .../components/url-classifier/Classifier.cpp | 2 +- .../nsUrlClassifierDBService.cpp | 2 +- .../tests/mochitest/test_classify_track.html | 4 +- .../tests/mochitest/trackerFrame.html | 2 +- toolkit/forgetaboutsite/ForgetAboutSite.jsm | 4 +- .../test/browser/browser_cookieDomain.js | 2 +- .../test/unit/test_removeDataFromDomain.js | 14 +- toolkit/modules/CertUtils.jsm | 5 +- .../mozapps/extensions/AddonContentPolicy.cpp | 4 +- toolkit/mozapps/update/UpdateService.jsm | 30 +- toolkit/mozapps/update/nsIUpdateService.idl | 11 +- .../update/tests/browser/browser.bits.ini | 1 + .../mozapps/update/tests/browser/browser.ini | 2 + .../tests/browser/browser.legacy.bits.ini | 87 + .../update/tests/browser/browser.legacy.ini | 112 + .../browser_aboutDialog_legacyAppUpdater.js | 21 + .../browser_aboutDialog_newAppUpdater.js | 20 + .../update/tests/data/xpcshellUtilsAUS.js | 12 +- toolkit/mozapps/update/tests/moz.build | 2 + .../downloadInterruptedNoRecovery.js | 1 - .../downloadInterruptedOffline.js | 2 +- .../downloadInterruptedRecovery.js | 2 +- .../tests/unit_aus_update/remoteUpdateXML.js | 8 +- toolkit/profile/nsToolkitProfileService.cpp | 1 + toolkit/xre/Bootstrap.h | 6 + toolkit/xre/CmdLineAndEnvUtils.cpp | 2 + toolkit/xre/nsAppRunner.h | 1 + .../interface/harness/FuzzerTestHarness.h | 1 - tools/fuzzing/ipc/ProtocolFuzzer.h | 3 +- tools/fuzzing/libfuzzer/FuzzerUtilWindows.cpp | 4 +- tools/fuzzing/libfuzzer/moz.build | 8 + uriloader/base/nsDocLoader.cpp | 12 +- uriloader/base/nsDocLoader.h | 4 +- uriloader/base/nsITransfer.idl | 4 +- uriloader/base/nsURILoader.cpp | 1 - .../exthandler/ExternalHelperAppParent.cpp | 2 +- .../exthandler/nsExternalHelperAppService.cpp | 3 +- .../exthandler/nsExternalHelperAppService.h | 7 +- .../exthandler/nsExternalProtocolHandler.cpp | 6 +- uriloader/exthandler/unix/nsGNOMERegistry.cpp | 1 - uriloader/exthandler/unix/nsMIMEInfoUnix.cpp | 1 - .../exthandler/unix/nsOSHelperAppService.cpp | 1 - uriloader/exthandler/win/nsMIMEInfoWin.cpp | 1 - .../exthandler/win/nsOSHelperAppService.cpp | 1 - uriloader/moz.build | 1 + uriloader/prefetch/OfflineCacheUpdateGlue.h | 1 - uriloader/prefetch/nsOfflineCacheUpdate.h | 1 - .../prefetch/nsOfflineCacheUpdateService.cpp | 42 +- uriloader/prefetch/nsPrefetchService.cpp | 105 +- uriloader/prefetch/nsPrefetchService.h | 2 - uriloader/preload/FetchPreloader.cpp | 333 + uriloader/preload/FetchPreloader.h | 92 + uriloader/preload/PreloadHashKey.cpp | 241 + uriloader/preload/PreloadHashKey.h | 115 + uriloader/preload/PreloadService.cpp | 294 + uriloader/preload/PreloadService.h | 116 + uriloader/preload/PreloaderBase.cpp | 306 + uriloader/preload/PreloaderBase.h | 179 + .../preload/gtest/TestFetchPreloader.cpp | 952 +++ uriloader/preload/gtest/moz.build | 19 + uriloader/preload/moz.build | 24 + view/nsViewManager.cpp | 1 - widget/ContentCache.h | 4 +- widget/IMEData.h | 1 + widget/WidgetUtils.h | 5 +- widget/gtk/GRefPtr.h | 31 + widget/gtk/ProcInfo.cpp | 10 +- widget/gtk/nsDragService.cpp | 3 +- widget/gtk/nsDragService.h | 32 +- widget/nsClipboardHelper.cpp | 1 + widget/windows/ProcInfo.cpp | 12 +- widget/windows/WinMouseScrollHandler.cpp | 4 +- widget/windows/moz.build | 2 + xpcom/base/CodeAddressService.h | 5 +- xpcom/base/CountingAllocatorBase.h | 1 + xpcom/base/CycleCollectedJSRuntime.cpp | 13 +- xpcom/base/CycleCollectedJSRuntime.h | 10 +- xpcom/base/MemoryMapping.h | 5 +- xpcom/base/MemoryReportingProcess.h | 3 + xpcom/base/MemoryTelemetry.h | 3 +- xpcom/base/SizeOfState.h | 1 - xpcom/base/TupleCycleCollection.h | 4 +- xpcom/base/moz.build | 6 + xpcom/base/nsAlgorithm.h | 3 +- xpcom/base/nsAutoPtr.h | 2 +- xpcom/base/nsAutoRef.h | 91 +- xpcom/base/nsMemoryReporterManager.cpp | 22 +- xpcom/base/nsTraceRefcnt.cpp | 23 +- xpcom/build/nsXULAppAPI.h | 33 +- xpcom/components/nsComponentManager.cpp | 94 +- xpcom/components/nsServiceManagerUtils.h | 32 +- xpcom/ds/ArenaAllocator.h | 1 - xpcom/ds/PLDHashTable.cpp | 229 +- xpcom/ds/PLDHashTable.h | 96 +- xpcom/ds/StaticAtoms.py | 4 + xpcom/ds/nsAtom.h | 7 +- xpcom/ds/nsBaseHashtable.h | 442 +- xpcom/ds/nsCharSeparatedTokenizer.h | 2 +- xpcom/ds/nsClassHashtable.h | 3 +- xpcom/ds/nsDataHashtable.h | 17 - xpcom/ds/nsExpirationTracker.h | 15 +- xpcom/ds/nsHashPropertyBag.cpp | 8 +- xpcom/ds/nsJSThingHashtable.h | 1 + xpcom/ds/nsObserverList.h | 1 - xpcom/ds/nsObserverService.h | 2 - xpcom/ds/nsRefPtrHashtable.h | 4 +- xpcom/ds/nsTHashtable.h | 276 +- xpcom/ds/nsTObserverArray.h | 2 - xpcom/ds/nsTPriorityQueue.h | 2 +- xpcom/ds/nsWhitespaceTokenizer.h | 2 +- xpcom/idl-parser/xpidl/header.py | 9 + xpcom/io/nsDirectoryService.cpp | 25 +- xpcom/io/nsStreamUtils.cpp | 28 +- xpcom/string/nsTSubstring.h | 2 + xpcom/tests/gtest/TestAtoms.cpp | 1 + xpcom/tests/gtest/TestAutoRef.cpp | 48 - xpcom/tests/gtest/TestHashtables.cpp | 746 +- xpcom/tests/gtest/TestPLDHash.cpp | 67 +- xpcom/tests/gtest/moz.build | 1 - xpcom/threads/SchedulerGroup.cpp | 8 +- xpcom/threads/SharedThreadPool.cpp | 72 +- xpcom/threads/SystemGroup.cpp | 3 +- xpcom/threads/TaskQueue.h | 6 +- xpcom/threads/TimerThread.cpp | 4 +- xpcom/threads/nsProxyRelease.h | 13 +- xpcom/threads/nsTimerImpl.cpp | 12 +- xpfe/appshell/nsAppShellService.h | 1 - xpfe/appshell/nsContentTreeOwner.cpp | 3 - 864 files changed, 54593 insertions(+), 53978 deletions(-) create mode 100644 browser/base/content/aboutDialog-appUpdater-legacy.js create mode 100644 browser/base/content/test/contextMenu/test_view_image_revoked_cached_blob.html delete mode 100644 browser/base/content/test/general/browser_gZipOfflineChild.js delete mode 100644 browser/base/content/test/general/browser_offlineQuotaNotification.js delete mode 100644 browser/base/content/test/general/gZipOfflineChild.cacheManifest delete mode 100644 browser/base/content/test/general/gZipOfflineChild.cacheManifest^headers^ delete mode 100644 browser/base/content/test/general/gZipOfflineChild.html delete mode 100644 browser/base/content/test/general/gZipOfflineChild.html^headers^ delete mode 100644 browser/base/content/test/general/offlineQuotaNotification.cacheManifest delete mode 100644 browser/base/content/test/general/offlineQuotaNotification.html delete mode 100644 browser/base/content/test/general/test_offline_gzip.html create mode 100644 browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_file.js create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_executeScript_file.js create mode 100644 browser/modules/AppUpdater.jsm delete mode 100644 devtools/client/webconsole/actions/object.js delete mode 100644 devtools/client/webconsole/actions/toolbox.js delete mode 100644 devtools/client/webconsole/commands.js create mode 100644 devtools/client/webconsole/test/browser/cookieSetter.html create mode 100644 devtools/client/webconsole/test/browser/test-image.png^headers^ create mode 100644 layout/reftests/svg/transform-origin-presentation-01.svg create mode 100644 layout/style/FontPreloader.cpp create mode 100644 layout/style/FontPreloader.h create mode 100644 nsprpub/.arcconfig create mode 100644 nsprpub/.hg-annotate-ignore-revs delete mode 100644 nsprpub/pr/include/md/_beos.cfg delete mode 100644 nsprpub/pr/include/md/_beos.h delete mode 100644 nsprpub/pr/include/md/_dgux.cfg delete mode 100644 nsprpub/pr/include/md/_dgux.h delete mode 100644 nsprpub/pr/include/md/_irix.h delete mode 100644 nsprpub/pr/include/md/_irix32.cfg delete mode 100644 nsprpub/pr/include/md/_irix64.cfg delete mode 100644 nsprpub/pr/include/md/_osf1.cfg delete mode 100644 nsprpub/pr/include/md/_osf1.h delete mode 100644 nsprpub/pr/include/md/_symbian.cfg delete mode 100644 nsprpub/pr/include/md/_symbian.h delete mode 100644 nsprpub/pr/src/bthreads/Makefile.in delete mode 100644 nsprpub/pr/src/bthreads/bsrcs.mk delete mode 100644 nsprpub/pr/src/bthreads/btcvar.c delete mode 100644 nsprpub/pr/src/bthreads/btlocks.c delete mode 100644 nsprpub/pr/src/bthreads/btmisc.c delete mode 100644 nsprpub/pr/src/bthreads/btmon.c delete mode 100644 nsprpub/pr/src/bthreads/btsem.c delete mode 100644 nsprpub/pr/src/bthreads/btthread.c delete mode 100644 nsprpub/pr/src/bthreads/objs.mk delete mode 100644 nsprpub/pr/src/md/beos/Makefile.in delete mode 100644 nsprpub/pr/src/md/beos/bcpu.c delete mode 100644 nsprpub/pr/src/md/beos/beos.c delete mode 100644 nsprpub/pr/src/md/beos/beos_errors.c delete mode 100644 nsprpub/pr/src/md/beos/bfile.c delete mode 100644 nsprpub/pr/src/md/beos/bmemory.c delete mode 100644 nsprpub/pr/src/md/beos/bmisc.c delete mode 100644 nsprpub/pr/src/md/beos/bmmap.c delete mode 100644 nsprpub/pr/src/md/beos/bnet.c delete mode 100644 nsprpub/pr/src/md/beos/bproc.c delete mode 100644 nsprpub/pr/src/md/beos/brng.c delete mode 100644 nsprpub/pr/src/md/beos/bseg.c delete mode 100644 nsprpub/pr/src/md/beos/bsrcs.mk delete mode 100644 nsprpub/pr/src/md/beos/btime.c delete mode 100644 nsprpub/pr/src/md/beos/objs.mk delete mode 100644 nsprpub/pr/src/md/unix/irix.c delete mode 100644 nsprpub/pr/src/md/unix/os_Irix.s delete mode 100644 nsprpub/pr/src/md/unix/osf1.c delete mode 100644 nsprpub/pr/src/md/unix/symbian.c delete mode 100644 nsprpub/pr/tests/sproc_ch.c delete mode 100644 nsprpub/pr/tests/sproc_p.c create mode 100644 toolkit/components/cleardata/tests/unit/test_certs.js create mode 100644 toolkit/components/extensions/test/xpcshell/data/file_do_load_script_subresource.html create mode 100644 toolkit/components/extensions/test/xpcshell/data/file_script.html create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_file_access.js create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_webRequest_cached.js create mode 100644 toolkit/components/extensions/test/xpcshell/test_ext_webRequest_cancelWithReason.js create mode 100644 toolkit/mozapps/update/tests/browser/browser.legacy.bits.ini create mode 100644 toolkit/mozapps/update/tests/browser/browser.legacy.ini create mode 100644 toolkit/mozapps/update/tests/browser/browser_aboutDialog_legacyAppUpdater.js create mode 100644 toolkit/mozapps/update/tests/browser/browser_aboutDialog_newAppUpdater.js create mode 100644 uriloader/preload/FetchPreloader.cpp create mode 100644 uriloader/preload/FetchPreloader.h create mode 100644 uriloader/preload/PreloadHashKey.cpp create mode 100644 uriloader/preload/PreloadHashKey.h create mode 100644 uriloader/preload/PreloadService.cpp create mode 100644 uriloader/preload/PreloadService.h create mode 100644 uriloader/preload/PreloaderBase.cpp create mode 100644 uriloader/preload/PreloaderBase.h create mode 100644 uriloader/preload/gtest/TestFetchPreloader.cpp create mode 100644 uriloader/preload/gtest/moz.build create mode 100644 uriloader/preload/moz.build create mode 100644 widget/gtk/GRefPtr.h delete mode 100644 xpcom/tests/gtest/TestAutoRef.cpp diff --git a/browser/actors/ContextMenuChild.jsm b/browser/actors/ContextMenuChild.jsm index ffb43e5e4e..bcf0136f9e 100644 --- a/browser/actors/ContextMenuChild.jsm +++ b/browser/actors/ContextMenuChild.jsm @@ -655,9 +655,13 @@ class ContextMenuChild extends ActorChild { }; if (context.inFrame && !context.inSrcdocFrame) { - data.frameReferrerInfo = E10SUtils.serializeReferrerInfo( - doc.referrerInfo - ); + if (isRemote) { + data.frameReferrerInfo = E10SUtils.serializeReferrerInfo( + doc.referrerInfo + ); + } else { + data.frameReferrerInfo = doc.referrerInfo; + } } if (linkReferrerInfo) { @@ -962,9 +966,20 @@ class ContextMenuChild extends ActorChild { // currentRequestFinalURI. We should use that as the URL for purposes of // deciding on the filename, if it is present. It might not be present // if images are blocked. - context.mediaURL = ( - context.target.currentRequestFinalURI || context.target.currentURI - ).spec; + // + // It is important to check both the final and the current URI, as they + // could be different blob URIs, see bug 1625786. + context.mediaURL = (() => { + let finalURI = context.target.currentRequestFinalURI?.spec; + if (finalURI && this._isMediaURLReusable(finalURI)) { + return finalURI; + } + let currentURI = context.target.currentURI?.spec; + if (currentURI && this._isMediaURLReusable(currentURI)) { + return currentURI; + } + return ""; + })(); const descURL = context.target.getAttribute("longdesc"); diff --git a/browser/actors/OfflineAppsChild.jsm b/browser/actors/OfflineAppsChild.jsm index a74d4b5758..fc0c5e6f33 100644 --- a/browser/actors/OfflineAppsChild.jsm +++ b/browser/actors/OfflineAppsChild.jsm @@ -5,17 +5,10 @@ var EXPORTED_SYMBOLS = ["OfflineAppsChild"]; const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); -const { XPCOMUtils } = ChromeUtils.import( - "resource://gre/modules/XPCOMUtils.jsm" -); const { ActorChild } = ChromeUtils.import( "resource://gre/modules/ActorChild.jsm" ); -XPCOMUtils.defineLazyModuleGetters(this, { - E10SUtils: "resource://gre/modules/E10SUtils.jsm", -}); - class OfflineAppsChild extends ActorChild { constructor(dispatcher) { super(dispatcher); @@ -24,15 +17,9 @@ class OfflineAppsChild extends ActorChild { this._docIdMap = new Map(); this._docManifestSet = new Set(); - - this._observerAdded = false; } registerWindow(aWindow) { - if (!this._observerAdded) { - this._observerAdded = true; - Services.obs.addObserver(this, "offline-cache-update-completed", true); - } let manifestURI = this._getManifestURI(aWindow); this._docManifestSet.add(manifestURI.spec); } @@ -95,19 +82,6 @@ class OfflineAppsChild extends ActorChild { this._docIdMap.delete(aMessage.data.docId); } } - - observe(aSubject, aTopic, aState) { - if (aTopic == "offline-cache-update-completed") { - let cacheUpdate = aSubject.QueryInterface(Ci.nsIOfflineCacheUpdate); - let uri = cacheUpdate.manifestURI; - if (uri && this._docManifestSet.has(uri.spec)) { - this.mm.sendAsyncMessage("OfflineApps:CheckUsage", { - uri: uri.spec, - principal: E10SUtils.serializePrincipal(cacheUpdate.loadingPrincipal), - }); - } - } - } } OfflineAppsChild.prototype.QueryInterface = ChromeUtils.generateQI([ diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp index aac15916bd..7a14af4dcf 100644 --- a/browser/app/nsBrowserApp.cpp +++ b/browser/app/nsBrowserApp.cpp @@ -5,6 +5,7 @@ #include "nsXULAppAPI.h" #include "mozilla/CmdLineAndEnvUtils.h" #include "mozilla/XREAppData.h" +#include "XREShellData.h" #include "application.ini.h" #include "mozilla/Bootstrap.h" #if defined(XP_WIN) diff --git a/browser/base/content/aboutDialog-appUpdater-legacy.js b/browser/base/content/aboutDialog-appUpdater-legacy.js new file mode 100644 index 0000000000..f971b43930 --- /dev/null +++ b/browser/base/content/aboutDialog-appUpdater-legacy.js @@ -0,0 +1,495 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// Note: this file is included in aboutDialog.xul and preferences/advanced.xul +// if MOZ_UPDATER is defined. + +/* import-globals-from aboutDialog.js */ + +const PREF_APP_UPDATE_CANCELATIONS_OSX = "app.update.cancelations.osx"; +const PREF_APP_UPDATE_ELEVATE_NEVER = "app.update.elevate.never"; + +function onUnload(aEvent) { + if (gAppUpdater) { + if (gAppUpdater.isChecking) { + gAppUpdater.checker.stopCurrentCheck(); + } + // Safe to call even when there isn't a download in progress. + gAppUpdater.removeDownloadListener(); + gAppUpdater = null; + } +} + +function appUpdater(options = {}) { + XPCOMUtils.defineLazyServiceGetter( + this, + "aus", + "@mozilla.org/updates/update-service;1", + "nsIApplicationUpdateService" + ); + XPCOMUtils.defineLazyServiceGetter( + this, + "checker", + "@mozilla.org/updates/update-checker;1", + "nsIUpdateChecker" + ); + XPCOMUtils.defineLazyServiceGetter( + this, + "um", + "@mozilla.org/updates/update-manager;1", + "nsIUpdateManager" + ); + + this.options = options; + this.updateDeck = document.getElementById("updateDeck"); + this.promiseAutoUpdateSetting = null; + + this.bundle = Services.strings.createBundle( + "chrome://browser/locale/browser.properties" + ); + + let manualURL = Services.urlFormatter.formatURLPref("app.update.url.manual"); + let manualLink = document.getElementById("manualLink"); + manualLink.textContent = manualURL; + manualLink.href = manualURL; + document.getElementById("failedLink").href = manualURL; + + if (this.updateDisabledByPolicy) { + this.selectPanel("policyDisabled"); + return; + } + + if (this.isReadyForRestart) { + this.selectPanel("apply"); + return; + } + + if (this.aus.isOtherInstanceHandlingUpdates) { + this.selectPanel("otherInstanceHandlingUpdates"); + return; + } + + if (this.isDownloading) { + this.startDownload(); + // selectPanel("downloading") is called from setupDownloadingUI(). + return; + } + + if (this.isStaging) { + this.waitForUpdateToStage(); + // selectPanel("applying"); is called from waitForUpdateToStage(). + return; + } + + // We might need this value later, so start loading it from the disk now. + this.promiseAutoUpdateSetting = UpdateUtils.getAppUpdateAutoEnabled(); + + // That leaves the options + // "Check for updates, but let me choose whether to install them", and + // "Automatically install updates". + // In both cases, we check for updates without asking. + // In the "let me choose" case, we ask before downloading though, in onCheckComplete. + this.checkForUpdates(); +} + +appUpdater.prototype = { + // true when there is an update check in progress. + isChecking: false, + + // true when there is an update ready to be applied on restart or staged. + get isPending() { + if (this.update) { + return ( + this.update.state == "pending" || + this.update.state == "pending-service" || + this.update.state == "pending-elevate" + ); + } + return ( + this.um.activeUpdate && + (this.um.activeUpdate.state == "pending" || + this.um.activeUpdate.state == "pending-service" || + this.um.activeUpdate.state == "pending-elevate") + ); + }, + + // true when there is an update already staged. + get isApplied() { + if (this.update) { + return ( + this.update.state == "applied" || this.update.state == "applied-service" + ); + } + return ( + this.um.activeUpdate && + (this.um.activeUpdate.state == "applied" || + this.um.activeUpdate.state == "applied-service") + ); + }, + + get isStaging() { + if (!this.updateStagingEnabled) { + return false; + } + let errorCode; + if (this.update) { + errorCode = this.update.errorCode; + } else if (this.um.activeUpdate) { + errorCode = this.um.activeUpdate.errorCode; + } + // If the state is pending and the error code is not 0, staging must have + // failed. + return this.isPending && errorCode == 0; + }, + + // true when an update ready to restart to finish the update process. + get isReadyForRestart() { + if (this.updateStagingEnabled) { + let errorCode; + if (this.update) { + errorCode = this.update.errorCode; + } else if (this.um.activeUpdate) { + errorCode = this.um.activeUpdate.errorCode; + } + // If the state is pending and the error code is not 0, staging must have + // failed and Firefox should be restarted to try to apply the update + // without staging. + return this.isApplied || (this.isPending && errorCode != 0); + } + return this.isPending; + }, + + // true when there is an update download in progress. + get isDownloading() { + if (this.update) { + return this.update.state == "downloading"; + } + return this.um.activeUpdate && this.um.activeUpdate.state == "downloading"; + }, + + // true when updating has been disabled by enterprise policy + get updateDisabledByPolicy() { + return Services.policies && !Services.policies.isAllowed("appUpdate"); + }, + + // true when updating in background is enabled. + get updateStagingEnabled() { + return !this.updateDisabledByPolicy && this.aus.canStageUpdates; + }, + + /** + * Sets the panel of the updateDeck. + * + * @param aChildID + * The id of the deck's child to select, e.g. "apply". + */ + selectPanel(aChildID) { + let panel = document.getElementById(aChildID); + + let button = panel.querySelector("button"); + if (button) { + if (aChildID == "downloadAndInstall") { + let updateVersion = gAppUpdater.update.displayVersion; + // Include the build ID if this is an "a#" (nightly or aurora) build + if (/a\d+$/.test(updateVersion)) { + let buildID = gAppUpdater.update.buildID; + let year = buildID.slice(0, 4); + let month = buildID.slice(4, 6); + let day = buildID.slice(6, 8); + updateVersion += ` (${year}-${month}-${day})`; + } + button.label = this.bundle.formatStringFromName( + "update.downloadAndInstallButton.label", + [updateVersion] + ); + button.accessKey = this.bundle.GetStringFromName( + "update.downloadAndInstallButton.accesskey" + ); + } + this.updateDeck.selectedPanel = panel; + if ( + this.options.buttonAutoFocus && + (!document.commandDispatcher.focusedElement || // don't steal the focus + document.commandDispatcher.focusedElement.localName == "button") + ) { + // except from the other buttons + button.focus(); + } + } else { + this.updateDeck.selectedPanel = panel; + } + }, + + /** + * Check for updates + */ + checkForUpdates() { + // Clear prefs that could prevent a user from discovering available updates. + if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_CANCELATIONS_OSX)) { + Services.prefs.clearUserPref(PREF_APP_UPDATE_CANCELATIONS_OSX); + } + if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_ELEVATE_NEVER)) { + Services.prefs.clearUserPref(PREF_APP_UPDATE_ELEVATE_NEVER); + } + this.selectPanel("checkingForUpdates"); + this.isChecking = true; + this.checker.checkForUpdates(this.updateCheckListener, true); + // after checking, onCheckComplete() is called + }, + + /** + * Handles oncommand for the "Restart to Update" button + * which is presented after the download has been downloaded. + */ + buttonRestartAfterDownload() { + if (!this.isReadyForRestart) { + return; + } + + gAppUpdater.selectPanel("restarting"); + + // Notify all windows that an application quit has been requested. + let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"].createInstance( + Ci.nsISupportsPRBool + ); + Services.obs.notifyObservers( + cancelQuit, + "quit-application-requested", + "restart" + ); + + // Something aborted the quit process. + if (cancelQuit.data) { + gAppUpdater.selectPanel("apply"); + return; + } + + // If already in safe mode restart in safe mode (bug 327119) + if (Services.appinfo.inSafeMode) { + Services.startup.restartInSafeMode(Ci.nsIAppStartup.eAttemptQuit); + return; + } + + Services.startup.quit( + Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart + ); + }, + + /** + * Implements nsIUpdateCheckListener. The methods implemented by + * nsIUpdateCheckListener are in a different scope from nsIIncrementalDownload + * to make it clear which are used by each interface. + */ + updateCheckListener: { + /** + * See nsIUpdateService.idl + */ + onCheckComplete(aRequest, aUpdates) { + gAppUpdater.isChecking = false; + gAppUpdater.update = gAppUpdater.aus.selectUpdate(aUpdates); + if (!gAppUpdater.update) { + gAppUpdater.selectPanel("noUpdatesFound"); + return; + } + + if (gAppUpdater.update.unsupported) { + if (gAppUpdater.update.detailsURL) { + let unsupportedLink = document.getElementById("unsupportedLink"); + unsupportedLink.href = gAppUpdater.update.detailsURL; + } + gAppUpdater.selectPanel("unsupportedSystem"); + return; + } + + if (!gAppUpdater.aus.canApplyUpdates) { + gAppUpdater.selectPanel("manualUpdate"); + return; + } + + if (!gAppUpdater.promiseAutoUpdateSetting) { + gAppUpdater.promiseAutoUpdateSetting = UpdateUtils.getAppUpdateAutoEnabled(); + } + gAppUpdater.promiseAutoUpdateSetting.then(updateAuto => { + if (updateAuto) { + // automatically download and install + gAppUpdater.startDownload(); + } else { + // ask + gAppUpdater.selectPanel("downloadAndInstall"); + } + }); + }, + + /** + * See nsIUpdateService.idl + */ + onError(aRequest, aUpdate) { + // Errors in the update check are treated as no updates found. If the + // update check fails repeatedly without a success the user will be + // notified with the normal app update user interface so this is safe. + gAppUpdater.isChecking = false; + gAppUpdater.selectPanel("noUpdatesFound"); + }, + + /** + * See nsISupports.idl + */ + QueryInterface: ChromeUtils.generateQI(["nsIUpdateCheckListener"]), + }, + + /** + * Shows the applying UI until the update has finished staging + */ + waitForUpdateToStage() { + if (!this.update) { + this.update = this.um.activeUpdate; + } + this.update.QueryInterface(Ci.nsIWritablePropertyBag); + this.update.setProperty("foregroundDownload", "true"); + this.selectPanel("applying"); + this.updateUIWhenStagingComplete(); + }, + + /** + * Starts the download of an update mar. + */ + startDownload() { + if (!this.update) { + this.update = this.um.activeUpdate; + } + this.update.QueryInterface(Ci.nsIWritablePropertyBag); + this.update.setProperty("foregroundDownload", "true"); + + let state = this.aus.downloadUpdate(this.update, false); + if (state == "failed") { + this.selectPanel("downloadFailed"); + return; + } + + this.setupDownloadingUI(); + }, + + /** + * Switches to the UI responsible for tracking the download. + */ + setupDownloadingUI() { + this.downloadStatus = document.getElementById("downloadStatus"); + this.downloadStatus.textContent = DownloadUtils.getTransferTotal( + 0, + this.update.selectedPatch.size + ); + this.selectPanel("downloading"); + this.aus.addDownloadListener(this); + }, + + removeDownloadListener() { + if (this.aus) { + this.aus.removeDownloadListener(this); + } + }, + + /** + * See nsIRequestObserver.idl + */ + onStartRequest(aRequest) {}, + + /** + * See nsIRequestObserver.idl + */ + onStopRequest(aRequest, aStatusCode) { + switch (aStatusCode) { + case Cr.NS_ERROR_UNEXPECTED: + if ( + this.update.selectedPatch.state == "download-failed" && + (this.update.isCompleteUpdate || this.update.patchCount != 2) + ) { + // Verification error of complete patch, informational text is held in + // the update object. + this.removeDownloadListener(); + this.selectPanel("downloadFailed"); + break; + } + // Verification failed for a partial patch, complete patch is now + // downloading so return early and do NOT remove the download listener! + break; + case Cr.NS_BINDING_ABORTED: + // Do not remove UI listener since the user may resume downloading again. + break; + case Cr.NS_OK: + this.removeDownloadListener(); + if (this.updateStagingEnabled) { + this.selectPanel("applying"); + this.updateUIWhenStagingComplete(); + } else { + this.selectPanel("apply"); + } + break; + default: + this.removeDownloadListener(); + this.selectPanel("downloadFailed"); + break; + } + }, + + /** + * See nsIProgressEventSink.idl + */ + onStatus(aRequest, aStatus, aStatusArg) {}, + + /** + * See nsIProgressEventSink.idl + */ + onProgress(aRequest, aProgress, aProgressMax) { + this.downloadStatus.textContent = DownloadUtils.getTransferTotal( + aProgress, + aProgressMax + ); + }, + + /** + * This function registers an observer that watches for the staging process + * to complete. Once it does, it updates the UI to either request that the + * user restarts to install the update on success, request that the user + * manually download and install the newer version, or automatically download + * a complete update if applicable. + */ + updateUIWhenStagingComplete() { + let observer = (aSubject, aTopic, aData) => { + // Update the UI when the background updater is finished + let status = aData; + if ( + status == "applied" || + status == "applied-service" || + status == "pending" || + status == "pending-service" || + status == "pending-elevate" + ) { + // If the update is successfully applied, or if the updater has + // fallen back to non-staged updates, show the "Restart to Update" + // button. + this.selectPanel("apply"); + } else if (status == "failed") { + // Background update has failed, let's show the UI responsible for + // prompting the user to update manually. + this.selectPanel("downloadFailed"); + } else if (status == "downloading") { + // We've fallen back to downloading the complete update because the + // partial update failed to get staged in the background. + // Therefore we need to keep our observer. + this.setupDownloadingUI(); + return; + } + Services.obs.removeObserver(observer, "update-staged"); + }; + Services.obs.addObserver(observer, "update-staged"); + }, + + /** + * See nsISupports.idl + */ + QueryInterface: ChromeUtils.generateQI([ + "nsIProgressEventSink", + "nsIRequestObserver", + ]), +}; diff --git a/browser/base/content/aboutDialog-appUpdater.js b/browser/base/content/aboutDialog-appUpdater.js index 3a761b48e2..b421f01b7d 100644 --- a/browser/base/content/aboutDialog-appUpdater.js +++ b/browser/base/content/aboutDialog-appUpdater.js @@ -7,60 +7,53 @@ /* import-globals-from aboutDialog.js */ +// These two eslint directives should be removed when we remove handling for the +// legacy app updater. +/* eslint-disable prettier/prettier */ +/* global AppUpdater, appUpdater, onUnload */ + var { XPCOMUtils } = ChromeUtils.import( "resource://gre/modules/XPCOMUtils.jsm" ); +XPCOMUtils.defineLazyModuleGetters(this, { + DownloadUtils: "resource://gre/modules/DownloadUtils.jsm", + UpdateUtils: "resource://gre/modules/UpdateUtils.jsm", +}); -ChromeUtils.defineModuleGetter( - this, - "DownloadUtils", - "resource://gre/modules/DownloadUtils.jsm" -); -ChromeUtils.defineModuleGetter( - this, - "UpdateUtils", - "resource://gre/modules/UpdateUtils.jsm" -); +var gAppUpdater; -const PREF_APP_UPDATE_CANCELATIONS_OSX = "app.update.cancelations.osx"; -const PREF_APP_UPDATE_ELEVATE_NEVER = "app.update.elevate.never"; +(() => { -var gAppUpdater; +// If the new app updater is preffed off, load the legacy version. +if (!Services.prefs.getBoolPref("browser.aboutDialogNewAppUpdater", false)) { + Services.scriptloader.loadSubScript( + "chrome://browser/content/aboutDialog-appUpdater-legacy.js", + this + ); + return; +} + +XPCOMUtils.defineLazyModuleGetters(this, { + AppUpdater: "resource:///modules/AppUpdater.jsm", +}); function onUnload(aEvent) { if (gAppUpdater) { - if (gAppUpdater.isChecking) { - gAppUpdater.checker.stopCurrentCheck(); - } - // Safe to call even when there isn't a download in progress. - gAppUpdater.removeDownloadListener(); + gAppUpdater.stopCurrentCheck(); gAppUpdater = null; } } function appUpdater(options = {}) { - XPCOMUtils.defineLazyServiceGetter( - this, - "aus", - "@mozilla.org/updates/update-service;1", - "nsIApplicationUpdateService" - ); - XPCOMUtils.defineLazyServiceGetter( - this, - "checker", - "@mozilla.org/updates/update-checker;1", - "nsIUpdateChecker" - ); - XPCOMUtils.defineLazyServiceGetter( - this, - "um", - "@mozilla.org/updates/update-manager;1", - "nsIUpdateManager" - ); + this._appUpdater = new AppUpdater(); + + this._appUpdateListener = (status, ...args) => { + this._onAppUpdateStatus(status, ...args); + }; + this._appUpdater.addListener(this._appUpdateListener); this.options = options; this.updateDeck = document.getElementById("updateDeck"); - this.promiseAutoUpdateSetting = null; this.bundle = Services.strings.createBundle( "chrome://browser/locale/browser.properties" @@ -72,127 +65,72 @@ function appUpdater(options = {}) { manualLink.href = manualURL; document.getElementById("failedLink").href = manualURL; - if (this.updateDisabledByPolicy) { - this.selectPanel("policyDisabled"); - return; - } - - if (this.isReadyForRestart) { - this.selectPanel("apply"); - return; - } - - if (this.aus.isOtherInstanceHandlingUpdates) { - this.selectPanel("otherInstanceHandlingUpdates"); - return; - } - - if (this.isDownloading) { - this.startDownload(); - // selectPanel("downloading") is called from setupDownloadingUI(). - return; - } - - if (this.isStaging) { - this.waitForUpdateToStage(); - // selectPanel("applying"); is called from waitForUpdateToStage(). - return; - } - - // We might need this value later, so start loading it from the disk now. - this.promiseAutoUpdateSetting = UpdateUtils.getAppUpdateAutoEnabled(); - - // That leaves the options - // "Check for updates, but let me choose whether to install them", and - // "Automatically install updates". - // In both cases, we check for updates without asking. - // In the "let me choose" case, we ask before downloading though, in onCheckComplete. - this.checkForUpdates(); + this._appUpdater.check(); } appUpdater.prototype = { - // true when there is an update check in progress. - isChecking: false, - - // true when there is an update ready to be applied on restart or staged. - get isPending() { - if (this.update) { - return ( - this.update.state == "pending" || - this.update.state == "pending-service" || - this.update.state == "pending-elevate" - ); - } - return ( - this.um.activeUpdate && - (this.um.activeUpdate.state == "pending" || - this.um.activeUpdate.state == "pending-service" || - this.um.activeUpdate.state == "pending-elevate") - ); - }, - - // true when there is an update already staged. - get isApplied() { - if (this.update) { - return ( - this.update.state == "applied" || this.update.state == "applied-service" - ); - } - return ( - this.um.activeUpdate && - (this.um.activeUpdate.state == "applied" || - this.um.activeUpdate.state == "applied-service") - ); - }, - - get isStaging() { - if (!this.updateStagingEnabled) { - return false; - } - let errorCode; - if (this.update) { - errorCode = this.update.errorCode; - } else if (this.um.activeUpdate) { - errorCode = this.um.activeUpdate.errorCode; - } - // If the state is pending and the error code is not 0, staging must have - // failed. - return this.isPending && errorCode == 0; + stopCurrentCheck() { + this._appUpdater.removeListener(this._appUpdateListener); + this._appUpdater.stop(); }, - // true when an update ready to restart to finish the update process. - get isReadyForRestart() { - if (this.updateStagingEnabled) { - let errorCode; - if (this.update) { - errorCode = this.update.errorCode; - } else if (this.um.activeUpdate) { - errorCode = this.um.activeUpdate.errorCode; - } - // If the state is pending and the error code is not 0, staging must have - // failed and Firefox should be restarted to try to apply the update - // without staging. - return this.isApplied || (this.isPending && errorCode != 0); - } - return this.isPending; + get update() { + return this._appUpdater.update; }, - // true when there is an update download in progress. - get isDownloading() { - if (this.update) { - return this.update.state == "downloading"; + _onAppUpdateStatus(status, ...args) { + switch (status) { + case AppUpdater.STATUS.UPDATE_DISABLED_BY_POLICY: + this.selectPanel("policyDisabled"); + break; + case AppUpdater.STATUS.READY_FOR_RESTART: + this.selectPanel("apply"); + break; + case AppUpdater.STATUS.OTHER_INSTANCE_HANDLING_UPDATES: + this.selectPanel("otherInstanceHandlingUpdates"); + break; + case AppUpdater.STATUS.DOWNLOADING: + if (!args.length) { + this.downloadStatus = document.getElementById("downloadStatus"); + this.downloadStatus.textContent = DownloadUtils.getTransferTotal( + 0, + this.update.selectedPatch.size + ); + this.selectPanel("downloading"); + } else { + let [progress, max] = args; + this.downloadStatus.textContent = DownloadUtils.getTransferTotal( + progress, + max + ); + } + break; + case AppUpdater.STATUS.STAGING: + this.selectPanel("applying"); + break; + case AppUpdater.STATUS.CHECKING: + this.selectPanel("checkingForUpdates"); + break; + case AppUpdater.STATUS.NO_UPDATES_FOUND: + this.selectPanel("noUpdatesFound"); + break; + case AppUpdater.STATUS.UNSUPPORTED_SYSTEM: + if (this.update.detailsURL) { + let unsupportedLink = document.getElementById("unsupportedLink"); + unsupportedLink.href = this.update.detailsURL; + } + this.selectPanel("unsupportedSystem"); + break; + case AppUpdater.STATUS.MANUAL_UPDATE: + this.selectPanel("manualUpdate"); + break; + case AppUpdater.STATUS.DOWNLOAD_AND_INSTALL: + this.selectPanel("downloadAndInstall"); + break; + case AppUpdater.STATUS.DOWNLOAD_FAILED: + this.selectPanel("downloadFailed"); + break; } - return this.um.activeUpdate && this.um.activeUpdate.state == "downloading"; - }, - - // true when updating has been disabled by enterprise policy - get updateDisabledByPolicy() { - return Services.policies && !Services.policies.isAllowed("appUpdate"); - }, - - // true when updating in background is enabled. - get updateStagingEnabled() { - return !this.updateDisabledByPolicy && this.aus.canStageUpdates; }, /** @@ -242,17 +180,7 @@ appUpdater.prototype = { * Check for updates */ checkForUpdates() { - // Clear prefs that could prevent a user from discovering available updates. - if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_CANCELATIONS_OSX)) { - Services.prefs.clearUserPref(PREF_APP_UPDATE_CANCELATIONS_OSX); - } - if (Services.prefs.prefHasUserValue(PREF_APP_UPDATE_ELEVATE_NEVER)) { - Services.prefs.clearUserPref(PREF_APP_UPDATE_ELEVATE_NEVER); - } - this.selectPanel("checkingForUpdates"); - this.isChecking = true; - this.checker.checkForUpdates(this.updateCheckListener, true); - // after checking, onCheckComplete() is called + this._appUpdater.checkForUpdates(); }, /** @@ -260,7 +188,7 @@ appUpdater.prototype = { * which is presented after the download has been downloaded. */ buttonRestartAfterDownload() { - if (!this.isReadyForRestart) { + if (!this._appUpdater.isReadyForRestart) { return; } @@ -293,223 +221,15 @@ appUpdater.prototype = { ); }, - /** - * Implements nsIUpdateCheckListener. The methods implemented by - * nsIUpdateCheckListener are in a different scope from nsIIncrementalDownload - * to make it clear which are used by each interface. - */ - updateCheckListener: { - /** - * See nsIUpdateService.idl - */ - onCheckComplete(aRequest, aUpdates, aUpdateCount) { - gAppUpdater.isChecking = false; - gAppUpdater.update = gAppUpdater.aus.selectUpdate( - aUpdates, - aUpdates.length - ); - if (!gAppUpdater.update) { - gAppUpdater.selectPanel("noUpdatesFound"); - return; - } - - if (gAppUpdater.update.unsupported) { - if (gAppUpdater.update.detailsURL) { - let unsupportedLink = document.getElementById("unsupportedLink"); - unsupportedLink.href = gAppUpdater.update.detailsURL; - } - gAppUpdater.selectPanel("unsupportedSystem"); - return; - } - - if (!gAppUpdater.aus.canApplyUpdates) { - gAppUpdater.selectPanel("manualUpdate"); - return; - } - - if (!gAppUpdater.promiseAutoUpdateSetting) { - gAppUpdater.promiseAutoUpdateSetting = UpdateUtils.getAppUpdateAutoEnabled(); - } - gAppUpdater.promiseAutoUpdateSetting.then(updateAuto => { - if (updateAuto) { - // automatically download and install - gAppUpdater.startDownload(); - } else { - // ask - gAppUpdater.selectPanel("downloadAndInstall"); - } - }); - }, - - /** - * See nsIUpdateService.idl - */ - onError(aRequest, aUpdate) { - // Errors in the update check are treated as no updates found. If the - // update check fails repeatedly without a success the user will be - // notified with the normal app update user interface so this is safe. - gAppUpdater.isChecking = false; - gAppUpdater.selectPanel("noUpdatesFound"); - }, - - /** - * See nsISupports.idl - */ - QueryInterface: ChromeUtils.generateQI(["nsIUpdateCheckListener"]), - }, - - /** - * Shows the applying UI until the update has finished staging - */ - waitForUpdateToStage() { - if (!this.update) { - this.update = this.um.activeUpdate; - } - this.update.QueryInterface(Ci.nsIWritablePropertyBag); - this.update.setProperty("foregroundDownload", "true"); - this.selectPanel("applying"); - this.updateUIWhenStagingComplete(); - }, - /** * Starts the download of an update mar. */ startDownload() { - if (!this.update) { - this.update = this.um.activeUpdate; - } - this.update.QueryInterface(Ci.nsIWritablePropertyBag); - this.update.setProperty("foregroundDownload", "true"); - - let state = this.aus.downloadUpdate(this.update, false); - if (state == "failed") { - this.selectPanel("downloadFailed"); - return; - } - - this.setupDownloadingUI(); - }, - - /** - * Switches to the UI responsible for tracking the download. - */ - setupDownloadingUI() { - this.downloadStatus = document.getElementById("downloadStatus"); - this.downloadStatus.textContent = DownloadUtils.getTransferTotal( - 0, - this.update.selectedPatch.size - ); - this.selectPanel("downloading"); - this.aus.addDownloadListener(this); - }, - - removeDownloadListener() { - if (this.aus) { - this.aus.removeDownloadListener(this); - } - }, - - /** - * See nsIRequestObserver.idl - */ - onStartRequest(aRequest) {}, - - /** - * See nsIRequestObserver.idl - */ - onStopRequest(aRequest, aStatusCode) { - switch (aStatusCode) { - case Cr.NS_ERROR_UNEXPECTED: - if ( - this.update.selectedPatch.state == "download-failed" && - (this.update.isCompleteUpdate || this.update.patchCount != 2) - ) { - // Verification error of complete patch, informational text is held in - // the update object. - this.removeDownloadListener(); - this.selectPanel("downloadFailed"); - break; - } - // Verification failed for a partial patch, complete patch is now - // downloading so return early and do NOT remove the download listener! - break; - case Cr.NS_BINDING_ABORTED: - // Do not remove UI listener since the user may resume downloading again. - break; - case Cr.NS_OK: - this.removeDownloadListener(); - if (this.updateStagingEnabled) { - this.selectPanel("applying"); - this.updateUIWhenStagingComplete(); - } else { - this.selectPanel("apply"); - } - break; - default: - this.removeDownloadListener(); - this.selectPanel("downloadFailed"); - break; - } - }, - - /** - * See nsIProgressEventSink.idl - */ - onStatus(aRequest, aContext, aStatus, aStatusArg) {}, - - /** - * See nsIProgressEventSink.idl - */ - onProgress(aRequest, aContext, aProgress, aProgressMax) { - this.downloadStatus.textContent = DownloadUtils.getTransferTotal( - aProgress, - aProgressMax - ); + this._appUpdater.startDownload(); }, +}; - /** - * This function registers an observer that watches for the staging process - * to complete. Once it does, it updates the UI to either request that the - * user restarts to install the update on success, request that the user - * manually download and install the newer version, or automatically download - * a complete update if applicable. - */ - updateUIWhenStagingComplete() { - let observer = (aSubject, aTopic, aData) => { - // Update the UI when the background updater is finished - let status = aData; - if ( - status == "applied" || - status == "applied-service" || - status == "pending" || - status == "pending-service" || - status == "pending-elevate" - ) { - // If the update is successfully applied, or if the updater has - // fallen back to non-staged updates, show the "Restart to Update" - // button. - this.selectPanel("apply"); - } else if (status == "failed") { - // Background update has failed, let's show the UI responsible for - // prompting the user to update manually. - this.selectPanel("downloadFailed"); - } else if (status == "downloading") { - // We've fallen back to downloading the complete update because the - // partial update failed to get staged in the background. - // Therefore we need to keep our observer. - this.setupDownloadingUI(); - return; - } - Services.obs.removeObserver(observer, "update-staged"); - }; - Services.obs.addObserver(observer, "update-staged"); - }, +this.onUnload = onUnload; +this.appUpdater = appUpdater; - /** - * See nsISupports.idl - */ - QueryInterface: ChromeUtils.generateQI([ - "nsIProgressEventSink", - "nsIRequestObserver", - ]), -}; +})(); diff --git a/browser/base/content/browser-siteIdentity.js b/browser/base/content/browser-siteIdentity.js index 36d4d57a95..69dcd48e71 100644 --- a/browser/base/content/browser-siteIdentity.js +++ b/browser/base/content/browser-siteIdentity.js @@ -599,10 +599,9 @@ var gIdentityHandler = { */ _hasCustomRoot() { let issuerCert = null; - // Walk the whole chain to get the last cert. - // eslint-disable-next-line no-empty - for (issuerCert of this._secInfo.succeededCertChain.getEnumerator()) { - } + issuerCert = this._secInfo.succeededCertChain[ + this._secInfo.succeededCertChain.length - 1 + ]; return !issuerCert.isBuiltInRoot; }, diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index b03d2f10b1..7e3cd19e02 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1911,10 +1911,6 @@ var gBrowserInit = { // until all of its dependencies are handled. Services.appShell.hiddenDOMWindow; - // We need to set the OfflineApps message listeners up before we - // load homepages, which might need them. - OfflineApps.init(); - gBrowser.addEventListener( "InsecureLoginFormsStateChange", function() { @@ -4109,20 +4105,10 @@ function getDetailedCertErrorInfo(location, securityInfo) { return certErrorDetails; } -// TODO: can we pull getDERString and getPEMString in from pippki.js instead of +// TODO: can we pull getPEMString in from pippki.js instead of // duplicating them here? -function getDERString(cert) { - var length = {}; - var derArray = cert.getRawDER(length); - var derString = ""; - for (var i = 0; i < derArray.length; i++) { - derString += String.fromCharCode(derArray[i]); - } - return derString; -} - function getPEMString(cert) { - var derb64 = btoa(getDERString(cert)); + var derb64 = cert.getBase64DERString(); // Wrap the Base64 string into lines of 64 characters, // with CRLF line breaks (as specified in RFC 1421). var wrapped = derb64.replace(/(\S{64}(?!$))/g, "$1\r\n"); @@ -8083,115 +8069,6 @@ var BrowserOffline = { }, }; -var OfflineApps = { - warnUsage(browser, principal, host) { - if (!browser) { - return; - } - - let mainAction = { - label: gNavigatorBundle.getString("offlineApps.manageUsage"), - accessKey: gNavigatorBundle.getString("offlineApps.manageUsageAccessKey"), - callback: this.manage, - }; - - let warnQuotaKB = Services.prefs.getIntPref("offline-apps.quota.warn"); - // This message shows the quota in MB, and so we divide the quota (in kb) by 1024. - let message = gNavigatorBundle.getFormattedString("offlineApps.usage", [ - host, - warnQuotaKB / 1024, - ]); - - let anchorID = "indexedDB-notification-icon"; - let options = { - persistent: true, - hideClose: true, - }; - PopupNotifications.show( - browser, - "offline-app-usage", - message, - anchorID, - mainAction, - null, - options - ); - - // Now that we've warned once, prevent the warning from showing up - // again. - Services.perms.addFromPrincipal( - principal, - "offline-app", - Ci.nsIOfflineCacheUpdateService.ALLOW_NO_WARN - ); - }, - - // XXX: duplicated in preferences/advanced.js - _getOfflineAppUsage(host, groups) { - let cacheService = Cc[ - "@mozilla.org/network/application-cache-service;1" - ].getService(Ci.nsIApplicationCacheService); - if (!groups) { - try { - groups = cacheService.getGroups(); - } catch (ex) { - return 0; - } - } - - let usage = 0; - for (let group of groups) { - let uri = Services.io.newURI(group); - if (uri.asciiHost == host) { - let cache = cacheService.getActiveCache(group); - usage += cache.usage; - } - } - - return usage; - }, - - _usedMoreThanWarnQuota(principal, asciiHost) { - // if the user has already allowed excessive usage, don't bother checking - if ( - Services.perms.testExactPermissionFromPrincipal( - principal, - "offline-app" - ) != Ci.nsIOfflineCacheUpdateService.ALLOW_NO_WARN - ) { - let usageBytes = this._getOfflineAppUsage(asciiHost); - let warnQuotaKB = Services.prefs.getIntPref("offline-apps.quota.warn"); - // The pref is in kb, the usage we get is in bytes, so multiply the quota - // to compare correctly: - if (usageBytes >= warnQuotaKB * 1024) { - return true; - } - } - - return false; - }, - - manage() { - openPreferences("panePrivacy"); - }, - - receiveMessage(msg) { - if (msg.name !== "OfflineApps:CheckUsage") { - return; - } - let uri = makeURI(msg.data.uri); - let principal = E10SUtils.deserializePrincipal(msg.data.principal); - if (this._usedMoreThanWarnQuota(principal, uri.asciiHost)) { - this.warnUsage(msg.target, principal, uri.host); - } - }, - - init() { - let mm = window.messageManager; - mm.addMessageListener("OfflineApps:CheckUsage", this); - }, -}; - var IndexedDBPromptHelper = { _permissionsPrompt: "indexedDB-permissions-prompt", _permissionsResponse: "indexedDB-permissions-response", diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index 42f28da13e..0bb760f2ca 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -63,13 +63,14 @@ function openContextMenu(aMessage) { makeURI(data.baseURI) ); - if (frameReferrerInfo) { - frameReferrerInfo = - E10SUtils.deserializeReferrerInfo(frameReferrerInfo); - } - - if (linkReferrerInfo && data.isRemote) { - linkReferrerInfo = E10SUtils.deserializeReferrerInfo(linkReferrerInfo); + if (data.isRemote) { + if (frameReferrerInfo) { + frameReferrerInfo = + E10SUtils.deserializeReferrerInfo(frameReferrerInfo); + } + if (linkReferrerInfo) { + linkReferrerInfo = E10SUtils.deserializeReferrerInfo(linkReferrerInfo); + } } gContextMenuContentData = { diff --git a/browser/base/content/test/about/head.js b/browser/base/content/test/about/head.js index 74f961dcef..eddf3f6df6 100644 --- a/browser/base/content/test/about/head.js +++ b/browser/base/content/test/about/head.js @@ -16,24 +16,14 @@ function getSecurityInfo(securityInfoAsString) { function getCertChain(securityInfoAsString) { let certChain = ""; let securityInfo = getSecurityInfo(securityInfoAsString); - for (let cert of securityInfo.failedCertChain.getEnumerator()) { + for (let cert of securityInfo.failedCertChain) { certChain += getPEMString(cert); } return certChain; } -function getDERString(cert) { - var length = {}; - var derArray = cert.getRawDER(length); - var derString = ""; - for (var i = 0; i < derArray.length; i++) { - derString += String.fromCharCode(derArray[i]); - } - return derString; -} - function getPEMString(cert) { - var derb64 = btoa(getDERString(cert)); + var derb64 = cert.getBase64DERString(); // Wrap the Base64 string into lines of 64 characters, // with CRLF line breaks (as specified in RFC 1421). var wrapped = derb64.replace(/(\S{64}(?!$))/g, "$1\r\n"); diff --git a/browser/base/content/test/contextMenu/test_view_image_revoked_cached_blob.html b/browser/base/content/test/contextMenu/test_view_image_revoked_cached_blob.html new file mode 100644 index 0000000000..ba130c793a --- /dev/null +++ b/browser/base/content/test/contextMenu/test_view_image_revoked_cached_blob.html @@ -0,0 +1,40 @@ + + + +currentSrc is right even if underlying image is a shared blob + + + diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index 513a423695..7a0603d7e6 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -6,7 +6,6 @@ ############################################################################### [DEFAULT] -prefs = browser.cache.offline.insecure.enable=true support-files = alltabslistener.html app_bug575561.html @@ -292,14 +291,6 @@ tags = clipboard # DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD. [browser_new_http_window_opened_from_file_tab.js] # DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD. -[browser_offlineQuotaNotification.js] -support-files = offlineQuotaNotification.cacheManifest offlineQuotaNotification.html -skip-if = true # Bug 1579444 -# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD. -[browser_gZipOfflineChild.js] -skip-if = true # Bug 1579444 -support-files = test_offline_gzip.html gZipOfflineChild.cacheManifest gZipOfflineChild.cacheManifest^headers^ gZipOfflineChild.html gZipOfflineChild.html^headers^ -# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD. [browser_page_style_menu.js] # DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD. [browser_page_style_menu_update.js] diff --git a/browser/base/content/test/general/browser_gZipOfflineChild.js b/browser/base/content/test/general/browser_gZipOfflineChild.js deleted file mode 100644 index 51956ee56f..0000000000 --- a/browser/base/content/test/general/browser_gZipOfflineChild.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -const URL = - "http://mochi.test:8888/browser/browser/base/content/test/general/test_offline_gzip.html"; - -registerCleanupFunction(function() { - // Clean up after ourself - let uri = Services.io.newURI(URL); - let principal = Services.scriptSecurityManager.createCodebasePrincipal( - uri, - {} - ); - Services.perms.removeFromPrincipal(principal, "offline-app"); -}); - -// -// Handle "message" events which are posted from the iframe upon -// offline cache events. -// -function contentTask() { - const { clearInterval, setInterval } = ChromeUtils.import( - "resource://gre/modules/Timer.jsm" - ); - - let resolve; - let promise = new Promise(r => { - resolve = r; - }); - - var cacheCount = 0; - var intervalID = 0; - - function handleMessageEvents(event) { - cacheCount++; - switch (cacheCount) { - case 1: - // This is the initial caching off offline data. - is(event.data, "oncache", "Child was successfully cached."); - // Reload the frame; this will generate an error message - // in the case of bug 501422. - event.source.location.reload(); - // Use setInterval to repeatedly call a function which - // checks that one of two things has occurred: either - // the offline cache is udpated (which means our iframe - // successfully reloaded), or the string "error" appears - // in the iframe, as in the case of bug 501422. - intervalID = setInterval(function() { - // Sometimes document.body may not exist, and trying to access - // it will throw an exception, so handle this case. - try { - var bodyInnerHTML = event.source.document.body.innerHTML; - } catch (e) { - bodyInnerHTML = ""; - } - if (cacheCount == 2 || bodyInnerHTML.includes("error")) { - clearInterval(intervalID); - is(cacheCount, 2, "frame not reloaded successfully"); - if (cacheCount != 2) { - finish(); - } - } - }, 100); - break; - case 2: - is(event.data, "onupdate", "Child was successfully updated."); - clearInterval(intervalID); - resolve(); - break; - default: - // how'd we get here? - ok(false, "cacheCount not 1 or 2"); - } - } - - content.addEventListener("message", handleMessageEvents); - return promise; -} - -function test() { - waitForExplicitFinish(); - - // Open a new tab. - gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, URL); - registerCleanupFunction(() => gBrowser.removeCurrentTab()); - - BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser).then(() => { - ContentTask.spawn(gBrowser.selectedBrowser, null, contentTask).then(finish); - }); -} diff --git a/browser/base/content/test/general/browser_offlineQuotaNotification.js b/browser/base/content/test/general/browser_offlineQuotaNotification.js deleted file mode 100644 index 4c3c9cbd98..0000000000 --- a/browser/base/content/test/general/browser_offlineQuotaNotification.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// Test offline quota warnings - must be run as a mochitest-browser test or -// else the test runner gets in the way of notifications due to bug 857897. - -const URL = - "http://mochi.test:8888/browser/browser/base/content/test/general/offlineQuotaNotification.html"; - -registerCleanupFunction(function() { - // Clean up after ourself - let uri = Services.io.newURI(URL); - let principal = Services.scriptSecurityManager.createCodebasePrincipal( - uri, - {} - ); - Services.perms.removeFromPrincipal(principal, "offline-app"); - Services.prefs.clearUserPref("offline-apps.quota.warn"); - let { OfflineAppCacheHelper } = ChromeUtils.import( - "resource://gre/modules/offlineAppCache.jsm" - ); - OfflineAppCacheHelper.clear(); -}); - -// Same as the other one, but for in-content preferences -function checkInContentPreferences(win) { - let doc = win.document; - let sel = doc.getElementById("categories").selectedItems[0].id; - is( - gBrowser.currentURI.spec, - "about:preferences#privacy", - "about:preferences loaded" - ); - is(sel, "category-privacy", "Privacy pane was selected"); - // all good, we are done. - win.close(); - finish(); -} - -async function test() { - waitForExplicitFinish(); - - let notificationShown = promiseNotification(); - - // Open a new tab. - gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, URL); - registerCleanupFunction(() => gBrowser.removeCurrentTab()); - - // Wait for the tab to load. - await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser); - info("Loaded page, adding onCached handler"); - // Need a promise to keep track of when we've added our handler. - let mm = gBrowser.selectedBrowser.messageManager; - let onCachedAttached = BrowserTestUtils.waitForMessage( - mm, - "Test:OnCachedAttached" - ); - let gotCached = ContentTask.spawn( - gBrowser.selectedBrowser, - null, - async function() { - return new Promise(resolve => { - content.window.applicationCache.oncached = function() { - setTimeout(resolve, 0); - }; - sendAsyncMessage("Test:OnCachedAttached"); - }); - } - ); - gotCached.then(async function() { - // We got cached - now we should have provoked the quota warning. - await notificationShown; - let notification = PopupNotifications.getNotification("offline-app-usage"); - ok(notification, "have offline-app-usage notification"); - // select the default action - this should cause the preferences - // tab to open - which we track via an "Initialized" event. - PopupNotifications.panel.firstElementChild.button.click(); - let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab); - newTabBrowser.addEventListener( - "Initialized", - function() { - executeSoon(function() { - checkInContentPreferences(newTabBrowser.contentWindow); - }); - }, - { capture: true, once: true } - ); - }); - onCachedAttached.then(function() { - Services.prefs.setIntPref("offline-apps.quota.warn", 1); - }); -} - -function promiseNotification() { - return new Promise(resolve => { - PopupNotifications.panel.addEventListener( - "popupshown", - function() { - resolve(); - }, - { once: true } - ); - }); -} diff --git a/browser/base/content/test/general/gZipOfflineChild.cacheManifest b/browser/base/content/test/general/gZipOfflineChild.cacheManifest deleted file mode 100644 index ae0545d12b..0000000000 --- a/browser/base/content/test/general/gZipOfflineChild.cacheManifest +++ /dev/null @@ -1,2 +0,0 @@ -CACHE MANIFEST -gZipOfflineChild.html diff --git a/browser/base/content/test/general/gZipOfflineChild.cacheManifest^headers^ b/browser/base/content/test/general/gZipOfflineChild.cacheManifest^headers^ deleted file mode 100644 index 257f2eb60f..0000000000 --- a/browser/base/content/test/general/gZipOfflineChild.cacheManifest^headers^ +++ /dev/null @@ -1 +0,0 @@ -Content-Type: text/cache-manifest diff --git a/browser/base/content/test/general/gZipOfflineChild.html b/browser/base/content/test/general/gZipOfflineChild.html deleted file mode 100644 index ea2caa12553bc4754c59e9d3007cacd76460a572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmV+~0nq**iwFoCjp|kc17>e;E@*UZYyfqUF;BxV5QTUDiX&5tNTO~?I9WPZEKF?1 zzSLKxwq;)^1@*sUC#}RlCrkJFy}NrSEgwfXDn|n*?yCJeh1X#i$>G-0Xd11w#od)x zy^t1_=>>p%sB3t$lwhC{A;0@?3IPqU2OUu{g8%C@cdF}b!Neo>vRz&wkH`wNRWV^6 zVd9~FE}fE&6d3p%u&WrqxIL&(wNx_~!{juRcXk5GsU`v?^ZPvTozuytaW3ZcSF%_SUGn@+^nTe`@EaU`haY z^$WjifHC@bUp?bREM&VRk^^g(+X(sL&AFUv)6daouqpUjZp$Tl@eAkxgv$E?007-I BlHC9R diff --git a/browser/base/content/test/general/gZipOfflineChild.html^headers^ b/browser/base/content/test/general/gZipOfflineChild.html^headers^ deleted file mode 100644 index 4204d8601d..0000000000 --- a/browser/base/content/test/general/gZipOfflineChild.html^headers^ +++ /dev/null @@ -1,2 +0,0 @@ -Content-Type: text/html -Content-Encoding: gzip diff --git a/browser/base/content/test/general/offlineQuotaNotification.cacheManifest b/browser/base/content/test/general/offlineQuotaNotification.cacheManifest deleted file mode 100644 index 2e210abd29..0000000000 --- a/browser/base/content/test/general/offlineQuotaNotification.cacheManifest +++ /dev/null @@ -1,7 +0,0 @@ -CACHE MANIFEST -# Any copyright is dedicated to the Public Domain. -# http://creativecommons.org/publicdomain/zero/1.0/ - -# store a "large" file so an "over quota warning" will be issued - any file -# larger than 1kb and in '_BROWSER_FILES' should be right... -title_test.svg diff --git a/browser/base/content/test/general/offlineQuotaNotification.html b/browser/base/content/test/general/offlineQuotaNotification.html deleted file mode 100644 index b1b91bf9e0..0000000000 --- a/browser/base/content/test/general/offlineQuotaNotification.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - Test offline app quota notification - - - diff --git a/browser/base/content/test/general/test_offline_gzip.html b/browser/base/content/test/general/test_offline_gzip.html deleted file mode 100644 index a18d6604e5..0000000000 --- a/browser/base/content/test/general/test_offline_gzip.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - Test gzipped offline resources - - - -

- - -

- - diff --git a/browser/base/content/test/sanitize/browser.ini b/browser/base/content/test/sanitize/browser.ini index 72557f4b0d..08bdd49d83 100644 --- a/browser/base/content/test/sanitize/browser.ini +++ b/browser/base/content/test/sanitize/browser.ini @@ -3,6 +3,9 @@ support-files= head.js dummy.js dummy_page.html +prefs= + browser.cache.offline.enable=true + browser.cache.offline.storage.enable=true [browser_purgehistory_clears_sh.js] [browser_sanitize-formhistory.js] diff --git a/browser/base/content/test/sanitize/browser_cookiePermission_subDomains.js b/browser/base/content/test/sanitize/browser_cookiePermission_subDomains.js index c684b11abf..e6b4eb5b2e 100644 --- a/browser/base/content/test/sanitize/browser_cookiePermission_subDomains.js +++ b/browser/base/content/test/sanitize/browser_cookiePermission_subDomains.js @@ -5,7 +5,7 @@ const { SiteDataTestUtils } = ChromeUtils.import( // 2 domains: www.mozilla.org (session-only) mozilla.org (allowed) - after the // cleanp, mozilla.org must have data. -add_task(async function subDomains() { +add_task(async function subDomains1() { info("Test subdomains and custom setting"); // Let's clean up all the data. @@ -21,81 +21,64 @@ add_task(async function subDomains() { }); // Domains and data - let uriA = Services.io.newURI("https://www.mozilla.org"); + let originA = "https://www.mozilla.org"; PermissionTestUtils.add( - uriA, + originA, "cookie", Ci.nsICookiePermission.ACCESS_SESSION ); - Services.cookies.add( - uriA.host, - "/test", - "a", - "b", - false, - false, - false, - Date.now() + 24000 * 60 * 60, - {}, - Ci.nsICookie.SAMESITE_UNSET - ); - - await createIndexedDB(uriA.host, {}); + SiteDataTestUtils.addToCookies(originA); + await SiteDataTestUtils.addToIndexedDB(originA); - let uriB = Services.io.newURI("https://mozilla.org"); - PermissionTestUtils.add(uriB, "cookie", Ci.nsICookiePermission.ACCESS_ALLOW); - - Services.cookies.add( - uriB.host, - "/test", - "c", - "d", - false, - false, - false, - Date.now() + 24000 * 60 * 60, - {}, - Ci.nsICookie.SAMESITE_UNSET + let originB = "https://mozilla.org"; + PermissionTestUtils.add( + originB, + "cookie", + Ci.nsICookiePermission.ACCESS_ALLOW ); - await createIndexedDB(uriB.host, {}); + SiteDataTestUtils.addToCookies(originB); + await SiteDataTestUtils.addToIndexedDB(originB); // Check - ok(await checkCookie(uriA.host, {}), "We have cookies for URI: " + uriA.host); - ok(await checkIndexedDB(uriA.host, {}), "We have IDB for URI: " + uriA.host); - ok(await checkCookie(uriB.host, {}), "We have cookies for URI: " + uriB.host); - ok(await checkIndexedDB(uriB.host, {}), "We have IDB for URI: " + uriB.host); + ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); + ok( + await SiteDataTestUtils.hasIndexedDB(originA), + "We have IDB for " + originA + ); + ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); + ok( + await SiteDataTestUtils.hasIndexedDB(originB), + "We have IDB for " + originB + ); // Cleaning up await Sanitizer.runSanitizeOnShutdown(); // Check again ok( - !(await checkCookie(uriA.host, {})), - "We should not have cookies for URI: " + uriA.host - ); - ok( - !(await checkIndexedDB(uriA.host, {})), - "We should not have IDB for URI: " + uriA.host + !SiteDataTestUtils.hasCookies(originA), + "We should not have cookies for " + originA ); ok( - await checkCookie(uriB.host, {}), - "We should have cookies for URI: " + uriB.host + !(await SiteDataTestUtils.hasIndexedDB(originA)), + "We should not have IDB for " + originA ); + ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); ok( - await checkIndexedDB(uriB.host, {}), - "We should have IDB for URI: " + uriB.host + await SiteDataTestUtils.hasIndexedDB(originB), + "We have IDB for " + originB ); // Cleaning up permissions - PermissionTestUtils.remove(uriA, "cookie"); - PermissionTestUtils.remove(uriB, "cookie"); + PermissionTestUtils.remove(originA, "cookie"); + PermissionTestUtils.remove(originB, "cookie"); }); -// session only cookie life-time, 2 domains (mozilla.org, www.mozilla.org), -// only the latter has a cookie permission. -add_task(async function subDomains() { +// session only cookie life-time, 2 domains (sub.mozilla.org, www.mozilla.org), +// only the former has a cookie permission. +add_task(async function subDomains2() { info("Test subdomains and custom setting with cookieBehavior == 2"); // Let's clean up all the data. @@ -111,68 +94,133 @@ add_task(async function subDomains() { }); // Domains and data - let uriA = Services.io.newURI("https://sub.mozilla.org"); - PermissionTestUtils.add(uriA, "cookie", Ci.nsICookiePermission.ACCESS_ALLOW); + let originA = "https://sub.mozilla.org"; + PermissionTestUtils.add( + originA, + "cookie", + Ci.nsICookiePermission.ACCESS_ALLOW + ); + + SiteDataTestUtils.addToCookies(originA); + await SiteDataTestUtils.addToIndexedDB(originA); - Services.cookies.add( - uriA.host, - "/test", - "a", - "b", - false, - false, - false, - Date.now() + 24000 * 60 * 60, - {}, - Ci.nsICookie.SAMESITE_UNSET + let originB = "https://www.mozilla.org"; + + SiteDataTestUtils.addToCookies(originB); + await SiteDataTestUtils.addToIndexedDB(originB); + + // Check + ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); + ok( + await SiteDataTestUtils.hasIndexedDB(originA), + "We have IDB for " + originA + ); + ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); + ok( + await SiteDataTestUtils.hasIndexedDB(originB), + "We have IDB for " + originB ); - await createIndexedDB(uriA.host, {}); + // Cleaning up + await Sanitizer.runSanitizeOnShutdown(); - let uriB = Services.io.newURI("https://www.mozilla.org"); + // Check again + ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); + ok( + await SiteDataTestUtils.hasIndexedDB(originA), + "We have IDB for " + originA + ); + ok( + !SiteDataTestUtils.hasCookies(originB), + "We should not have cookies for " + originB + ); + ok( + !(await SiteDataTestUtils.hasIndexedDB(originB)), + "We should not have IDB for " + originB + ); + + // Cleaning up permissions + PermissionTestUtils.remove(originA, "cookie"); +}); + +// session only cookie life-time, 3 domains (sub.mozilla.org, www.mozilla.org, mozilla.org), +// only the former has a cookie permission. Both sub.mozilla.org and mozilla.org should +// be sustained. +add_task(async function subDomains3() { + info( + "Test base domain and subdomains and custom setting with cookieBehavior == 2" + ); + + // Let's clean up all the data. + await new Promise(resolve => { + Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, resolve); + }); + + await SpecialPowers.pushPrefEnv({ + set: [ + ["network.cookie.lifetimePolicy", Ci.nsICookieService.ACCEPT_SESSION], + ["browser.sanitizer.loglevel", "All"], + ], + }); - Services.cookies.add( - uriB.host, - "/test", - "c", - "d", - false, - false, - false, - Date.now() + 24000 * 60 * 60, - {}, - Ci.nsICookie.SAMESITE_UNSET + // Domains and data + let originA = "https://sub.mozilla.org"; + PermissionTestUtils.add( + originA, + "cookie", + Ci.nsICookiePermission.ACCESS_ALLOW ); + SiteDataTestUtils.addToCookies(originA); + await SiteDataTestUtils.addToIndexedDB(originA); - await createIndexedDB(uriB.host, {}); + let originB = "https://mozilla.org"; + SiteDataTestUtils.addToCookies(originB); + await SiteDataTestUtils.addToIndexedDB(originB); + + let originC = "https://www.mozilla.org"; + SiteDataTestUtils.addToCookies(originC); + await SiteDataTestUtils.addToIndexedDB(originC); // Check - ok(await checkCookie(uriA.host, {}), "We have cookies for URI: " + uriA.host); - ok(await checkIndexedDB(uriA.host, {}), "We have IDB for URI: " + uriA.host); - ok(await checkCookie(uriB.host, {}), "We have cookies for URI: " + uriB.host); - ok(await checkIndexedDB(uriB.host, {}), "We have IDB for URI: " + uriB.host); + ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); + ok( + await SiteDataTestUtils.hasIndexedDB(originA), + "We have IDB for " + originA + ); + ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); + ok( + await SiteDataTestUtils.hasIndexedDB(originB), + "We have IDB for " + originB + ); + ok(SiteDataTestUtils.hasCookies(originC), "We have cookies for " + originC); + ok( + await SiteDataTestUtils.hasIndexedDB(originC), + "We have IDB for " + originC + ); // Cleaning up await Sanitizer.runSanitizeOnShutdown(); // Check again + ok(SiteDataTestUtils.hasCookies(originA), "We have cookies for " + originA); ok( - await checkCookie(uriA.host, {}), - "We should have cookies for URI: " + uriA.host + await SiteDataTestUtils.hasIndexedDB(originA), + "We have IDB for " + originA ); + ok(SiteDataTestUtils.hasCookies(originB), "We have cookies for " + originB); ok( - await checkIndexedDB(uriA.host, {}), - "We should have IDB for URI: " + uriA.host + await SiteDataTestUtils.hasIndexedDB(originB), + "We have IDB for " + originB ); ok( - !(await checkCookie(uriB.host, {})), - "We should not have cookies for URI: " + uriB.host + !SiteDataTestUtils.hasCookies(originC), + "We should not have cookies for " + originC ); ok( - !(await checkIndexedDB(uriB.host, {})), - "We should not have IDB for URI: " + uriB.host + !(await SiteDataTestUtils.hasIndexedDB(originC)), + "We should not have IDB for " + originC ); // Cleaning up permissions - PermissionTestUtils.remove(uriA, "cookie"); + PermissionTestUtils.remove(originA, "cookie"); }); diff --git a/browser/base/content/test/sanitize/head.js b/browser/base/content/test/sanitize/head.js index 83d6351d51..33e243b168 100644 --- a/browser/base/content/test/sanitize/head.js +++ b/browser/base/content/test/sanitize/head.js @@ -69,7 +69,7 @@ function createDomainCookie(host, originAttributes) { } function checkCookie(host, originAttributes) { - for (let cookie of Services.cookies.enumerator) { + for (let cookie of Services.cookies.cookies) { if ( ChromeUtils.isOriginAttributesEqual( originAttributes, diff --git a/browser/base/jar.mn b/browser/base/jar.mn index f3177473bc..deeff65e1c 100644 --- a/browser/base/jar.mn +++ b/browser/base/jar.mn @@ -5,6 +5,7 @@ browser.jar: % content browser %content/browser/ contentaccessible=yes content/browser/aboutDialog-appUpdater.js (content/aboutDialog-appUpdater.js) + content/browser/aboutDialog-appUpdater-legacy.js (content/aboutDialog-appUpdater-legacy.js) * content/browser/aboutDialog.xul (content/aboutDialog.xul) content/browser/aboutDialog.js (content/aboutDialog.js) content/browser/aboutDialog.css (content/aboutDialog.css) diff --git a/browser/components/contextualidentity/test/browser/browser_forgetAPI_cookie_getCookiesWithOriginAttributes.js b/browser/components/contextualidentity/test/browser/browser_forgetAPI_cookie_getCookiesWithOriginAttributes.js index 75bbccb022..73c178c24e 100644 --- a/browser/components/contextualidentity/test/browser/browser_forgetAPI_cookie_getCookiesWithOriginAttributes.js +++ b/browser/components/contextualidentity/test/browser/browser_forgetAPI_cookie_getCookiesWithOriginAttributes.js @@ -65,10 +65,10 @@ add_task(async function test_cookie_getCookiesWithOriginAttributes() { // Check that cookies have been set properly. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let enumerator = getCookiesForOA(TEST_HOST, userContextId); - ok(enumerator.hasMoreElements(), "Cookies available"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(cookies.length, "Cookies available"); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let foundCookie = cookies[0]; is(foundCookie.name, cookieName, "Check cookie name"); is(foundCookie.value, USER_CONTEXTS[userContextId], "Check cookie value"); } @@ -89,7 +89,7 @@ add_task(async function test_cookie_getCookiesWithOriginAttributes() { // Check that whether cookies has been cleared. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let e = getCookiesForOA(TEST_HOST, userContextId); - ok(!e.hasMoreElements(), "No Cookie should be here"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(!cookies.length, "No Cookie should be here"); } }); diff --git a/browser/components/contextualidentity/test/browser/browser_forgetaboutsite.js b/browser/components/contextualidentity/test/browser/browser_forgetaboutsite.js index 9a29ba1c6b..925191ab8d 100644 --- a/browser/components/contextualidentity/test/browser/browser_forgetaboutsite.js +++ b/browser/components/contextualidentity/test/browser/browser_forgetaboutsite.js @@ -143,10 +143,10 @@ async function test_cookie_cleared() { } // Check that cookies have been set properly. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let enumerator = getCookiesForOA(TEST_HOST, userContextId); - ok(enumerator.hasMoreElements(), "Cookies available"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(cookies.length, "Cookies available"); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let foundCookie = cookies[0]; Assert.equal(foundCookie.name, COOKIE_NAME, "Check cookie name"); Assert.equal( foundCookie.value, @@ -160,8 +160,8 @@ async function test_cookie_cleared() { // Check that whether cookies has been cleared or not. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let enumerator = getCookiesForOA(TEST_HOST, userContextId); - ok(!enumerator.hasMoreElements(), "No Cookie should be here"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(!cookies.length, "No Cookie should be here"); } } diff --git a/browser/components/contextualidentity/test/browser/browser_restore_getCookiesWithOriginAttributes.js b/browser/components/contextualidentity/test/browser/browser_restore_getCookiesWithOriginAttributes.js index 3d205fae2f..dda1d73cfb 100644 --- a/browser/components/contextualidentity/test/browser/browser_restore_getCookiesWithOriginAttributes.js +++ b/browser/components/contextualidentity/test/browser/browser_restore_getCookiesWithOriginAttributes.js @@ -52,10 +52,10 @@ function checkCookies(ignoreContext = null) { if (ignoreContext && userContextId === String(ignoreContext)) { continue; } - let enumerator = getCookiesForOA(TEST_HOST, userContextId); - ok(enumerator.hasMoreElements(), "Cookies available"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(cookies.length, "Cookies available"); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let foundCookie = cookies[0]; is(foundCookie.name, COOKIE_NAME, "Check cookie name"); is(foundCookie.value, USER_CONTEXTS[userContextId], "Check cookie value"); } @@ -99,10 +99,10 @@ add_task(async function test_cookie_getCookiesWithOriginAttributes() { // Check that cookies have been set properly. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let enumerator = getCookiesForOA(TEST_HOST, userContextId); - ok(enumerator.hasMoreElements(), "Cookies available"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(cookies.length, "Cookies available"); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let foundCookie = cookies[0]; is(foundCookie.name, COOKIE_NAME, "Check cookie name"); is(foundCookie.value, USER_CONTEXTS[userContextId], "Check cookie value"); } @@ -116,7 +116,7 @@ add_task(async function test_cookie_getCookiesWithOriginAttributes() { // Check that whether cookies has been cleared. for (let userContextId of Object.keys(USER_CONTEXTS)) { - let e = getCookiesForOA(TEST_HOST, userContextId); - ok(!e.hasMoreElements(), "No Cookie should be here"); + let cookies = getCookiesForOA(TEST_HOST, userContextId); + ok(!cookies.length, "No Cookie should be here"); } }); diff --git a/browser/components/enterprisepolicies/Policies.jsm b/browser/components/enterprisepolicies/Policies.jsm index 0a6d629df7..00fe48ca84 100644 --- a/browser/components/enterprisepolicies/Policies.jsm +++ b/browser/components/enterprisepolicies/Policies.jsm @@ -270,9 +270,13 @@ var Policies = { return; } let certFile = reader.result; + let certFileArray = []; + for (let i = 0; i < certFile.length; i++) { + certFileArray.push(certFile.charCodeAt(i)); + } let cert; try { - cert = gCertDB.constructX509(certFile); + cert = gCertDB.constructX509(certFileArray); } catch (e) { try { // It might be PEM instead of DER. diff --git a/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js b/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js index 91fe60c7b6..b1e07c7190 100644 --- a/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js +++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_cookie_settings.js @@ -64,8 +64,8 @@ async function test_cookie_settings({ Ci.nsIHttpChannelInternal ).forceAllowThirdPartyCookie = true; Services.cookies.removeAll(); - Services.cookies.setCookieString(firstPartyURI, null, "key=value", channel); - Services.cookies.setCookieString(thirdPartyURI, null, "key=value", channel); + Services.cookies.setCookieString(firstPartyURI, "key=value", channel); + Services.cookies.setCookieString(thirdPartyURI, "key=value", channel); let expectedFirstPartyCookies = 1; let expectedThirdPartyCookies = 1; @@ -91,7 +91,6 @@ async function test_cookie_settings({ Services.cookies.removeAll(); Services.cookies.setCookieString( firstPartyURI, - null, "key=value; max-age=1000", channel ); diff --git a/browser/components/extensions/parent/ext-browsingData.js b/browser/components/extensions/parent/ext-browsingData.js index 439b6eee85..9c978440ec 100644 --- a/browser/components/extensions/parent/ext-browsingData.js +++ b/browser/components/extensions/parent/ext-browsingData.js @@ -61,7 +61,7 @@ const clearCookies = async function(options) { if (options.since || options.hostnames) { // Iterate through the cookies and delete any created after our cutoff. - for (const cookie of cookieMgr.enumerator) { + for (const cookie of cookieMgr.cookies) { if ( (!options.since || cookie.creationTime >= PlacesUtils.toPRTime(options.since)) && diff --git a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_file.js b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_file.js new file mode 100644 index 0000000000..1bb2480a53 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_file.js @@ -0,0 +1,54 @@ +"use strict"; + +loadTestSubscript("head_devtools.js"); + +const FILE_URL = Services.io.newFileURI( + new FileUtils.File(getTestFilePath("file_dummy.html")) +).spec; + +add_task(async function test_devtools_inspectedWindow_eval_in_file_url() { + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, FILE_URL); + + async function devtools_page() { + try { + const [ + evalResult, + errorResult, + ] = await browser.devtools.inspectedWindow.eval("location.protocol"); + browser.test.assertEq(undefined, errorResult, "eval should not fail"); + browser.test.assertEq("file:", evalResult, "eval should succeed"); + browser.test.notifyPass("inspectedWindow-eval-file"); + } catch (err) { + browser.test.fail(`Error: ${err} :: ${err.stack}`); + browser.test.notifyFail("inspectedWindow-eval-file"); + } + } + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + devtools_page: "devtools_page.html", + }, + files: { + "devtools_page.html": ` + + + + + + `, + "devtools_page.js": devtools_page, + }, + }); + + await extension.startup(); + + await openToolboxForTab(tab); + + await extension.awaitFinish("inspectedWindow-eval-file"); + + await closeToolboxForTab(tab); + + await extension.unload(); + + BrowserTestUtils.removeTab(tab); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js b/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js index fa3cb12390..c2614ab978 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_create_invalid_url.js @@ -1,5 +1,9 @@ "use strict"; +const FILE_URL = Services.io.newFileURI( + new FileUtils.File(getTestFilePath("file_dummy.html")) +).spec; + async function testTabsCreateInvalidURL(tabsCreateURL) { let extension = ExtensionTestUtils.loadExtension({ manifest: { @@ -62,6 +66,7 @@ add_task(async function() { tabsCreateURL: "javascript:console.log('tabs.update execute javascript')", }, { tabsCreateURL: dataURLPage }, + { tabsCreateURL: FILE_URL }, ]; for (let { tabsCreateURL } of testCases) { diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_file.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_file.js new file mode 100644 index 0000000000..49e2e21cc5 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_file.js @@ -0,0 +1,91 @@ +"use strict"; + +const FILE_URL = Services.io.newFileURI( + new FileUtils.File(getTestFilePath("file_dummy.html")) +).spec; + +add_task(async function testExecuteScript_at_file_url() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs", "file:///*"], + }, + background() { + browser.test.onMessage.addListener(async () => { + try { + const [tab] = await browser.tabs.query({ url: "file://*/*/*dummy*" }); + const result = await browser.tabs.executeScript(tab.id, { + code: "location.protocol", + }); + browser.test.assertEq( + "file:", + result[0], + "Script executed correctly in new tab" + ); + browser.test.notifyPass("executeScript"); + } catch (e) { + browser.test.fail(`Error: ${e} :: ${e.stack}`); + browser.test.notifyFail("executeScript"); + } + }); + }, + }); + await extension.startup(); + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, FILE_URL); + + extension.sendMessage(); + await extension.awaitFinish("executeScript"); + + BrowserTestUtils.removeTab(tab); + + await extension.unload(); +}); + +add_task(async function testExecuteScript_at_file_url_with_activeTab() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["activeTab"], + browser_action: {}, + }, + background() { + browser.browserAction.onClicked.addListener(async tab => { + try { + const result = await browser.tabs.executeScript(tab.id, { + code: "location.protocol", + }); + browser.test.assertEq( + "file:", + result[0], + "Script executed correctly in active tab" + ); + browser.test.notifyPass("executeScript"); + } catch (e) { + browser.test.fail(`Error: ${e} :: ${e.stack}`); + browser.test.notifyFail("executeScript"); + } + }); + + browser.test.onMessage.addListener(async () => { + await browser.test.assertRejects( + browser.tabs.executeScript({ code: "location.protocol" }), + /Missing host permission for the tab/, + "activeTab not active yet, executeScript should be rejected" + ); + browser.test.sendMessage("next-step"); + }); + }, + }); + await extension.startup(); + + let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, FILE_URL); + + extension.sendMessage(); + await extension.awaitMessage("next-step"); + + await clickBrowserAction(extension); + await extension.awaitFinish("executeScript"); + + BrowserTestUtils.removeTab(tab); + + await extension.unload(); +}); diff --git a/browser/components/migration/tests/marionette/test_refresh_firefox.py b/browser/components/migration/tests/marionette/test_refresh_firefox.py index 3120c6e3e8..acb8fdefcb 100644 --- a/browser/components/migration/tests/marionette/test_refresh_firefox.py +++ b/browser/components/migration/tests/marionette/test_refresh_firefox.py @@ -317,11 +317,9 @@ def checkFormAutofill(self): def checkCookie(self): cookieInfo = self.runCode(""" try { - let cookieEnum = Services.cookies.getCookiesFromHost(arguments[0], {}); + let cookies = Services.cookies.getCookiesFromHost(arguments[0], {}); let cookie = null; - while (cookieEnum.hasMoreElements()) { - let hostCookie = cookieEnum.getNext(); - hostCookie.QueryInterface(Ci.nsICookie); + for (let hostCookie of cookies) { // getCookiesFromHost returns any cookie from the BASE host. if (hostCookie.rawHost != arguments[0]) continue; diff --git a/browser/components/migration/tests/unit/test_Chrome_cookies.js b/browser/components/migration/tests/unit/test_Chrome_cookies.js index 33ea1af79b..b738c1d1bc 100644 --- a/browser/components/migration/tests/unit/test_Chrome_cookies.js +++ b/browser/components/migration/tests/unit/test_Chrome_cookies.js @@ -54,9 +54,9 @@ add_task(async function() { ); // Now check the cookie details. - let enumerator = Services.cookies.getCookiesFromHost(COOKIE.host, {}); - Assert.ok(enumerator.hasMoreElements(), "Cookies available"); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let cookies = Services.cookies.getCookiesFromHost(COOKIE.host, {}); + Assert.ok(cookies.length, "Cookies available"); + let foundCookie = cookies[0]; for (let prop of Object.keys(COOKIE)) { Assert.equal(foundCookie[prop], COOKIE[prop], "Check cookie " + prop); diff --git a/browser/components/migration/tests/unit/test_IE_cookies.js b/browser/components/migration/tests/unit/test_IE_cookies.js index 5683c883ba..bb003ad5a5 100644 --- a/browser/components/migration/tests/unit/test_IE_cookies.js +++ b/browser/components/migration/tests/unit/test_IE_cookies.js @@ -138,9 +138,9 @@ add_task(async function() { ); // Now check the cookie details. - let enumerator = Services.cookies.getCookiesFromHost(COOKIE.host, {}); - Assert.ok(enumerator.hasMoreElements()); - let foundCookie = enumerator.getNext().QueryInterface(Ci.nsICookie); + let cookies = Services.cookies.getCookiesFromHost(COOKIE.host, {}); + Assert.ok(cookies.length); + let foundCookie = cookies[0]; Assert.equal(foundCookie.name, COOKIE.name); Assert.equal(foundCookie.value, COOKIE.value); diff --git a/browser/components/originattributes/test/browser/browser_cache.js b/browser/components/originattributes/test/browser/browser_cache.js index ce8358f43f..9fae43786a 100644 --- a/browser/components/originattributes/test/browser/browser_cache.js +++ b/browser/components/originattributes/test/browser/browser_cache.js @@ -218,6 +218,7 @@ async function doTest(aBrowser) { audioSource.setAttribute("type", "audio/ogg"); audioTrack.setAttribute("src", trackURL); audioTrack.setAttribute("kind", "subtitles"); + audioTrack.setAttribute("default", true); audio.appendChild(audioSource); audio.appendChild(audioTrack); diff --git a/browser/components/originattributes/test/browser/browser_firstPartyIsolation.js b/browser/components/originattributes/test/browser/browser_firstPartyIsolation.js index 2cda6ccf1e..b0d6890b1e 100644 --- a/browser/components/originattributes/test/browser/browser_firstPartyIsolation.js +++ b/browser/components/originattributes/test/browser/browser_firstPartyIsolation.js @@ -76,7 +76,7 @@ add_task(async function cookie_test() { await BrowserTestUtils.browserLoaded(tab.linkedBrowser, true); let count = 0; - for (let cookie of Services.cookies.enumerator) { + for (let cookie of Services.cookies.cookies) { count++; Assert.equal(cookie.value, "foo", "Cookie value should be foo"); Assert.equal( diff --git a/browser/components/preferences/in-content/tests/siteData/browser_siteData.js b/browser/components/preferences/in-content/tests/siteData/browser_siteData.js index 311a7f6f4a..fa60b371ef 100644 --- a/browser/components/preferences/in-content/tests/siteData/browser_siteData.js +++ b/browser/components/preferences/in-content/tests/siteData/browser_siteData.js @@ -261,12 +261,11 @@ add_task(async function() { // Get the exact creation date from the cookies (to avoid intermittents // from minimal time differences, since we round up to minutes). - let cookiesEnum1 = Services.cookies.getCookiesFromHost(uri.host, {}); + let cookies1 = Services.cookies.getCookiesFromHost(uri.host, {}); + let cookies2 = Services.cookies.getCookiesFromHost(uri2.host, {}); // We made two valid cookies for example.com. - cookiesEnum1.getNext(); - let cookiesEnum2 = Services.cookies.getCookiesFromHost(uri2.host, {}); - let cookie1 = cookiesEnum1.getNext().QueryInterface(Ci.nsICookie); - let cookie2 = cookiesEnum2.getNext().QueryInterface(Ci.nsICookie); + let cookie1 = cookies1[1]; + let cookie2 = cookies2[0]; let fullFormatter = new Services.intl.DateTimeFormat(undefined, { dateStyle: "short", diff --git a/browser/components/preferences/siteDataRemoveSelected.js b/browser/components/preferences/siteDataRemoveSelected.js index 6257966afe..457fb307f7 100644 --- a/browser/components/preferences/siteDataRemoveSelected.js +++ b/browser/components/preferences/siteDataRemoveSelected.js @@ -13,24 +13,20 @@ let gSiteDataRemoveSelected = { for (let host of hosts) { let listItem = document.createXULElement("richlistitem"); let label = document.createXULElement("label"); - label.setAttribute("value", host); + if (host) { + label.setAttribute("value", host); + } else { + document.l10n.setAttributes(label, "site-data-local-file-host"); + } listItem.appendChild(label); fragment.appendChild(listItem); } list.appendChild(fragment); document.addEventListener("dialogaccept", function() { - gSiteDataRemoveSelected.ondialogaccept(); + window.arguments[0].allowed = true; }); document.addEventListener("dialogcancel", function() { - gSiteDataRemoveSelected.ondialogcancel(); + window.arguments[0].allowed = false; }); }, - - ondialogaccept() { - window.arguments[0].allowed = true; - }, - - ondialogcancel() { - window.arguments[0].allowed = false; - }, }; diff --git a/browser/components/preferences/siteDataSettings.js b/browser/components/preferences/siteDataSettings.js index f489f8ff2e..2097da0ff3 100644 --- a/browser/components/preferences/siteDataSettings.js +++ b/browser/components/preferences/siteDataSettings.js @@ -60,7 +60,10 @@ let gSiteDataSettings = { } // Add "Host" column. - addColumnItem({ raw: site.host }, "4"); + let hostData = site.host + ? { raw: site.host } + : { id: "site-data-local-file-host" }; + addColumnItem(hostData, "4"); // Add "Cookies" column. addColumnItem({ raw: site.cookies.length }, "1"); diff --git a/browser/components/sessionstore/SessionCookies.jsm b/browser/components/sessionstore/SessionCookies.jsm index 2f629bef3c..0ee466561b 100644 --- a/browser/components/sessionstore/SessionCookies.jsm +++ b/browser/components/sessionstore/SessionCookies.jsm @@ -194,7 +194,7 @@ var SessionCookiesInternal = { return; } - for (let cookie of Services.cookies.sessionEnumerator) { + for (let cookie of Services.cookies.sessionCookies) { this._addCookie(cookie); } }, diff --git a/browser/components/sessionstore/test/browser_423132.js b/browser/components/sessionstore/test/browser_423132.js index 835850d3f6..a23904700a 100644 --- a/browser/components/sessionstore/test/browser_423132.js +++ b/browser/components/sessionstore/test/browser_423132.js @@ -25,7 +25,7 @@ add_task(async function() { // verify our cookie got set during pageload let i = 0; - for (var cookie of Services.cookies.enumerator) { + for (var cookie of Services.cookies.cookies) { i++; } Assert.equal(i, 1, "expected one cookie"); @@ -37,7 +37,7 @@ add_task(async function() { await setBrowserState(state); // at this point, the cookie should be restored... - for (var cookie2 of Services.cookies.enumerator) { + for (var cookie2 of Services.cookies.cookies) { if (cookie.name == cookie2.name) { break; } diff --git a/browser/components/shell/nsWindowsShellService.cpp b/browser/components/shell/nsWindowsShellService.cpp index 2ceb89377c..ac7fbef329 100644 --- a/browser/components/shell/nsWindowsShellService.cpp +++ b/browser/components/shell/nsWindowsShellService.cpp @@ -9,6 +9,7 @@ #include "imgIContainer.h" #include "imgIRequest.h" #include "mozilla/RefPtr.h" +#include "nsComponentManagerUtils.h" #include "nsIContent.h" #include "nsIImageLoadingContent.h" #include "nsIOutputStream.h" diff --git a/browser/components/urlbar/tests/browser/browser_urlbar_speculative_connect_not_with_client_cert.js b/browser/components/urlbar/tests/browser/browser_urlbar_speculative_connect_not_with_client_cert.js index 5036bd2971..680093bf4d 100644 --- a/browser/components/urlbar/tests/browser/browser_urlbar_speculative_connect_not_with_client_cert.js +++ b/browser/components/urlbar/tests/browser/browser_urlbar_speculative_connect_not_with_client_cert.js @@ -26,13 +26,13 @@ let chooseCertificateCalled = false; const clientAuthDialogs = { chooseCertificate( - ctx, hostname, port, organization, issuerOrg, certList, - selectedIndex + selectedIndex, + rememberClientAuthCertificate ) { ok( expectingChooseCertificate, @@ -42,6 +42,7 @@ const clientAuthDialogs = { ); is(certList.length, 1, "should have only one client certificate available"); selectedIndex.value = 0; + rememberClientAuthCertificate.value = false; chooseCertificateCalled = true; return true; }, diff --git a/browser/config/version.txt b/browser/config/version.txt index 3d1b9844b9..31f713d1db 100644 --- a/browser/config/version.txt +++ b/browser/config/version.txt @@ -1 +1 @@ -68.14.1 +68.14.2 diff --git a/browser/config/version_display.txt b/browser/config/version_display.txt index f35af36d37..63cf9dacbc 100644 --- a/browser/config/version_display.txt +++ b/browser/config/version_display.txt @@ -1 +1 @@ -68.14.1b +68.14.2b diff --git a/browser/fonts/TwemojiMozilla.ttf b/browser/fonts/TwemojiMozilla.ttf index 9f45178e9deffd5c71d15ab8dea6132202063282..0fec1c96ef293db98adba70608062f2967cb9cc4 100644 GIT binary patch delta 538143 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 Gkc6a;g1cx}SFuhL6kXqw&7f(*hkeVCE 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 z zLf>QxqtTahVWj$E{ht*^s_$80r21lok?M;T2C6SstoxB`cgDppYV))D&C|YEp>BP#LZ*GOLZ*GOLZ*GOLhEN03oI#aJIztE89$$2n0R{>06ZeKV3hqRji zkd`?zt#3~KhqR2XP{wq%j3XnnZ22P|%|7zcoFgN13%S<+hg$YaE7r1KTCw!{BTFwt zW}%268efPNOD{x->x|Yu|HzM;Wy5I}cD+?FY_7lur90%u<`QA8}Ts@8q0d+U?@p2=9hSC8PbAE5lcx zK(oZ6{gfMk@E)!k?|;UP0Q{UAPuaC!aI^6AOYTJE`4zVqdG6(wQt+1dHMfk?YQN#m zN2cF$D=3ZjJMI!>y^mW((c161EAi?N+-khDpSup>AGsR=4{*02;C8iK_p? zZ9w=}?jefR{>D8+IkdlXZ=foFaPQ;IKe> zj-8L;eFiRI^g5QWz&j4U8t*,!hlOj&h2-;S>Yekh*0^85%qaPwo3g~(6F0}nq3 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

mU4c*@66Zbp=wxfc=m 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 Ne-_+PaKF_4e*oS3USj|N delta 566424 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%0AO)&6XQ9_T?N5p(f| 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∈nR>@OYBm)uwe8-WG#GV1rM|H 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

<(F>#*@a` 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%0D)bkKE0H#1zeFl-O0b#eTga|PhgZJP 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 { + this.update = this.aus.selectUpdate(aUpdates); + if (!this.update) { + this._setStatus(AppUpdater.STATUS.NO_UPDATES_FOUND); + return; + } + + if (this.update.unsupported) { + this._setStatus(AppUpdater.STATUS.UNSUPPORTED_SYSTEM); + return; + } + + if (!this.aus.canApplyUpdates) { + this._setStatus(AppUpdater.STATUS.MANUAL_UPDATE); + return; + } + + if (!this.promiseAutoUpdateSetting) { + this.promiseAutoUpdateSetting = UpdateUtils.getAppUpdateAutoEnabled(); + } + this.promiseAutoUpdateSetting.then(updateAuto => { + if (updateAuto) { + // automatically download and install + this.startDownload(); + } else { + // ask + this._setStatus(AppUpdater.STATUS.DOWNLOAD_AND_INSTALL); + } + }); + }, + + /** + * See nsIUpdateService.idl + */ + onError: (aRequest, aUpdate) => { + // Errors in the update check are treated as no updates found. If the + // update check fails repeatedly without a success the user will be + // notified with the normal app update user interface so this is safe. + this._setStatus(AppUpdater.STATUS.NO_UPDATES_FOUND); + }, + + /** + * See nsISupports.idl + */ + QueryInterface: ChromeUtils.generateQI(["nsIUpdateCheckListener"]), + }; + } + return this.__updateCheckListener; + } + + /** + * Sets the status to STAGING. The status will then be set again when the + * update finishes staging. + */ + _waitForUpdateToStage() { + if (!this.update) { + this.update = this.um.activeUpdate; + } + this.update.QueryInterface(Ci.nsIWritablePropertyBag); + this.update.setProperty("foregroundDownload", "true"); + this._setStatus(AppUpdater.STATUS.STAGING); + this._awaitStagingComplete(); + } + + /** + * Starts the download of an update mar. + */ + startDownload() { + if (!this.update) { + this.update = this.um.activeUpdate; + } + this.update.QueryInterface(Ci.nsIWritablePropertyBag); + this.update.setProperty("foregroundDownload", "true"); + + let state = this.aus.downloadUpdate(this.update, false); + if (state == "failed") { + this._setStatus(AppUpdater.STATUS.DOWNLOAD_FAILED); + return; + } + + this._setupDownloadListener(); + } + + /** + * Starts tracking the download. + */ + _setupDownloadListener() { + this._setStatus(AppUpdater.STATUS.DOWNLOADING); + this.aus.addDownloadListener(this); + } + + /** + * See nsIRequestObserver.idl + */ + onStartRequest(aRequest) {} + + /** + * See nsIRequestObserver.idl + */ + onStopRequest(aRequest, aStatusCode) { + switch (aStatusCode) { + case Cr.NS_ERROR_UNEXPECTED: + if ( + this.update.selectedPatch.state == "download-failed" && + (this.update.isCompleteUpdate || this.update.patchCount != 2) + ) { + // Verification error of complete patch, informational text is held in + // the update object. + this.aus.removeDownloadListener(this); + this._setStatus(AppUpdater.STATUS.DOWNLOAD_FAILED); + break; + } + // Verification failed for a partial patch, complete patch is now + // downloading so return early and do NOT remove the download listener! + break; + case Cr.NS_BINDING_ABORTED: + // Do not remove UI listener since the user may resume downloading again. + break; + case Cr.NS_OK: + this.aus.removeDownloadListener(this); + if (this.updateStagingEnabled) { + this._setStatus(AppUpdater.STATUS.STAGING); + this._awaitStagingComplete(); + } else { + this._setStatus(AppUpdater.STATUS.READY_FOR_RESTART); + } + break; + default: + this.aus.removeDownloadListener(this); + this._setStatus(AppUpdater.STATUS.DOWNLOAD_FAILED); + break; + } + } + + /** + * See nsIProgressEventSink.idl + */ + onStatus(aRequest, aStatus, aStatusArg) {} + + /** + * See nsIProgressEventSink.idl + */ + onProgress(aRequest, aProgress, aProgressMax) { + this._setStatus(AppUpdater.STATUS.DOWNLOADING, aProgress, aProgressMax); + } + + /** + * This function registers an observer that watches for the staging process + * to complete. Once it does, it sets the status to either request that the + * user restarts to install the update on success, request that the user + * manually download and install the newer version, or automatically download + * a complete update if applicable. + */ + _awaitStagingComplete() { + let observer = (aSubject, aTopic, aData) => { + // Update the UI when the background updater is finished + let status = aData; + if ( + status == "applied" || + status == "applied-service" || + status == "pending" || + status == "pending-service" || + status == "pending-elevate" + ) { + // If the update is successfully applied, or if the updater has + // fallen back to non-staged updates, show the "Restart to Update" + // button. + this._setStatus(AppUpdater.STATUS.READY_FOR_RESTART); + } else if (status == "failed") { + // Background update has failed, let's show the UI responsible for + // prompting the user to update manually. + this._setStatus(AppUpdater.STATUS.DOWNLOAD_FAILED); + } else if (status == "downloading") { + // We've fallen back to downloading the complete update because the + // partial update failed to get staged in the background. + // Therefore we need to keep our observer. + this._setupDownloadListener(); + return; + } + Services.obs.removeObserver(observer, "update-staged"); + }; + Services.obs.addObserver(observer, "update-staged"); + } + + /** + * Stops the current check for updates and any ongoing download. + */ + stop() { + this.checker.stopCurrentCheck(); + this.aus.removeDownloadListener(this); + } + + /** + * {AppUpdater.STATUS} The status of the current check or update. + */ + get status() { + if (!this._status) { + if (!AppConstants.MOZ_UPDATER) { + this._status = AppUpdater.STATUS.NO_UPDATER; + } else if (this.updateDisabledByPolicy) { + this._status = AppUpdater.STATUS.UPDATE_DISABLED_BY_POLICY; + } else if (this.isReadyForRestart) { + this._status = AppUpdater.STATUS.READY_FOR_RESTART; + } else if (this.aus.isOtherInstanceHandlingUpdates) { + this._status = AppUpdater.STATUS.OTHER_INSTANCE_HANDLING_UPDATES; + } else if (this.isDownloading) { + this._status = AppUpdater.STATUS.DOWNLOADING; + } else if (this.isStaging) { + this._status = AppUpdater.STATUS.STAGING; + } else { + this._status = AppUpdater.STATUS.NEVER_CHECKED; + } + } + return this._status; + } + + /** + * Adds a listener function that will be called back on status changes as + * different stages of updates occur. The function will be called without + * arguments for most status changes; see the comments around the STATUS value + * definitions below. This is safe to call multiple times with the same + * function. It will be added only once. + * + * @param {function} listener + * The listener function to add. + */ + addListener(listener) { + this._listeners.add(listener); + } + + /** + * Removes a listener. This is safe to call multiple times with the same + * function, or with a function that was never added. + * + * @param {function} listener + * The listener function to remove. + */ + removeListener(listener) { + this._listeners.delete(listener); + } + + /** + * Sets the updater's current status and calls listeners. + * + * @param {AppUpdater.STATUS} status + * The new updater status. + * @param {*} listenerArgs + * Arguments to pass to listeners. + */ + _setStatus(status, ...listenerArgs) { + this._status = status; + for (let listener of this._listeners) { + listener(status, ...listenerArgs); + } + return status; + } +} + +AppUpdater.STATUS = { + // Updates are allowed and there's no downloaded or staged update, but the + // AppUpdater hasn't checked for updates yet, so it doesn't know more than + // that. + NEVER_CHECKED: 0, + + // The updater isn't available (AppConstants.MOZ_UPDATER is falsey). + NO_UPDATER: 1, + + // "appUpdate" is not allowed by policy. + UPDATE_DISABLED_BY_POLICY: 2, + + // Another app instance is handling updates. + OTHER_INSTANCE_HANDLING_UPDATES: 3, + + // There's an update, but it's not supported on this system. + UNSUPPORTED_SYSTEM: 4, + + // The user must apply updates manually. + MANUAL_UPDATE: 5, + + // The AppUpdater is checking for updates. + CHECKING: 6, + + // The AppUpdater checked for updates and none were found. + NO_UPDATES_FOUND: 7, + + // The AppUpdater is downloading an update. Listeners are notified of this + // status as a download starts. They are also notified on download progress, + // and in that case they are passed two arguments: the current download + // progress and the total download size. + DOWNLOADING: 8, + + // The AppUpdater tried to download an update but it failed. + DOWNLOAD_FAILED: 9, + + // There's an update available, but the user wants us to ask them to download + // and install it. + DOWNLOAD_AND_INSTALL: 10, + + // An update is staging. + STAGING: 11, + + // An update is downloaded and staged and will be applied on restart. + READY_FOR_RESTART: 12, +}; diff --git a/browser/modules/FaviconLoader.jsm b/browser/modules/FaviconLoader.jsm index 132d4f97a1..b5f6fe1237 100644 --- a/browser/modules/FaviconLoader.jsm +++ b/browser/modules/FaviconLoader.jsm @@ -128,15 +128,6 @@ class FaviconLoad { iconInfo.node.ownerGlobal.document.documentLoadGroup; this.channel.notificationCallbacks = this; - if (this.channel instanceof Ci.nsIHttpChannel) { - try { - let acceptHeader = Services.prefs.getCharPref("image.http.accept"); - this.channel.setRequestHeader("Accept", acceptHeader, false); - } catch (e) { - // Failing to get the pref or set the header is ignorable. - } - } - if (this.channel instanceof Ci.nsIHttpChannelInternal) { this.channel.blockAuthPrompt = true; } diff --git a/browser/modules/Sanitizer.jsm b/browser/modules/Sanitizer.jsm index d5fead55fd..bfef683072 100644 --- a/browser/modules/Sanitizer.jsm +++ b/browser/modules/Sanitizer.jsm @@ -497,7 +497,8 @@ var Sanitizer = { Ci.nsIClearDataService.CLEAR_PERMISSIONS | Ci.nsIClearDataService.CLEAR_CONTENT_PREFERENCES | Ci.nsIClearDataService.CLEAR_DOM_PUSH_NOTIFICATIONS | - Ci.nsIClearDataService.CLEAR_SECURITY_SETTINGS + Ci.nsIClearDataService.CLEAR_SECURITY_SETTINGS | + Ci.nsIClearDataService.CLEAR_CERT_EXCEPTIONS ); TelemetryStopwatch.finish("FX_SANITIZE_SITESETTINGS", refObj); }, @@ -807,9 +808,9 @@ class PrincipalsCollector { // Let's take the list of unique hosts+OA from cookies. progress.step = "principals-cookies"; - let enumerator = Services.cookies.enumerator; + let cookies = Services.cookies.cookies; let hosts = new Set(); - for (let cookie of enumerator) { + for (let cookie of cookies) { hosts.add( cookie.rawHost + ChromeUtils.originAttributesToSuffix(cookie.originAttributes) diff --git a/browser/modules/SiteDataManager.jsm b/browser/modules/SiteDataManager.jsm index a845a60e4d..7f453f2399 100644 --- a/browser/modules/SiteDataManager.jsm +++ b/browser/modules/SiteDataManager.jsm @@ -176,7 +176,7 @@ var SiteDataManager = { }, _getAllCookies() { - for (let cookie of Services.cookies.enumerator) { + for (let cookie of Services.cookies.cookies) { let site = this._getOrInsertSite(cookie.rawHost); site.cookies.push(cookie); if (site.lastAccessed < cookie.lastAccessed) { @@ -371,24 +371,31 @@ var SiteDataManager = { let perms = this._getDeletablePermissions(); let promises = []; for (let host of hosts) { + const kFlags = + Ci.nsIClearDataService.CLEAR_COOKIES | + Ci.nsIClearDataService.CLEAR_DOM_STORAGES | + Ci.nsIClearDataService.CLEAR_SECURITY_SETTINGS | + Ci.nsIClearDataService.CLEAR_PLUGIN_DATA | + Ci.nsIClearDataService.CLEAR_EME | + Ci.nsIClearDataService.CLEAR_ALL_CACHES; promises.push( new Promise(function(resolve) { - Services.clearData.deleteDataFromHost( - host, - true, - Ci.nsIClearDataService.CLEAR_COOKIES | - Ci.nsIClearDataService.CLEAR_DOM_STORAGES | - Ci.nsIClearDataService.CLEAR_SECURITY_SETTINGS | - Ci.nsIClearDataService.CLEAR_PLUGIN_DATA | - Ci.nsIClearDataService.CLEAR_EME | - Ci.nsIClearDataService.CLEAR_ALL_CACHES, - resolve - ); + const { clearData } = Services; + if (host) { + clearData.deleteDataFromHost(host, true, kFlags, resolve); + } else { + clearData.deleteDataFromLocalFiles(true, kFlags, resolve); + } }) ); for (let perm of perms) { - if (Services.eTLD.hasRootDomain(perm.principal.URI.host, host)) { + // Specialcase local file permissions. + if (!host) { + if (perm.principal.URI.schemeIs("file")) { + Services.perms.removePermission(perm); + } + } else if (Services.eTLD.hasRootDomain(perm.principal.URI.host, host)) { Services.perms.removePermission(perm); } } diff --git a/browser/modules/moz.build b/browser/modules/moz.build index 101c2c62a4..51bb857bfe 100644 --- a/browser/modules/moz.build +++ b/browser/modules/moz.build @@ -128,6 +128,7 @@ XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini'] EXTRA_JS_MODULES += [ 'AboutNewTab.jsm', + 'AppUpdater.jsm', 'AsyncTabSwitcher.jsm', 'BrowserUsageTelemetry.jsm', 'BrowserWindowTracker.jsm', diff --git a/caps/BasePrincipal.cpp b/caps/BasePrincipal.cpp index 53d6d9dfcb..d615c1c712 100644 --- a/caps/BasePrincipal.cpp +++ b/caps/BasePrincipal.cpp @@ -466,6 +466,51 @@ BasePrincipal::IsSameOrigin(nsIURI* aURI, bool aIsPrivateWin, bool* aRes) { ssm->CheckSameOriginURI(prinURI, aURI, false, aIsPrivateWin)); return NS_OK; } + +NS_IMETHODIMP +BasePrincipal::IsL10nAllowed(nsIURI* aURI, bool* aRes) { + *aRes = false; + + if (nsContentUtils::IsErrorPage(aURI)) { + *aRes = true; + return NS_OK; + } + + // The system principal is always allowed. + if (IsSystemPrincipal()) { + *aRes = true; + return NS_OK; + } + + nsCOMPtr uri; + nsresult rv = GetURI(getter_AddRefs(uri)); + NS_ENSURE_SUCCESS(rv, NS_OK); + + bool hasFlags; + + // Allow access to uris that cannot be loaded by web content. + rv = NS_URIChainHasFlags(uri, nsIProtocolHandler::URI_DANGEROUS_TO_LOAD, + &hasFlags); + NS_ENSURE_SUCCESS(rv, NS_OK); + if (hasFlags) { + *aRes = true; + return NS_OK; + } + + // UI resources also get access. + rv = NS_URIChainHasFlags(uri, nsIProtocolHandler::URI_IS_UI_RESOURCE, + &hasFlags); + NS_ENSURE_SUCCESS(rv, NS_OK); + if (hasFlags) { + *aRes = true; + return NS_OK; + } + + auto policy = AddonPolicy(); + *aRes = (policy && policy->IsPrivileged()); + return NS_OK; +} + NS_IMETHODIMP BasePrincipal::AllowsRelaxStrictFileOriginPolicy(nsIURI* aURI, bool* aRes) { *aRes = false; diff --git a/caps/BasePrincipal.h b/caps/BasePrincipal.h index cb638642f1..2cefee5114 100644 --- a/caps/BasePrincipal.h +++ b/caps/BasePrincipal.h @@ -118,6 +118,7 @@ class BasePrincipal : public nsJSPrincipals { NS_IMETHOD GetIsSystemPrincipal(bool* aResult) override; NS_IMETHOD SchemeIs(const char* aScheme, bool* aResult) override; NS_IMETHOD IsURIInPrefList(const char* aPref, bool* aResult) override; + NS_IMETHOD IsL10nAllowed(nsIURI* aURI, bool* aResult) override; NS_IMETHOD GetAboutModuleFlags(uint32_t* flags) override; NS_IMETHOD GetIsAddonOrExpandedAddonPrincipal(bool* aResult) override; NS_IMETHOD GetOriginAttributes(JSContext* aCx, diff --git a/caps/nsIPrincipal.idl b/caps/nsIPrincipal.idl index 5d82ddf27f..c741e36a73 100644 --- a/caps/nsIPrincipal.idl +++ b/caps/nsIPrincipal.idl @@ -436,6 +436,12 @@ interface nsIPrincipal : nsISerializable * for the Principals URI */ readonly attribute boolean isScriptAllowedByPolicy; + + /* + * Returns true if the Principal can acess l10n + * features for the Provided DocumentURI + */ + boolean isL10nAllowed(in nsIURI aDocumentURI); }; /** diff --git a/chrome/nsChromeRegistry.cpp b/chrome/nsChromeRegistry.cpp index 8a735e2033..00c4d48a11 100644 --- a/chrome/nsChromeRegistry.cpp +++ b/chrome/nsChromeRegistry.cpp @@ -7,6 +7,7 @@ #include "nsChromeRegistryContent.h" #include "nsCOMPtr.h" +#include "nsComponentManagerUtils.h" #include "nsError.h" #include "nsEscape.h" #include "nsNetUtil.h" diff --git a/config/Makefile.in b/config/Makefile.in index c1334f8aae..1c6a60bbb3 100644 --- a/config/Makefile.in +++ b/config/Makefile.in @@ -1,5 +1,3 @@ -# -*- Makefile -*- -# # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/config/milestone.txt b/config/milestone.txt index 367fd031b0..b67c74f979 100644 --- a/config/milestone.txt +++ b/config/milestone.txt @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -68.12.0 +68.14.2 diff --git a/devtools/client/debugger/packages/devtools-reps/src/object-inspector/actions.js b/devtools/client/debugger/packages/devtools-reps/src/object-inspector/actions.js index b91360c9dd..77ce3b3bdc 100644 --- a/devtools/client/debugger/packages/devtools-reps/src/object-inspector/actions.js +++ b/devtools/client/debugger/packages/devtools-reps/src/object-inspector/actions.js @@ -51,7 +51,8 @@ function nodeLoadProperties(node: Node, actor) { try { const properties = await loadItemProperties( node, - client, + client.createObjectClient, + client.createLongStringClient, loadedProperties ); diff --git a/devtools/client/debugger/packages/devtools-reps/src/object-inspector/utils/load-properties.js b/devtools/client/debugger/packages/devtools-reps/src/object-inspector/utils/load-properties.js index fe173a44bf..6265533e7a 100644 --- a/devtools/client/debugger/packages/devtools-reps/src/object-inspector/utils/load-properties.js +++ b/devtools/client/debugger/packages/devtools-reps/src/object-inspector/utils/load-properties.js @@ -37,14 +37,10 @@ import type { Node, } from "../types"; -type Client = { - createObjectClient: CreateObjectClient, - createLongStringClient: CreateLongStringClient, -}; - function loadItemProperties( item: Node, - client: Client, + createObjectClient: CreateObjectClient, + createLongStringClient: CreateLongStringClient, loadedProperties: LoadedProperties ): Promise { const gripItem = getClosestGripNode(item); @@ -56,8 +52,7 @@ function loadItemProperties( const promises = []; let objectClient; - const getObjectClient = () => - objectClient || client.createObjectClient(value); + const getObjectClient = () => objectClient || createObjectClient(value); if (shouldLoadItemIndexedProperties(item, loadedProperties)) { promises.push(enumIndexedProperties(getObjectClient(), start, end)); @@ -80,7 +75,7 @@ function loadItemProperties( } if (shouldLoadItemFullText(item, loadedProperties)) { - promises.push(getFullText(client.createLongStringClient(value), item)); + promises.push(getFullText(createLongStringClient(value), item)); } if (shouldLoadItemProxySlots(item, loadedProperties)) { diff --git a/devtools/client/debugger/src/client/firefox/commands.js b/devtools/client/debugger/src/client/firefox/commands.js index 7f0c9e8d45..4f9fcf484e 100644 --- a/devtools/client/debugger/src/client/firefox/commands.js +++ b/devtools/client/debugger/src/client/firefox/commands.js @@ -69,9 +69,10 @@ function createObjectClient(grip: Grip) { async function loadObjectProperties(root: Node) { const utils = Reps.objectInspector.utils; - const properties = await utils.loadProperties.loadItemProperties(root, { - createObjectClient, - }); + const properties = await utils.loadProperties.loadItemProperties( + root, + createObjectClient + ); return utils.node.getChildren({ item: root, loadedProperties: new Map([[root.path, properties]]), diff --git a/devtools/client/netmonitor/src/constants.js b/devtools/client/netmonitor/src/constants.js index 2e7cc0bf6a..f0cb9c83d6 100644 --- a/devtools/client/netmonitor/src/constants.js +++ b/devtools/client/netmonitor/src/constants.js @@ -471,6 +471,7 @@ const BLOCKED_REASON_MESSAGES = { 4004: "CSP Data Document", 4005: "CSP Web Browser", 4006: "CSP Preload", + 5000: "Not same-origin", }; const general = { diff --git a/devtools/client/netmonitor/test/browser_net_copy_headers.js b/devtools/client/netmonitor/test/browser_net_copy_headers.js index b1971e7077..7894b75dc7 100644 --- a/devtools/client/netmonitor/test/browser_net_copy_headers.js +++ b/devtools/client/netmonitor/test/browser_net_copy_headers.js @@ -40,7 +40,7 @@ add_task(async function() { `${method} ${SIMPLE_URL} ${httpVersion}`, "Host: example.com", "User-Agent: " + navigator.userAgent + "", - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language: " + navigator.languages.join(",") + ";q=0.5", "Accept-Encoding: gzip, deflate", "Connection: keep-alive", diff --git a/devtools/client/shared/components/reps/reps.js b/devtools/client/shared/components/reps/reps.js index dd1b289671..1069f0e8ca 100644 --- a/devtools/client/shared/components/reps/reps.js +++ b/devtools/client/shared/components/reps/reps.js @@ -3928,14 +3928,14 @@ const { nodeIsLongString } = __webpack_require__(114); -function loadItemProperties(item, client, loadedProperties) { +function loadItemProperties(item, createObjectClient, createLongStringClient, loadedProperties) { const gripItem = getClosestGripNode(item); const value = getValue(gripItem); const [start, end] = item.meta ? [item.meta.startIndex, item.meta.endIndex] : []; const promises = []; let objectClient; - const getObjectClient = () => objectClient || client.createObjectClient(value); + const getObjectClient = () => objectClient || createObjectClient(value); if (shouldLoadItemIndexedProperties(item, loadedProperties)) { promises.push(enumIndexedProperties(getObjectClient(), start, end)); @@ -3958,7 +3958,7 @@ function loadItemProperties(item, client, loadedProperties) { } if (shouldLoadItemFullText(item, loadedProperties)) { - promises.push(getFullText(client.createLongStringClient(value), item)); + promises.push(getFullText(createLongStringClient(value), item)); } if (shouldLoadItemProxySlots(item, loadedProperties)) { @@ -7923,7 +7923,7 @@ function nodeLoadProperties(node, actor) { } try { - const properties = await loadItemProperties(node, client, loadedProperties); + const properties = await loadItemProperties(node, client.createObjectClient, client.createLongStringClient, loadedProperties); dispatch(nodePropertiesLoaded(node, actor, properties)); } catch (e) { console.error(e); diff --git a/devtools/client/webconsole/actions/autocomplete.js b/devtools/client/webconsole/actions/autocomplete.js index 5e23299846..6dc8f7cca0 100644 --- a/devtools/client/webconsole/actions/autocomplete.js +++ b/devtools/client/webconsole/actions/autocomplete.js @@ -20,14 +20,14 @@ const { * `a.b.c.d.` is described as ['a', 'b', 'c', 'd'] ). */ function autocompleteUpdate(force, getterPath) { - return ({ dispatch, getState, webConsoleUI, hud }) => { - if (hud.inputHasSelection()) { + return ({ dispatch, getState, services }) => { + if (services.inputHasSelection()) { return dispatch(autocompleteClear()); } - const inputValue = hud.getInputValue(); - const { frameActor: frameActorId, client } = webConsoleUI.getFrameActor(); - const cursor = webConsoleUI.getInputCursor(); + const inputValue = services.getInputValue(); + const { frameActor: frameActorId, client } = services.getFrameActor(); + const cursor = services.getInputCursor(); const state = getState().autocomplete; const { cache } = state; @@ -131,8 +131,8 @@ function autocompleteDataFetch({ client, authorizedEvaluations, }) { - return ({ dispatch, webConsoleUI }) => { - const selectedNodeActor = webConsoleUI.getSelectedNodeActor(); + return ({ dispatch, services }) => { + const selectedNodeActor = services.getSelectedNodeActor(); const id = generateRequestId(); dispatch({ type: AUTOCOMPLETE_PENDING_REQUEST, id }); client diff --git a/devtools/client/webconsole/actions/index.js b/devtools/client/webconsole/actions/index.js index f46e1b8e9f..40d9bc9948 100644 --- a/devtools/client/webconsole/actions/index.js +++ b/devtools/client/webconsole/actions/index.js @@ -11,8 +11,6 @@ const actionModules = [ require("./messages"), require("./ui"), require("./notifications"), - require("./object"), - require("./toolbox"), require("./history"), ]; diff --git a/devtools/client/webconsole/actions/input.js b/devtools/client/webconsole/actions/input.js index c7f8025393..d26239563e 100644 --- a/devtools/client/webconsole/actions/input.js +++ b/devtools/client/webconsole/actions/input.js @@ -37,9 +37,9 @@ loader.lazyRequireGetter( const HELP_URL = "https://developer.mozilla.org/docs/Tools/Web_Console/Helpers"; function evaluateExpression(expression) { - return async ({ dispatch, webConsoleUI, hud }) => { + return async ({ dispatch, services }) => { if (!expression) { - expression = hud.getInputSelection() || hud.getInputValue(); + expression = services.getInputSelection() || services.getInputValue(); } if (!expression) { return null; @@ -63,7 +63,7 @@ function evaluateExpression(expression) { let mappedExpressionRes; try { - mappedExpressionRes = await hud.getMappedExpression(expression); + mappedExpressionRes = await services.getMappedExpression(expression); } catch (e) { console.warn("Error when calling getMappedExpression", e); } @@ -72,21 +72,24 @@ function evaluateExpression(expression) { ? mappedExpressionRes.expression : expression; - const { frameActor, client } = webConsoleUI.getFrameActor(); + const { frameActor, client } = services.getFrameActor(); - // Even if the evaluation fails, + // Even if requestEvaluation rejects (because of webConsoleClient.evaluateJSAsync), // we still need to pass the error response to onExpressionEvaluated. const onSettled = res => res; const response = await client .evaluateJSAsync(expression, { frameActor, - selectedNodeActor: webConsoleUI.getSelectedNodeActor(), + selectedNodeActor: services.getSelectedNodeActor(), mapped: mappedExpressionRes ? mappedExpressionRes.mapped : null, }) .then(onSettled, onSettled); - return dispatch(onExpressionEvaluated(response)); + return onExpressionEvaluated(response, { + dispatch, + services, + }); }; } @@ -97,101 +100,81 @@ function evaluateExpression(expression) { * @param {Object} response * The message received from the server. */ -function onExpressionEvaluated(response) { - return async ({ dispatch, webConsoleUI }) => { - if (response.error) { - console.error(`Evaluation error`, response.error, ": ", response.message); - return; - } - - // If the evaluation was a top-level await expression that was rejected, there will - // be an uncaught exception reported, so we don't need to do anything. - if (response.topLevelAwaitRejected === true) { - return; - } - - if (!response.helperResult) { - dispatch(messagesActions.messagesAdd([response])); - return; - } - - await dispatch(handleHelperResult(response)); - }; +async function onExpressionEvaluated(response, { dispatch, services } = {}) { + if (response.error) { + console.error(`Evaluation error`, response.error, ": ", response.message); + return; + } + + // If the evaluation was a top-level await expression that was rejected, there will + // be an uncaught exception reported, so we don't need to do anything. + if (response.topLevelAwaitRejected === true) { + return; + } + + if (!response.helperResult) { + dispatch(messagesActions.messagesAdd([response])); + return; + } + + await handleHelperResult(response, { dispatch, services }); } -function handleHelperResult(response) { - return async ({ dispatch, hud, webConsoleUI }) => { - const result = response.result; - const helperResult = response.helperResult; - const helperHasRawOutput = !!(helperResult || {}).rawOutput; - - if (helperResult && helperResult.type) { - switch (helperResult.type) { - case "clearOutput": - dispatch(messagesActions.messagesClear()); - break; - case "clearHistory": - dispatch(historyActions.clearHistory()); - break; - case "inspectObject": { - const objectActor = helperResult.object; - webConsoleUI.inspectObjectActor.bind(webConsoleUI); - break; - } - case "help": - hud.openLink(HELP_URL); - break; - case "copyValueToClipboard": - clipboardHelper.copyString(helperResult.value); - break; - case "screenshotOutput": - const { args, value } = helperResult; - const screenshotMessages = await saveScreenshot( - webConsoleUI.getPanelWindow(), - args, - value - ); - dispatch( - messagesActions.messagesAdd( - screenshotMessages.map(message => ({ - message, - type: "logMessage", - })) - ) - ); - // early return as we already dispatched necessary messages. - return; - } +async function handleHelperResult(response, { dispatch, services }) { + const result = response.result; + const helperResult = response.helperResult; + const helperHasRawOutput = !!(helperResult || {}).rawOutput; + + if (helperResult && helperResult.type) { + switch (helperResult.type) { + case "clearOutput": + dispatch(messagesActions.messagesClear()); + break; + case "clearHistory": + dispatch(historyActions.clearHistory()); + break; + case "inspectObject": + services.inspectObjectActor(helperResult.object); + break; + case "help": + services.openLink(HELP_URL); + break; + case "copyValueToClipboard": + clipboardHelper.copyString(helperResult.value); + break; + case "screenshotOutput": + const { args, value } = helperResult; + const screenshotMessages = await saveScreenshot( + services.getPanelWindow(), + args, + value + ); + dispatch( + messagesActions.messagesAdd( + screenshotMessages.map(message => ({ + message, + type: "logMessage", + })) + ) + ); + // early return as we already dispatched necessary messages. + return; } + } - const hasErrorMessage = - response.exceptionMessage || - (helperResult && helperResult.type === "error"); + const hasErrorMessage = + response.exceptionMessage || + (helperResult && helperResult.type === "error"); - // Hide undefined results coming from helper functions. - const hasUndefinedResult = - result && typeof result == "object" && result.type == "undefined"; + // Hide undefined results coming from helper functions. + const hasUndefinedResult = + result && typeof result == "object" && result.type == "undefined"; - if (hasErrorMessage || helperHasRawOutput || !hasUndefinedResult) { - dispatch(messagesActions.messagesAdd([response])); - } - }; -} - -function focusInput() { - return ({ hud }) => { - return hud.focusInput(); - }; -} - -function setInputValue(value) { - return ({ hud }) => { - return hud.setInputValue(value); - }; + if (hasErrorMessage || helperHasRawOutput || !hasUndefinedResult) { + dispatch(messagesActions.messagesAdd([response])); + } } module.exports = { evaluateExpression, - focusInput, - setInputValue, }; diff --git a/devtools/client/webconsole/actions/messages.js b/devtools/client/webconsole/actions/messages.js index 26492a7980..c8bccb0a8f 100644 --- a/devtools/client/webconsole/actions/messages.js +++ b/devtools/client/webconsole/actions/messages.js @@ -107,26 +107,26 @@ function messageClose(id) { * @return {[type]} [description] */ function messageGetMatchingElements(id, cssSelectors) { - return async ({ dispatch, client }) => { - try { - const response = await client.evaluateJSAsync( - `document.querySelectorAll('${cssSelectors}')` - ); - dispatch(messageUpdatePayload(id, response.result)); - } catch (err) { - console.error(err); - } + return ({ dispatch, services }) => { + services + .requestEvaluation(`document.querySelectorAll('${cssSelectors}')`) + .then(response => { + dispatch(messageUpdatePayload(id, response.result)); + }) + .catch(err => { + console.error(err); + }); }; } function messageGetTableData(id, grip, dataType) { - return async ({ dispatch, client }) => { + return async ({ dispatch, services }) => { const needEntries = ["Map", "WeakMap", "Set", "WeakSet"].includes(dataType); const enumIndexedPropertiesOnly = getArrayTypeNames().includes(dataType); const results = await (needEntries - ? client.fetchObjectEntries(grip) - : client.fetchObjectProperties(grip, enumIndexedPropertiesOnly)); + ? services.fetchObjectEntries(grip) + : services.fetchObjectProperties(grip, enumIndexedPropertiesOnly)); dispatch(messageUpdatePayload(id, results)); }; @@ -170,12 +170,6 @@ function networkUpdateRequest(id, data) { }; } -function jumpToExecutionPoint(executionPoint) { - return ({ client }) => { - client.timeWarp(executionPoint); - }; -} - module.exports = { messagesAdd, messagesClear, @@ -190,5 +184,4 @@ module.exports = { privateMessagesClear, // for test purpose only. setPauseExecutionPoint, - jumpToExecutionPoint, }; diff --git a/devtools/client/webconsole/actions/moz.build b/devtools/client/webconsole/actions/moz.build index 1d2c6fa8ef..ed0a7f52ed 100644 --- a/devtools/client/webconsole/actions/moz.build +++ b/devtools/client/webconsole/actions/moz.build @@ -10,7 +10,5 @@ DevToolsModules( 'input.js', 'messages.js', 'notifications.js', - 'object.js', - 'toolbox.js', 'ui.js', ) diff --git a/devtools/client/webconsole/actions/object.js b/devtools/client/webconsole/actions/object.js deleted file mode 100644 index 6a46aa734e..0000000000 --- a/devtools/client/webconsole/actions/object.js +++ /dev/null @@ -1,53 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -loader.lazyServiceGetter( - this, - "clipboardHelper", - "@mozilla.org/widget/clipboardhelper;1", - "nsIClipboardHelper" -); - -function storeAsGlobal(actor) { - return async ({ client, hud }) => { - const evalString = `{ let i = 0; - while (this.hasOwnProperty("temp" + i) && i < 1000) { - i++; - } - this["temp" + i] = _self; - "temp" + i; - }`; - - const options = { - selectedObjectActor: actor, - }; - - const res = await client.evaluateJSAsync(evalString, options); - hud.focusInput(); - hud.setInputValue(res.result); - }; -} - -function copyMessageObject(actor, variableText) { - return async ({ client }) => { - if (actor) { - // The Debugger.Object of the OA will be bound to |_self| during evaluation. - // See server/actors/webconsole/eval-with-debugger.js `evalWithDebugger`. - const res = await client.evaluateJSAsync("copy(_self)", { - selectedObjectActor: actor, - }); - - clipboardHelper.copyString(res.helperResult.value); - } else { - clipboardHelper.copyString(variableText); - } - }; -} - -module.exports = { - storeAsGlobal, - copyMessageObject, -}; diff --git a/devtools/client/webconsole/actions/toolbox.js b/devtools/client/webconsole/actions/toolbox.js deleted file mode 100644 index 3d3e287b09..0000000000 --- a/devtools/client/webconsole/actions/toolbox.js +++ /dev/null @@ -1,22 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -function openNetworkPanel(messageId) { - return ({ hud }) => { - hud.openNetworkPanel(messageId); - }; -} - -function resendNetworkRequest(messageId) { - return ({ hud }) => { - hud.resendNetworkRequest(messageId); - }; -} - -module.exports = { - openNetworkPanel, - resendNetworkRequest, -}; diff --git a/devtools/client/webconsole/actions/ui.js b/devtools/client/webconsole/actions/ui.js index d2039ce103..19d241cc03 100644 --- a/devtools/client/webconsole/actions/ui.js +++ b/devtools/client/webconsole/actions/ui.js @@ -24,12 +24,6 @@ const { EDITOR_SET_WIDTH, } = require("devtools/client/webconsole/constants"); -function openLink(url, e) { - return ({ hud }) => { - return hud.openLink(url, e); - }; -} - function persistToggle() { return ({ dispatch, getState, prefsService }) => { dispatch({ @@ -155,18 +149,6 @@ function filterBarDisplayModeSet(displayMode) { }; } -function openSidebar(messageId, rootActorId) { - return ({ dispatch }) => { - dispatch(showMessageObjectInSidebar(rootActorId, messageId)); - }; -} - -function timeWarp(executionPoint) { - return ({ client }) => { - client.timeWarp(executionPoint); - }; -} - module.exports = { contentMessagesToggle, editorToggle, @@ -182,7 +164,4 @@ module.exports = { splitConsoleCloseButtonToggle, timestampsToggle, warningGroupsToggle, - openLink, - openSidebar, - timeWarp, }; diff --git a/devtools/client/webconsole/commands.js b/devtools/client/webconsole/commands.js deleted file mode 100644 index 0b700a122e..0000000000 --- a/devtools/client/webconsole/commands.js +++ /dev/null @@ -1,59 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -const ObjectClient = require("devtools/shared/client/object-client"); -const LongStringClient = require("devtools/shared/client/long-string-client"); - -class ConsoleCommands { - constructor({ debuggerClient, proxy, threadFront, currentTarget }) { - this.debuggerClient = debuggerClient; - this.proxy = proxy; - this.threadFront = threadFront; - this.currentTarget = currentTarget; - } - - evaluateJSAsync(expression, options) { - return this.proxy.webConsoleClient.evaluateJSAsync(expression, options); - } - - createObjectClient(object) { - return new ObjectClient(this.debuggerClient, object); - } - - createLongStringClient(object) { - return new LongStringClient(this.debuggerClient, object); - } - - releaseActor(actor) { - if (!actor) { - return null; - } - - return this.debuggerClient.release(actor); - } - - async fetchObjectProperties(grip, ignoreNonIndexedProperties) { - const client = new ObjectClient(this.currentTarget.client, grip); - const { iterator } = await client.enumProperties({ - ignoreNonIndexedProperties, - }); - const { ownProperties } = await iterator.slice(0, iterator.count); - return ownProperties; - } - - async fetchObjectEntries(grip) { - const client = new ObjectClient(this.currentTarget.client, grip); - const { iterator } = await client.enumEntries(); - const { ownProperties } = await iterator.slice(0, iterator.count); - return ownProperties; - } - - timeWarp(executionPoint) { - return this.threadFront.timeWarp(executionPoint); - } -} - -module.exports = ConsoleCommands; diff --git a/devtools/client/webconsole/components/Output/Message.js b/devtools/client/webconsole/components/Output/Message.js index 6a404bdfd1..ec324ce33e 100644 --- a/devtools/client/webconsole/components/Output/Message.js +++ b/devtools/client/webconsole/components/Output/Message.js @@ -79,7 +79,7 @@ class Message extends Component { timeStamp: PropTypes.number, timestampsVisible: PropTypes.bool.isRequired, serviceContainer: PropTypes.shape({ - emitEvent: PropTypes.func.isRequired, + emitNewMessage: PropTypes.func.isRequired, onViewSource: PropTypes.func.isRequired, onViewSourceInDebugger: PropTypes.func, onViewSourceInScratchpad: PropTypes.func, @@ -123,8 +123,15 @@ class Message extends Component { if (this.props.scrollToMessage) { this.messageNode.scrollIntoView(); } - - this.emitNewMessage(this.messageNode); + // Event used in tests. Some message types don't pass it in because existing tests + // did not emit for them. + if (this.props.serviceContainer) { + this.props.serviceContainer.emitNewMessage( + this.messageNode, + this.props.messageId, + this.props.timeStamp + ); + } } } @@ -132,16 +139,6 @@ class Message extends Component { this.setState({ error: e }); } - // Event used in tests. Some message types don't pass it in because existing tests - // did not emit for them. - emitNewMessage(node) { - const { serviceContainer, messageId, timeStamp } = this.props; - serviceContainer.emitEvent( - "new-messages", - new Set([{ node, messageId, timeStamp }]) - ); - } - onLearnMoreClick(e) { const { exceptionDocURL } = this.props; this.props.serviceContainer.openLink(exceptionDocURL, e); @@ -178,9 +175,9 @@ class Message extends Component { } onMouseEvent(ev) { - const { message, serviceContainer, executionPoint } = this.props; + const { messageId, serviceContainer, executionPoint } = this.props; if (serviceContainer.canRewind() && executionPoint) { - serviceContainer.onMessageHover(ev.type, message); + serviceContainer.onMessageHover(ev.type, messageId); } } diff --git a/devtools/client/webconsole/moz.build b/devtools/client/webconsole/moz.build index 12598b2902..0ea8ffa6ca 100644 --- a/devtools/client/webconsole/moz.build +++ b/devtools/client/webconsole/moz.build @@ -15,7 +15,6 @@ DIRS += [ DevToolsModules( 'browser-console-manager.js', 'browser-console.js', - 'commands.js', 'constants.js', 'panel.js', 'service-container.js', diff --git a/devtools/client/webconsole/service-container.js b/devtools/client/webconsole/service-container.js index 135882c54d..8e0651e625 100644 --- a/devtools/client/webconsole/service-container.js +++ b/devtools/client/webconsole/service-container.js @@ -4,6 +4,8 @@ "use strict"; +const { getMessage } = require("devtools/client/webconsole/selectors/messages"); + const { createContextMenu, } = require("devtools/client/webconsole/utils/context-menu"); @@ -12,56 +14,359 @@ const { createEditContextMenu, } = require("devtools/client/framework/toolbox-context-menu"); +const ObjectClient = require("devtools/shared/client/object-client"); +const LongStringClient = require("devtools/shared/client/long-string-client"); +loader.lazyRequireGetter( + this, + "getElementText", + "devtools/client/webconsole/utils/clipboard", + true +); + +// webConsoleUI + function setupServiceContainer({ webConsoleUI, + actions, + debuggerClient, hud, toolbox, - webConsoleWrapper, + webconsoleWrapper, }) { + const attachRefToWebConsoleUI = (id, node) => { + webConsoleUI[id] = node; + }; + const serviceContainer = { - openContextMenu: (event, message) => - createContextMenu(event, message, webConsoleWrapper), - - openEditContextMenu: event => { - const { screenX, screenY } = event; - const menu = createEditContextMenu(window, "webconsole-menu"); - // Emit the "menu-open" event for testing. - menu.once("open", () => webConsoleWrapper.emit("menu-open")); - menu.popup(screenX, screenY, hud.chromeWindow.document); - }, - - // NOTE these methods are proxied currently because the - // service container is passed down the tree. These methods should eventually - // be moved to redux actions. - openLink: (url, e) => hud.openLink(url, e), - openNodeInInspector: grip => hud.openNodeInInspector(grip), - getInputSelection: () => hud.getInputSelection(), - onViewSource: frame => hud.viewSource(frame.url, frame.line), - resendNetworkRequest: requestId => hud.resendNetworkRequest(requestId), - focusInput: () => hud.focusInput(), - setInputValue: value => hud.setInputValue(value), - canRewind: () => hud.canRewind(), - onMessageHover: (type, message) => webConsoleUI.onMessageHover(message), - getLongString: grip => webConsoleUI.getLongString(grip), - getJsTermTooltipAnchor: () => webConsoleUI.getJsTermTooltipAnchor(), - emitEvent: (event, value) => webConsoleUI.emit(event, value), - attachRefToWebConsoleUI: (id, node) => webConsoleUI.attachRef(id, node), - requestData: (id, type) => webConsoleWrapper.requestData(id, type), - createElement: nodename => webConsoleWrapper.createElement(nodename), + attachRefToWebConsoleUI, + emitNewMessage: (node, messageId, timeStamp) => { + webConsoleUI.emit( + "new-messages", + new Set([ + { + node, + messageId, + timeStamp, + }, + ]) + ); + }, + openLink: (url, e) => { + webConsoleUI.hud.openLink(url, e); + }, + canRewind: () => { + if ( + !( + webConsoleUI.hud && + webConsoleUI.hud.target && + webConsoleUI.hud.target.traits + ) + ) { + return false; + } + + return webConsoleUI.hud.target.traits.canRewind; + }, + createElement: nodename => { + return webconsoleWrapper.document.createElement(nodename); + }, + fetchObjectProperties: async (grip, ignoreNonIndexedProperties) => { + const client = new ObjectClient(hud.currentTarget.client, grip); + const { iterator } = await client.enumProperties({ + ignoreNonIndexedProperties, + }); + const { ownProperties } = await iterator.slice(0, iterator.count); + return ownProperties; + }, + fetchObjectEntries: async grip => { + const client = new ObjectClient(hud.currentTarget.client, grip); + const { iterator } = await client.enumEntries(); + const { ownProperties } = await iterator.slice(0, iterator.count); + return ownProperties; + }, + getLongString: grip => { + return webConsoleUI.proxy.webConsoleClient.getString(grip); + }, + requestData(id, type) { + return webConsoleUI.proxy.networkDataProvider.requestData(id, type); + }, + onViewSource(frame) { + if (webConsoleUI && webConsoleUI.hud && webConsoleUI.hud.viewSource) { + webConsoleUI.hud.viewSource(frame.url, frame.line); + } + }, + recordTelemetryEvent: (eventName, extra = {}) => { + webconsoleWrapper.telemetry.recordEvent(eventName, "webconsole", null, { + ...extra, + session_id: (toolbox && toolbox.sessionId) || -1, + }); + }, + createObjectClient: object => { + return new ObjectClient(debuggerClient, object); + }, + createLongStringClient: object => { + return new LongStringClient(debuggerClient, object); + }, + + releaseActor: actor => { + if (!actor) { + return null; + } + + return debuggerClient.release(actor); + }, + + /** + * Retrieve the FrameActor ID given a frame depth, or the selected one if no + * frame depth given. + * + * @return { frameActor: String|null, client: Object }: + * frameActor is the FrameActor ID for the given frame depth + * (or the selected frame if it exists), null if no frame was found. + * client is the WebConsole client for the thread the frame is + * associated with. + */ + getFrameActor: () => { + const state = hud.getDebuggerFrames(); + if (!state) { + return { frameActor: null, client: webConsoleUI.webConsoleClient }; + } + + const grip = state.frames[state.selected]; + + if (!grip) { + return { frameActor: null, client: webConsoleUI.webConsoleClient }; + } + + return { + frameActor: grip.actor, + client: state.target.activeConsole, + }; + }, + + inputHasSelection: () => { + const { editor } = webConsoleUI.jsterm || {}; + return editor && !!editor.getSelection(); + }, + + getInputValue: () => { + return hud.getInputValue(); + }, + + getInputSelection: () => { + if (!webConsoleUI.jsterm || !webConsoleUI.jsterm.editor) { + return null; + } + return webConsoleUI.jsterm.editor.getSelection(); + }, + + setInputValue: value => { + hud.setInputValue(value); + }, + + focusInput: () => { + return webConsoleUI.jsterm && webConsoleUI.jsterm.focus(); + }, + + requestEvaluation: (string, options) => { + return webConsoleUI.webConsoleClient.evaluateJSAsync(string, options); + }, + + getInputCursor: () => { + return webConsoleUI.jsterm && webConsoleUI.jsterm.getSelectionStart(); + }, + + getSelectedNodeActor: () => { + const inspectorSelection = hud.getInspectorSelection(); + if (inspectorSelection && inspectorSelection.nodeFront) { + return inspectorSelection.nodeFront.actorID; + } + return null; + }, + + getJsTermTooltipAnchor: () => { + return webConsoleUI.outputNode.querySelector(".CodeMirror-cursor"); + }, + getMappedExpression: hud.getMappedExpression.bind(hud), + getPanelWindow: () => webConsoleUI.window, + inspectObjectActor: webConsoleUI.inspectObjectActor.bind(webConsoleUI), + }; + + // Set `openContextMenu` this way so, `serviceContainer` variable + // is available in the current scope and we can pass it into + // `createContextMenu` method. + serviceContainer.openContextMenu = (e, message) => { + const { screenX, screenY, target } = e; + + const messageEl = target.closest(".message"); + const clipboardText = getElementText(messageEl); + + const linkEl = target.closest("a[href]"); + const url = linkEl && linkEl.href; + + const messageVariable = target.closest(".objectBox"); + // Ensure that console.group and console.groupCollapsed commands are not captured + const variableText = + messageVariable && + !messageEl.classList.contains("startGroup") && + !messageEl.classList.contains("startGroupCollapsed") + ? messageVariable.textContent + : null; + + // Retrieve closes actor id from the DOM. + const actorEl = + target.closest("[data-link-actor-id]") || + target.querySelector("[data-link-actor-id]"); + const actor = actorEl ? actorEl.dataset.linkActorId : null; + + const rootObjectInspector = target.closest(".object-inspector"); + const rootActor = rootObjectInspector + ? rootObjectInspector.querySelector("[data-link-actor-id]") + : null; + const rootActorId = rootActor ? rootActor.dataset.linkActorId : null; + + const sidebarTogglePref = webconsoleWrapper.getStore().getState().prefs + .sidebarToggle; + const openSidebar = sidebarTogglePref + ? messageId => { + webconsoleWrapper + .getStore() + .dispatch( + actions.showMessageObjectInSidebar(rootActorId, messageId) + ); + } + : null; + + const messageData = getMessage( + webconsoleWrapper.getStore().getState(), + message.messageId + ); + const executionPoint = messageData && messageData.executionPoint; + + const menu = createContextMenu( + webconsoleWrapper.webConsoleUI, + webconsoleWrapper.parentNode, + { + actor, + clipboardText, + variableText, + message, + serviceContainer, + openSidebar, + rootActorId, + executionPoint, + toolbox: toolbox, + url, + } + ); + + // Emit the "menu-open" event for testing. + menu.once("open", () => webconsoleWrapper.emit("menu-open")); + menu.popup(screenX, screenY, hud.chromeWindow.document); + + return menu; + }; + + serviceContainer.openEditContextMenu = e => { + const { screenX, screenY } = e; + const menu = createEditContextMenu(window, "webconsole-menu"); + // Emit the "menu-open" event for testing. + menu.once("open", () => webconsoleWrapper.emit("menu-open")); + menu.popup(screenX, screenY, hud.chromeWindow.document); + + return menu; }; if (toolbox) { const { highlight, unhighlight } = toolbox.getHighlighter(true); Object.assign(serviceContainer, { - sourceMapService: toolbox.sourceMapURLService, + onViewSourceInDebugger: frame => { + toolbox + .viewSourceInDebugger( + frame.url, + frame.line, + frame.column, + frame.sourceId + ) + .then(() => { + webconsoleWrapper.telemetry.recordEvent( + "jump_to_source", + "webconsole", + null, + { + session_id: toolbox.sessionId, + } + ); + webconsoleWrapper.webConsoleUI.emit("source-in-debugger-opened"); + }); + }, + onViewSourceInScratchpad: frame => + toolbox.viewSourceInScratchpad(frame.url, frame.line).then(() => { + webconsoleWrapper.telemetry.recordEvent( + "jump_to_source", + "webconsole", + null, + { + session_id: toolbox.sessionId, + } + ); + }), + onViewSourceInStyleEditor: frame => + toolbox + .viewSourceInStyleEditor(frame.url, frame.line, frame.column) + .then(() => { + webconsoleWrapper.telemetry.recordEvent( + "jump_to_source", + "webconsole", + null, + { + session_id: toolbox.sessionId, + } + ); + }), + openNetworkPanel: requestId => { + return toolbox.selectTool("netmonitor").then(panel => { + return panel.panelWin.Netmonitor.inspectRequest(requestId); + }); + }, + resendNetworkRequest: requestId => { + return toolbox.getNetMonitorAPI().then(api => { + return api.resendRequest(requestId); + }); + }, + sourceMapService: toolbox ? toolbox.sourceMapURLService : null, highlightDomElement: highlight, unHighlightDomElement: unhighlight, + openNodeInInspector: async grip => { + await this.toolbox.initInspector(); + const onSelectInspector = toolbox.selectTool( + "inspector", + "inspect_dom" + ); + const onGripNodeToFront = this.toolbox.walker.gripToNodeFront(grip); + const [front, inspector] = await Promise.all([ + onGripNodeToFront, + onSelectInspector, + ]); + + const onInspectorUpdated = inspector.once("inspector-updated"); + const onNodeFrontSet = toolbox.selection.setNodeFront(front, { + reason: "console", + }); + + return Promise.all([onNodeFrontSet, onInspectorUpdated]); + }, jumpToExecutionPoint: executionPoint => toolbox.threadFront.timeWarp(executionPoint), - onViewSourceInDebugger: frame => hud.onViewSourceInDebugger(frame), - onViewSourceInStyleEditor: frame => hud.onViewSourceInStyleEditor(frame), - onViewSourceInScratchpad: frame => hud.onViewSourceInScratchpad(frame), + + onMessageHover: (type, messageId) => { + const message = getMessage( + webconsoleWrapper.getStore().getState(), + messageId + ); + webconsoleWrapper.webConsoleUI.emit("message-hover", type, message); + }, }); } diff --git a/devtools/client/webconsole/store.js b/devtools/client/webconsole/store.js index a42b321b1e..22956d9339 100644 --- a/devtools/client/webconsole/store.js +++ b/devtools/client/webconsole/store.js @@ -83,10 +83,19 @@ function configureStore(webConsoleUI, options = {}) { }), }; + // Prepare middleware. + const services = options.services || {}; + const middleware = applyMiddleware( thunkWithOptions.bind(null, { prefsService, - ...options.thunkArgs, + services, + // Needed for the ObjectInspector + client: { + createObjectClient: services.createObjectClient, + createLongStringClient: services.createLongStringClient, + releaseActor: services.releaseActor, + }, }), historyPersistence, eventTelemetry.bind(null, options.telemetry, options.sessionId) diff --git a/devtools/client/webconsole/test/browser/browser.ini b/devtools/client/webconsole/test/browser/browser.ini index 4b652fea3b..66e044dedd 100644 --- a/devtools/client/webconsole/test/browser/browser.ini +++ b/devtools/client/webconsole/test/browser/browser.ini @@ -6,6 +6,7 @@ support-files = code_bundle_invalidmap.js.map code_bundle_nosource.js code_bundle_nosource.js.map + cookieSetter.html head.js sjs_cors-test-server.sjs sjs_slow-response-test-server.sjs @@ -80,6 +81,7 @@ support-files = test-iframe-wrong-hud-iframe.html test-iframe-wrong-hud.html test-image.png + test-image.png^headers^ test-ineffective-iframe-sandbox-warning-inner.html test-ineffective-iframe-sandbox-warning-nested1.html test-ineffective-iframe-sandbox-warning-nested2.html diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js b/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js index 95baf1cac7..7d3d8a8f9b 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_eval_sources.js @@ -57,7 +57,7 @@ async function clickFirstStackElement(hud, message, needsExpansion) { return !!frame; }); - const onSourceOpenedInDebugger = once(hud, "source-in-debugger-opened"); + const onSourceOpenedInDebugger = once(hud.ui, "source-in-debugger-opened"); EventUtils.sendMouseEvent({ type: "mousedown" }, frame); await onSourceOpenedInDebugger; } diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_stacktrace_location_debugger_link.js b/devtools/client/webconsole/test/browser/browser_webconsole_stacktrace_location_debugger_link.js index bb6a193149..5cae5fef1e 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_stacktrace_location_debugger_link.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_stacktrace_location_debugger_link.js @@ -47,7 +47,7 @@ async function testOpenInDebugger(hud, toolbox, text) { async function checkClickOnNode(hud, toolbox, frameNode) { info("checking click on node location"); - const onSourceInDebuggerOpened = once(hud, "source-in-debugger-opened"); + const onSourceInDebuggerOpened = once(hud.ui, "source-in-debugger-opened"); EventUtils.sendMouseEvent( { type: "mousedown" }, frameNode.querySelector(".location") diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_trackingprotection_errors.js b/devtools/client/webconsole/test/browser/browser_webconsole_trackingprotection_errors.js index d9a0e962c5..4befc59554 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_trackingprotection_errors.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_trackingprotection_errors.js @@ -7,12 +7,13 @@ "use strict"; requestLongerTimeout(2); -const TEST_FILE = - "browser/devtools/client/webconsole/test/browser/" + - "test-trackingprotection-securityerrors.html"; +const TEST_PATH = "browser/devtools/client/webconsole/test/browser/"; +const TEST_FILE = TEST_PATH + "test-trackingprotection-securityerrors.html"; const TEST_URI = "http://example.com/" + TEST_FILE; const TRACKER_URL = "http://tracking.example.org/"; -const BLOCKED_URL = `\u201c${TRACKER_URL}\u201d`; +const BLOCKED_URL = `\u201c${TRACKER_URL + + TEST_PATH + + "cookieSetter.html"}\u201d`; const COOKIE_BEHAVIOR_PREF = "network.cookie.cookieBehavior"; const COOKIE_BEHAVIORS = { diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_warning_group_content_blocking.js b/devtools/client/webconsole/test/browser/browser_webconsole_warning_group_content_blocking.js index bc9cb51796..78f5b1f8ee 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_warning_group_content_blocking.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_warning_group_content_blocking.js @@ -42,6 +42,16 @@ registerCleanupFunction(function() { pushPref("privacy.trackingprotection.enabled", true); pushPref("devtools.webconsole.groupWarningMessages", true); +async function cleanUp() { + await new Promise(resolve => { + Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, value => + resolve() + ); + }); +} + +add_task(cleanUp); + add_task(async function testContentBlockingMessage() { const { hud, tab, win } = await openNewWindowAndConsole( "http://tracking.example.org/" + TEST_FILE @@ -155,6 +165,8 @@ add_task(async function testCookieBlockedByPermissionMessage() { Services.perms.removeFromPrincipal(p, "cookie"); }); +add_task(cleanUp); + /** * Test that storage access blocked messages are grouped by emitting 2 messages. * diff --git a/devtools/client/webconsole/test/browser/cookieSetter.html b/devtools/client/webconsole/test/browser/cookieSetter.html new file mode 100644 index 0000000000..58b061ca43 --- /dev/null +++ b/devtools/client/webconsole/test/browser/cookieSetter.html @@ -0,0 +1,7 @@ + + + + diff --git a/devtools/client/webconsole/test/browser/head.js b/devtools/client/webconsole/test/browser/head.js index add371b301..b256ab1b90 100644 --- a/devtools/client/webconsole/test/browser/head.js +++ b/devtools/client/webconsole/test/browser/head.js @@ -443,7 +443,7 @@ async function checkClickOnNode( ) { info("checking click on node location"); - const onSourceInDebuggerOpened = once(hud, "source-in-debugger-opened"); + const onSourceInDebuggerOpened = once(hud.ui, "source-in-debugger-opened"); EventUtils.sendMouseEvent( { type: "click" }, diff --git a/devtools/client/webconsole/test/browser/test-image.png^headers^ b/devtools/client/webconsole/test/browser/test-image.png^headers^ new file mode 100644 index 0000000000..1a90bacd4b --- /dev/null +++ b/devtools/client/webconsole/test/browser/test-image.png^headers^ @@ -0,0 +1 @@ +Set-Cookie: name=value diff --git a/devtools/client/webconsole/test/browser/test-trackingprotection-securityerrors.html b/devtools/client/webconsole/test/browser/test-trackingprotection-securityerrors.html index bb22cd3d14..da84fe1ab1 100644 --- a/devtools/client/webconsole/test/browser/test-trackingprotection-securityerrors.html +++ b/devtools/client/webconsole/test/browser/test-trackingprotection-securityerrors.html @@ -7,7 +7,7 @@ - + diff --git a/devtools/client/webconsole/test/node/fixtures/serviceContainer.js b/devtools/client/webconsole/test/node/fixtures/serviceContainer.js index fbf1beba23..197e5f6aae 100644 --- a/devtools/client/webconsole/test/node/fixtures/serviceContainer.js +++ b/devtools/client/webconsole/test/node/fixtures/serviceContainer.js @@ -6,7 +6,7 @@ module.exports = { attachRefToWebConsoleUI: () => {}, canRewind: () => false, - emitEvent: () => {}, + emitNewMessage: () => {}, proxy: { client: {}, releaseActor: actor => console.log("Release actor", actor), diff --git a/devtools/client/webconsole/utils/context-menu.js b/devtools/client/webconsole/utils/context-menu.js index 5a4b236b41..efb619419b 100644 --- a/devtools/client/webconsole/utils/context-menu.js +++ b/devtools/client/webconsole/utils/context-menu.js @@ -11,7 +11,6 @@ const { MESSAGE_SOURCE } = require("devtools/client/webconsole/constants"); const clipboardHelper = require("devtools/shared/platform/clipboard"); const { l10n } = require("devtools/client/webconsole/utils/messages"); -const actions = require("devtools/client/webconsole/actions/index"); loader.lazyRequireGetter(this, "saveAs", "devtools/shared/DevToolsUtils", true); loader.lazyRequireGetter( @@ -30,54 +29,48 @@ loader.lazyRequireGetter( /** * Create a Menu instance for the webconsole. * - * @param {Event} context menu event - * {Object} message (optional) message object containing metadata such as: - * - {String} source - * - {String} request + * @param {WebConsoleUI} webConsoleUI + * The webConsoleUI instance. + * @param {Element} parentNode + * The container of the new console frontend output wrapper. * @param {Object} options - * - {Actions} bound actions - * - {WebConsoleWrapper} wrapper instance used for accessing properties like the store - * and window. + * - {String} actor (optional) actor id to use for context menu actions + * - {String} clipboardText (optional) text to "Copy" if no selection is available + * - {String} variableText (optional) which is the textual frontend + * representation of the variable + * - {Object} message (optional) message object containing metadata such as: + * - {String} source + * - {String} request + * - {Function} openSidebar (optional) function that will open the object + * inspector sidebar + * - {String} rootActorId (optional) actor id for the root object being clicked on + * - {Object} executionPoint (optional) when replaying, the execution point where + * this message was logged */ -function createContextMenu(event, message, webConsoleWrapper) { - const { target } = event; - const { parentNode, toolbox, hud } = webConsoleWrapper; - const store = webConsoleWrapper.getStore(); - const { dispatch } = store; - - const messageEl = target.closest(".message"); - const clipboardText = getElementText(messageEl); - - const linkEl = target.closest("a[href]"); - const url = linkEl && linkEl.href; - - const messageVariable = target.closest(".objectBox"); - // Ensure that console.group and console.groupCollapsed commands are not captured - const variableText = - messageVariable && - !messageEl.classList.contains("startGroup") && - !messageEl.classList.contains("startGroupCollapsed") - ? messageVariable.textContent - : null; - - // Retrieve closes actor id from the DOM. - const actorEl = - target.closest("[data-link-actor-id]") || - target.querySelector("[data-link-actor-id]"); - const actor = actorEl ? actorEl.dataset.linkActorId : null; - - const rootObjectInspector = target.closest(".object-inspector"); - const rootActor = rootObjectInspector - ? rootObjectInspector.querySelector("[data-link-actor-id]") - : null; - const rootActorId = rootActor ? rootActor.dataset.linkActorId : null; - +function createContextMenu( + webConsoleUI, + parentNode, + { + actor, + clipboardText, + variableText, + message, + serviceContainer, + openSidebar, + rootActorId, + executionPoint, + toolbox, + url, + } +) { const win = parentNode.ownerDocument.defaultView; const selection = win.getSelection(); - const { source, request, executionPoint, messageId } = message || {}; + const { source, request } = message || {}; - const menu = new Menu({ id: "webconsole-menu" }); + const menu = new Menu({ + id: "webconsole-menu", + }); // Copy URL for a network request. menu.append( @@ -96,20 +89,20 @@ function createContextMenu(event, message, webConsoleWrapper) { ); // Open Network message in the Network panel. - if (toolbox && request) { + if (serviceContainer.openNetworkPanel && request) { menu.append( new MenuItem({ id: "console-menu-open-in-network-panel", label: l10n.getStr("webconsole.menu.openInNetworkPanel.label"), accesskey: l10n.getStr("webconsole.menu.openInNetworkPanel.accesskey"), visible: source === MESSAGE_SOURCE.NETWORK, - click: () => dispatch(actions.openNetworkPanel(message.messageId)), + click: () => serviceContainer.openNetworkPanel(message.messageId), }) ); } // Resend Network message. - if (toolbox && request) { + if (serviceContainer.resendNetworkRequest && request) { menu.append( new MenuItem({ id: "console-menu-resend-network-request", @@ -118,7 +111,7 @@ function createContextMenu(event, message, webConsoleWrapper) { "webconsole.menu.resendNetworkRequest.accesskey" ), visible: source === MESSAGE_SOURCE.NETWORK, - click: () => dispatch(actions.resendNetworkRequest(messageId)), + click: () => serviceContainer.resendNetworkRequest(message.messageId), }) ); } @@ -146,7 +139,25 @@ function createContextMenu(event, message, webConsoleWrapper) { label: l10n.getStr("webconsole.menu.storeAsGlobalVar.label"), accesskey: l10n.getStr("webconsole.menu.storeAsGlobalVar.accesskey"), disabled: !actor, - click: () => dispatch(actions.storeAsGlobal(actor)), + click: () => { + const evalString = `{ let i = 0; + while (this.hasOwnProperty("temp" + i) && i < 1000) { + i++; + } + this["temp" + i] = _self; + "temp" + i; + }`; + const options = { + selectedObjectActor: actor, + }; + + webConsoleUI.webConsoleClient + .evaluateJSAsync(evalString, options) + .then(res => { + webConsoleUI.jsterm.focus(); + webConsoleUI.hud.setInputValue(res.result); + }); + }, }) ); @@ -178,7 +189,19 @@ function createContextMenu(event, message, webConsoleWrapper) { accesskey: l10n.getStr("webconsole.menu.copyObject.accesskey"), // Disabled if there is no actor and no variable text associated. disabled: !actor && !variableText, - click: () => dispatch(actions.copyMessageObject(actor, variableText)), + click: () => { + if (actor) { + // The Debugger.Object of the OA will be bound to |_self| during evaluation. + // See server/actors/webconsole/eval-with-debugger.js `evalWithDebugger`. + webConsoleUI.webConsoleClient + .evaluateJSAsync("copy(_self)", { selectedObjectActor: actor }) + .then(res => { + clipboardHelper.copyString(res.helperResult.value); + }); + } else { + clipboardHelper.copyString(variableText); + } + }, }) ); @@ -243,15 +266,14 @@ function createContextMenu(event, message, webConsoleWrapper) { ); // Open object in sidebar. - const shouldOpenSidebar = store.getState().prefs.sidebarToggle; - if (shouldOpenSidebar) { + if (openSidebar) { menu.append( new MenuItem({ id: "console-menu-open-sidebar", label: l10n.getStr("webconsole.menu.openInSidebar.label"), accesskey: l10n.getStr("webconsole.menu.openInSidebar.accesskey"), disabled: !rootActorId, - click: () => dispatch(actions.openSidebar(messageId, rootActorId)), + click: () => openSidebar(message.messageId), }) ); } @@ -263,7 +285,10 @@ function createContextMenu(event, message, webConsoleWrapper) { id: "console-menu-time-warp", label: l10n.getStr("webconsole.menu.timeWarp.label"), disabled: false, - click: () => dispatch(actions.jumpToExecutionPoint(executionPoint)), + click: () => { + const threadFront = toolbox.threadFront; + threadFront.timeWarp(executionPoint); + }, }) ); } @@ -279,11 +304,6 @@ function createContextMenu(event, message, webConsoleWrapper) { ); } - // Emit the "menu-open" event for testing. - const { screenX, screenY } = event; - menu.once("open", () => webConsoleWrapper.emit("menu-open")); - menu.popup(screenX, screenY, hud.chromeWindow.document); - return menu; } diff --git a/devtools/client/webconsole/webconsole-ui.js b/devtools/client/webconsole/webconsole-ui.js index ad68808545..b406de4c04 100644 --- a/devtools/client/webconsole/webconsole-ui.js +++ b/devtools/client/webconsole/webconsole-ui.js @@ -47,7 +47,6 @@ class WebConsoleUI { this.hud = hud; this.hudId = this.hud.hudId; this.isBrowserConsole = this.hud._browserConsole; - this.isBrowserToolboxConsole = this.hud.currentTarget && this.hud.currentTarget.isParentProcess && @@ -180,10 +179,6 @@ class WebConsoleUI { return this.wrapper; } - getPanelWindow() { - return this.window; - } - logWarningAboutReplacedAPI() { return this.hud.target.logWarningInPage( l10n.getStr("ConsoleAPIDisabled"), @@ -361,10 +356,6 @@ class WebConsoleUI { } } - getLongString(grip) { - return this.getProxy().webConsoleClient.getString(grip); - } - /** * Sets the focus to JavaScript input field when the web console tab is * selected or when there is a split console present. @@ -404,58 +395,6 @@ class WebConsoleUI { handleTabWillNavigate(packet) { this.wrapper.dispatchTabWillNavigate(packet); } - - getInputCursor() { - return this.jsterm && this.jsterm.getSelectionStart(); - } - - getJsTermTooltipAnchor() { - return this.outputNode.querySelector(".CodeMirror-cursor"); - } - - attachRef(id, node) { - this[id] = node; - } - - /** - * Retrieve the FrameActor ID given a frame depth, or the selected one if no - * frame depth given. - * - * @return { frameActor: String|null, client: Object }: - * frameActor is the FrameActor ID for the given frame depth - * (or the selected frame if it exists), null if no frame was found. - * client is the WebConsole client for the thread the frame is - * associated with. - */ - getFrameActor() { - const state = this.hud.getDebuggerFrames(); - if (!state) { - return { frameActor: null, client: this.webConsoleClient }; - } - - const grip = state.frames[state.selected]; - - if (!grip) { - return { frameActor: null, client: this.webConsoleClient }; - } - - return { - frameActor: grip.actor, - client: state.target.activeConsole, - }; - } - - getSelectedNodeActor() { - const inspectorSelection = this.hud.getInspectorSelection(); - if (inspectorSelection && inspectorSelection.nodeFront) { - return inspectorSelection.nodeFront.actorID; - } - return null; - } - - onMessageHover(type, message) { - this.emit("message-hover", type, message); - } } /* This is the same as DevelopmentHelpers.quickRestart, but it runs in all diff --git a/devtools/client/webconsole/webconsole-wrapper.js b/devtools/client/webconsole/webconsole-wrapper.js index 6705113e87..c702bd68f0 100644 --- a/devtools/client/webconsole/webconsole-wrapper.js +++ b/devtools/client/webconsole/webconsole-wrapper.js @@ -26,8 +26,6 @@ const Telemetry = require("devtools/client/shared/telemetry"); const EventEmitter = require("devtools/shared/event-emitter"); const App = createFactory(require("devtools/client/webconsole/components/App")); -const ConsoleCommands = require("devtools/client/webconsole/commands.js"); - const { setupServiceContainer, } = require("devtools/client/webconsole/service-container"); @@ -73,29 +71,20 @@ class WebConsoleWrapper { const { webConsoleUI } = this; const debuggerClient = this.hud.target.client; - const commands = new ConsoleCommands({ + const serviceContainer = setupServiceContainer({ debuggerClient, - proxy: webConsoleUI.proxy, - threadFront: this.toolbox && this.toolbox.threadFront, - currentTarget: this.hud.currentTarget, + webConsoleUI, + actions, + toolbox: this.toolbox, + hud: this.hud, + webconsoleWrapper: this, }); store = configureStore(this.webConsoleUI, { // We may not have access to the toolbox (e.g. in the browser console). sessionId: (this.toolbox && this.toolbox.sessionId) || -1, telemetry: this.telemetry, - thunkArgs: { - webConsoleUI, - hud: this.hud, - client: commands, - }, - }); - - const serviceContainer = setupServiceContainer({ - webConsoleUI, - toolbox: this.toolbox, - hud: this.hud, - webConsoleWrapper: this, + services: serviceContainer, }); if (this.toolbox) { @@ -339,10 +328,6 @@ class WebConsoleWrapper { this.setTimeoutIfNeeded(); } - requestData(id, type) { - this.networkDataProvider.requestData(id, type); - } - dispatchClearLogpointMessages(logpointId) { store.dispatch(actions.messagesClearLogpoint(logpointId)); } @@ -439,10 +424,6 @@ class WebConsoleWrapper { store.subscribe(() => callback(store.getState())); } - createElement(nodename) { - return this.document.createElement(nodename); - } - // Called by pushing close button. closeSplitConsole() { this.toolbox.closeSplitConsole(); diff --git a/devtools/client/webconsole/webconsole.js b/devtools/client/webconsole/webconsole.js index 2635a7d630..3116c6ef31 100644 --- a/devtools/client/webconsole/webconsole.js +++ b/devtools/client/webconsole/webconsole.js @@ -122,19 +122,6 @@ class WebConsole { return this.ui ? this.ui.jsterm : null; } - canRewind() { - if ( - !( - this.hud && - this.hud.target && - this.hud.target.traits - ) - ) { - return false; - } - return this.hud.target.traits.canRewind; - } - /** * Get the value from the input field. * @returns {String|null} returns null if there's no input. @@ -147,18 +134,6 @@ class WebConsole { return this.jsterm._getValue(); } - inputHasSelection() { - const { editor } = this.jsterm || {}; - return editor && !!editor.getSelection(); - } - - getInputSelection() { - if (!this.jsterm || !this.jsterm.editor) { - return null; - } - return this.jsterm.editor.getSelection(); - } - /** * Sets the value of the input field (command line) * @@ -172,10 +147,6 @@ class WebConsole { this.jsterm._setValue(newValue); } - focusInput() { - return this.jsterm && this.jsterm.focus(); - } - /** * Open a link in a new tab. * @@ -239,15 +210,17 @@ class WebConsole { * @param integer sourceColumn * The column number which you want to place the caret. */ - async viewSourceInDebugger(sourceURL, sourceLine, sourceColumn) { + viewSourceInDebugger(sourceURL, sourceLine, sourceColumn) { const toolbox = gDevTools.getToolbox(this.target); if (!toolbox) { this.viewSource(sourceURL, sourceLine, sourceColumn); return; } - - await toolbox.viewSourceInDebugger(sourceURL, sourceLine, sourceColumn); - this.ui.emit("source-in-debugger-opened"); + toolbox + .viewSourceInDebugger(sourceURL, sourceLine, sourceColumn) + .then(() => { + this.ui.emit("source-in-debugger-opened"); + }); } /** @@ -370,77 +343,6 @@ class WebConsole { return panel.selection; } - async onViewSourceInDebugger(frame) { - if (this.toolbox) { - await this.toolbox.viewSourceInDebugger( - frame.url, - frame.line, - frame.column, - frame.sourceId - ); - - this.emit("source-in-debugger-opened"); - } - } - - async onViewSourceInScratchpad(frame) { - if (this.toolbox) { - await this.toolbox.viewSourceInScratchpad(frame.url, frame.line); - } - } - - async onViewSourceInStyleEditor(frame) { - if (!this.toolbox) { - return; - } - await this.toolbox.viewSourceInStyleEditor( - frame.url, - frame.line, - frame.column - ); - } - - async openNetworkPanel(requestId) { - if (!this.toolbox) { - return; - } - const netmonitor = await this.toolbox.selectTool("netmonitor"); - await netmonitor.panelWin.Netmonitor.inspectRequest(requestId); - } - - async resendNetworkRequest(requestId) { - if (!this.toolbox) { - return; - } - - const api = await this.toolbox.getNetMonitorAPI(); - await api.resendRequest(requestId); - } - - async openNodeInInspector(grip) { - if (!this.toolbox) { - return; - } - - await this.toolbox.initInspector(); - const onSelectInspector = this.toolbox.selectTool( - "inspector", - "inspect_dom" - ); - const onGripNodeToFront = this.toolbox.walker.gripToNodeFront(grip); - const [front, inspector] = await Promise.all([ - onGripNodeToFront, - onSelectInspector, - ]); - - const onInspectorUpdated = inspector.once("inspector-updated"); - const onNodeFrontSet = this.toolbox.selection.setNodeFront(front, { - reason: "console", - }); - - await Promise.all([onNodeFrontSet, onInspectorUpdated]); - } - /** * Destroy the object. Call this method to avoid memory leaks when the Web * Console is closed. diff --git a/devtools/server/actors/network-monitor/network-response-listener.js b/devtools/server/actors/network-monitor/network-response-listener.js index 8bdcdbe7ee..dd9906a787 100644 --- a/devtools/server/actors/network-monitor/network-response-listener.js +++ b/devtools/server/actors/network-monitor/network-response-listener.js @@ -378,7 +378,7 @@ NetworkResponseListener.prototype = { * Handle progress event as data is transferred. This is used to record the * size on the wire, which may be compressed / encoded. */ - onProgress: function(request, context, progress, progressMax) { + onProgress: function(request, progress, progressMax) { this.transferredSize = progress; // Need to forward as well to keep things like Download Manager's progress // bar working properly. diff --git a/devtools/server/actors/storage.js b/devtools/server/actors/storage.js index cdfb694b64..39c1879b0e 100644 --- a/devtools/server/actors/storage.js +++ b/devtools/server/actors/storage.js @@ -848,9 +848,7 @@ var cookieHelpers = { host = trimHttpHttpsPort(host); - return Array.from( - Services.cookies.getCookiesFromHost(host, originAttributes) - ); + return Services.cookies.getCookiesFromHost(host, originAttributes); }, /** diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index bc2524a405..c4a0be0253 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -11505,9 +11505,9 @@ nsresult nsDocShell::AddToSessionHistory( // For now keep storing just the principal in the SHEntry. if (!principalToInherit) { if (loadInfo->GetLoadingSandboxed()) { - if (loadInfo->LoadingPrincipal()) { + if (loadInfo->GetLoadingPrincipal()) { principalToInherit = NullPrincipal::CreateWithInheritedAttributes( - loadInfo->LoadingPrincipal()); + loadInfo->GetLoadingPrincipal()); } else { // get the OriginAttributes OriginAttributes attrs; diff --git a/editor/libeditor/EditorBase.cpp b/editor/libeditor/EditorBase.cpp index 7711c00534..cedf4440b7 100644 --- a/editor/libeditor/EditorBase.cpp +++ b/editor/libeditor/EditorBase.cpp @@ -61,6 +61,7 @@ #include "mozilla/TransactionManager.h" // for TransactionManager #include "mozilla/Tuple.h" #include "mozilla/dom/AbstractRange.h" // for AbstractRange +#include "mozilla/dom/Attr.h" // for Attr #include "mozilla/dom/CharacterData.h" // for CharacterData #include "mozilla/dom/DataTransfer.h" // for DataTransfer #include "mozilla/dom/Element.h" // for Element, nsINode::AsElement diff --git a/editor/libeditor/HTMLEditor.cpp b/editor/libeditor/HTMLEditor.cpp index e96a02097b..3466353519 100644 --- a/editor/libeditor/HTMLEditor.cpp +++ b/editor/libeditor/HTMLEditor.cpp @@ -28,6 +28,7 @@ #include "mozilla/TextServicesDocument.h" #include "mozilla/css/Loader.h" #include "mozilla/dom/AncestorIterator.h" +#include "mozilla/dom/Attr.h" #include "mozilla/dom/DocumentFragment.h" #include "mozilla/dom/DocumentInlines.h" #include "mozilla/dom/Element.h" diff --git a/extensions/auth/nsAuthSSPI.cpp b/extensions/auth/nsAuthSSPI.cpp index 0fa6eb7897..12eccd2ba0 100644 --- a/extensions/auth/nsAuthSSPI.cpp +++ b/extensions/auth/nsAuthSSPI.cpp @@ -19,6 +19,7 @@ #include "nsIDNSRecord.h" #include "nsMemory.h" #include "nsNetCID.h" +#include "nsServiceManagerUtils.h" #include "nsCOMPtr.h" #include "nsICryptoHash.h" #include "mozilla/Telemetry.h" diff --git a/extensions/permissions/nsContentBlocker.cpp b/extensions/permissions/nsContentBlocker.cpp index 87d859df36..0878539a63 100644 --- a/extensions/permissions/nsContentBlocker.cpp +++ b/extensions/permissions/nsContentBlocker.cpp @@ -155,7 +155,7 @@ NS_IMETHODIMP nsContentBlocker::ShouldLoad(nsIURI* aContentLocation, nsILoadInfo* aLoadInfo, const nsACString& aMimeGuess, int16_t* aDecision) { uint32_t contentType = aLoadInfo->GetExternalContentPolicyType(); - nsCOMPtr loadingPrincipal = aLoadInfo->LoadingPrincipal(); + nsCOMPtr loadingPrincipal = aLoadInfo->GetLoadingPrincipal(); nsCOMPtr requestingLocation; if (loadingPrincipal) { loadingPrincipal->GetURI(getter_AddRefs(requestingLocation)); @@ -213,7 +213,7 @@ nsContentBlocker::ShouldProcess(nsIURI* aContentLocation, int16_t* aDecision) { uint32_t contentType = aLoadInfo->GetExternalContentPolicyType(); nsCOMPtr requestingContext = aLoadInfo->GetLoadingContext(); - nsCOMPtr loadingPrincipal = aLoadInfo->LoadingPrincipal(); + nsCOMPtr loadingPrincipal = aLoadInfo->GetLoadingPrincipal(); nsCOMPtr requestingLocation; if (loadingPrincipal) { loadingPrincipal->GetURI(getter_AddRefs(requestingLocation)); diff --git a/gfx/2d/SVGTurbulenceRenderer-inl.h b/gfx/2d/SVGTurbulenceRenderer-inl.h index e671104771..71fc4f3251 100644 --- a/gfx/2d/SVGTurbulenceRenderer-inl.h +++ b/gfx/2d/SVGTurbulenceRenderer-inl.h @@ -134,7 +134,7 @@ void SVGTurbulenceRenderer 0; i1--) { int32_t i2 = rand.Next() % sBSize; - Swap(mLatticeSelector[i1], mLatticeSelector[i2]); + std::swap(mLatticeSelector[i1], mLatticeSelector[i2]); } for (int32_t i = 0; i < sBSize; i++) { diff --git a/gfx/2d/Tools.h b/gfx/2d/Tools.h index 95da6c8134..03ba155ec7 100644 --- a/gfx/2d/Tools.h +++ b/gfx/2d/Tools.h @@ -150,9 +150,9 @@ struct AlignedArray final { } void Swap(AlignedArray& aOther) { - mozilla::Swap(mPtr, aOther.mPtr); - mozilla::Swap(mStorage, aOther.mStorage); - mozilla::Swap(mCount, aOther.mCount); + std::swap(mPtr, aOther.mPtr); + std::swap(mStorage, aOther.mStorage); + std::swap(mCount, aOther.mCount); } size_t HeapSizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const { diff --git a/gfx/gl/GLReadTexImageHelper.cpp b/gfx/gl/GLReadTexImageHelper.cpp index 0bcebcd881..d35e786054 100644 --- a/gfx/gl/GLReadTexImageHelper.cpp +++ b/gfx/gl/GLReadTexImageHelper.cpp @@ -218,7 +218,7 @@ void SwapRAndBComponents(DataSourceSurface* surf) { const uint8_t* rowEnd = row + rowBytes; while (row != rowEnd) { - Swap(row[0], row[2]); + std::swap(row[0], row[2]); row += 4; } diff --git a/gfx/gl/SharedSurface.cpp b/gfx/gl/SharedSurface.cpp index 38a8bc51a9..cfebd3035b 100644 --- a/gfx/gl/SharedSurface.cpp +++ b/gfx/gl/SharedSurface.cpp @@ -512,7 +512,7 @@ bool ReadbackSharedSurface(SharedSurface* src, gfx::DrawTarget* dst) { uint8_t* rowItr = dstBytes + j * dstStride; uint8_t* rowEnd = rowItr + 4 * width; while (rowItr != rowEnd) { - Swap(rowItr[0], rowItr[2]); + std::swap(rowItr[0], rowItr[2]); rowItr += 4; } } diff --git a/gfx/layers/D3D11YCbCrImage.h b/gfx/layers/D3D11YCbCrImage.h index 7feb167abe..2dd740317a 100644 --- a/gfx/layers/D3D11YCbCrImage.h +++ b/gfx/layers/D3D11YCbCrImage.h @@ -39,10 +39,8 @@ class MOZ_RAII DXGIYCbCrTextureAllocationHelper class D3D11YCbCrRecycleAllocator : public TextureClientRecycleAllocator { public: - explicit D3D11YCbCrRecycleAllocator(KnowsCompositor* aAllocator) - : TextureClientRecycleAllocator(aAllocator) {} - - KnowsCompositor* GetAllocator() const { return mSurfaceAllocator; } + explicit D3D11YCbCrRecycleAllocator(KnowsCompositor* aKnowsCompositor) + : TextureClientRecycleAllocator(aKnowsCompositor) {} protected: already_AddRefed Allocate( diff --git a/gfx/layers/D3D9SurfaceImage.cpp b/gfx/layers/D3D9SurfaceImage.cpp index 8cc103e369..291e22f20e 100644 --- a/gfx/layers/D3D9SurfaceImage.cpp +++ b/gfx/layers/D3D9SurfaceImage.cpp @@ -179,7 +179,7 @@ already_AddRefed D3D9RecycleAllocator::Allocate( } return MakeAndAddRef(data, aTextureFlags, - mSurfaceAllocator->GetTextureForwarder()); + mKnowsCompositor->GetTextureForwarder()); } already_AddRefed D3D9RecycleAllocator::CreateOrRecycleClient( diff --git a/gfx/layers/ImageContainer.cpp b/gfx/layers/ImageContainer.cpp index 460fc8322d..fb71d3803c 100644 --- a/gfx/layers/ImageContainer.cpp +++ b/gfx/layers/ImageContainer.cpp @@ -28,6 +28,7 @@ #include "gfx2DGlue.h" #include "mozilla/gfx/2D.h" #include "mozilla/CheckedInt.h" +#include "nsProxyRelease.h" #ifdef XP_MACOSX # include "mozilla/gfx/QuartzSupport.h" @@ -414,18 +415,19 @@ void ImageContainer::NotifyDropped(uint32_t aDropped) { #ifdef XP_WIN D3D11YCbCrRecycleAllocator* ImageContainer::GetD3D11YCbCrRecycleAllocator( - KnowsCompositor* aAllocator) { + KnowsCompositor* aKnowsCompositor) { if (mD3D11YCbCrRecycleAllocator && - aAllocator == mD3D11YCbCrRecycleAllocator->GetAllocator()) { + aKnowsCompositor == mD3D11YCbCrRecycleAllocator->GetKnowsCompositor()) { return mD3D11YCbCrRecycleAllocator; } - if (!aAllocator->SupportsD3D11() || + if (!aKnowsCompositor->SupportsD3D11() || !gfx::DeviceManagerDx::Get()->GetImageDevice()) { return nullptr; } - mD3D11YCbCrRecycleAllocator = new D3D11YCbCrRecycleAllocator(aAllocator); + mD3D11YCbCrRecycleAllocator = + new D3D11YCbCrRecycleAllocator(aKnowsCompositor); return mD3D11YCbCrRecycleAllocator; } #endif @@ -621,9 +623,16 @@ already_AddRefed PlanarYCbCrImage::GetAsSourceSurface() { return surface.forget(); } +PlanarYCbCrImage::~PlanarYCbCrImage() { + NS_ReleaseOnMainThreadSystemGroup("PlanarYCbCrImage::mSourceSurface", + mSourceSurface.forget()); +} + NVImage::NVImage() : Image(nullptr, ImageFormat::NV_IMAGE), mBufferSize(0) {} -NVImage::~NVImage() = default; +NVImage::~NVImage() { + NS_ReleaseOnMainThreadSystemGroup("NVImage::mSourceSurface", mSourceSurface.forget()); +} IntSize NVImage::GetSize() const { return mSize; } @@ -639,13 +648,13 @@ already_AddRefed NVImage::GetAsSourceSurface() { // logics in PlanarYCbCrImage::GetAsSourceSurface(). const int bufferLength = mData.mYSize.height * mData.mYStride + mData.mCbCrSize.height * mData.mCbCrSize.width * 2; - auto* buffer = new uint8_t[bufferLength]; + UniquePtr buffer(new uint8_t[bufferLength]); Data aData = mData; aData.mCbCrStride = aData.mCbCrSize.width; aData.mCbSkip = 0; aData.mCrSkip = 0; - aData.mYChannel = buffer; + aData.mYChannel = buffer.get(); aData.mCbChannel = aData.mYChannel + aData.mYSize.height * aData.mYStride; aData.mCrChannel = aData.mCbChannel + aData.mCbCrSize.height * aData.mCbCrStride; @@ -691,9 +700,6 @@ already_AddRefed NVImage::GetAsSourceSurface() { mSourceSurface = surface; - // Release the temporary buffer. - delete[] buffer; - return surface.forget(); } @@ -744,8 +750,8 @@ bool NVImage::SetData(const Data& aData) { const NVImage::Data* NVImage::GetData() const { return &mData; } -UniquePtr NVImage::AllocateBuffer(uint32_t aSize) { - UniquePtr buffer(new uint8_t[aSize]); +UniquePtr NVImage::AllocateBuffer(uint32_t aSize) { + UniquePtr buffer(new uint8_t[aSize]); return buffer; } @@ -762,7 +768,10 @@ SourceSurfaceImage::SourceSurfaceImage(gfx::SourceSurface* aSourceSurface) mSourceSurface(aSourceSurface), mTextureFlags(TextureFlags::DEFAULT) {} -SourceSurfaceImage::~SourceSurfaceImage() = default; +SourceSurfaceImage::~SourceSurfaceImage() { + NS_ReleaseOnMainThreadSystemGroup("SourceSurfaceImage::mSourceSurface", + mSourceSurface.forget()); +} TextureClient* SourceSurfaceImage::GetTextureClient( KnowsCompositor* aKnowsCompositor) { diff --git a/gfx/layers/ImageContainer.h b/gfx/layers/ImageContainer.h index 22961560eb..8efd523327 100644 --- a/gfx/layers/ImageContainer.h +++ b/gfx/layers/ImageContainer.h @@ -18,7 +18,6 @@ #include "mozilla/layers/LayersTypes.h" // for LayersBackend, etc #include "mozilla/layers/CompositorTypes.h" #include "mozilla/mozalloc.h" // for operator delete, etc -#include "nsAutoRef.h" // for nsCountedRef #include "nsCOMPtr.h" // for already_AddRefed #include "nsDebug.h" // for NS_ASSERTION #include "nsISupportsImpl.h" // for Image::Release, etc @@ -32,104 +31,6 @@ #include "mozilla/EnumeratedArray.h" #include "mozilla/UniquePtr.h" -#ifndef XPCOM_GLUE_AVOID_NSPR -/** - * We need to be able to hold a reference to a Moz2D SourceSurface from Image - * subclasses. This is potentially a problem since Images can be addrefed - * or released off the main thread. We can ensure that we never AddRef - * a SourceSurface off the main thread, but we might want to Release due - * to an Image being destroyed off the main thread. - * - * We use nsCountedRef to reference the - * SourceSurface. When AddRefing, we assert that we're on the main thread. - * When Releasing, if we're not on the main thread, we post an event to - * the main thread to do the actual release. - */ -class nsMainThreadSourceSurfaceRef; - -template <> -class nsAutoRefTraits { - public: - typedef mozilla::gfx::SourceSurface* RawRef; - - /** - * The XPCOM event that will do the actual release on the main thread. - */ - class SurfaceReleaser : public mozilla::Runnable { - public: - explicit SurfaceReleaser(RawRef aRef) - : mozilla::Runnable( - "nsAutoRefTraits::SurfaceReleaser"), - mRef(aRef) {} - NS_IMETHOD Run() override { - mRef->Release(); - return NS_OK; - } - RawRef mRef; - }; - - static RawRef Void() { return nullptr; } - static void Release(RawRef aRawRef) { - if (NS_IsMainThread()) { - aRawRef->Release(); - return; - } - nsCOMPtr runnable = new SurfaceReleaser(aRawRef); - NS_DispatchToMainThread(runnable); - } - static void AddRef(RawRef aRawRef) { - NS_ASSERTION(NS_IsMainThread(), - "Can only add a reference on the main thread"); - aRawRef->AddRef(); - } -}; - -class nsOwningThreadSourceSurfaceRef; - -template <> -class nsAutoRefTraits { - public: - typedef mozilla::gfx::SourceSurface* RawRef; - - /** - * The XPCOM event that will do the actual release on the creation thread. - */ - class SurfaceReleaser : public mozilla::Runnable { - public: - explicit SurfaceReleaser(RawRef aRef) - : mozilla::Runnable( - "nsAutoRefTraits::" - "SurfaceReleaser"), - mRef(aRef) {} - NS_IMETHOD Run() override { - mRef->Release(); - return NS_OK; - } - RawRef mRef; - }; - - static RawRef Void() { return nullptr; } - void Release(RawRef aRawRef) { - MOZ_ASSERT(mOwningEventTarget); - if (mOwningEventTarget->IsOnCurrentThread()) { - aRawRef->Release(); - return; - } - nsCOMPtr runnable = new SurfaceReleaser(aRawRef); - mOwningEventTarget->Dispatch(runnable, nsIThread::DISPATCH_NORMAL); - } - void AddRef(RawRef aRawRef) { - MOZ_ASSERT(!mOwningEventTarget); - mOwningEventTarget = mozilla::GetCurrentThreadSerialEventTarget(); - aRawRef->AddRef(); - } - - private: - nsCOMPtr mOwningEventTarget; -}; - -#endif - #ifdef XP_WIN struct ID3D10Texture2D; struct ID3D10Device; @@ -547,7 +448,7 @@ class ImageContainer final : public SupportsWeakPtr { #ifdef XP_WIN D3D11YCbCrRecycleAllocator* GetD3D11YCbCrRecycleAllocator( - KnowsCompositor* aAllocator); + KnowsCompositor* aKnowsCompositor); #endif /** @@ -786,7 +687,7 @@ class PlanarYCbCrImage : public Image { enum { MAX_DIMENSION = 16384 }; - virtual ~PlanarYCbCrImage() = default; + virtual ~PlanarYCbCrImage(); /** * This makes a copy of the data buffers, in order to support functioning @@ -852,7 +753,7 @@ class PlanarYCbCrImage : public Image { gfx::IntPoint mOrigin; gfx::IntSize mSize; gfxImageFormat mOffscreenFormat; - nsCountedRef mSourceSurface; + RefPtr mSourceSurface; uint32_t mBufferSize; }; @@ -906,13 +807,13 @@ class NVImage final : public Image { /** * Return a buffer to store image data in. */ - mozilla::UniquePtr AllocateBuffer(uint32_t aSize); + mozilla::UniquePtr AllocateBuffer(uint32_t aSize); - mozilla::UniquePtr mBuffer; + mozilla::UniquePtr mBuffer; uint32_t mBufferSize; gfx::IntSize mSize; Data mData; - nsCountedRef mSourceSurface; + RefPtr mSourceSurface; }; /** @@ -941,7 +842,7 @@ class SourceSurfaceImage final : public Image { private: gfx::IntSize mSize; - nsCountedRef mSourceSurface; + RefPtr mSourceSurface; nsDataHashtable> mTextureClients; TextureFlags mTextureFlags; }; diff --git a/gfx/layers/LayerScope.cpp b/gfx/layers/LayerScope.cpp index a957d2604d..e9ea7cf6cb 100644 --- a/gfx/layers/LayerScope.cpp +++ b/gfx/layers/LayerScope.cpp @@ -27,12 +27,12 @@ #include "GLContextProvider.h" #include "GLReadTexImageHelper.h" - #include #include "mozilla/LinkedList.h" #include "mozilla/Base64.h" #include "mozilla/SHA1.h" #include "mozilla/StaticPtr.h" +#include "nsComponentManagerUtils.h" #include "nsThreadUtils.h" #include "nsISocketTransport.h" #include "nsIServerSocket.h" diff --git a/gfx/layers/basic/BasicImages.cpp b/gfx/layers/basic/BasicImages.cpp index cccbef6b47..7d18fc0486 100644 --- a/gfx/layers/basic/BasicImages.cpp +++ b/gfx/layers/basic/BasicImages.cpp @@ -14,7 +14,6 @@ #include "mozilla/mozalloc.h" // for operator delete[], etc #include "mozilla/RefPtr.h" #include "mozilla/UniquePtr.h" -#include "nsAutoRef.h" // for nsCountedRef #include "nsCOMPtr.h" // for already_AddRefed #include "nsDebug.h" // for NS_ERROR, NS_ASSERTION #include "nsISupportsImpl.h" // for Image::Release, etc diff --git a/gfx/layers/client/CanvasClient.cpp b/gfx/layers/client/CanvasClient.cpp index 342b0b8e27..0ebc260052 100644 --- a/gfx/layers/client/CanvasClient.cpp +++ b/gfx/layers/client/CanvasClient.cpp @@ -231,7 +231,7 @@ CanvasClientSharedSurface::~CanvasClientSharedSurface() { ClearSurfaces(); } // For formats compatible with R8G8B8A8. static inline void SwapRB_R8G8B8A8(uint8_t* pixel) { // [RR, GG, BB, AA] - Swap(pixel[0], pixel[2]); + std::swap(pixel[0], pixel[2]); } class TexClientFactory { diff --git a/gfx/layers/client/TextureClientRecycleAllocator.cpp b/gfx/layers/client/TextureClientRecycleAllocator.cpp index 1c24c53fed..b5d60a13b9 100644 --- a/gfx/layers/client/TextureClientRecycleAllocator.cpp +++ b/gfx/layers/client/TextureClientRecycleAllocator.cpp @@ -56,7 +56,7 @@ class MOZ_RAII DefaultTextureClientAllocationHelper } already_AddRefed Allocate( - KnowsCompositor* aAllocator) override { + KnowsCompositor* aKnowsCompositor) override { return mAllocator->Allocate(mFormat, mSize, mSelector, mTextureFlags, mAllocationFlags); } @@ -93,16 +93,16 @@ bool YCbCrTextureClientAllocationHelper::IsCompatible( } already_AddRefed YCbCrTextureClientAllocationHelper::Allocate( - KnowsCompositor* aAllocator) { + KnowsCompositor* aKnowsCompositor) { return TextureClient::CreateForYCbCr( - aAllocator, mData.mYSize, mData.mYStride, mData.mCbCrSize, + aKnowsCompositor, mData.mYSize, mData.mYStride, mData.mCbCrSize, mData.mCbCrStride, mData.mStereoMode, mData.mColorDepth, mData.mYUVColorSpace, mData.mColorRange, mTextureFlags); } TextureClientRecycleAllocator::TextureClientRecycleAllocator( - KnowsCompositor* aAllocator) - : mSurfaceAllocator(aAllocator), + KnowsCompositor* aKnowsCompositor) + : mKnowsCompositor(aKnowsCompositor), mMaxPooledSize(kMaxPooledSized), mLock("TextureClientRecycleAllocatorImp.mLock"), mIsDestroyed(false) {} @@ -151,7 +151,7 @@ already_AddRefed TextureClientRecycleAllocator::CreateOrRecycle( new TextureClientReleaseTask(textureHolder->GetTextureClient()); textureHolder->ClearTextureClient(); textureHolder = nullptr; - mSurfaceAllocator->GetTextureForwarder()->GetMessageLoop()->PostTask( + mKnowsCompositor->GetTextureForwarder()->GetMessageLoop()->PostTask( task.forget()); } else { textureHolder->GetTextureClient()->RecycleTexture( @@ -162,7 +162,7 @@ already_AddRefed TextureClientRecycleAllocator::CreateOrRecycle( if (!textureHolder) { // Allocate new TextureClient - RefPtr texture = aHelper.Allocate(mSurfaceAllocator); + RefPtr texture = aHelper.Allocate(mKnowsCompositor); if (!texture) { return nullptr; } @@ -187,7 +187,7 @@ already_AddRefed TextureClientRecycleAllocator::CreateOrRecycle( already_AddRefed TextureClientRecycleAllocator::Allocate( gfx::SurfaceFormat aFormat, gfx::IntSize aSize, BackendSelector aSelector, TextureFlags aTextureFlags, TextureAllocationFlags aAllocFlags) { - return TextureClient::CreateForDrawing(mSurfaceAllocator, aFormat, aSize, + return TextureClient::CreateForDrawing(mKnowsCompositor, aFormat, aSize, aSelector, aTextureFlags, aAllocFlags); } diff --git a/gfx/layers/client/TextureClientRecycleAllocator.h b/gfx/layers/client/TextureClientRecycleAllocator.h index bd3c145170..8d7efc9521 100644 --- a/gfx/layers/client/TextureClientRecycleAllocator.h +++ b/gfx/layers/client/TextureClientRecycleAllocator.h @@ -46,7 +46,7 @@ class ITextureClientAllocationHelper { mAllocationFlags(aAllocationFlags) {} virtual already_AddRefed Allocate( - KnowsCompositor* aAllocator) = 0; + KnowsCompositor* aKnowsCompositor) = 0; virtual bool IsCompatible(TextureClient* aTextureClient) = 0; const gfx::SurfaceFormat mFormat; @@ -65,7 +65,7 @@ class MOZ_RAII YCbCrTextureClientAllocationHelper bool IsCompatible(TextureClient* aTextureClient) override; already_AddRefed Allocate( - KnowsCompositor* aAllocator) override; + KnowsCompositor* aKnowsCompositor) override; protected: const PlanarYCbCrData& mData; @@ -86,7 +86,7 @@ class TextureClientRecycleAllocator : public ITextureClientRecycleAllocator { virtual ~TextureClientRecycleAllocator(); public: - explicit TextureClientRecycleAllocator(KnowsCompositor* aAllocator); + explicit TextureClientRecycleAllocator(KnowsCompositor* aKnowsCompositor); void SetMaxPoolSize(uint32_t aMax); @@ -102,12 +102,14 @@ class TextureClientRecycleAllocator : public ITextureClientRecycleAllocator { void Destroy(); + KnowsCompositor* GetKnowsCompositor() { return mKnowsCompositor; } + protected: virtual already_AddRefed Allocate( gfx::SurfaceFormat aFormat, gfx::IntSize aSize, BackendSelector aSelector, TextureFlags aTextureFlags, TextureAllocationFlags aAllocFlags); - RefPtr mSurfaceAllocator; + RefPtr mKnowsCompositor; friend class DefaultTextureClientAllocationHelper; void RecycleTextureClient(TextureClient* aClient) override; diff --git a/gfx/layers/ipc/SharedRGBImage.cpp b/gfx/layers/ipc/SharedRGBImage.cpp index dd9e0b1a10..12aa1e788a 100644 --- a/gfx/layers/ipc/SharedRGBImage.cpp +++ b/gfx/layers/ipc/SharedRGBImage.cpp @@ -47,38 +47,16 @@ class TextureClientForRawBufferAccessAllocationHelper } }; -already_AddRefed CreateSharedRGBImage(ImageContainer* aImageContainer, - gfx::IntSize aSize, - gfxImageFormat aImageFormat) { - NS_ASSERTION(aImageFormat == gfx::SurfaceFormat::A8R8G8B8_UINT32 || - aImageFormat == gfx::SurfaceFormat::X8R8G8B8_UINT32 || - aImageFormat == gfx::SurfaceFormat::R5G6B5_UINT16, - "RGB formats supported only"); - - if (!aImageContainer) { - NS_WARNING("No ImageContainer to allocate SharedRGBImage"); - return nullptr; - } - - RefPtr rgbImage = aImageContainer->CreateSharedRGBImage(); - if (!rgbImage) { - NS_WARNING("Failed to create SharedRGBImage"); - return nullptr; - } - if (!rgbImage->Allocate(aSize, - gfx::ImageFormatToSurfaceFormat(aImageFormat))) { - NS_WARNING("Failed to allocate a shared image"); - return nullptr; - } - return rgbImage.forget(); -} - SharedRGBImage::SharedRGBImage(ImageClient* aCompositable) : Image(nullptr, ImageFormat::SHARED_RGB), mCompositable(aCompositable) { MOZ_COUNT_CTOR(SharedRGBImage); } -SharedRGBImage::~SharedRGBImage() { MOZ_COUNT_DTOR(SharedRGBImage); } +SharedRGBImage::~SharedRGBImage() { + MOZ_COUNT_DTOR(SharedRGBImage); + NS_ReleaseOnMainThreadSystemGroup("SharedRGBImage::mSourceSurface", + mSourceSurface.forget()); +} bool SharedRGBImage::Allocate(gfx::IntSize aSize, gfx::SurfaceFormat aFormat) { static const uint32_t MAX_POOLED_VIDEO_COUNT = 5; diff --git a/gfx/layers/ipc/SharedRGBImage.h b/gfx/layers/ipc/SharedRGBImage.h index 3c7c14c9cc..8d9be080ee 100644 --- a/gfx/layers/ipc/SharedRGBImage.h +++ b/gfx/layers/ipc/SharedRGBImage.h @@ -21,10 +21,6 @@ namespace layers { class ImageClient; class TextureClient; -already_AddRefed CreateSharedRGBImage(ImageContainer* aImageContainer, - gfx::IntSize aSize, - gfxImageFormat aImageFormat); - /** * Stores RGB data in shared memory * It is assumed that the image width and stride are equal @@ -49,7 +45,7 @@ class SharedRGBImage : public Image { gfx::IntSize mSize; RefPtr mCompositable; RefPtr mTextureClient; - nsCountedRef mSourceSurface; + RefPtr mSourceSurface; }; } // namespace layers diff --git a/gfx/layers/mlgpu/LayerMLGPU.cpp b/gfx/layers/mlgpu/LayerMLGPU.cpp index 09aab43ed4..95013521cc 100644 --- a/gfx/layers/mlgpu/LayerMLGPU.cpp +++ b/gfx/layers/mlgpu/LayerMLGPU.cpp @@ -7,6 +7,7 @@ #include "RenderViewMLGPU.h" #include "FrameBuilder.h" #include "mozilla/layers/ImageHost.h" +#include "mozilla/layers/LayerManagerComposite.h" namespace mozilla { namespace layers { @@ -15,6 +16,8 @@ using namespace gfx; uint64_t LayerMLGPU::sFrameKey = 0; +LayerMLGPU::~LayerMLGPU() = default; + LayerMLGPU::LayerMLGPU(LayerManagerMLGPU* aManager) : HostLayer(aManager), mFrameKey(0), diff --git a/gfx/layers/mlgpu/LayerMLGPU.h b/gfx/layers/mlgpu/LayerMLGPU.h index 5037418790..4fee38d65f 100644 --- a/gfx/layers/mlgpu/LayerMLGPU.h +++ b/gfx/layers/mlgpu/LayerMLGPU.h @@ -88,6 +88,7 @@ class LayerMLGPU : public HostLayer { protected: LayerMLGPU(LayerManagerMLGPU* aManager); + ~LayerMLGPU(); LayerManagerMLGPU* GetManager(); void AddBoundsToView(FrameBuilder* aBuilder, RenderViewMLGPU* aView, diff --git a/gfx/layers/mlgpu/LayerManagerMLGPU.cpp b/gfx/layers/mlgpu/LayerManagerMLGPU.cpp index bb4e40aae1..34af6f307f 100644 --- a/gfx/layers/mlgpu/LayerManagerMLGPU.cpp +++ b/gfx/layers/mlgpu/LayerManagerMLGPU.cpp @@ -7,6 +7,7 @@ #include "PaintedLayerMLGPU.h" #include "ImageLayerMLGPU.h" #include "CanvasLayerMLGPU.h" +#include "ContainerLayerMLGPU.h" #include "GeckoProfiler.h" // for profiler_* #include "gfxEnv.h" // for gfxEnv #include "MLGDevice.h" diff --git a/gfx/layers/mlgpu/MLGPUScreenshotGrabber.cpp b/gfx/layers/mlgpu/MLGPUScreenshotGrabber.cpp index 1841cdd3bd..f36d9ff1e0 100644 --- a/gfx/layers/mlgpu/MLGPUScreenshotGrabber.cpp +++ b/gfx/layers/mlgpu/MLGPUScreenshotGrabber.cpp @@ -11,6 +11,7 @@ #include "mozilla/layers/ProfilerScreenshots.h" #include "mozilla/gfx/Point.h" #include "mozilla/gfx/Swizzle.h" +#include "GeckoProfiler.h" #include "SharedBufferMLGPU.h" #include "ShaderDefinitionsMLGPU.h" #include "nsTArray.h" @@ -70,6 +71,8 @@ class MLGPUScreenshotGrabberImpl final { const IntSize mReadbackTextureSize; }; +MLGPUScreenshotGrabber::MLGPUScreenshotGrabber() = default; + MLGPUScreenshotGrabber::~MLGPUScreenshotGrabber() = default; void MLGPUScreenshotGrabber::MaybeGrabScreenshot(MLGDevice* aDevice, diff --git a/gfx/layers/mlgpu/MLGPUScreenshotGrabber.h b/gfx/layers/mlgpu/MLGPUScreenshotGrabber.h index 32a440f01a..b7ab3ed8a2 100644 --- a/gfx/layers/mlgpu/MLGPUScreenshotGrabber.h +++ b/gfx/layers/mlgpu/MLGPUScreenshotGrabber.h @@ -25,7 +25,7 @@ class MLGPUScreenshotGrabberImpl; */ class MLGPUScreenshotGrabber final { public: - MLGPUScreenshotGrabber() = default; + MLGPUScreenshotGrabber(); ~MLGPUScreenshotGrabber(); // Scale the contents of aTexture into an appropriately sized MLGTexture diff --git a/gfx/thebes/PrintTargetPS.cpp b/gfx/thebes/PrintTargetPS.cpp index 39f55e3879..2e5dfb2da8 100644 --- a/gfx/thebes/PrintTargetPS.cpp +++ b/gfx/thebes/PrintTargetPS.cpp @@ -53,7 +53,7 @@ already_AddRefed PrintTargetPS::CreateOrNull( // print area. Our consumers are responsible for checking // RotateForLandscape() and applying a rotation transform if true. if (aOrientation == LANDSCAPE) { - Swap(aSizeInPoints.width, aSizeInPoints.height); + std::swap(aSizeInPoints.width, aSizeInPoints.height); } cairo_surface_t* surface = cairo_ps_surface_create_for_stream( diff --git a/gfx/thebes/gfxFcPlatformFontList.cpp b/gfx/thebes/gfxFcPlatformFontList.cpp index 5f9083f267..bee1623b05 100644 --- a/gfx/thebes/gfxFcPlatformFontList.cpp +++ b/gfx/thebes/gfxFcPlatformFontList.cpp @@ -70,18 +70,6 @@ using mozilla::dom::SystemFontListEntry; #define LOG_CMAPDATA_ENABLED() \ MOZ_LOG_TEST(gfxPlatform::GetLog(eGfxLog_cmapdata), LogLevel::Debug) -template <> -class nsAutoRefTraits : public nsPointerRefTraits { - public: - static void Release(FcFontSet* ptr) { FcFontSetDestroy(ptr); } -}; - -template <> -class nsAutoRefTraits : public nsPointerRefTraits { - public: - static void Release(FcObjectSet* ptr) { FcObjectSetDestroy(ptr); } -}; - static const FcChar8* ToFcChar8Ptr(const char* aStr) { return reinterpret_cast(aStr); } @@ -265,7 +253,7 @@ gfxFontEntry* gfxFontconfigFontEntry::Clone() const { return new gfxFontconfigFontEntry(Name(), mFontPattern, mIgnoreFcCharmap); } -static FcPattern* CreatePatternForFace(FT_Face aFace) { +static already_AddRefed CreatePatternForFace(FT_Face aFace) { // Use fontconfig to fill out the pattern from the FTFace. // The "file" argument cannot be nullptr (in fontconfig-2.6.0 at // least). The dummy file passed here is removed below. @@ -276,10 +264,11 @@ static FcPattern* CreatePatternForFace(FT_Face aFace) { // "blanks", effectively assuming that, if the font has a blank glyph, // then the author intends any associated character to be rendered // blank. - FcPattern* pattern = FcFreeTypeQueryFace(aFace, ToFcChar8Ptr(""), 0, nullptr); + RefPtr pattern = + dont_AddRef(FcFreeTypeQueryFace(aFace, ToFcChar8Ptr(""), 0, nullptr)); // given that we have a FT_Face, not really sure this is possible... if (!pattern) { - pattern = FcPatternCreate(); + pattern = dont_AddRef(FcPatternCreate()); } FcPatternDel(pattern, FC_FILE); FcPatternDel(pattern, FC_INDEX); @@ -288,7 +277,7 @@ static FcPattern* CreatePatternForFace(FT_Face aFace) { // that when creating a cairo font face. FcPatternAddFTFace(pattern, FC_FT_FACE, aFace); - return pattern; + return pattern.forget(); } static FT_Face CreateFaceForPattern(FcPattern* aPattern) { @@ -945,7 +934,7 @@ gfxFont* gfxFontconfigFontEntry::CreateFontInstance( return nullptr; } - nsAutoRef pattern(FcPatternCreate()); + RefPtr pattern = dont_AddRef(FcPatternCreate()); if (!pattern) { NS_WARNING("Failed to create Fontconfig pattern for font instance"); return nullptr; @@ -981,8 +970,8 @@ gfxFont* gfxFontconfigFontEntry::CreateFontInstance( } PreparePattern(pattern, aFontStyle->printerFont); - nsAutoRef renderPattern( - FcFontRenderPrepare(nullptr, pattern, fontPattern)); + RefPtr renderPattern = + dont_AddRef(FcFontRenderPrepare(nullptr, pattern, fontPattern)); if (fontPattern != mFontPattern) { // Discard temporary pattern used for variation support FcPatternDestroy(fontPattern); @@ -1201,8 +1190,7 @@ void gfxFontconfigFontFamily::AddFontPattern(FcPattern* aFontPattern) { } } - nsCountedRef pattern(aFontPattern); - mFontPatterns.AppendElement(pattern); + mFontPatterns.AppendElement(aFontPattern); } static const double kRejectDistance = 10000.0; @@ -1865,12 +1853,12 @@ static void GetSystemFontList(nsTArray& aListOfFonts, nsAtom* aLangGroup) { aListOfFonts.Clear(); - nsAutoRef pat(FcPatternCreate()); + RefPtr pat = dont_AddRef(FcPatternCreate()); if (!pat) { return; } - nsAutoRef os(FcObjectSetBuild(FC_FAMILY, nullptr)); + UniquePtr os(FcObjectSetBuild(FC_FAMILY, nullptr)); if (!os) { return; } @@ -1884,7 +1872,7 @@ static void GetSystemFontList(nsTArray& aListOfFonts, FcPatternAddString(pat, FC_LANG, ToFcChar8Ptr(fcLang.get())); } - nsAutoRef fs(FcFontList(nullptr, pat, os)); + UniquePtr fs(FcFontList(nullptr, pat, os.get())); if (!fs) { return; } @@ -2061,13 +2049,13 @@ bool gfxFcPlatformFontList::FindAndAddFamilies( // It wasn't in the cache, so we need to ask fontconfig... const FcChar8* kSentinelName = ToFcChar8Ptr("-moz-sentinel"); FcChar8* sentinelFirstFamily = nullptr; - nsAutoRef sentinelSubst(FcPatternCreate()); + RefPtr sentinelSubst = dont_AddRef(FcPatternCreate()); FcPatternAddString(sentinelSubst, FC_FAMILY, kSentinelName); FcConfigSubstitute(nullptr, sentinelSubst, FcMatchPattern); FcPatternGetString(sentinelSubst, FC_FAMILY, 0, &sentinelFirstFamily); // substitutions for font, -moz-sentinel pattern - nsAutoRef fontWithSentinel(FcPatternCreate()); + RefPtr fontWithSentinel = dont_AddRef(FcPatternCreate()); FcPatternAddString(fontWithSentinel, FC_FAMILY, ToFcChar8Ptr(familyName.get())); FcPatternAddString(fontWithSentinel, FC_FAMILY, kSentinelName); @@ -2109,12 +2097,12 @@ bool gfxFcPlatformFontList::GetStandardFamilyName(const nsCString& aFontName, return true; } - nsAutoRef pat(FcPatternCreate()); + RefPtr pat = dont_AddRef(FcPatternCreate()); if (!pat) { return true; } - nsAutoRef os(FcObjectSetBuild(FC_FAMILY, nullptr)); + UniquePtr os(FcObjectSetBuild(FC_FAMILY, nullptr)); if (!os) { return true; } @@ -2122,7 +2110,7 @@ bool gfxFcPlatformFontList::GetStandardFamilyName(const nsCString& aFontName, // add the family name to the pattern FcPatternAddString(pat, FC_FAMILY, ToFcChar8Ptr(aFontName.get())); - nsAutoRef givenFS(FcFontList(nullptr, pat, os)); + UniquePtr givenFS(FcFontList(nullptr, pat, os.get())); if (!givenFS) { return true; } @@ -2161,7 +2149,7 @@ bool gfxFcPlatformFontList::GetStandardFamilyName(const nsCString& aFontName, FcPatternDel(pat, FC_FAMILY); FcPatternAddString(pat, FC_FAMILY, (FcChar8*)candidates[j].get()); - nsAutoRef candidateFS(FcFontList(nullptr, pat, os)); + UniquePtr candidateFS(FcFontList(nullptr, pat, os.get())); if (!candidateFS) { return true; } @@ -2309,7 +2297,7 @@ gfxPlatformFontList::PrefFontList* gfxFcPlatformFontList::FindGenericFamilies( } // if not found, ask fontconfig to pick the appropriate font - nsAutoRef genericPattern(FcPatternCreate()); + RefPtr genericPattern = dont_AddRef(FcPatternCreate()); FcPatternAddString(genericPattern, FC_FAMILY, ToFcChar8Ptr(aGeneric.get())); // -- prefer scalable fonts @@ -2326,7 +2314,7 @@ gfxPlatformFontList::PrefFontList* gfxFcPlatformFontList::FindGenericFamilies( // -- sort to get the closest matches FcResult result; - nsAutoRef faces( + UniquePtr faces( FcFontSort(nullptr, genericPattern, FcFalse, nullptr, &result)); if (!faces) { diff --git a/gfx/thebes/gfxFcPlatformFontList.h b/gfx/thebes/gfxFcPlatformFontList.h index eb5619ea7f..686d5e779d 100644 --- a/gfx/thebes/gfxFcPlatformFontList.h +++ b/gfx/thebes/gfxFcPlatformFontList.h @@ -11,7 +11,8 @@ #include "gfxPlatformFontList.h" #include "mozilla/FontPropertyTypes.h" #include "mozilla/mozalloc.h" -#include "nsAutoRef.h" +#include "mozilla/RefPtr.h" +#include "mozilla/UniquePtr.h" #include "nsClassHashtable.h" #include @@ -30,22 +31,35 @@ namespace mozilla { namespace dom { class SystemFontListEntry; }; -}; // namespace mozilla template <> -class nsAutoRefTraits : public nsPointerRefTraits { +class RefPtrTraits { public: static void Release(FcPattern* ptr) { FcPatternDestroy(ptr); } static void AddRef(FcPattern* ptr) { FcPatternReference(ptr); } }; template <> -class nsAutoRefTraits : public nsPointerRefTraits { +class RefPtrTraits { public: static void Release(FcConfig* ptr) { FcConfigDestroy(ptr); } static void AddRef(FcConfig* ptr) { FcConfigReference(ptr); } }; +template <> +class DefaultDelete { + public: + void operator()(FcFontSet* aPtr) { FcFontSetDestroy(aPtr); } +}; + +template <> +class DefaultDelete { + public: + void operator()(FcObjectSet* aPtr) { FcObjectSetDestroy(aPtr); } +}; + +}; // namespace mozilla + // Helper classes used for clearning out user font data when cairo font // face is destroyed. Since multiple faces may use the same data, be // careful to assure that the data is only cleared out when all uses @@ -140,7 +154,7 @@ class gfxFontconfigFontEntry : public gfxFontEntry { void MaybeReleaseFTFace(); // pattern for a single face of a family - nsCountedRef mFontPattern; + RefPtr mFontPattern; // user font data, when needed RefPtr mUserFontData; @@ -232,7 +246,7 @@ class gfxFontconfigFontFamily : public gfxFontFamily { // helper for FilterForFontList bool SupportsLangGroup(nsAtom* aLangGroup) const; - nsTArray> mFontPatterns; + nsTArray> mFontPatterns; bool mContainsAppFonts; bool mHasNonScalableFaces; @@ -256,7 +270,7 @@ class gfxFontconfigFont : public gfxFT2FontBase { private: virtual ~gfxFontconfigFont(); - nsCountedRef mPattern; + RefPtr mPattern; }; class gfxFcPlatformFontList : public gfxPlatformFontList { @@ -370,8 +384,7 @@ class gfxFcPlatformFontList : public gfxPlatformFontList { // to avoid enumerating all fonts, maintain a mapping of local font // names to family - nsBaseHashtable, FcPattern*> - mLocalNames; + nsBaseHashtable, FcPattern*> mLocalNames; // caching generic/lang ==> font family list nsClassHashtable mGenericMappings; @@ -386,7 +399,7 @@ class gfxFcPlatformFontList : public gfxPlatformFontList { mFcSubstituteCache; nsCOMPtr mCheckFontUpdatesTimer; - nsCountedRef mLastConfig; + RefPtr mLastConfig; // By default, font prefs under Linux are set to simply lookup // via fontconfig the appropriate font for serif/sans-serif/monospace. diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp index 2f52538fe0..4efa32fb99 100644 --- a/gfx/thebes/gfxFont.cpp +++ b/gfx/thebes/gfxFont.cpp @@ -790,7 +790,7 @@ gfxFont::gfxFont(const RefPtr& aUnscaledFont, #endif // Turn off AA for Ahem for testing purposes when requested. - if (MOZ_UNLIKELY(StaticPrefs::gfx_font_ahem_antialias_none() && + if (MOZ_UNLIKELY(StaticPrefs::gfx_font_rendering_ahem_antialias_none() && mFontEntry->FamilyName().EqualsLiteral("Ahem"))) { mAntialiasOption = kAntialiasNone; } diff --git a/gfx/thebes/gfxMacFont.cpp b/gfx/thebes/gfxMacFont.cpp index fdca4b3a14..13dafc12d1 100644 --- a/gfx/thebes/gfxMacFont.cpp +++ b/gfx/thebes/gfxMacFont.cpp @@ -146,7 +146,7 @@ gfxMacFont::gfxMacFont(const RefPtr& aUnscaledFont, if ((mAdjustedSize <= (gfxFloat)gfxPlatformMac::GetPlatform()->GetAntiAliasingThreshold()) || // Turn off AA for Ahem for testing purposes when requested. - MOZ_UNLIKELY(StaticPrefs::gfx_font_ahem_antialias_none() && + MOZ_UNLIKELY(StaticPrefs::gfx_font_rendering_ahem_antialias_none() && mFontEntry->FamilyName().EqualsLiteral("Ahem"))) { cairo_font_options_set_antialias(fontOptions, CAIRO_ANTIALIAS_NONE); mAntialiasOption = kAntialiasNone; @@ -200,7 +200,8 @@ bool gfxMacFont::ShapeText(DrawTarget* aDrawTarget, const char16_t* aText, // Currently, we don't support vertical shaping via CoreText, // so we ignore RequiresAATLayout if vertical is requested. auto macFontEntry = static_cast(GetFontEntry()); - if (macFontEntry->RequiresAATLayout() && !aVertical) { + if (macFontEntry->RequiresAATLayout() && !aVertical && + StaticPrefs::CoreTextEnabled()) { if (!mCoreTextShaper) { mCoreTextShaper = MakeUnique(this); } diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp index 9aa9c3da77..0735c6a529 100644 --- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -422,6 +422,9 @@ NS_IMPL_ISUPPORTS(SRGBOverrideObserver, nsIObserver, nsISupportsWeakReference) #define GFX_PREF_WORD_CACHE_MAXENTRIES "gfx.font_rendering.wordcache.maxentries" #define GFX_PREF_GRAPHITE_SHAPING "gfx.font_rendering.graphite.enabled" +#if defined(XP_MACOSX) +#define GFX_PREF_CORETEXT_SHAPING "gfx.font_rendering.coretext.enabled" +#endif #define BIDI_NUMERAL_PREF "bidi.numeral" @@ -2263,8 +2266,7 @@ int32_t gfxPlatform::GetBidiNumeralOption() { void gfxPlatform::FlushFontAndWordCaches() { gfxFontCache* fontCache = gfxFontCache::GetCache(); if (fontCache) { - fontCache->AgeAllGenerations(); - fontCache->FlushShapedWordCaches(); + fontCache->Flush(); } gfxPlatform::PurgeSkiaFontCache(); @@ -2304,6 +2306,12 @@ void gfxPlatform::FontsPrefsChanged(const char* aPref) { } else if (!strcmp(GFX_PREF_GRAPHITE_SHAPING, aPref)) { mGraphiteShapingEnabled = UNINITIALIZED_VALUE; FlushFontAndWordCaches(); + } else if ( +#if defined(XP_MACOSX) + !strcmp(GFX_PREF_CORETEXT_SHAPING, aPref) || +#endif + !strcmp("gfx.font_rendering.ahem_antialias_none", aPref)) { + FlushFontAndWordCaches(); } else if (!strcmp(BIDI_NUMERAL_PREF, aPref)) { mBidiNumeralOption = UNINITIALIZED_VALUE; } else if (!strcmp(GFX_PREF_OPENTYPE_SVG, aPref)) { diff --git a/hal/sandbox/SandboxHal.cpp b/hal/sandbox/SandboxHal.cpp index c7074b243c..89e8dee71e 100644 --- a/hal/sandbox/SandboxHal.cpp +++ b/hal/sandbox/SandboxHal.cpp @@ -13,7 +13,6 @@ #include "mozilla/EnumeratedRange.h" #include "mozilla/Observer.h" #include "mozilla/Unused.h" -#include "nsAutoPtr.h" #include "WindowIdentifier.h" using namespace mozilla; diff --git a/image/SurfaceFilters.h b/image/SurfaceFilters.h index 5e4f71946a..2449c9aade 100644 --- a/image/SurfaceFilters.h +++ b/image/SurfaceFilters.h @@ -1152,7 +1152,7 @@ class ADAM7InterpolatingFilter final : public SurfaceFilter { } // The current row is now the previous important row; save it. - Swap(mPreviousRow, mCurrentRow); + std::swap(mPreviousRow, mCurrentRow); MOZ_ASSERT(mRow < InputSize().height, "Reached the end of the surface without " diff --git a/image/decoders/icon/mac/nsIconChannelCocoa.mm b/image/decoders/icon/mac/nsIconChannelCocoa.mm index 9c9aa96b16..0e2853d28b 100644 --- a/image/decoders/icon/mac/nsIconChannelCocoa.mm +++ b/image/decoders/icon/mac/nsIconChannelCocoa.mm @@ -34,9 +34,7 @@ nsIconChannel::nsIconChannel() {} nsIconChannel::~nsIconChannel() { - if (mLoadInfo) { - NS_ReleaseOnMainThreadSystemGroup("nsIconChannel::mLoadInfo", mLoadInfo.forget()); - } + NS_ReleaseOnMainThreadSystemGroup("nsIconChannel::mLoadInfo", mLoadInfo.forget()); } NS_IMPL_ISUPPORTS(nsIconChannel, nsIChannel, nsIRequest, nsIRequestObserver, nsIStreamListener) @@ -179,9 +177,10 @@ } MOZ_ASSERT( - !mLoadInfo || mLoadInfo->GetSecurityMode() == 0 || mLoadInfo->GetInitialSecurityCheckDone() || + mLoadInfo->GetSecurityMode() == 0 || mLoadInfo->GetInitialSecurityCheckDone() || (mLoadInfo->GetSecurityMode() == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL && - mLoadInfo->LoadingPrincipal() && mLoadInfo->LoadingPrincipal()->IsSystemPrincipal()), + mLoadInfo->GetLoadingPrincipal() && + mLoadInfo->GetLoadingPrincipal()->IsSystemPrincipal()), "security flags in loadInfo but doContentSecurityCheck() not called"); nsCOMPtr inStream; diff --git a/image/decoders/icon/win/nsIconChannel.cpp b/image/decoders/icon/win/nsIconChannel.cpp index 3ff62259fd..089f1ba4e5 100644 --- a/image/decoders/icon/win/nsIconChannel.cpp +++ b/image/decoders/icon/win/nsIconChannel.cpp @@ -6,6 +6,7 @@ #include "mozilla/BasePrincipal.h" #include "mozilla/Monitor2.h" +#include "nsComponentManagerUtils.h" #include "nsIconChannel.h" #include "nsIIconURI.h" #include "nsIInterfaceRequestor.h" @@ -168,10 +169,8 @@ nsIconChannel::IconSyncOpenTask::Run() { nsIconChannel::nsIconChannel() {} nsIconChannel::~nsIconChannel() { - if (mLoadInfo) { - NS_ReleaseOnMainThreadSystemGroup("nsIconChannel::mLoadInfo", - mLoadInfo.forget()); - } + NS_ReleaseOnMainThreadSystemGroup("nsIconChannel::mLoadInfo", + mLoadInfo.forget()); if (mLoadGroup) { NS_ReleaseOnMainThreadSystemGroup("nsIconChannel::mLoadGroup", mLoadGroup.forget()); @@ -348,12 +347,12 @@ nsIconChannel::AsyncOpen(nsIStreamListener* aListener) { } MOZ_ASSERT( - !mLoadInfo || mLoadInfo->GetSecurityMode() == 0 || + mLoadInfo->GetSecurityMode() == 0 || mLoadInfo->GetInitialSecurityCheckDone() || (mLoadInfo->GetSecurityMode() == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL && - mLoadInfo->LoadingPrincipal() && - mLoadInfo->LoadingPrincipal()->IsSystemPrincipal()), + mLoadInfo->GetLoadingPrincipal() && + mLoadInfo->GetLoadingPrincipal()->IsSystemPrincipal()), "security flags in loadInfo but doContentSecurityCheck() not called"); nsCOMPtr inStream; diff --git a/image/imgILoader.idl b/image/imgILoader.idl index c5d6b44753..6e5d758834 100644 --- a/image/imgILoader.idl +++ b/image/imgILoader.idl @@ -16,6 +16,8 @@ interface nsIReferrerInfo; interface nsISimpleEnumerator; +webidl Document; + #include "nsIRequest.idl" // for nsLoadFlags #include "nsIContentPolicy.idl" // for nsContentPolicyType @@ -43,7 +45,7 @@ interface imgILoader : nsISupports * @param aLoadingPrincipal the principal of the loading document * @param aLoadGroup Loadgroup to put the image load into * @param aObserver the observer (may be null) - * @param aCX some random data + * @param aLoadingDocument loading document * @param aLoadFlags Load flags for the request * @param aCacheKey cache key to use for a load if the original * image came from a request that had post data @@ -63,7 +65,7 @@ interface imgILoader : nsISupports in nsIPrincipal aLoadingPrincipal, in nsILoadGroup aLoadGroup, in imgINotificationObserver aObserver, - in nsISupports aCX, + in Document aLoadingDocument, in nsLoadFlags aLoadFlags, in nsISupports cacheKey, [optional] @@ -75,7 +77,7 @@ interface imgILoader : nsISupports * already be opened before this method is called, and there * must have been no OnDataAvailable calls for it yet. * @param aObserver the observer (may be null) - * @param cx some random data + * @param aLoadingDocument loading document * @param aListener [out] * A listener that you must send the channel's notifications and data * to. Can be null, in which case imagelib has found a cached image @@ -88,6 +90,6 @@ interface imgILoader : nsISupports */ imgIRequest loadImageWithChannelXPCOM(in nsIChannel aChannel, in imgINotificationObserver aObserver, - in nsISupports cx, + in Document aLoadingDocument, out nsIStreamListener aListener); }; diff --git a/image/imgLoader.cpp b/image/imgLoader.cpp index e75b37b2c1..aab60077b2 100644 --- a/image/imgLoader.cpp +++ b/image/imgLoader.cpp @@ -5,62 +5,58 @@ // Undefine windows version of LoadImage because our code uses that name. #undef LoadImage +#include "imgLoader.h" + #include +#include +#include "DecoderFactory.h" +#include "Image.h" #include "ImageLogging.h" -#include "imgLoader.h" - +#include "ReferrerInfo.h" +#include "imgRequestProxy.h" #include "mozilla/Attributes.h" +#include "mozilla/BasePrincipal.h" +#include "mozilla/ChaosMode.h" #include "mozilla/ClearOnShutdown.h" -#include "mozilla/Move.h" +#include "mozilla/LoadInfo.h" #include "mozilla/NullPrincipal.h" #include "mozilla/Preferences.h" #include "mozilla/StaticPrefs_image.h" #include "mozilla/StaticPrefs_network.h" -#include "mozilla/ChaosMode.h" -#include "mozilla/LoadInfo.h" - -#include "nsImageModule.h" -#include "imgRequestProxy.h" - -#include "nsCOMPtr.h" - -#include "nsContentPolicyUtils.h" -#include "nsContentUtils.h" -#include "nsNetUtil.h" -#include "nsNetCID.h" -#include "nsIProtocolHandler.h" -#include "nsMimeTypes.h" -#include "nsStreamUtils.h" -#include "nsIHttpChannel.h" -#include "nsICacheInfoChannel.h" -#include "nsIClassOfService.h" -#include "nsIInterfaceRequestor.h" -#include "nsIInterfaceRequestorUtils.h" -#include "nsIProgressEventSink.h" -#include "nsIChannelEventSink.h" -#include "nsIAsyncVerifyRedirectCallback.h" -#include "nsIFileURL.h" -#include "nsIFile.h" -#include "nsCRT.h" -#include "nsINetworkPredictor.h" -#include "nsReadableUtils.h" -#include "mozilla/BasePrincipal.h" #include "mozilla/dom/ContentParent.h" #include "mozilla/dom/nsMixedContentBlocker.h" #ifdef MOZ_BUILD_WEBRENDER # include "mozilla/image/ImageMemoryReporter.h" # include "mozilla/layers/CompositorManagerChild.h" #endif - +#include "nsCOMPtr.h" +#include "nsCRT.h" +#include "nsContentPolicyUtils.h" +#include "nsContentUtils.h" #include "nsIApplicationCache.h" #include "nsIApplicationCacheContainer.h" - +#include "nsIAsyncVerifyRedirectCallback.h" +#include "nsICacheInfoChannel.h" +#include "nsIChannelEventSink.h" +#include "nsIClassOfService.h" +#include "nsIFile.h" +#include "nsIFileURL.h" +#include "nsIHttpChannel.h" +#include "nsIInterfaceRequestor.h" +#include "nsIInterfaceRequestorUtils.h" #include "nsIMemoryReporter.h" -#include "DecoderFactory.h" -#include "Image.h" +#include "nsINetworkPredictor.h" +#include "nsIProgressEventSink.h" +#include "nsIProtocolHandler.h" +#include "nsImageModule.h" +#include "nsMimeTypes.h" +#include "nsNetCID.h" +#include "nsNetUtil.h" +#include "nsQueryObject.h" +#include "nsReadableUtils.h" +#include "nsStreamUtils.h" #include "prtime.h" -#include "ReferrerInfo.h" // we want to explore making the document own the load group // so we can associate the document URI with the load group. @@ -572,8 +568,8 @@ NS_IMPL_ISUPPORTS(nsProgressNotificationProxy, nsIProgressEventSink, nsIChannelEventSink, nsIInterfaceRequestor) NS_IMETHODIMP -nsProgressNotificationProxy::OnProgress(nsIRequest* request, nsISupports* ctxt, - int64_t progress, int64_t progressMax) { +nsProgressNotificationProxy::OnProgress(nsIRequest* request, int64_t progress, + int64_t progressMax) { nsCOMPtr loadGroup; request->GetLoadGroup(getter_AddRefs(loadGroup)); @@ -584,12 +580,11 @@ nsProgressNotificationProxy::OnProgress(nsIRequest* request, nsISupports* ctxt, if (!target) { return NS_OK; } - return target->OnProgress(mImageRequest, ctxt, progress, progressMax); + return target->OnProgress(mImageRequest, progress, progressMax); } NS_IMETHODIMP -nsProgressNotificationProxy::OnStatus(nsIRequest* request, nsISupports* ctxt, - nsresult status, +nsProgressNotificationProxy::OnStatus(nsIRequest* request, nsresult status, const char16_t* statusArg) { nsCOMPtr loadGroup; request->GetLoadGroup(getter_AddRefs(loadGroup)); @@ -601,7 +596,7 @@ nsProgressNotificationProxy::OnStatus(nsIRequest* request, nsISupports* ctxt, if (!target) { return NS_OK; } - return target->OnStatus(mImageRequest, ctxt, status, statusArg); + return target->OnStatus(mImageRequest, status, statusArg); } NS_IMETHODIMP @@ -687,7 +682,7 @@ static bool ShouldRevalidateEntry(imgCacheEntry* aEntry, nsLoadFlags aFlags, /* Call content policies on cached images that went through a redirect */ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, - nsISupports* aLoadingContext, + Document* aLoadingDocument, nsIPrincipal* aTriggeringPrincipal, nsContentPolicyType aPolicyType, bool aSendCSPViolationReports) { @@ -705,9 +700,9 @@ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, aImgRequest->GetFinalURI(getter_AddRefs(contentLocation)); nsresult rv; - nsCOMPtr requestingNode = do_QueryInterface(aLoadingContext); nsCOMPtr loadingPrincipal = - requestingNode ? requestingNode->NodePrincipal() : aTriggeringPrincipal; + aLoadingDocument ? aLoadingDocument->NodePrincipal() + : aTriggeringPrincipal; // If there is no context and also no triggeringPrincipal, then we use a fresh // nullPrincipal as the loadingPrincipal because we can not create a loadinfo // without a valid loadingPrincipal. @@ -716,7 +711,7 @@ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, } nsCOMPtr secCheckLoadInfo = new LoadInfo( - loadingPrincipal, aTriggeringPrincipal, requestingNode, + loadingPrincipal, aTriggeringPrincipal, aLoadingDocument, nsILoadInfo::SEC_ONLY_FOR_EXPLICIT_CONTENTSEC_CHECK, aPolicyType); secCheckLoadInfo->SetSendCSPViolationEvents(aSendCSPViolationReports); @@ -739,7 +734,7 @@ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, // the doc and the resource load is http: which would result in an incorrect // mixed content warning. nsCOMPtr docShell = - NS_CP_GetDocShellFromContext(aLoadingContext); + NS_CP_GetDocShellFromContext(ToSupports(aLoadingDocument)); if (docShell) { Document* document = docShell->GetDocument(); if (document && document->GetUpgradeInsecureRequests(false)) { @@ -748,20 +743,13 @@ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, } if (!aTriggeringPrincipal || !aTriggeringPrincipal->IsSystemPrincipal()) { - // Set the requestingLocation from the aTriggeringPrincipal. - nsCOMPtr requestingLocation; - if (aTriggeringPrincipal) { - rv = aTriggeringPrincipal->GetURI(getter_AddRefs(requestingLocation)); - NS_ENSURE_SUCCESS(rv, false); - } - // reset the decision for mixed content blocker check decision = nsIContentPolicy::REJECT_REQUEST; - rv = nsMixedContentBlocker::ShouldLoad( - insecureRedirect, aPolicyType, contentLocation, requestingLocation, - aLoadingContext, - EmptyCString(), // mime guess - aTriggeringPrincipal, &decision); + rv = nsMixedContentBlocker::ShouldLoad(insecureRedirect, aPolicyType, + contentLocation, nullptr, + ToSupports(aLoadingDocument), + EmptyCString(), // mime guess + aTriggeringPrincipal, &decision); if (NS_FAILED(rv) || !NS_CP_ACCEPTED(decision)) { return false; } @@ -778,7 +766,7 @@ static bool ShouldLoadCachedImage(imgRequest* aImgRequest, static bool ValidateSecurityInfo(imgRequest* request, bool forcePrincipalCheck, int32_t corsmode, nsIPrincipal* triggeringPrincipal, - nsISupports* aCX, + Document* aLoadingDocument, nsContentPolicyType aPolicyType, nsIReferrerInfo* aReferrerInfo) { // If the referrer policy doesn't match, we can't use this request. @@ -827,7 +815,8 @@ static bool ValidateSecurityInfo(imgRequest* request, bool forcePrincipalCheck, } // Content Policy Check on Cached Images - return ShouldLoadCachedImage(request, aCX, triggeringPrincipal, aPolicyType, + return ShouldLoadCachedImage(request, aLoadingDocument, triggeringPrincipal, + aPolicyType, /* aSendCSPViolationReports */ false); } @@ -842,9 +831,9 @@ static nsresult NewImageChannel( bool* aForcePrincipalCheckForCacheEntry, nsIURI* aURI, nsIURI* aInitialDocumentURI, int32_t aCORSMode, nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, - const nsCString& aAcceptHeader, nsLoadFlags aLoadFlags, - nsContentPolicyType aPolicyType, nsIPrincipal* aTriggeringPrincipal, - nsISupports* aRequestingContext, bool aRespectPrivacy) { + nsLoadFlags aLoadFlags, nsContentPolicyType aPolicyType, + nsIPrincipal* aTriggeringPrincipal, nsINode* aRequestingNode, + bool aRespectPrivacy) { MOZ_ASSERT(aResult); nsresult rv; @@ -870,8 +859,6 @@ static nsresult NewImageChannel( // canceled too. // - nsCOMPtr requestingNode = do_QueryInterface(aRequestingContext); - nsSecurityFlags securityFlags = aCORSMode == imgIRequest::CORS_NONE ? nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS @@ -887,8 +874,8 @@ static nsresult NewImageChannel( // node and a principal. This is for things like background images that are // specified by user stylesheets, where the document is being styled, but // the principal is that of the user stylesheet. - if (requestingNode && aTriggeringPrincipal) { - rv = NS_NewChannelWithTriggeringPrincipal(aResult, aURI, requestingNode, + if (aRequestingNode && aTriggeringPrincipal) { + rv = NS_NewChannelWithTriggeringPrincipal(aResult, aURI, aRequestingNode, aTriggeringPrincipal, securityFlags, aPolicyType, nullptr, // PerformanceStorage @@ -954,10 +941,6 @@ static nsresult NewImageChannel( // Initialize HTTP-specific attributes newHttpChannel = do_QueryInterface(*aResult); if (newHttpChannel) { - rv = newHttpChannel->SetRequestHeader(NS_LITERAL_CSTRING("Accept"), - aAcceptHeader, false); - MOZ_ASSERT(NS_SUCCEEDED(rv)); - nsCOMPtr httpChannelInternal = do_QueryInterface(newHttpChannel); NS_ENSURE_TRUE(httpChannelInternal, NS_ERROR_UNEXPECTED); @@ -1154,9 +1137,9 @@ imgCacheQueue::const_iterator imgCacheQueue::end() const { } nsresult imgLoader::CreateNewProxyForRequest( - imgRequest* aRequest, nsILoadGroup* aLoadGroup, Document* aLoadingDocument, - imgINotificationObserver* aObserver, nsLoadFlags aLoadFlags, - imgRequestProxy** _retval) { + imgRequest* aRequest, nsIURI* aURI, nsILoadGroup* aLoadGroup, + Document* aLoadingDocument, imgINotificationObserver* aObserver, + nsLoadFlags aLoadFlags, imgRequestProxy** _retval) { LOG_SCOPE_WITH_PARAM(gImgLog, "imgLoader::CreateNewProxyForRequest", "imgRequest", aRequest); @@ -1172,11 +1155,8 @@ nsresult imgLoader::CreateNewProxyForRequest( */ proxyRequest->SetLoadFlags(aLoadFlags); - nsCOMPtr uri; - aRequest->GetURI(getter_AddRefs(uri)); - // init adds itself to imgRequest's list of observers - nsresult rv = proxyRequest->Init(aRequest, aLoadGroup, aLoadingDocument, uri, + nsresult rv = proxyRequest->Init(aRequest, aLoadGroup, aLoadingDocument, aURI, aObserver); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; @@ -1238,6 +1218,21 @@ NS_IMPL_ISUPPORTS(imgLoader, imgILoader, nsIContentSniffer, imgICache, static imgLoader* gNormalLoader = nullptr; static imgLoader* gPrivateBrowsingLoader = nullptr; +/* static */ +mozilla::CORSMode imgLoader::ConvertToCORSMode(uint32_t aImgCORS) { + switch (aImgCORS) { + case imgIRequest::CORS_NONE: + return CORSMode::CORS_NONE; + case imgIRequest::CORS_ANONYMOUS: + return CORSMode::CORS_ANONYMOUS; + case imgIRequest::CORS_USE_CREDENTIALS: + return CORSMode::CORS_USE_CREDENTIALS; + } + + MOZ_ASSERT(false, "Unexpected imgIRequest CORS value"); + return CORSMode::CORS_NONE; +} + /* static */ already_AddRefed imgLoader::CreateImageLoader() { // In some cases, such as xpctests, XPCOM modules are not automatically @@ -1365,10 +1360,6 @@ nsresult imgLoader::InitCache() { nsresult imgLoader::Init() { InitCache(); - ReadAcceptHeaderPref(); - - Preferences::AddWeakObserver(this, "image.http.accept"); - return NS_OK; } @@ -1381,13 +1372,7 @@ imgLoader::RespectPrivacyNotifications() { NS_IMETHODIMP imgLoader::Observe(nsISupports* aSubject, const char* aTopic, const char16_t* aData) { - // We listen for pref change notifications... - if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) { - if (!NS_strcmp(aData, u"image.http.accept")) { - ReadAcceptHeaderPref(); - } - - } else if (strcmp(aTopic, "memory-pressure") == 0) { + if (strcmp(aTopic, "memory-pressure") == 0) { MinimizeCaches(); } else if (strcmp(aTopic, "chrome-flush-caches") == 0) { MinimizeCaches(); @@ -1411,17 +1396,6 @@ imgLoader::Observe(nsISupports* aSubject, const char* aTopic, return NS_OK; } -void imgLoader::ReadAcceptHeaderPref() { - nsAutoCString accept; - nsresult rv = Preferences::GetCString("image.http.accept", accept); - if (NS_SUCCEEDED(rv)) { - mAcceptHeader = accept; - } else { - mAcceptHeader = - IMAGE_PNG "," IMAGE_WILDCARD ";q=0.8," ANY_WILDCARD ";q=0.5"; - } -} - NS_IMETHODIMP imgLoader::ClearCache(bool chrome) { if (XRE_IsParentProcess()) { @@ -1728,10 +1702,10 @@ void imgLoader::CheckCacheLimits(imgCacheTable& cache, imgCacheQueue& queue) { bool imgLoader::ValidateRequestWithNewChannel( imgRequest* request, nsIURI* aURI, nsIURI* aInitialDocumentURI, nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, - imgINotificationObserver* aObserver, nsISupports* aCX, - Document* aLoadingDocument, uint64_t aInnerWindowId, nsLoadFlags aLoadFlags, + imgINotificationObserver* aObserver, Document* aLoadingDocument, + uint64_t aInnerWindowId, nsLoadFlags aLoadFlags, nsContentPolicyType aLoadPolicyType, imgRequestProxy** aProxyRequest, - nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode, + nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode, bool aLinkPreload, bool* aNewChannelCreated) { // now we need to insert a new channel request object in between the real // request and the proxy that basically delays loading the image until it @@ -1741,8 +1715,8 @@ bool imgLoader::ValidateRequestWithNewChannel( // If we're currently in the middle of validating this request, just hand // back a proxy to it; the required work will be done for us. - if (request->GetValidator()) { - rv = CreateNewProxyForRequest(request, aLoadGroup, aLoadingDocument, + if (imgCacheValidator* validator = request->GetValidator()) { + rv = CreateNewProxyForRequest(request, aURI, aLoadGroup, aLoadingDocument, aObserver, aLoadFlags, aProxyRequest); if (NS_FAILED(rv)) { return false; @@ -1757,8 +1731,18 @@ bool imgLoader::ValidateRequestWithNewChannel( // resulting from methods such as StartDecoding(). See bug 579122. proxy->MarkValidating(); + if (aLinkPreload) { + MOZ_ASSERT(aLoadingDocument); + MOZ_ASSERT(aReferrerInfo); + proxy->PrioritizeAsPreload(); + auto preloadKey = PreloadHashKey::CreateAsImage( + aURI, aTriggeringPrincipal, ConvertToCORSMode(aCORSMode), + aReferrerInfo->ReferrerPolicy()); + proxy->NotifyOpen(&preloadKey, aLoadingDocument, true); + } + // Attach the proxy without notifying - request->GetValidator()->AddProxy(proxy); + validator->AddProxy(proxy); } return NS_SUCCEEDED(rv); @@ -1770,8 +1754,8 @@ bool imgLoader::ValidateRequestWithNewChannel( bool forcePrincipalCheck; rv = NewImageChannel(getter_AddRefs(newChannel), &forcePrincipalCheck, aURI, aInitialDocumentURI, aCORSMode, aReferrerInfo, - aLoadGroup, mAcceptHeader, aLoadFlags, aLoadPolicyType, - aTriggeringPrincipal, aCX, mRespectPrivacy); + aLoadGroup, aLoadFlags, aLoadPolicyType, + aTriggeringPrincipal, aLoadingDocument, mRespectPrivacy); if (NS_FAILED(rv)) { return false; } @@ -1781,7 +1765,7 @@ bool imgLoader::ValidateRequestWithNewChannel( } RefPtr req; - rv = CreateNewProxyForRequest(request, aLoadGroup, aLoadingDocument, + rv = CreateNewProxyForRequest(request, aURI, aLoadGroup, aLoadingDocument, aObserver, aLoadFlags, getter_AddRefs(req)); if (NS_FAILED(rv)) { return false; @@ -1794,8 +1778,9 @@ bool imgLoader::ValidateRequestWithNewChannel( return false; } - RefPtr hvc = new imgCacheValidator( - progressproxy, this, request, aCX, aInnerWindowId, forcePrincipalCheck); + RefPtr hvc = + new imgCacheValidator(progressproxy, this, request, aLoadingDocument, + aInnerWindowId, forcePrincipalCheck); // Casting needed here to get past multiple inheritance. nsCOMPtr listener = @@ -1815,6 +1800,16 @@ bool imgLoader::ValidateRequestWithNewChannel( // resulting from methods such as StartDecoding(). See bug 579122. req->MarkValidating(); + if (aLinkPreload) { + MOZ_ASSERT(aLoadingDocument); + MOZ_ASSERT(aReferrerInfo); + req->PrioritizeAsPreload(); + auto preloadKey = PreloadHashKey::CreateAsImage( + aURI, aTriggeringPrincipal, ConvertToCORSMode(aCORSMode), + aReferrerInfo->ReferrerPolicy()); + req->NotifyOpen(&preloadKey, aLoadingDocument, true); + } + // Add the proxy without notifying hvc->AddProxy(req); @@ -1824,6 +1819,13 @@ bool imgLoader::ValidateRequestWithNewChannel( rv = newChannel->AsyncOpen(listener); if (NS_WARN_IF(NS_FAILED(rv))) { req->CancelAndForgetObserver(rv); + // This will notify any current or future tags. Pass the + // non-open channel so that we can read loadinfo and referrer info of that + // channel. + req->NotifyStart(newChannel); + // Use the non-channel overload of this method to force the notification to + // happen. The preload request has not been assigned a channel. + req->NotifyStop(rv); return false; } @@ -1834,11 +1836,11 @@ bool imgLoader::ValidateRequestWithNewChannel( bool imgLoader::ValidateEntry( imgCacheEntry* aEntry, nsIURI* aURI, nsIURI* aInitialDocumentURI, nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, - imgINotificationObserver* aObserver, nsISupports* aCX, - Document* aLoadingDocument, nsLoadFlags aLoadFlags, - nsContentPolicyType aLoadPolicyType, bool aCanMakeNewChannel, - bool* aNewChannelCreated, imgRequestProxy** aProxyRequest, - nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode) { + imgINotificationObserver* aObserver, Document* aLoadingDocument, + nsLoadFlags aLoadFlags, nsContentPolicyType aLoadPolicyType, + bool aCanMakeNewChannel, bool* aNewChannelCreated, + imgRequestProxy** aProxyRequest, nsIPrincipal* aTriggeringPrincipal, + int32_t aCORSMode, bool aLinkPreload) { LOG_SCOPE(gImgLog, "imgLoader::ValidateEntry"); // If the expiration time is zero, then the request has not gotten far enough @@ -1875,9 +1877,10 @@ bool imgLoader::ValidateEntry( } if (!ValidateSecurityInfo(request, aEntry->ForcePrincipalCheck(), aCORSMode, - aTriggeringPrincipal, aCX, aLoadPolicyType, - aReferrerInfo)) + aTriggeringPrincipal, aLoadingDocument, + aLoadPolicyType, aReferrerInfo)) { return false; + } // data URIs are immutable and by their nature can't leak data, so we can // just return true in that case. Doing so would mean that shift-reload @@ -1892,17 +1895,17 @@ bool imgLoader::ValidateEntry( bool validateRequest = false; - // If the request's loadId is the same as the aCX, then it is ok to use - // this one because it has already been validated for this context. + // If the request's loadId is the same as the aLoadingDocument, then it is ok + // to use this one because it has already been validated for this context. // // XXX: nullptr seems to be a 'special' key value that indicates that NO // validation is required. // XXX: we also check the window ID because the loadID() can return a reused // pointer of a document. This can still happen for non-document image // cache entries. - void* key = (void*)aCX; - nsCOMPtr doc = do_QueryInterface(aCX); - uint64_t innerWindowID = doc ? doc->InnerWindowID() : 0; + void* key = (void*)aLoadingDocument; + uint64_t innerWindowID = + aLoadingDocument ? aLoadingDocument->InnerWindowID() : 0; if (request->LoadId() != key || request->InnerWindowID() != innerWindowID) { // If we would need to revalidate this entry, but we're being told to // bypass the cache, we don't allow this entry to be used. @@ -1955,8 +1958,8 @@ bool imgLoader::ValidateEntry( return ValidateRequestWithNewChannel( request, aURI, aInitialDocumentURI, aReferrerInfo, aLoadGroup, - aObserver, aCX, aLoadingDocument, aLoadFlags, aLoadPolicyType, - aLoadPolicyType, aProxyRequest, aTriggeringPrincipal, aCORSMode, + aObserver, aLoadingDocument, innerWindowID, aLoadFlags, aLoadPolicyType, + aProxyRequest, aTriggeringPrincipal, aCORSMode, aLinkPreload, aNewChannelCreated); } @@ -2105,26 +2108,22 @@ bool imgLoader::PreferLoadFromCache(nsIURI* aURI) const { nsIRequest::VALIDATE_ONCE_PER_SESSION) NS_IMETHODIMP -imgLoader::LoadImageXPCOM(nsIURI* aURI, nsIURI* aInitialDocumentURI, - nsIReferrerInfo* aReferrerInfo, - nsIPrincipal* aTriggeringPrincipal, - nsILoadGroup* aLoadGroup, - imgINotificationObserver* aObserver, nsISupports* aCX, - nsLoadFlags aLoadFlags, nsISupports* aCacheKey, - nsContentPolicyType aContentPolicyType, - imgIRequest** _retval) { +imgLoader::LoadImageXPCOM( + nsIURI* aURI, nsIURI* aInitialDocumentURI, nsIReferrerInfo* aReferrerInfo, + nsIPrincipal* aTriggeringPrincipal, nsILoadGroup* aLoadGroup, + imgINotificationObserver* aObserver, Document* aLoadingDocument, + nsLoadFlags aLoadFlags, nsISupports* aCacheKey, + nsContentPolicyType aContentPolicyType, imgIRequest** _retval) { // Optional parameter, so defaults to 0 (== TYPE_INVALID) if (!aContentPolicyType) { aContentPolicyType = nsIContentPolicy::TYPE_INTERNAL_IMAGE; } imgRequestProxy* proxy; - nsCOMPtr node = do_QueryInterface(aCX); - nsCOMPtr doc = do_QueryInterface(aCX); - nsresult rv = - LoadImage(aURI, aInitialDocumentURI, aReferrerInfo, aTriggeringPrincipal, - 0, aLoadGroup, aObserver, node, doc, aLoadFlags, aCacheKey, - aContentPolicyType, EmptyString(), - /* aUseUrgentStartForChannel */ false, &proxy); + nsresult rv = LoadImage( + aURI, aInitialDocumentURI, aReferrerInfo, aTriggeringPrincipal, 0, + aLoadGroup, aObserver, aLoadingDocument, aLoadingDocument, aLoadFlags, + aCacheKey, aContentPolicyType, EmptyString(), + /* aUseUrgentStartForChannel */ false, /* aListPreload */ false, &proxy); *_retval = proxy; return rv; } @@ -2136,7 +2135,7 @@ nsresult imgLoader::LoadImage( nsINode* aContext, Document* aLoadingDocument, nsLoadFlags aLoadFlags, nsISupports* aCacheKey, nsContentPolicyType aContentPolicyType, const nsAString& initiatorType, bool aUseUrgentStartForChannel, - imgRequestProxy** _retval) { + bool aLinkPreload, imgRequestProxy** _retval) { VerifyCacheSizes(); NS_ASSERTION(aURI, "imgLoader::LoadImage -- NULL URI pointer"); @@ -2208,6 +2207,11 @@ nsresult imgLoader::LoadImage( requestFlags |= nsIRequest::LOAD_BACKGROUND; } + if (aLinkPreload) { + // Set background loading if it is + requestFlags |= nsIRequest::LOAD_BACKGROUND; + } + int32_t corsmode = imgIRequest::CORS_NONE; if (aLoadFlags & imgILoader::LOAD_CORS_ANONYMOUS) { corsmode = imgIRequest::CORS_ANONYMOUS; @@ -2215,6 +2219,59 @@ nsresult imgLoader::LoadImage( corsmode = imgIRequest::CORS_USE_CREDENTIALS; } + // Look in the preloaded images of loading document first. + if (StaticPrefs::network_preload() && !aLinkPreload && aLoadingDocument) { + auto key = PreloadHashKey::CreateAsImage( + aURI, aTriggeringPrincipal, ConvertToCORSMode(corsmode), + aReferrerInfo ? aReferrerInfo->ReferrerPolicy() + : ReferrerPolicy::_empty); + if (RefPtr preload = + aLoadingDocument->Preloads().LookupPreload(&key)) { + RefPtr proxy = do_QueryObject(preload); + MOZ_ASSERT(proxy); + + MOZ_LOG(gImgLog, LogLevel::Debug, + ("[this=%p] imgLoader::LoadImage -- preloaded [proxy=%p]" + " [document=%p]\n", + this, proxy.get(), aLoadingDocument)); + + // Removing the preload for this image to be in parity with Chromium. Any + // following regular image request will be reloaded using the regular + // path: image cache, http cache, network. Any following `` will start a new image preload that can be + // satisfied from http cache or network. + // + // There is a spec discussion for "preload cache", see + // https://github.com/w3c/preload/issues/97. And it is also not clear how + // preload image interacts with list of available images, see + // https://github.com/whatwg/html/issues/4474. + proxy->RemoveSelf(aLoadingDocument); + proxy->NotifyUsage(); + + imgRequest* request = proxy->GetOwner(); + nsresult rv = + CreateNewProxyForRequest(request, aURI, aLoadGroup, aLoadingDocument, + aObserver, requestFlags, _retval); + NS_ENSURE_SUCCESS(rv, rv); + + imgRequestProxy* newProxy = *_retval; + if (imgCacheValidator* validator = request->GetValidator()) { + newProxy->MarkValidating(); + // Attach the proxy without notifying and this will add us to the load + // group. + validator->AddProxy(newProxy); + } else { + // It's OK to add here even if the request is done. If it is, it'll send + // a OnStopRequest()and the proxy will be removed from the loadgroup in + // imgRequestProxy::OnLoadComplete. + newProxy->AddToLoadGroup(); + newProxy->NotifyListener(); + } + + return NS_OK; + } + } + RefPtr entry; // Look in the cache for our URI, and then validate it. @@ -2231,10 +2288,9 @@ nsresult imgLoader::LoadImage( if (cache.Get(key, getter_AddRefs(entry)) && entry) { bool newChannelCreated = false; if (ValidateEntry(entry, aURI, aInitialDocumentURI, aReferrerInfo, - aLoadGroup, aObserver, ToSupports(aLoadingDocument), - aLoadingDocument, requestFlags, aContentPolicyType, true, - &newChannelCreated, _retval, aTriggeringPrincipal, - corsmode)) { + aLoadGroup, aObserver, aLoadingDocument, requestFlags, + aContentPolicyType, true, &newChannelCreated, _retval, + aTriggeringPrincipal, corsmode, aLinkPreload)) { request = entry->GetRequest(); // If this entry has no proxies, its request has no reference to the @@ -2260,10 +2316,9 @@ nsresult imgLoader::LoadImage( // - we don't have cache. We are not in this if() stmt. A new channel is // created and that triggers the CSP checks. // - We have a cache entry and this is blocked by CSP directives. - DebugOnly shouldLoad = - ShouldLoadCachedImage(request, ToSupports(aLoadingDocument), - aTriggeringPrincipal, aContentPolicyType, - /* aSendCSPViolationReports */ true); + DebugOnly shouldLoad = ShouldLoadCachedImage( + request, aLoadingDocument, aTriggeringPrincipal, aContentPolicyType, + /* aSendCSPViolationReports */ true); MOZ_ASSERT(shouldLoad); } } else { @@ -2283,9 +2338,8 @@ nsresult imgLoader::LoadImage( bool forcePrincipalCheck; rv = NewImageChannel(getter_AddRefs(newChannel), &forcePrincipalCheck, aURI, aInitialDocumentURI, corsmode, aReferrerInfo, - aLoadGroup, mAcceptHeader, requestFlags, - aContentPolicyType, aTriggeringPrincipal, aContext, - mRespectPrivacy); + aLoadGroup, requestFlags, aContentPolicyType, + aTriggeringPrincipal, aContext, mRespectPrivacy); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } @@ -2302,7 +2356,7 @@ nsresult imgLoader::LoadImage( nsCOMPtr cos(do_QueryInterface(newChannel)); if (cos) { - if (aUseUrgentStartForChannel) { + if (aUseUrgentStartForChannel && !aLinkPreload) { cos->AddClassFlags(nsIClassOfService::UrgentStart); } @@ -2320,9 +2374,8 @@ nsresult imgLoader::LoadImage( nsCOMPtr channelLoadGroup; newChannel->GetLoadGroup(getter_AddRefs(channelLoadGroup)); rv = request->Init(aURI, aURI, /* aHadInsecureRedirect = */ false, - channelLoadGroup, newChannel, entry, - ToSupports(aLoadingDocument), aTriggeringPrincipal, - corsmode, aReferrerInfo); + channelLoadGroup, newChannel, entry, aLoadingDocument, + aTriggeringPrincipal, corsmode, aReferrerInfo); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; } @@ -2378,7 +2431,7 @@ nsresult imgLoader::LoadImage( request->SetLoadId(aLoadingDocument); LOG_MSG(gImgLog, "imgLoader::LoadImage", "creating proxy request."); - rv = CreateNewProxyForRequest(request, aLoadGroup, aLoadingDocument, + rv = CreateNewProxyForRequest(request, aURI, aLoadGroup, aLoadingDocument, aObserver, requestFlags, _retval); if (NS_FAILED(rv)) { return rv; @@ -2397,6 +2450,16 @@ nsresult imgLoader::LoadImage( newChannel->SetNotificationCallbacks(requestor); } + if (aLinkPreload) { + MOZ_ASSERT(aLoadingDocument); + MOZ_ASSERT(aReferrerInfo); + proxy->PrioritizeAsPreload(); + auto preloadKey = PreloadHashKey::CreateAsImage( + aURI, aTriggeringPrincipal, ConvertToCORSMode(corsmode), + aReferrerInfo->ReferrerPolicy()); + proxy->NotifyOpen(&preloadKey, aLoadingDocument, true); + } + // Note that it's OK to add here even if the request is done. If it is, // it'll send a OnStopRequest() to the proxy in imgRequestProxy::Notify and // the proxy will be removed from the loadgroup. @@ -2422,19 +2485,20 @@ nsresult imgLoader::LoadImage( NS_IMETHODIMP imgLoader::LoadImageWithChannelXPCOM(nsIChannel* channel, imgINotificationObserver* aObserver, - nsISupports* aCX, + Document* aLoadingDocument, nsIStreamListener** listener, imgIRequest** _retval) { nsresult result; imgRequestProxy* proxy; - result = LoadImageWithChannel(channel, aObserver, aCX, listener, &proxy); + result = LoadImageWithChannel(channel, aObserver, aLoadingDocument, listener, + &proxy); *_retval = proxy; return result; } nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, imgINotificationObserver* aObserver, - nsISupports* aCX, + Document* aLoadingDocument, nsIStreamListener** listener, imgRequestProxy** _retval) { NS_ASSERTION(channel, @@ -2447,14 +2511,13 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, nsCOMPtr uri; channel->GetURI(getter_AddRefs(uri)); - nsCOMPtr doc = do_QueryInterface(aCX); NS_ENSURE_TRUE(channel, NS_ERROR_FAILURE); nsCOMPtr loadInfo = channel->LoadInfo(); OriginAttributes attrs = loadInfo->GetOriginAttributes(); - ImageCacheKey key(uri, attrs, doc); + ImageCacheKey key(uri, attrs, aLoadingDocument); nsLoadFlags requestFlags = nsIRequest::LOAD_NORMAL; channel->GetLoadFlags(&requestFlags); @@ -2490,9 +2553,10 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, // default to the internal image type nsContentPolicyType policyType = loadInfo->InternalContentPolicyType(); - if (ValidateEntry(entry, uri, nullptr, nullptr, nullptr, aObserver, aCX, - doc, requestFlags, policyType, false, nullptr, nullptr, - nullptr, imgIRequest::CORS_NONE)) { + if (ValidateEntry(entry, uri, nullptr, nullptr, nullptr, aObserver, + aLoadingDocument, requestFlags, policyType, false, + nullptr, nullptr, nullptr, imgIRequest::CORS_NONE, + false)) { request = entry->GetRequest(); } else { nsCOMPtr cacheChan(do_QueryInterface(channel)); @@ -2535,11 +2599,12 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, channel->GetLoadGroup(getter_AddRefs(loadGroup)); #ifdef DEBUG - if (doc) { + if (aLoadingDocument) { // The load group of the channel should always match that of the // document if given. If that isn't the case, then we need to add more // plumbing to ensure we block the document as well. - nsCOMPtr docLoadGroup = doc->GetDocumentLoadGroup(); + nsCOMPtr docLoadGroup = + aLoadingDocument->GetDocumentLoadGroup(); MOZ_ASSERT(docLoadGroup == loadGroup); } #endif @@ -2556,8 +2621,8 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, *listener = nullptr; // give them back a null nsIStreamListener - rv = CreateNewProxyForRequest(request, loadGroup, doc, aObserver, - requestFlags, _retval); + rv = CreateNewProxyForRequest(request, uri, loadGroup, aLoadingDocument, + aObserver, requestFlags, _retval); static_cast(*_retval)->NotifyListener(); } else { // We use originalURI here to fulfil the imgIRequest contract on GetURI. @@ -2568,7 +2633,7 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, // constructed above with the *current URI* and not the *original URI*. I'm // pretty sure this is a bug, and it's preventing us from ever getting a // cache hit in LoadImageWithChannel when redirects are involved. - ImageCacheKey originalURIKey(originalURI, attrs, doc); + ImageCacheKey originalURIKey(originalURI, attrs, aLoadingDocument); // Default to doing a principal check because we don't know who // started that load and whether their principal ended up being @@ -2586,7 +2651,7 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, // including the redirects will go through content policy). Hence, we // can set aHadInsecureRedirect to false here. rv = request->Init(originalURI, uri, /* aHadInsecureRedirect = */ false, - channel, channel, entry, aCX, nullptr, + channel, channel, entry, aLoadingDocument, nullptr, imgIRequest::CORS_NONE, nullptr); NS_ENSURE_SUCCESS(rv, rv); @@ -2597,8 +2662,9 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, // Try to add the new request into the cache. PutIntoCache(originalURIKey, entry); - rv = CreateNewProxyForRequest(request, loadGroup, doc, aObserver, - requestFlags, _retval); + rv = CreateNewProxyForRequest(request, originalURI, loadGroup, + aLoadingDocument, aObserver, requestFlags, + _retval); // Explicitly don't notify our proxy, because we're loading off the // network, and necko (or things called from necko, such as @@ -2817,12 +2883,12 @@ NS_IMPL_ISUPPORTS(imgCacheValidator, nsIStreamListener, nsIRequestObserver, imgCacheValidator::imgCacheValidator(nsProgressNotificationProxy* progress, imgLoader* loader, imgRequest* request, - nsISupports* aContext, + Document* aDocument, uint64_t aInnerWindowId, bool forcePrincipalCheckForCacheEntry) : mProgressProxy(progress), mRequest(request), - mContext(aContext), + mDocument(aDocument), mInnerWindowId(aInnerWindowId), mImgLoader(loader), mHadInsecureRedirect(false) { @@ -2911,7 +2977,7 @@ void imgCacheValidator::UpdateProxies(bool aCancelRequest, bool aSyncNotify) { NS_IMETHODIMP imgCacheValidator::OnStartRequest(nsIRequest* aRequest) { // We may be holding on to a document, so ensure that it's released. - nsCOMPtr context = mContext.forget(); + RefPtr document = mDocument.forget(); // If for some reason we don't still have an existing request (probably // because OnStartRequest got delivered more than once), just bail. @@ -2948,7 +3014,7 @@ imgCacheValidator::OnStartRequest(nsIRequest* aRequest) { // Clear the validator before updating the proxies. The notifications may // clone an existing request, and its state could be inconsistent. - mRequest->SetLoadId(context); + mRequest->SetLoadId(document); mRequest->SetInnerWindowID(mInnerWindowId); UpdateProxies(/* aCancelRequest */ false, /* aSyncNotify */ true); return NS_OK; @@ -2976,7 +3042,7 @@ imgCacheValidator::OnStartRequest(nsIRequest* aRequest) { nsCOMPtr originalURI; channel->GetOriginalURI(getter_AddRefs(originalURI)); nsresult rv = mNewRequest->Init(originalURI, uri, mHadInsecureRedirect, - aRequest, channel, mNewEntry, context, + aRequest, channel, mNewEntry, document, triggeringPrincipal, corsmode, referrerInfo); if (NS_FAILED(rv)) { UpdateProxies(/* aCancelRequest */ true, /* aSyncNotify */ true); @@ -2996,7 +3062,7 @@ imgCacheValidator::OnStartRequest(nsIRequest* aRequest) { NS_IMETHODIMP imgCacheValidator::OnStopRequest(nsIRequest* aRequest, nsresult status) { // Be sure we've released the document that we may have been holding on to. - mContext = nullptr; + mDocument = nullptr; if (!mDestListener) { return NS_OK; diff --git a/image/imgLoader.h b/image/imgLoader.h index b89baa143d..4454755c1f 100644 --- a/image/imgLoader.h +++ b/image/imgLoader.h @@ -6,6 +6,8 @@ #define mozilla_image_imgLoader_h #include "mozilla/Attributes.h" +#include "mozilla/CORSMode.h" +#include "mozilla/dom/Document.h" #include "mozilla/Mutex.h" #include "mozilla/UniquePtr.h" @@ -237,19 +239,20 @@ class imgLoader final : public imgILoader, imgLoader(); nsresult Init(); - MOZ_MUST_USE nsresult LoadImage( + [[nodiscard]] nsresult LoadImage( nsIURI* aURI, nsIURI* aInitialDocumentURI, nsIReferrerInfo* aReferrerInfo, nsIPrincipal* aLoadingPrincipal, uint64_t aRequestContextID, nsILoadGroup* aLoadGroup, imgINotificationObserver* aObserver, nsINode* aContext, mozilla::dom::Document* aLoadingDocument, nsLoadFlags aLoadFlags, nsISupports* aCacheKey, nsContentPolicyType aContentPolicyType, const nsAString& initiatorType, - bool aUseUrgentStartForChannel, imgRequestProxy** _retval); + bool aUseUrgentStartForChannel, bool aLinkPreload, + imgRequestProxy** _retval); - MOZ_MUST_USE nsresult - LoadImageWithChannel(nsIChannel* channel, imgINotificationObserver* aObserver, - nsISupports* aCX, nsIStreamListener** listener, - imgRequestProxy** _retval); + [[nodiscard]] nsresult LoadImageWithChannel( + nsIChannel* channel, imgINotificationObserver* aObserver, + mozilla::dom::Document* aLoadingDocument, nsIStreamListener** listener, + imgRequestProxy** _retval); static nsresult GetMimeTypeFromContent(const char* aContents, uint32_t aLength, @@ -336,40 +339,42 @@ class imgLoader final : public imgILoader, bool SetHasNoProxies(imgRequest* aRequest, imgCacheEntry* aEntry); bool SetHasProxies(imgRequest* aRequest); + // This method converts imgIRequest::CORS_* values to mozilla::CORSMode + // values. + static mozilla::CORSMode ConvertToCORSMode(uint32_t aImgCORS); + private: // methods static already_AddRefed CreateImageLoader(); bool PreferLoadFromCache(nsIURI* aURI) const; - bool ValidateEntry(imgCacheEntry* aEntry, nsIURI* aKey, - nsIURI* aInitialDocumentURI, - nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, - imgINotificationObserver* aObserver, nsISupports* aCX, - mozilla::dom::Document* aLoadingDocument, - nsLoadFlags aLoadFlags, - nsContentPolicyType aContentPolicyType, - bool aCanMakeNewChannel, bool* aNewChannelCreated, - imgRequestProxy** aProxyRequest, - nsIPrincipal* aLoadingPrincipal, int32_t aCORSMode); + bool ValidateEntry( + imgCacheEntry* aEntry, nsIURI* aURI, nsIURI* aInitialDocumentURI, + nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, + imgINotificationObserver* aObserver, + mozilla::dom::Document* aLoadingDocument, nsLoadFlags aLoadFlags, + nsContentPolicyType aLoadPolicyType, bool aCanMakeNewChannel, + bool* aNewChannelCreated, imgRequestProxy** aProxyRequest, + nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode, bool aLinkPreload); bool ValidateRequestWithNewChannel( imgRequest* request, nsIURI* aURI, nsIURI* aInitialDocumentURI, nsIReferrerInfo* aReferrerInfo, nsILoadGroup* aLoadGroup, - imgINotificationObserver* aObserver, nsISupports* aCX, + imgINotificationObserver* aObserver, mozilla::dom::Document* aLoadingDocument, uint64_t aInnerWindowId, nsLoadFlags aLoadFlags, nsContentPolicyType aContentPolicyType, imgRequestProxy** aProxyRequest, nsIPrincipal* aLoadingPrincipal, - int32_t aCORSMode, bool* aNewChannelCreated); + int32_t aCORSMode, bool aLinkPreload, bool* aNewChannelCreated); - nsresult CreateNewProxyForRequest(imgRequest* aRequest, + // aURI may be different from imgRequest's URI in the case of blob URIs, as we + // can share requests with different URIs. + nsresult CreateNewProxyForRequest(imgRequest* aRequest, nsIURI* aURI, nsILoadGroup* aLoadGroup, mozilla::dom::Document* aLoadingDocument, imgINotificationObserver* aObserver, nsLoadFlags aLoadFlags, imgRequestProxy** _retval); - void ReadAcceptHeaderPref(); - nsresult EvictEntries(imgCacheTable& aCacheToClear); nsresult EvictEntries(imgCacheQueue& aQueueToClear); @@ -404,8 +409,6 @@ class imgLoader final : public imgILoader, static uint32_t sCacheMaxSize; static imgMemoryReporter* sMemReporter; - nsCString mAcceptHeader; - mozilla::UniquePtr mCacheTracker; bool mRespectPrivacy; }; @@ -474,7 +477,7 @@ class imgCacheValidator : public nsIStreamListener, public nsIAsyncVerifyRedirectCallback { public: imgCacheValidator(nsProgressNotificationProxy* progress, imgLoader* loader, - imgRequest* aRequest, nsISupports* aContext, + imgRequest* aRequest, mozilla::dom::Document* aDocument, uint64_t aInnerWindowId, bool forcePrincipalCheckForCacheEntry); @@ -504,7 +507,7 @@ class imgCacheValidator : public nsIStreamListener, RefPtr mNewRequest; RefPtr mNewEntry; - nsCOMPtr mContext; + RefPtr mDocument; uint64_t mInnerWindowId; imgLoader* mImgLoader; diff --git a/image/imgRequest.cpp b/image/imgRequest.cpp index 22f83d4d67..b1776336fe 100644 --- a/image/imgRequest.cpp +++ b/image/imgRequest.cpp @@ -16,6 +16,7 @@ #include "nsIChannel.h" #include "nsICacheInfoChannel.h" +#include "nsIClassOfService.h" #include "mozilla/dom/Document.h" #include "nsIThreadRetargetableRequest.h" #include "nsIInputStream.h" @@ -61,6 +62,8 @@ imgRequest::imgRequest(imgLoader* aLoader, const ImageCacheKey& aCacheKey) mCORSMode(imgIRequest::CORS_NONE), mImageErrorCode(NS_OK), mImageAvailable(false), + mIsDeniedCrossSiteCORSRequest(false), + mIsCrossSiteNoCORSRequest(false), mMutex("imgRequest"), mProgressTracker(new ProgressTracker()), mIsMultiPartChannel(false), @@ -84,8 +87,9 @@ imgRequest::~imgRequest() { nsresult imgRequest::Init(nsIURI* aURI, nsIURI* aFinalURI, bool aHadInsecureRedirect, nsIRequest* aRequest, nsIChannel* aChannel, imgCacheEntry* aCacheEntry, - nsISupports* aCX, nsIPrincipal* aTriggeringPrincipal, - int32_t aCORSMode, nsIReferrerInfo* aReferrerInfo) { + mozilla::dom::Document* aLoadingDocument, + nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode, + nsIReferrerInfo* aReferrerInfo) { MOZ_ASSERT(NS_IsMainThread(), "Cannot use nsIURI off main thread!"); LOG_FUNC(gImgLog, "imgRequest::Init"); @@ -134,12 +138,11 @@ nsresult imgRequest::Init(nsIURI* aURI, nsIURI* aFinalURI, mCacheEntry = aCacheEntry; mCacheEntry->UpdateLoadTime(); - SetLoadId(aCX); + SetLoadId(aLoadingDocument); // Grab the inner window ID of the loading document, if possible. - nsCOMPtr doc = do_QueryInterface(aCX); - if (doc) { - mInnerWindowId = doc->InnerWindowID(); + if (aLoadingDocument) { + mInnerWindowId = aLoadingDocument->InnerWindowID(); } return NS_OK; @@ -642,12 +645,23 @@ imgRequest::OnStartRequest(nsIRequest* aRequest) { RefPtr image; + if (nsCOMPtr httpChannel = do_QueryInterface(aRequest)) { + nsresult rv; + nsCOMPtr loadInfo = httpChannel->LoadInfo(); + mIsDeniedCrossSiteCORSRequest = + loadInfo->GetTainting() == LoadTainting::CORS && + (NS_FAILED(httpChannel->GetStatus(&rv)) || NS_FAILED(rv)); + mIsCrossSiteNoCORSRequest = loadInfo->GetTainting() == LoadTainting::Opaque; + } + // Figure out if we're multipart. nsCOMPtr multiPartChannel = do_QueryInterface(aRequest); - MOZ_ASSERT(multiPartChannel || !mIsMultiPartChannel, - "Stopped being multipart?"); { MutexAutoLock lock(mMutex); + + MOZ_ASSERT(multiPartChannel || !mIsMultiPartChannel, + "Stopped being multipart?"); + mNewPartPending = true; image = mImage; mIsMultiPartChannel = bool(multiPartChannel); diff --git a/image/imgRequest.h b/image/imgRequest.h index 55e112db64..c5282e4f83 100644 --- a/image/imgRequest.h +++ b/image/imgRequest.h @@ -60,12 +60,12 @@ class imgRequest final : public nsIStreamListener, NS_DECL_NSIINTERFACEREQUESTOR NS_DECL_NSIASYNCVERIFYREDIRECTCALLBACK - MOZ_MUST_USE nsresult Init(nsIURI* aURI, nsIURI* aFinalURI, - bool aHadInsecureRedirect, nsIRequest* aRequest, - nsIChannel* aChannel, imgCacheEntry* aCacheEntry, - nsISupports* aCX, - nsIPrincipal* aTriggeringPrincipal, - int32_t aCORSMode, nsIReferrerInfo* aReferrerInfo); + [[nodiscard]] nsresult + Init(nsIURI* aURI, nsIURI* aFinalURI, bool aHadInsecureRedirect, + nsIRequest* aRequest, nsIChannel* aChannel, + imgCacheEntry* aCacheEntry, mozilla::dom::Document* aLoadingDocument, + nsIPrincipal* aTriggeringPrincipal, int32_t aCORSMode, + nsIReferrerInfo* aReferrerInfo); void ClearLoader(); @@ -199,6 +199,12 @@ class imgRequest final : public nsIStreamListener, bool ImageAvailable() const; + bool IsDeniedCrossSiteCORSRequest() const { + return mIsDeniedCrossSiteCORSRequest; + } + + bool IsCrossSiteNoCORSRequest() const { return mIsCrossSiteNoCORSRequest; } + private: friend class FinishPreparingForNewPartRunnable; @@ -274,6 +280,8 @@ class imgRequest final : public nsIStreamListener, // If we've called OnImageAvailable. bool mImageAvailable; + bool mIsDeniedCrossSiteCORSRequest; + bool mIsCrossSiteNoCORSRequest; mutable mozilla::Mutex mMutex; diff --git a/image/imgRequestProxy.cpp b/image/imgRequestProxy.cpp index 2d2f8bd408..645a598aa7 100644 --- a/image/imgRequestProxy.cpp +++ b/image/imgRequestProxy.cpp @@ -4,18 +4,19 @@ #include "imgRequestProxy.h" -#include "ImageLogging.h" -#include "imgLoader.h" +#include + #include "Image.h" +#include "ImageLogging.h" #include "ImageOps.h" #include "ImageTypes.h" -#include "nsError.h" -#include "nsCRTGlue.h" #include "imgINotificationObserver.h" -#include "mozilla/dom/TabGroup.h" // for TabGroup +#include "imgLoader.h" +#include "mozilla/Telemetry.h" // for Telemetry #include "mozilla/dom/DocGroup.h" // for DocGroup -#include "mozilla/Move.h" -#include "mozilla/Telemetry.h" // for Telemetry +#include "mozilla/dom/TabGroup.h" // for TabGroup +#include "nsCRTGlue.h" +#include "nsError.h" using namespace mozilla; using namespace mozilla::image; @@ -91,10 +92,11 @@ NS_IMPL_ADDREF(imgRequestProxy) NS_IMPL_RELEASE(imgRequestProxy) NS_INTERFACE_MAP_BEGIN(imgRequestProxy) - NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, imgIRequest) + NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, PreloaderBase) NS_INTERFACE_MAP_ENTRY(imgIRequest) NS_INTERFACE_MAP_ENTRY(nsIRequest) NS_INTERFACE_MAP_ENTRY(nsISupportsPriority) + NS_INTERFACE_MAP_ENTRY_CONCRETE(imgRequestProxy) NS_INTERFACE_MAP_ENTRY_CONDITIONAL(nsITimedChannel, TimedChannel() != nullptr) NS_INTERFACE_MAP_END @@ -1044,6 +1046,22 @@ void imgRequestProxy::OnLoadComplete(bool aLastPart) { if (aLastPart || (mLoadFlags & nsIRequest::LOAD_BACKGROUND) == 0) { if (aLastPart) { RemoveFromLoadGroup(); + + nsresult errorCode = NS_OK; + // if the load is cross origin without CORS, or the CORS access is + // rejected, always fire load event to avoid leaking site information for + // . + // XXXedgar, currently we don't do the same thing for . + imgRequest* request = GetOwner(); + if (!request || !(request->IsDeniedCrossSiteCORSRequest() || + request->IsCrossSiteNoCORSRequest())) { + uint32_t status = imgIRequest::STATUS_NONE; + GetImageStatus(&status); + if (status & imgIRequest::STATUS_ERROR) { + errorCode = NS_ERROR_FAILURE; + } + } + NotifyStop(errorCode); } else { // More data is coming, so change the request to be a background request // and put it back in the loadgroup. diff --git a/image/imgRequestProxy.h b/image/imgRequestProxy.h index 2b50bc63be..252f85f1c6 100644 --- a/image/imgRequestProxy.h +++ b/image/imgRequestProxy.h @@ -12,6 +12,7 @@ #include "nsITimedChannel.h" #include "nsCOMPtr.h" #include "nsThreadUtils.h" +#include "mozilla/PreloaderBase.h" #include "mozilla/TimeStamp.h" #include "mozilla/UniquePtr.h" #include "mozilla/gfx/Rect.h" @@ -42,7 +43,8 @@ class ProgressTracker; } // namespace image } // namespace mozilla -class imgRequestProxy : public imgIRequest, +class imgRequestProxy : public mozilla::PreloaderBase, + public imgIRequest, public mozilla::image::IProgressObserver, public nsISupportsPriority, public nsITimedChannel { @@ -54,6 +56,7 @@ class imgRequestProxy : public imgIRequest, typedef mozilla::image::Image Image; typedef mozilla::image::ProgressTracker ProgressTracker; + NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMGREQUESTPROXY_CID) MOZ_DECLARE_REFCOUNTED_TYPENAME(imgRequestProxy) NS_DECL_ISUPPORTS NS_DECL_IMGIREQUEST @@ -126,6 +129,12 @@ class imgRequestProxy : public imgIRequest, nsresult GetStaticRequest(Document* aLoadingDocument, imgRequestProxy** aReturn); + imgRequest* GetOwner() const; + + // PreloaderBase + // We are using the default image loader prioritization for preloads. + virtual void PrioritizeAsPreload() override {} + protected: friend class mozilla::image::ProgressTracker; friend class imgStatusNotifyRunnable; @@ -175,7 +184,6 @@ class imgRequestProxy : public imgIRequest, already_AddRefed GetImage() const; bool HasImage() const; - imgRequest* GetOwner() const; imgCacheValidator* GetValidator() const; nsresult PerformClone(imgINotificationObserver* aObserver, @@ -231,6 +239,8 @@ class imgRequestProxy : public imgIRequest, bool mHadDispatch : 1; }; +NS_DEFINE_STATIC_IID_ACCESSOR(imgRequestProxy, NS_IMGREQUESTPROXY_CID) + // Used for static image proxies for which no requests are available, so // certain behaviours must be overridden to compensate. class imgRequestProxyStatic : public imgRequestProxy { diff --git a/image/imgTools.cpp b/image/imgTools.cpp index b9f2045dbd..4059a5e448 100644 --- a/image/imgTools.cpp +++ b/image/imgTools.cpp @@ -16,6 +16,7 @@ #include "imgICache.h" #include "imgIContainer.h" #include "imgIEncoder.h" +#include "nsComponentManagerUtils.h" #include "nsNetUtil.h" // for NS_NewBufferedInputStream #include "nsStreamUtils.h" #include "nsStringStream.h" diff --git a/image/test/gtest/TestAnimationFrameBuffer.cpp b/image/test/gtest/TestAnimationFrameBuffer.cpp index d9d3a09528..87ba4d24e1 100644 --- a/image/test/gtest/TestAnimationFrameBuffer.cpp +++ b/image/test/gtest/TestAnimationFrameBuffer.cpp @@ -2,10 +2,10 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "gtest/gtest.h" +#include -#include "mozilla/Move.h" #include "AnimationFrameBuffer.h" +#include "gtest/gtest.h" using namespace mozilla; using namespace mozilla::image; diff --git a/image/test/gtest/TestSourceBuffer.cpp b/image/test/gtest/TestSourceBuffer.cpp index 18e0be7df4..5c937becb8 100644 --- a/image/test/gtest/TestSourceBuffer.cpp +++ b/image/test/gtest/TestSourceBuffer.cpp @@ -2,16 +2,15 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "gtest/gtest.h" - #include #include +#include #include "Common.h" -#include "mozilla/Move.h" -#include "nsIInputStream.h" #include "SourceBuffer.h" #include "SurfaceCache.h" +#include "gtest/gtest.h" +#include "nsIInputStream.h" using namespace mozilla; using namespace mozilla::image; diff --git a/intl/locale/nsCollation.cpp b/intl/locale/nsCollation.cpp index 507e47f21e..664a7ac5ae 100644 --- a/intl/locale/nsCollation.cpp +++ b/intl/locale/nsCollation.cpp @@ -128,10 +128,8 @@ nsCollation::Initialize(const nsACString& locale) { NS_IMETHODIMP nsCollation::AllocateRawSortKey(int32_t strength, const nsAString& stringIn, - uint8_t** key, uint32_t* outLen) { + nsTArray& key) { NS_ENSURE_TRUE(mInit, NS_ERROR_NOT_INITIALIZED); - NS_ENSURE_ARG_POINTER(key); - NS_ENSURE_ARG_POINTER(outLen); nsresult res = EnsureCollator(strength); NS_ENSURE_SUCCESS(res, res); @@ -144,19 +142,13 @@ nsCollation::AllocateRawSortKey(int32_t strength, const nsAString& stringIn, ucol_getSortKey(mCollatorICU, str, stringInLen, nullptr, 0); NS_ENSURE_TRUE((stringInLen == 0 || keyLength > 0), NS_ERROR_FAILURE); - // Since key is freed elsewhere with free, allocate with malloc. - uint8_t* newKey = (uint8_t*)malloc(keyLength + 1); - if (!newKey) { - return NS_ERROR_OUT_OF_MEMORY; - } + key.SetLength(keyLength + 1); - keyLength = - ucol_getSortKey(mCollatorICU, str, stringInLen, newKey, keyLength + 1); + keyLength = ucol_getSortKey(mCollatorICU, str, stringInLen, key.Elements(), + keyLength + 1); NS_ENSURE_TRUE((stringInLen == 0 || keyLength > 0), NS_ERROR_FAILURE); - *key = newKey; - *outLen = keyLength; - + key.SetLength(keyLength); return NS_OK; } @@ -193,21 +185,27 @@ nsCollation::CompareString(int32_t strength, const nsAString& string1, } NS_IMETHODIMP -nsCollation::CompareRawSortKey(const uint8_t* key1, uint32_t len1, - const uint8_t* key2, uint32_t len2, - int32_t* result) { +nsCollation::CompareRawSortKey(const nsTArray& key1, + const nsTArray& key2, int32_t* result) { NS_ENSURE_TRUE(mInit, NS_ERROR_NOT_INITIALIZED); - NS_ENSURE_ARG_POINTER(key1); - NS_ENSURE_ARG_POINTER(key2); NS_ENSURE_ARG_POINTER(result); *result = 0; - int32_t tmpResult = strcmp((const char*)key1, (const char*)key2); + size_t minLength = std::min(key1.Length(), key2.Length()); + int32_t tmpResult = strncmp((const char*)key1.Elements(), + (const char*)key2.Elements(), minLength); int32_t res; if (tmpResult < 0) { res = -1; } else if (tmpResult > 0) { res = 1; + } else if (key1.Length() > minLength) { + // First string contains second one, so comes later, hence return > 0. + res = 1; + } else if (key2.Length() > minLength) { + // First string is a substring of second one, so comes earlier, + // hence return < 0. + res = -1; } else { res = 0; } diff --git a/intl/locale/nsICollation.idl b/intl/locale/nsICollation.idl index c236dc2a78..6cb501e4f2 100644 --- a/intl/locale/nsICollation.idl +++ b/intl/locale/nsICollation.idl @@ -50,15 +50,13 @@ interface nsICollation : nsISupports { long compareString(in long strength, in AString string1, in AString string2); // allocate sort key from input string - // returns newly allocated key, and its band its byte length - [noscript] void allocateRawSortKey(in long strength, - in AString stringIn, - [array,size_is(outLen)] out octet key, - out unsigned long outLen); + // returns newly allocated key + [noscript] Array allocateRawSortKey(in long strength, + in AString stringIn); // compare two sort keys - // length is a byte length, result is same as strcmp - [noscript] long compareRawSortKey([const,array,size_is(len1)] in octet key1, in unsigned long len1, - [const,array,size_is(len2)] in octet key2, in unsigned long len2); + // result is same as strcmp + [noscript] long compareRawSortKey(in Array key1, + in Array key2); }; diff --git a/intl/locale/tests/gtest/TestCollation.cpp b/intl/locale/tests/gtest/TestCollation.cpp index d2c3f21582..1701b25199 100644 --- a/intl/locale/tests/gtest/TestCollation.cpp +++ b/intl/locale/tests/gtest/TestCollation.cpp @@ -8,6 +8,7 @@ #include "nsCOMPtr.h" #include "nsICollation.h" #include "nsString.h" +#include "nsTArray.h" TEST(Collation, AllocateRowSortKey) { @@ -21,29 +22,21 @@ TEST(Collation, AllocateRowSortKey) NS_LITERAL_CSTRING("$languageName"), getter_AddRefs(collator)); ASSERT_TRUE(NS_SUCCEEDED(rv)); - uint8_t* sortKey1 = nullptr; - uint32_t sortKeyLen1 = 0; + nsTArray sortKey1; // Don't throw error even if locale name is invalid rv = collator->AllocateRawSortKey(nsICollation::kCollationStrengthDefault, - NS_LITERAL_STRING("ABC"), &sortKey1, - &sortKeyLen1); + NS_LITERAL_STRING("ABC"), sortKey1); ASSERT_TRUE(NS_SUCCEEDED(rv)); - uint8_t* sortKey2 = nullptr; - uint32_t sortKeyLen2 = 0; + nsTArray sortKey2; // Don't throw error even if locale name is invalid rv = collator->AllocateRawSortKey(nsICollation::kCollationStrengthDefault, - NS_LITERAL_STRING("DEF"), &sortKey2, - &sortKeyLen2); + NS_LITERAL_STRING("DEF"), sortKey2); ASSERT_TRUE(NS_SUCCEEDED(rv)); int32_t result; - rv = collator->CompareRawSortKey(sortKey1, sortKeyLen1, sortKey2, sortKeyLen2, - &result); + rv = collator->CompareRawSortKey(sortKey1, sortKey2, &result); ASSERT_TRUE(NS_SUCCEEDED(rv)); ASSERT_TRUE(result < 0); - - free(sortKey1); - free(sortKey2); } diff --git a/ipc/contentproc/plugin-container.cpp b/ipc/contentproc/plugin-container.cpp index ddacf7ac1a..71a160a7a3 100644 --- a/ipc/contentproc/plugin-container.cpp +++ b/ipc/contentproc/plugin-container.cpp @@ -5,6 +5,7 @@ #include "nsXPCOM.h" #include "nsXULAppAPI.h" #include "mozilla/Bootstrap.h" +#include "XREChildData.h" #ifdef XP_WIN # include diff --git a/ipc/glue/BackgroundUtils.cpp b/ipc/glue/BackgroundUtils.cpp index 3bf8a52c5f..fd4f09858b 100644 --- a/ipc/glue/BackgroundUtils.cpp +++ b/ipc/glue/BackgroundUtils.cpp @@ -419,20 +419,12 @@ nsresult RHEntryToRHEntryInfo(nsIRedirectHistoryEntry* aRHEntry, nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo, Maybe* aOptionalLoadInfoArgs) { - if (!aLoadInfo) { - // if there is no loadInfo, then there is nothing to serialize - *aOptionalLoadInfoArgs = Nothing(); - return NS_OK; - } - nsresult rv = NS_OK; Maybe loadingPrincipalInfo; - if (aLoadInfo->LoadingPrincipal()) { - PrincipalInfo loadingPrincipalInfoTemp; - rv = PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(), - &loadingPrincipalInfoTemp); + if (nsIPrincipal* loadingPrin = aLoadInfo->GetLoadingPrincipal()) { + loadingPrincipalInfo.emplace(); + rv = PrincipalToPrincipalInfo(loadingPrin, loadingPrincipalInfo.ptr()); NS_ENSURE_SUCCESS(rv, rv); - loadingPrincipalInfo = Some(loadingPrincipalInfoTemp); } PrincipalInfo triggeringPrincipalInfo; @@ -441,40 +433,33 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo, NS_ENSURE_SUCCESS(rv, rv); Maybe principalToInheritInfo; - if (aLoadInfo->PrincipalToInherit()) { - PrincipalInfo principalToInheritInfoTemp; - rv = PrincipalToPrincipalInfo(aLoadInfo->PrincipalToInherit(), - &principalToInheritInfoTemp); + if (nsIPrincipal* principalToInherit = aLoadInfo->PrincipalToInherit()) { + principalToInheritInfo.emplace(); + rv = PrincipalToPrincipalInfo(principalToInherit, + principalToInheritInfo.ptr()); NS_ENSURE_SUCCESS(rv, rv); - principalToInheritInfo = Some(principalToInheritInfoTemp); } Maybe sandboxedLoadingPrincipalInfo; if (aLoadInfo->GetLoadingSandboxed()) { - PrincipalInfo sandboxedLoadingPrincipalInfoTemp; + sandboxedLoadingPrincipalInfo.emplace(); rv = PrincipalToPrincipalInfo(aLoadInfo->GetSandboxedLoadingPrincipal(), - &sandboxedLoadingPrincipalInfoTemp); + sandboxedLoadingPrincipalInfo.ptr()); NS_ENSURE_SUCCESS(rv, rv); - sandboxedLoadingPrincipalInfo = Some(sandboxedLoadingPrincipalInfoTemp); } Maybe topLevelPrincipalInfo; - if (aLoadInfo->GetTopLevelPrincipal()) { - PrincipalInfo topLevelPrincipalInfoTemp; - rv = PrincipalToPrincipalInfo(aLoadInfo->GetTopLevelPrincipal(), - &topLevelPrincipalInfoTemp); + if (nsIPrincipal* topLevenPrin = aLoadInfo->GetTopLevelPrincipal()) { + topLevelPrincipalInfo.emplace(); + rv = PrincipalToPrincipalInfo(topLevenPrin, topLevelPrincipalInfo.ptr()); NS_ENSURE_SUCCESS(rv, rv); - topLevelPrincipalInfo = Some(topLevelPrincipalInfoTemp); } Maybe topLevelStorageAreaPrincipalInfo; - if (aLoadInfo->GetTopLevelStorageAreaPrincipal()) { - PrincipalInfo topLevelStorageAreaPrincipalInfoTemp; - rv = PrincipalToPrincipalInfo(aLoadInfo->GetTopLevelStorageAreaPrincipal(), - &topLevelStorageAreaPrincipalInfoTemp); + if (nsIPrincipal* prin = aLoadInfo->GetTopLevelStorageAreaPrincipal()) { + topLevelStorageAreaPrincipalInfo.emplace(); + rv = PrincipalToPrincipalInfo(prin, topLevelStorageAreaPrincipalInfo.ptr()); NS_ENSURE_SUCCESS(rv, rv); - topLevelStorageAreaPrincipalInfo = - Some(topLevelStorageAreaPrincipalInfoTemp); } Maybe optionalResultPrincipalURI; @@ -585,9 +570,11 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo, aLoadInfo->GetIsPreflight(), aLoadInfo->GetLoadTriggeredFromExternal(), aLoadInfo->GetServiceWorkerTaintingSynthesized(), aLoadInfo->GetDocumentHasUserInteracted(), - aLoadInfo->GetDocumentHasLoaded(), cspNonce, - aLoadInfo->GetIsFromProcessingFrameAttributes(), cookieSettingsArgs, - aLoadInfo->GetRequestBlockingReason(), maybeCspToInheritInfo)); + aLoadInfo->GetDocumentHasLoaded(), + aLoadInfo->GetAllowListFutureDocumentsCreatedFromThisRedirectChain(), + cspNonce, aLoadInfo->GetIsFromProcessingFrameAttributes(), + cookieSettingsArgs, aLoadInfo->GetRequestBlockingReason(), + maybeCspToInheritInfo)); return NS_OK; } @@ -746,8 +733,9 @@ nsresult LoadInfoArgsToLoadInfo( loadInfoArgs.isPreflight(), loadInfoArgs.loadTriggeredFromExternal(), loadInfoArgs.serviceWorkerTaintingSynthesized(), loadInfoArgs.documentHasUserInteracted(), - loadInfoArgs.documentHasLoaded(), loadInfoArgs.cspNonce(), - loadInfoArgs.requestBlockingReason()); + loadInfoArgs.documentHasLoaded(), + loadInfoArgs.allowListFutureDocumentsCreatedFromThisRedirectChain(), + loadInfoArgs.cspNonce(), loadInfoArgs.requestBlockingReason()); if (loadInfoArgs.isFromProcessingFrameAttributes()) { loadInfo->SetIsFromProcessingFrameAttributes(); @@ -759,17 +747,6 @@ nsresult LoadInfoArgsToLoadInfo( void LoadInfoToParentLoadInfoForwarder( nsILoadInfo* aLoadInfo, ParentLoadInfoForwarderArgs* aForwarderArgsOut) { - if (!aLoadInfo) { - *aForwarderArgsOut = ParentLoadInfoForwarderArgs( - false, false, Nothing(), nsILoadInfo::TAINTING_BASIC, - false, // serviceWorkerTaintingSynthesized - false, // documentHasUserInteracted - false, // documentHasLoaded - Maybe(), - nsILoadInfo::BLOCKING_REASON_NONE); // requestBlockingReason - return; - } - Maybe ipcController; Maybe controller(aLoadInfo->GetController()); if (controller.isSome()) { @@ -795,16 +772,13 @@ void LoadInfoToParentLoadInfoForwarder( aLoadInfo->GetBypassCORSChecks(), ipcController, tainting, aLoadInfo->GetServiceWorkerTaintingSynthesized(), aLoadInfo->GetDocumentHasUserInteracted(), - aLoadInfo->GetDocumentHasLoaded(), cookieSettingsArgs, - aLoadInfo->GetRequestBlockingReason()); + aLoadInfo->GetDocumentHasLoaded(), + aLoadInfo->GetAllowListFutureDocumentsCreatedFromThisRedirectChain(), + cookieSettingsArgs, aLoadInfo->GetRequestBlockingReason()); } nsresult MergeParentLoadInfoForwarder( ParentLoadInfoForwarderArgs const& aForwarderArgs, nsILoadInfo* aLoadInfo) { - if (!aLoadInfo) { - return NS_OK; - } - nsresult rv; rv = aLoadInfo->SetAllowInsecureRedirectToDataURI( @@ -831,6 +805,10 @@ nsresult MergeParentLoadInfoForwarder( aForwarderArgs.documentHasUserInteracted())); MOZ_ALWAYS_SUCCEEDS( aLoadInfo->SetDocumentHasLoaded(aForwarderArgs.documentHasLoaded())); + MOZ_ALWAYS_SUCCEEDS( + aLoadInfo->SetAllowListFutureDocumentsCreatedFromThisRedirectChain( + aForwarderArgs + .allowListFutureDocumentsCreatedFromThisRedirectChain())); MOZ_ALWAYS_SUCCEEDS(aLoadInfo->SetRequestBlockingReason( aForwarderArgs.requestBlockingReason())); @@ -850,12 +828,6 @@ nsresult MergeParentLoadInfoForwarder( void LoadInfoToChildLoadInfoForwarder( nsILoadInfo* aLoadInfo, ChildLoadInfoForwarderArgs* aForwarderArgsOut) { - if (!aLoadInfo) { - *aForwarderArgsOut = - ChildLoadInfoForwarderArgs(Nothing(), Nothing(), Nothing()); - return; - } - Maybe ipcReserved; Maybe reserved(aLoadInfo->GetReservedClientInfo()); if (reserved.isSome()) { @@ -875,15 +847,12 @@ void LoadInfoToChildLoadInfoForwarder( } *aForwarderArgsOut = - ChildLoadInfoForwarderArgs(ipcReserved, ipcInitial, ipcController); + ChildLoadInfoForwarderArgs(ipcReserved, ipcInitial, ipcController, + aLoadInfo->GetRequestBlockingReason()); } nsresult MergeChildLoadInfoForwarder( const ChildLoadInfoForwarderArgs& aForwarderArgs, nsILoadInfo* aLoadInfo) { - if (!aLoadInfo) { - return NS_OK; - } - Maybe reservedClientInfo; auto& ipcReserved = aForwarderArgs.reservedClientInfo(); if (ipcReserved.isSome()) { @@ -927,6 +896,13 @@ nsresult MergeChildLoadInfoForwarder( aLoadInfo->SetController(ServiceWorkerDescriptor(controller.ref())); } + uint32_t blockingReason = aForwarderArgs.requestBlockingReason(); + if (blockingReason) { + // We only want to override when non-null, so that any earlier set non-null + // value is not reverted to 0. + aLoadInfo->SetRequestBlockingReason(blockingReason); + } + return NS_OK; } diff --git a/ipc/glue/TransportSecurityInfoUtils.cpp b/ipc/glue/TransportSecurityInfoUtils.cpp index a545f7d280..8f97223a5e 100644 --- a/ipc/glue/TransportSecurityInfoUtils.cpp +++ b/ipc/glue/TransportSecurityInfoUtils.cpp @@ -76,37 +76,4 @@ bool ParamTraits::Read(const Message* aMsg, PickleIterator* aIter, return true; } -void ParamTraits::Write(Message* aMsg, - nsIX509CertList* aParam) { - bool nonNull = !!aParam; - WriteParam(aMsg, nonNull); - if (!nonNull) { - return; - } - - aParam->SerializeToIPC(aMsg); -} - -bool ParamTraits::Read(const Message* aMsg, - PickleIterator* aIter, - RefPtr* aResult) { - bool nonNull = false; - if (!ReadParam(aMsg, aIter, &nonNull)) { - return false; - } - - if (!nonNull) { - *aResult = nullptr; - return true; - } - - RefPtr certList = new nsNSSCertList(); - if (!certList->DeserializeFromIPC(aMsg, aIter)) { - return false; - } - - *aResult = certList.forget(); - return true; -} - } // namespace IPC diff --git a/ipc/glue/TransportSecurityInfoUtils.h b/ipc/glue/TransportSecurityInfoUtils.h index cfc98d93fb..ab6963f0e7 100644 --- a/ipc/glue/TransportSecurityInfoUtils.h +++ b/ipc/glue/TransportSecurityInfoUtils.h @@ -24,13 +24,6 @@ struct ParamTraits { RefPtr* aResult); }; -template <> -struct ParamTraits { - static void Write(Message* aMsg, nsIX509CertList* aCertList); - static bool Read(const Message* aMsg, PickleIterator* aIter, - RefPtr* aResult); -}; - } // namespace IPC #endif // mozilla_ipc_TransportSecurityInfoUtils_h diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp index a8e469a8ab..2d5ab428ad 100644 --- a/js/src/gc/Memory.cpp +++ b/js/src/gc/Memory.cpp @@ -829,9 +829,9 @@ bool MarkPagesInUseHard(void* region, size_t length) { size_t GetPageFaultCount() { #ifdef XP_WIN PROCESS_MEMORY_COUNTERS pmc; - //if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)) == 0) { + if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)) == 0) { return 0; - //} + } return pmc.PageFaultCount; #else struct rusage usage; diff --git a/js/src/gc/moz.build b/js/src/gc/moz.build index 4088c5dbbe..4154322e52 100644 --- a/js/src/gc/moz.build +++ b/js/src/gc/moz.build @@ -47,3 +47,9 @@ UNIFIED_SOURCES += [ SOURCES += [ 'StoreBuffer.cpp', ] + +DEFINES["PSAPI_VERSION"] = "1" + +OS_LIBS += [ + 'psapi', +] diff --git a/js/xpconnect/shell/xpcshell.cpp b/js/xpconnect/shell/xpcshell.cpp index c0eee210ea..8dea08a3dd 100644 --- a/js/xpconnect/shell/xpcshell.cpp +++ b/js/xpconnect/shell/xpcshell.cpp @@ -6,14 +6,15 @@ #include -#include "mozilla/WindowsDllBlocklist.h" #include "mozilla/Bootstrap.h" +#include "XREShellData.h" #include "nsXULAppAPI.h" #ifdef XP_MACOSX # include "xpcshellMacUtils.h" #endif #ifdef XP_WIN +# include "mozilla/WindowsDllBlocklist.h" # include # include diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index 78f79367a8..30dcc1c700 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -592,7 +592,8 @@ JSObject* NACScope(JSObject* global) { return global; } - JSObject* scope = UnprivilegedJunkScope(); + JSObject* scope = UnprivilegedJunkScope(fallible); + if (!scope) return nullptr; JS::ExposeObjectToActiveJS(scope); return scope; } diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp index bbd44fbae2..91dfb49513 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -8002,6 +8002,12 @@ void PresShell::EventHandler::FinalizeHandlingEvent(WidgetEvent* aEvent) { aEvent->mFlags.mDefaultPreventedByChrome) { mPresShell->mIsLastChromeOnlyEscapeKeyConsumed = true; } + if (aEvent->mMessage == eKeyDown && + !aEvent->mFlags.mDefaultPrevented) { + if (Document* doc = GetDocument()) { + doc->TryCancelDialog(); + } + } } } if (aEvent->mMessage == eKeyDown) { diff --git a/layout/forms/nsFileControlFrame.cpp b/layout/forms/nsFileControlFrame.cpp index 455ffcd544..c3c6bf504f 100644 --- a/layout/forms/nsFileControlFrame.cpp +++ b/layout/forms/nsFileControlFrame.cpp @@ -24,6 +24,7 @@ #include "nsNodeInfoManager.h" #include "nsContentCreatorFunctions.h" #include "nsContentUtils.h" +#include "nsIFile.h" #include "nsUnicodeProperties.h" #include "mozilla/EventStates.h" #include "nsTextNode.h" diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index ea25f24aa0..8bc25d78a6 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -2426,6 +2426,7 @@ nsresult nsImageFrame::LoadIcon(const nsAString& aSpec, nullptr, /* Not associated with any particular document */ loadFlags, nullptr, contentPolicyType, EmptyString(), false, /* aUseUrgentStartForChannel */ + false, /* aLinkPreload */ aRequest); } diff --git a/layout/generic/test/test_selection_expanding.html b/layout/generic/test/test_selection_expanding.html index b9d187ad79..e6e5eb3b54 100644 --- a/layout/generic/test/test_selection_expanding.html +++ b/layout/generic/test/test_selection_expanding.html @@ -346,7 +346,7 @@ // *********************************************************** // selection starting at iframe - synthesizeMouse(iframe, 30, 5, { type: "mousedown" }); + synthesizeMouse(iframe, 20, 5, { type: "mousedown" }); // inside iframe synthesizeMouse(iframe, 50, 5, { type: "mousemove" }); diff --git a/layout/inspector/InspectorUtils.cpp b/layout/inspector/InspectorUtils.cpp index a144c6036c..a7d7e42fd0 100644 --- a/layout/inspector/InspectorUtils.cpp +++ b/layout/inspector/InspectorUtils.cpp @@ -10,7 +10,6 @@ #include "gfxTextRun.h" #include "nsArray.h" #include "nsString.h" -#include "nsIStyleSheetLinkingElement.h" #include "nsIContentInlines.h" #include "mozilla/dom/Document.h" #include "nsXBLBinding.h" @@ -28,6 +27,7 @@ #include "mozilla/dom/Element.h" #include "mozilla/dom/CSSStyleRule.h" #include "mozilla/dom/InspectorUtilsBinding.h" +#include "mozilla/dom/LinkStyle.h" #include "mozilla/dom/ToJSValue.h" #include "nsCSSProps.h" #include "nsCSSValue.h" @@ -262,19 +262,14 @@ uint32_t InspectorUtils::GetRelativeRuleLine(GlobalObject& aGlobal, // a 0 lineNumber. StyleSheet* sheet = aRule.GetStyleSheet(); if (sheet && lineNumber != 0) { - nsINode* owningNode = sheet->GetOwnerNode(); - if (owningNode) { - nsCOMPtr link = - do_QueryInterface(owningNode); - if (link) { - // Check for underflow, which is one indication that we're - // trying to remap an already relative lineNumber. - uint32_t linkLineIndex0 = link->GetLineNumber() - 1; - if (linkLineIndex0 > lineNumber) { - lineNumber = 0; - } else { - lineNumber -= linkLineIndex0; - } + if (auto* link = LinkStyle::FromNodeOrNull(sheet->GetOwnerNode())) { + // Check for underflow, which is one indication that we're + // trying to remap an already relative lineNumber. + uint32_t linkLineIndex0 = link->GetLineNumber() - 1; + if (linkLineIndex0 > lineNumber) { + lineNumber = 0; + } else { + lineNumber -= linkLineIndex0; } } } diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list index 588bbb739d..c983e41bf5 100644 --- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -1326,7 +1326,7 @@ fails-if(Android) == 481024-1c.html 481024-1-ref.html == 481024-1e.html 481024-1-ref.html != 481948-1.html 481948-1-ref.html != 481948-2.html 481948-2-ref.html -fails-if(Android||gtkWidget) random-if(winWidget) == 481948-3.html 481948-3-ref.html # questionable test, see bug 488364 +fails-if(Android||gtkWidget) random-if(winWidget||cocoaWidget) == 481948-3.html 481948-3-ref.html # questionable test, see bug 488364 == 482398-1.html 482398-1-ref.html random-if(d2d) == 482592-1a.xhtml 482592-1-ref.html # bug 586771 random-if(d2d) == 482592-1b.xhtml 482592-1-ref.html # bug 586771 diff --git a/layout/reftests/line-breaking/reftest.list b/layout/reftests/line-breaking/reftest.list index a59f7bda17..6891226089 100644 --- a/layout/reftests/line-breaking/reftest.list +++ b/layout/reftests/line-breaking/reftest.list @@ -33,7 +33,7 @@ skip-if(gtkWidget) == quotationmarks-cjk-1.html quotationmarks-cjk-1-ref.html == smileys-1.html smileys-1-ref.html == smileys-2.html smileys-2-ref.html == space-cluster-1.html space-cluster-1-ref.html -== space-cluster-2.html space-cluster-2-ref.html +random-if(cocoaWidget) == space-cluster-2.html space-cluster-2-ref.html # harfbuzz vs coretext, different positioning of stray diacritics == surrogates-1.html surrogates-1-ref.html == surrogates-2.html surrogates-2-ref.html == surrogates-3.html surrogates-3-ref.html diff --git a/layout/reftests/mathml/reftest.list b/layout/reftests/mathml/reftest.list index 9fd73596df..c4da45b936 100644 --- a/layout/reftests/mathml/reftest.list +++ b/layout/reftests/mathml/reftest.list @@ -3,8 +3,8 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == dir-2.html dir-2-ref.htm random-if(gtkWidget) == dir-3.html dir-3-ref.html # bug 1309426 == dir-4.html dir-4-ref.html == dir-5.html dir-5-ref.html -== dir-6.html dir-6-ref.html -== dir-6a.html dir-6a-ref.html +fuzzy-if(cocoaWidget,0-135,0-56) == dir-6.html dir-6-ref.html +fuzzy-if(cocoaWidget,0-135,0-56) == dir-6a.html dir-6a-ref.html random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == dir-7.html dir-7-ref.html # Bug 1392106 fails == dir-8.html dir-8-ref.html fails == dir-9.html dir-9-ref.html # Bug 787215 diff --git a/layout/reftests/svg/reftest.list b/layout/reftests/svg/reftest.list index 5958128370..bcf932bb22 100644 --- a/layout/reftests/svg/reftest.list +++ b/layout/reftests/svg/reftest.list @@ -505,6 +505,8 @@ random-if(/^Windows\x20NT\x206\.1/.test(http.oscpu)) == textPath-line-01.svg tex == thin-stroke-01.svg pass.svg +== transform-origin-presentation-01.svg pass.svg + == transform-outer-svg-01.svg transform-outer-svg-01-ref.svg == css-transform-svg.html css-transform-svg-ref.html diff --git a/layout/reftests/svg/svg-integration/reftest.list b/layout/reftests/svg/svg-integration/reftest.list index 830c533adf..aa817a6ecb 100644 --- a/layout/reftests/svg/svg-integration/reftest.list +++ b/layout/reftests/svg/svg-integration/reftest.list @@ -48,5 +48,5 @@ fuzzy(0-1,0-5000) == mask-clipPath-opacity-01e.xhtml mask-clipPath-opacity-01-re # box-decoration-break tests fuzzy-if(Android,0-4,0-10) == box-decoration-break-01.xhtml box-decoration-break-01-ref.xhtml -fuzzy(0-62,0-14) == box-decoration-break-02.xhtml box-decoration-break-02-ref.xhtml +fuzzy(0-119,0-16) == box-decoration-break-02.xhtml box-decoration-break-02-ref.xhtml fuzzy(0-67,0-238) == box-decoration-break-03.xhtml box-decoration-break-01-ref.xhtml diff --git a/layout/reftests/svg/transform-origin-presentation-01.svg b/layout/reftests/svg/transform-origin-presentation-01.svg new file mode 100644 index 0000000000..b59fa5f11e --- /dev/null +++ b/layout/reftests/svg/transform-origin-presentation-01.svg @@ -0,0 +1,4 @@ + + + + diff --git a/layout/reftests/w3c-css/submitted/variables/reftest.list b/layout/reftests/w3c-css/submitted/variables/reftest.list index 056832aba2..89c66e0977 100644 --- a/layout/reftests/w3c-css/submitted/variables/reftest.list +++ b/layout/reftests/w3c-css/submitted/variables/reftest.list @@ -58,11 +58,11 @@ == variable-declaration-59.html support/color-green-ref.html == variable-declaration-60.html support/color-green-ref.html == variable-external-declaration-01.html support/color-green-ref.html -pref(gfx.font_ahem_antialias_none,false) fuzzy-if(OSX,48-49,622-622) fuzzy-if(winWidget,88-113,992-1726) fuzzy-if(geckoview,52-52,768-768) == variable-external-font-face-01.html variable-external-font-face-01-ref.html +ref-pref(gfx.font_rendering.ahem_antialias_none,false) == variable-external-font-face-01.html variable-external-font-face-01-ref.html == variable-external-reference-01.html support/color-green-ref.html == variable-external-supports-01.html support/color-green-ref.html -fuzzy-if(OSX,48-49,622-622) fuzzy-if(winWidget,88-113,992-1726) fuzzy-if(geckoview,52-52,768-768) == variable-font-face-01.html variable-font-face-01-ref.html -fuzzy-if(OSX,48-49,622-622) fuzzy-if(winWidget,88-113,992-1726) fuzzy-if(geckoview,52-52,768-768) == variable-font-face-02.html variable-font-face-02-ref.html +ref-pref(gfx.font_rendering.ahem_antialias_none,false) == variable-font-face-01.html variable-font-face-01-ref.html +ref-pref(gfx.font_rendering.ahem_antialias_none,false) == variable-font-face-02.html variable-font-face-02-ref.html == variable-reference-01.html support/color-green-ref.html == variable-reference-02.html support/color-green-ref.html == variable-reference-03.html support/color-green-ref.html diff --git a/layout/style/FontFaceSet.cpp b/layout/style/FontFaceSet.cpp index 353c74ef4b..673a1b0516 100644 --- a/layout/style/FontFaceSet.cpp +++ b/layout/style/FontFaceSet.cpp @@ -7,6 +7,7 @@ #include "gfxFontConstants.h" #include "gfxFontSrcPrincipal.h" #include "gfxFontSrcURI.h" +#include "FontPreloader.h" #include "mozilla/css/Loader.h" #include "mozilla/dom/CSSFontFaceRule.h" #include "mozilla/dom/DocumentInlines.h" @@ -34,7 +35,6 @@ #include "nsContentPolicyUtils.h" #include "nsDeviceContext.h" #include "nsFontFaceLoader.h" -#include "nsIClassOfService.h" #include "nsIConsoleService.h" #include "nsIContentPolicy.h" #include "nsIDocShell.h" @@ -42,7 +42,6 @@ #include "nsILoadContext.h" #include "nsINetworkPredictor.h" #include "nsIPrincipal.h" -#include "nsISupportsPriority.h" #include "nsIWebNavigation.h" #include "nsNetUtil.h" #include "nsIInputStream.h" @@ -580,87 +579,70 @@ nsresult FontFaceSet::StartLoad(gfxUserFontEntry* aUserFontEntry, nsresult rv; nsCOMPtr streamLoader; - nsCOMPtr loadGroup(mDocument->GetDocumentLoadGroup()); - gfxFontSrcPrincipal* principal = aUserFontEntry->GetPrincipal(); + RefPtr fontLoader; + + auto preloadKey = PreloadHashKey::CreateAsFont( + aFontFaceSrc->mURI->get(), CORS_ANONYMOUS, + aFontFaceSrc->mReferrerInfo->ReferrerPolicy()); + RefPtr preload = + mDocument->Preloads().LookupPreload(&preloadKey); - uint32_t securityFlags = 0; - if (aFontFaceSrc->mURI->get()->SchemeIs("file")) { - securityFlags = nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS; + if (preload) { + fontLoader = new nsFontFaceLoader(aUserFontEntry, aFontFaceSrc->mURI->get(), + this, preload->Channel()); + + rv = NS_NewStreamLoader(getter_AddRefs(streamLoader), fontLoader, + fontLoader); + NS_ENSURE_SUCCESS(rv, rv); + + rv = preload->AsyncConsume(streamLoader); + + // We don't want this to hang around regardless of the result, there will be + // no coalescing of later found tags for fonts. + preload->RemoveSelf(mDocument); } else { - securityFlags = nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS; + // No preload found, open a channel. + rv = NS_ERROR_FAILURE; } - nsCOMPtr channel; - // Note we are calling NS_NewChannelWithTriggeringPrincipal() with both a - // node and a principal. This is because the document where the font is - // being loaded might have a different origin from the principal of the - // stylesheet that initiated the font load. - rv = NS_NewChannelWithTriggeringPrincipal( - getter_AddRefs(channel), aFontFaceSrc->mURI->get(), mDocument, - principal ? principal->get() : nullptr, securityFlags, - nsIContentPolicy::TYPE_FONT, - nullptr, // PerformanceStorage - loadGroup); - NS_ENSURE_SUCCESS(rv, rv); + nsCOMPtr loadGroup(mDocument->GetDocumentLoadGroup()); + if (NS_FAILED(rv)) { + nsCOMPtr channel; + rv = FontPreloader::BuildChannel( + getter_AddRefs(channel), aFontFaceSrc->mURI->get(), CORS_ANONYMOUS, + dom::ReferrerPolicy::_empty /* not used */, aUserFontEntry, + aFontFaceSrc, mDocument, loadGroup, nullptr, false); + NS_ENSURE_SUCCESS(rv, rv); - RefPtr fontLoader = new nsFontFaceLoader( - aUserFontEntry, aFontFaceSrc->mURI->get(), this, channel); - mLoaders.PutEntry(fontLoader); + fontLoader = new nsFontFaceLoader(aUserFontEntry, aFontFaceSrc->mURI->get(), + this, channel); + + if (LOG_ENABLED()) { + nsCOMPtr referrer = + aFontFaceSrc->mReferrerInfo + ? aFontFaceSrc->mReferrerInfo->GetOriginalReferrer() + : nullptr; + LOG(( + "userfonts (%p) download start - font uri: (%s) referrer uri: (%s)\n", + fontLoader.get(), aFontFaceSrc->mURI->GetSpecOrDefault().get(), + referrer ? referrer->GetSpecOrDefault().get() : "")); + } - if (LOG_ENABLED()) { - nsCOMPtr referrer = - aFontFaceSrc->mReferrerInfo - ? aFontFaceSrc->mReferrerInfo->GetOriginalReferrer() - : nullptr; - LOG( - ("userfonts (%p) download start - font uri: (%s) " - "referrer uri: (%s)\n", - fontLoader.get(), aFontFaceSrc->mURI->GetSpecOrDefault().get(), - referrer ? referrer->GetSpecOrDefault().get() : "")); - } - - nsCOMPtr httpChannel(do_QueryInterface(channel)); - if (httpChannel) { - rv = httpChannel->SetReferrerInfo(aFontFaceSrc->mReferrerInfo); - Unused << NS_WARN_IF(NS_FAILED(rv)); - - rv = httpChannel->SetRequestHeader( - NS_LITERAL_CSTRING("Accept"), - NS_LITERAL_CSTRING("application/font-woff2;q=1.0,application/" - "font-woff;q=0.9,*/*;q=0.8"), - false); + rv = NS_NewStreamLoader(getter_AddRefs(streamLoader), fontLoader, + fontLoader); NS_ENSURE_SUCCESS(rv, rv); - // For WOFF and WOFF2, we should tell servers/proxies/etc NOT to try - // and apply additional compression at the content-encoding layer - if (aFontFaceSrc->mFormatFlags & (gfxUserFontSet::FLAG_FORMAT_WOFF | - gfxUserFontSet::FLAG_FORMAT_WOFF2)) { - rv = httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("Accept-Encoding"), - NS_LITERAL_CSTRING("identity"), false); - NS_ENSURE_SUCCESS(rv, rv); + rv = channel->AsyncOpen(streamLoader); + if (NS_FAILED(rv)) { + fontLoader->DropChannel(); // explicitly need to break ref cycle } } - nsCOMPtr priorityChannel(do_QueryInterface(channel)); - if (priorityChannel) { - priorityChannel->AdjustPriority(nsISupportsPriority::PRIORITY_HIGH); - } - nsCOMPtr cos(do_QueryInterface(channel)); - if (cos) { - cos->AddClassFlags(nsIClassOfService::TailForbidden); - } - - rv = NS_NewStreamLoader(getter_AddRefs(streamLoader), fontLoader, fontLoader); - NS_ENSURE_SUCCESS(rv, rv); + mLoaders.PutEntry(fontLoader); net::PredictorLearn(aFontFaceSrc->mURI->get(), mDocument->GetDocumentURI(), nsINetworkPredictor::LEARN_LOAD_SUBRESOURCE, loadGroup); - rv = channel->AsyncOpen(streamLoader); - if (NS_FAILED(rv)) { - fontLoader->DropChannel(); // explicitly need to break ref cycle - } - if (NS_SUCCEEDED(rv)) { fontLoader->StartedLoading(streamLoader); // let the font entry remember the loader, in case we need to cancel it diff --git a/layout/style/FontPreloader.cpp b/layout/style/FontPreloader.cpp new file mode 100644 index 0000000000..b514df9daf --- /dev/null +++ b/layout/style/FontPreloader.cpp @@ -0,0 +1,118 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "FontPreloader.h" + +#include "gfxUserFontSet.h" +#include "nsIClassOfService.h" +#include "nsISupportsPriority.h" + +namespace mozilla { + +FontPreloader::FontPreloader() + : FetchPreloader(nsIContentPolicy::TYPE_INTERNAL_FONT_PRELOAD) {} + +void FontPreloader::PrioritizeAsPreload() { PrioritizeAsPreload(Channel()); } + +nsresult FontPreloader::CreateChannel( + nsIChannel** aChannel, nsIURI* aURI, const CORSMode aCORSMode, + const dom::ReferrerPolicy& aReferrerPolicy, dom::Document* aDocument, + nsILoadGroup* aLoadGroup, nsIInterfaceRequestor* aCallbacks) { + return BuildChannel(aChannel, aURI, aCORSMode, aReferrerPolicy, nullptr, + nullptr, aDocument, aLoadGroup, aCallbacks, true); +} + +// static +void FontPreloader::PrioritizeAsPreload(nsIChannel* aChannel) { + nsCOMPtr cos(do_QueryInterface(aChannel)); + if (cos) { + cos->AddClassFlags(nsIClassOfService::Unblocked); + } +} + +// static +nsresult FontPreloader::BuildChannel( + nsIChannel** aChannel, nsIURI* aURI, const CORSMode aCORSMode, + const dom::ReferrerPolicy& aReferrerPolicy, + gfxUserFontEntry* aUserFontEntry, const gfxFontFaceSrc* aFontFaceSrc, + dom::Document* aDocument, nsILoadGroup* aLoadGroup, + nsIInterfaceRequestor* aCallbacks, bool aIsPreload) { + nsresult rv; + + nsIPrincipal* principal = aUserFontEntry + ? (aUserFontEntry->GetPrincipal() + ? aUserFontEntry->GetPrincipal()->get() + : nullptr) + : aDocument->NodePrincipal(); + + // aCORSMode is ignored. We always load as crossorigin=anonymous, but a + // preload started with anything other then "anonymous" will never be found. + + uint32_t securityFlags = 0; + if (aURI->SchemeIs("file")) { + securityFlags = nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS; + } else { + securityFlags = nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS; + } + + nsContentPolicyType contentPolicyType = + aIsPreload ? nsIContentPolicy::TYPE_INTERNAL_FONT_PRELOAD + : nsIContentPolicy::TYPE_FONT; + + nsCOMPtr channel; + // Note we are calling NS_NewChannelWithTriggeringPrincipal() with both a + // node and a principal. This is because the document where the font is + // being loaded might have a different origin from the principal of the + // stylesheet that initiated the font load. + rv = NS_NewChannelWithTriggeringPrincipal(getter_AddRefs(channel), aURI, + aDocument, principal, securityFlags, + contentPolicyType, + nullptr, // PerformanceStorage + aLoadGroup); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr httpChannel(do_QueryInterface(channel)); + if (httpChannel) { + rv = httpChannel->SetRequestHeader( + NS_LITERAL_CSTRING("Accept"), + NS_LITERAL_CSTRING("application/font-woff2;q=1.0,application/" + "font-woff;q=0.9,*/*;q=0.8"), + false); + NS_ENSURE_SUCCESS(rv, rv); + + if (aFontFaceSrc) { + rv = httpChannel->SetReferrerInfo(aFontFaceSrc->mReferrerInfo); + Unused << NS_WARN_IF(NS_FAILED(rv)); + + // For WOFF and WOFF2, we should tell servers/proxies/etc NOT to try + // and apply additional compression at the content-encoding layer + if (aFontFaceSrc->mFormatFlags & (gfxUserFontSet::FLAG_FORMAT_WOFF | + gfxUserFontSet::FLAG_FORMAT_WOFF2)) { + rv = httpChannel->SetRequestHeader( + NS_LITERAL_CSTRING("Accept-Encoding"), + NS_LITERAL_CSTRING("identity"), false); + NS_ENSURE_SUCCESS(rv, rv); + } + } else { + nsCOMPtr referrerInfo = new dom::ReferrerInfo( + aDocument->GetDocumentURIAsReferrer(), aReferrerPolicy); + rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo); + MOZ_ASSERT(NS_SUCCEEDED(rv)); + } + } + + nsCOMPtr priorityChannel(do_QueryInterface(channel)); + if (priorityChannel) { + priorityChannel->AdjustPriority(nsISupportsPriority::PRIORITY_HIGH); + } + nsCOMPtr cos(do_QueryInterface(channel)); + if (cos) { + cos->AddClassFlags(nsIClassOfService::TailForbidden); + } + + channel.forget(aChannel); + return NS_OK; +} + +} // namespace mozilla diff --git a/layout/style/FontPreloader.h b/layout/style/FontPreloader.h new file mode 100644 index 0000000000..121fe7596d --- /dev/null +++ b/layout/style/FontPreloader.h @@ -0,0 +1,40 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef FontPreloader_h_ +#define FontPreloader_h_ + +#include "mozilla/FetchPreloader.h" + +class gfxUserFontEntry; +struct gfxFontFaceSrc; + +namespace mozilla { + +class FontPreloader final : public FetchPreloader { + public: + FontPreloader(); + + // PreloaderBase + static void PrioritizeAsPreload(nsIChannel* aChannel); + void PrioritizeAsPreload() override; + + static nsresult BuildChannel( + nsIChannel** aChannel, nsIURI* aURI, const CORSMode aCORSMode, + const dom::ReferrerPolicy& aReferrerPolicy, + gfxUserFontEntry* aUserFontEntry, const gfxFontFaceSrc* aFontFaceSrc, + dom::Document* aDocument, nsILoadGroup* aLoadGroup, + nsIInterfaceRequestor* aCallbacks, bool aIsPreload); + + protected: + nsresult CreateChannel(nsIChannel** aChannel, nsIURI* aURI, + const CORSMode aCORSMode, + const dom::ReferrerPolicy& aReferrerPolicy, + dom::Document* aDocument, nsILoadGroup* aLoadGroup, + nsIInterfaceRequestor* aCallbacks) override; +}; + +} // namespace mozilla + +#endif diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index d4a8bb24cc..af94fb35d7 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -14,6 +14,7 @@ #include "mozilla/LoadInfo.h" #include "mozilla/Logging.h" #include "mozilla/MemoryReporting.h" +#include "mozilla/PreloadHashKey.h" #include "mozilla/SystemGroup.h" #include "mozilla/ResultExtensions.h" #include "mozilla/URLPreloader.h" @@ -35,7 +36,6 @@ #include "nsIClassOfService.h" #include "nsIScriptError.h" #include "nsMimeTypes.h" -#include "nsIStyleSheetLinkingElement.h" #include "nsICSSLoaderObserver.h" #include "nsThreadUtils.h" #include "nsGkAtoms.h" @@ -155,7 +155,7 @@ class SheetLoadDataHashKey : public nsURIHashKey { mCORSMode(aCORSMode), mParsingMode(aParsingMode), mSRIMetadata(aSRIMetadata), - mIsLinkPreload(aIsPreload == IsPreload::Yes) { + mIsLinkPreload(aIsPreload == IsPreload::FromLink) { MOZ_COUNT_CTOR(SheetLoadDataHashKey); } @@ -252,7 +252,7 @@ class SheetLoadDataHashKey : public nsURIHashKey { SheetLoadDataHashKey::SheetLoadDataHashKey(css::SheetLoadData& aLoadData) : nsURIHashKey(aLoadData.mURI), - mPrincipal(aLoadData.mLoaderPrincipal), + mPrincipal(aLoadData.mTriggeringPrincipal), mReferrerInfo(aLoadData.ReferrerInfo()), mCORSMode(aLoadData.mSheet->GetCORSMode()), mParsingMode(aLoadData.mSheet->ParsingMode()), @@ -271,12 +271,14 @@ namespace css { ********************************/ NS_IMPL_ISUPPORTS(SheetLoadData, nsIRunnable, nsIThreadObserver) -SheetLoadData::SheetLoadData( - Loader* aLoader, const nsAString& aTitle, nsIURI* aURI, StyleSheet* aSheet, - bool aSyncLoad, nsIStyleSheetLinkingElement* aOwningElement, - IsAlternate aIsAlternate, MediaMatched aMediaMatches, IsPreload aIsPreload, - nsICSSLoaderObserver* aObserver, nsIPrincipal* aLoaderPrincipal, - nsIReferrerInfo* aReferrerInfo, nsINode* aRequestingNode) +SheetLoadData::SheetLoadData(Loader* aLoader, const nsAString& aTitle, + nsIURI* aURI, StyleSheet* aSheet, bool aSyncLoad, + nsINode* aOwningNode, IsAlternate aIsAlternate, + MediaMatched aMediaMatches, IsPreload aIsPreload, + nsICSSLoaderObserver* aObserver, + nsIPrincipal* aTriggeringPrincipal, + nsIReferrerInfo* aReferrerInfo, + nsINode* aRequestingNode) : mLoader(aLoader), mTitle(aTitle), mEncoding(nullptr), @@ -299,19 +301,21 @@ SheetLoadData::SheetLoadData( mBlockResourceTiming(false), mLoadFailed(false), mIsPreload(aIsPreload), - mOwningElement(aOwningElement), + mOwningNode(aOwningNode), mObserver(aObserver), - mLoaderPrincipal(aLoaderPrincipal), + mTriggeringPrincipal(aTriggeringPrincipal), mReferrerInfo(aReferrerInfo), mRequestingNode(aRequestingNode), mPreloadEncoding(nullptr) { + MOZ_ASSERT(!mOwningNode || dom::LinkStyle::FromNode(*mOwningNode), + "Must implement LinkStyle"); MOZ_ASSERT(mLoader, "Must have a loader!"); } SheetLoadData::SheetLoadData(Loader* aLoader, nsIURI* aURI, StyleSheet* aSheet, SheetLoadData* aParentData, nsICSSLoaderObserver* aObserver, - nsIPrincipal* aLoaderPrincipal, + nsIPrincipal* aTriggeringPrincipal, nsIReferrerInfo* aReferrerInfo, nsINode* aRequestingNode) : mLoader(aLoader), @@ -336,9 +340,9 @@ SheetLoadData::SheetLoadData(Loader* aLoader, nsIURI* aURI, StyleSheet* aSheet, mBlockResourceTiming(false), mLoadFailed(false), mIsPreload(IsPreload::No), - mOwningElement(nullptr), + mOwningNode(nullptr), mObserver(aObserver), - mLoaderPrincipal(aLoaderPrincipal), + mTriggeringPrincipal(aTriggeringPrincipal), mReferrerInfo(aReferrerInfo), mRequestingNode(aRequestingNode), mPreloadEncoding(nullptr) { @@ -355,7 +359,7 @@ SheetLoadData::SheetLoadData( Loader* aLoader, nsIURI* aURI, StyleSheet* aSheet, bool aSyncLoad, UseSystemPrincipal aUseSystemPrincipal, IsPreload aIsPreload, const Encoding* aPreloadEncoding, nsICSSLoaderObserver* aObserver, - nsIPrincipal* aLoaderPrincipal, nsIReferrerInfo* aReferrerInfo, + nsIPrincipal* aTriggeringPrincipal, nsIReferrerInfo* aReferrerInfo, nsINode* aRequestingNode) : mLoader(aLoader), mEncoding(nullptr), @@ -378,9 +382,9 @@ SheetLoadData::SheetLoadData( mBlockResourceTiming(false), mLoadFailed(false), mIsPreload(aIsPreload), - mOwningElement(nullptr), + mOwningNode(nullptr), mObserver(aObserver), - mLoaderPrincipal(aLoaderPrincipal), + mTriggeringPrincipal(aTriggeringPrincipal), mReferrerInfo(aReferrerInfo), mRequestingNode(aRequestingNode), mPreloadEncoding(aPreloadEncoding) { @@ -436,8 +440,8 @@ void SheetLoadData::FireLoadEvent(nsIThreadInternal* aThread) { aThread->RemoveObserver(this); // Now fire the event - nsCOMPtr node = do_QueryInterface(mOwningElement); - NS_ASSERTION(node, "How did that happen???"); + nsCOMPtr node = mOwningNode; + MOZ_ASSERT(node, "How did that happen???"); nsContentUtils::DispatchTrustedEvent( node->OwnerDoc(), node, @@ -449,7 +453,7 @@ void SheetLoadData::FireLoadEvent(nsIThreadInternal* aThread) { } void SheetLoadData::ScheduleLoadEventIfNeeded() { - if (!mOwningElement) { + if (!mOwningNode) { return; } @@ -533,10 +537,10 @@ static void AssertIncompleteSheetMatches(const SheetLoadData& aData, const SheetLoadDataHashKey& aKey) { #ifdef DEBUG bool debugEqual; - MOZ_ASSERT((!aKey.GetPrincipal() && !aData.mLoaderPrincipal) || - (aKey.GetPrincipal() && aData.mLoaderPrincipal && + MOZ_ASSERT((!aKey.GetPrincipal() && !aData.mTriggeringPrincipal) || + (aKey.GetPrincipal() && aData.mTriggeringPrincipal && NS_SUCCEEDED(aKey.GetPrincipal()->Equals( - aData.mLoaderPrincipal, &debugEqual)) && + aData.mTriggeringPrincipal, &debugEqual)) && debugEqual), "Principals should be the same"); #endif @@ -773,9 +777,9 @@ NotNull SheetLoadData::DetermineNonBOMEncoding( // Now try the charset on the or processing instruction // that loaded us - if (mOwningElement) { + if (mOwningNode) { nsAutoString label16; - mOwningElement->GetCharset(label16); + LinkStyle::FromNode(*mOwningNode)->GetCharset(label16); encoding = Encoding::ForLabel(label16); if (encoding) { return WrapNotNull(encoding); @@ -877,10 +881,9 @@ nsresult SheetLoadData::VerifySheetReadyToParse(nsresult aStatus, aStatus)) { if (Document* doc = mLoader->GetDocument()) { for (SheetLoadData* data = this; data; data = data->mNext) { - // mOwningElement may be null but AddBlockTrackingNode can cope - nsCOMPtr content = - do_QueryInterface(data->mOwningElement); - doc->AddBlockedNodeByClassifier(content); + // mOwningNode may be null but AddBlockTrackingNode can cope + doc->AddBlockedNodeByClassifier( + nsIContent::FromNodeOrNull(data->mOwningNode)); } } } @@ -931,9 +934,9 @@ nsresult SheetLoadData::VerifySheetReadyToParse(nsresult aStatus, mSheet->SetPrincipal(principal); - if (mLoaderPrincipal && mSheet->GetCORSMode() == CORS_NONE) { + if (mTriggeringPrincipal && mSheet->GetCORSMode() == CORS_NONE) { bool subsumed; - result = mLoaderPrincipal->Subsumes(principal, &subsumed); + result = mTriggeringPrincipal->Subsumes(principal, &subsumed); if (NS_FAILED(result) || !subsumed) { mIsCrossOriginNoCORS = true; } @@ -974,9 +977,9 @@ nsresult SheetLoadData::VerifySheetReadyToParse(nsresult aStatus, uint32_t errorFlag; bool sameOrigin = true; - if (mLoaderPrincipal) { + if (mTriggeringPrincipal) { bool subsumed; - result = mLoaderPrincipal->Subsumes(principal, &subsumed); + result = mTriggeringPrincipal->Subsumes(principal, &subsumed); if (NS_FAILED(result) || !subsumed) { sameOrigin = false; } @@ -1091,9 +1094,9 @@ nsresult Loader::CheckContentPolicy(nsIPrincipal* aLoadingPrincipal, } nsContentPolicyType contentPolicyType = - aIsPreload == IsPreload::Yes - ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD - : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET; + aIsPreload == IsPreload::No + ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET + : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD; nsCOMPtr secCheckLoadInfo = new net::LoadInfo( aLoadingPrincipal, aTriggeringPrincipal, aRequestingNode, @@ -1124,10 +1127,10 @@ nsresult Loader::CheckContentPolicy(nsIPrincipal* aLoadingPrincipal, * the result of CreateSheet(). */ std::tuple, Loader::SheetState> Loader::CreateSheet( - nsIURI* aURI, nsIContent* aLinkingContent, nsIPrincipal* aLoaderPrincipal, - css::SheetParsingMode aParsingMode, CORSMode aCORSMode, - nsIReferrerInfo* aLoadingReferrerInfo, const nsAString& aIntegrity, - bool aSyncLoad, IsPreload aIsPreload) { + nsIURI* aURI, nsIContent* aLinkingContent, + nsIPrincipal* aTriggeringPrincipal, css::SheetParsingMode aParsingMode, + CORSMode aCORSMode, nsIReferrerInfo* aLoadingReferrerInfo, + const nsAString& aIntegrity, bool aSyncLoad, IsPreload aIsPreload) { MOZ_ASSERT(aURI, "This path is not taken for inline stylesheets"); LOG(("css::Loader::CreateSheet(%s)", aURI->GetSpecOrDefault().get())); @@ -1147,7 +1150,7 @@ std::tuple, Loader::SheetState> Loader::CreateSheet( SRICheck::IntegrityMetadata(aIntegrity, sourceUri, mReporter, &sriMetadata); } - SheetLoadDataHashKey key(aURI, aLoaderPrincipal, aLoadingReferrerInfo, + SheetLoadDataHashKey key(aURI, aTriggeringPrincipal, aLoadingReferrerInfo, aCORSMode, aParsingMode, sriMetadata, aIsPreload); auto cacheResult = mSheets->Lookup(key, aSyncLoad); if (const auto& [styleSheet, sheetState] = cacheResult; styleSheet) { @@ -1230,10 +1233,8 @@ void Loader::InsertSheetInTree(StyleSheet& aSheet, aLinkingContent->IsInShadowTree(), "Why would we insert it anywhere?"); - nsCOMPtr linkingElement = - do_QueryInterface(aLinkingContent); - if (linkingElement) { - linkingElement->SetStyleSheet(&aSheet); + if (auto* linkStyle = LinkStyle::FromNodeOrNull(aLinkingContent)) { + linkStyle->SetStyleSheet(&aSheet); } ShadowRoot* shadow = @@ -1368,9 +1369,9 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { nsILoadInfo::SEC_ALLOW_CHROME; nsContentPolicyType contentPolicyType = - aLoadData.mIsPreload == IsPreload::Yes - ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD - : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET; + aLoadData.mIsPreload == IsPreload::No + ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET + : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD; // Just load it nsCOMPtr channel; @@ -1379,10 +1380,10 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { // This is because of a case where the node is the document being styled and // the principal is the stylesheet (perhaps from a different origin) that is // applying the styles. - if (aLoadData.mRequestingNode && aLoadData.mLoaderPrincipal) { + if (aLoadData.mRequestingNode && aLoadData.mTriggeringPrincipal) { rv = NS_NewChannelWithTriggeringPrincipal( getter_AddRefs(channel), aLoadData.mURI, aLoadData.mRequestingNode, - aLoadData.mLoaderPrincipal, securityFlags, contentPolicyType); + aLoadData.mTriggeringPrincipal, securityFlags, contentPolicyType); } else { // either we are loading something inside a document, in which case // we should always have a requestingNode, or we are loading something @@ -1406,7 +1407,7 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { } if (NS_FAILED(rv)) { LOG_ERROR((" Failed to create channel")); - streamLoader->ChannelOpenFailed(); + streamLoader->ChannelOpenFailed(rv); SheetComplete(aLoadData, rv); return rv; } @@ -1429,7 +1430,7 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { if (NS_FAILED(rv)) { LOG_ERROR((" Failed to open URI synchronously")); - streamLoader->ChannelOpenFailed(); + streamLoader->ChannelOpenFailed(rv); SheetComplete(aLoadData, rv); return rv; } @@ -1513,19 +1514,19 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { securityFlags |= nsILoadInfo::SEC_ALLOW_CHROME; nsContentPolicyType contentPolicyType = - aLoadData.mIsPreload == IsPreload::Yes - ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD - : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET; + aLoadData.mIsPreload == IsPreload::No + ? nsIContentPolicy::TYPE_INTERNAL_STYLESHEET + : nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD; nsCOMPtr channel; // Note we are calling NS_NewChannelWithTriggeringPrincipal here with a node // and a principal. This is because of a case where the node is the document // being styled and the principal is the stylesheet (perhaps from a different // origin) that is applying the styles. - if (aLoadData.mRequestingNode && aLoadData.mLoaderPrincipal) { + if (aLoadData.mRequestingNode && aLoadData.mTriggeringPrincipal) { rv = NS_NewChannelWithTriggeringPrincipal( getter_AddRefs(channel), aLoadData.mURI, aLoadData.mRequestingNode, - aLoadData.mLoaderPrincipal, securityFlags, contentPolicyType, + aLoadData.mTriggeringPrincipal, securityFlags, contentPolicyType, /* PerformanceStorage */ nullptr, loadGroup); } else { // either we are loading something inside a document, in which case @@ -1561,6 +1562,10 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { if (nsCOMPtr cos = do_QueryInterface(channel)) { cos->AddClassFlags(nsIClassOfService::Leader); } + if (aLoadData.mIsPreload == IsPreload::FromLink) { + StreamLoader::PrioritizeAsPreload(channel); + StreamLoader::AddLoadBackgroundFlag(channel); + } } if (nsCOMPtr httpChannel = do_QueryInterface(channel)) { @@ -1634,10 +1639,16 @@ nsresult Loader::LoadSheet(SheetLoadData& aLoadData, SheetState aSheetState) { nsINetworkPredictor::LEARN_LOAD_SUBRESOURCE, mDocument); } + auto preloadKey = PreloadHashKey::CreateAsStyle(aLoadData); + streamLoader->NotifyOpen(&preloadKey, channel, mDocument, + aLoadData.mIsPreload == IsPreload::FromLink); + rv = channel->AsyncOpen(streamLoader); if (NS_FAILED(rv)) { LOG_ERROR((" Failed to create stream loader")); - streamLoader->ChannelOpenFailed(); + // ChannelOpenFailed makes sure that nodes will get the + // proper notification about not being able to load this resource. + streamLoader->ChannelOpenFailed(rv); SheetComplete(aLoadData, rv); return rv; } @@ -1901,6 +1912,7 @@ Result Loader::LoadInlineStyle( const SheetInfo& aInfo, const nsAString& aBuffer, uint32_t aLineNumber, nsICSSLoaderObserver* aObserver) { LOG(("css::Loader::LoadInlineStyle")); + MOZ_ASSERT(aInfo.mContent); if (!mEnabled) { LOG_WARN((" Not enabled")); @@ -1911,9 +1923,8 @@ Result Loader::LoadInlineStyle( return Err(NS_ERROR_NOT_INITIALIZED); } - nsCOMPtr owningElement( - do_QueryInterface(aInfo.mContent)); - NS_ASSERTION(owningElement, "Element is not a style linking element!"); + MOZ_ASSERT(LinkStyle::FromNodeOrNull(aInfo.mContent), + "Element is not a style linking element!"); // Since we're not planning to load a URI, no need to hand a principal to the // load data or to CreateSheet(). @@ -1974,7 +1985,7 @@ Result Loader::LoadInlineStyle( completed = Completed::Yes; } else { auto data = MakeRefPtr( - this, aInfo.mTitle, nullptr, sheet, false, owningElement, isAlternate, + this, aInfo.mTitle, nullptr, sheet, false, aInfo.mContent, isAlternate, matched, IsPreload::No, aObserver, nullptr, aInfo.mReferrerInfo, aInfo.mContent); data->mLineNumber = aLineNumber; @@ -2066,20 +2077,16 @@ Result Loader::LoadStyleLink( InsertSheetInTree(*sheet, aInfo.mContent); - nsCOMPtr owningElement( - do_QueryInterface(aInfo.mContent)); // We may get here with no content for Link: headers for example. - MOZ_ASSERT(!!owningElement == !!aInfo.mContent, - "If there is any node, it should be an " - "nsIStyleSheetLinkingElement"); - + MOZ_ASSERT(!aInfo.mContent || LinkStyle::FromNode(*aInfo.mContent), + "If there is any node, it should be a LinkStyle"); auto data = MakeRefPtr( - this, aInfo.mTitle, aInfo.mURI, sheet, syncLoad, owningElement, + this, aInfo.mTitle, aInfo.mURI, sheet, syncLoad, aInfo.mContent, isAlternate, matched, IsPreload::No, aObserver, principal, aInfo.mReferrerInfo, context); if (state == SheetState::Complete) { LOG((" Sheet already complete: 0x%p", sheet.get())); - if (aObserver || !mObservers.IsEmpty() || owningElement) { + if (aObserver || !mObservers.IsEmpty() || aInfo.mContent) { rv = PostLoadEvent(std::move(data)); if (NS_FAILED(rv)) { return Err(rv); @@ -2270,7 +2277,7 @@ Result, nsresult> Loader::LoadSheetSync( LOG(("css::Loader::LoadSheetSync")); nsCOMPtr referrerInfo = new ReferrerInfo(nullptr); return InternalLoadNonDocumentSheet( - aURL, IsPreload::No, aParsingMode, aUseSystemPrincipal, nullptr, nullptr, + aURL, IsPreload::No, aParsingMode, aUseSystemPrincipal, nullptr, referrerInfo, nullptr, CORS_NONE, EmptyString()); } @@ -2279,28 +2286,25 @@ Result, nsresult> Loader::LoadSheet( UseSystemPrincipal aUseSystemPrincipal, nsICSSLoaderObserver* aObserver) { nsCOMPtr referrerInfo = new ReferrerInfo(nullptr); return InternalLoadNonDocumentSheet( - aURI, IsPreload::No, aParsingMode, aUseSystemPrincipal, nullptr, nullptr, + aURI, IsPreload::No, aParsingMode, aUseSystemPrincipal, nullptr, referrerInfo, aObserver, CORS_NONE, EmptyString()); } Result, nsresult> Loader::LoadSheet( - nsIURI* aURL, IsPreload aIsPreload, nsIPrincipal* aOriginPrincipal, - const Encoding* aPreloadEncoding, nsIReferrerInfo* aReferrerInfo, - nsICSSLoaderObserver* aObserver, CORSMode aCORSMode, - const nsAString& aIntegrity) { + nsIURI* aURL, IsPreload aIsPreload, const Encoding* aPreloadEncoding, + nsIReferrerInfo* aReferrerInfo, nsICSSLoaderObserver* aObserver, + CORSMode aCORSMode, const nsAString& aIntegrity) { LOG(("css::Loader::LoadSheet(aURL, aObserver) api call")); - return InternalLoadNonDocumentSheet(aURL, aIsPreload, eAuthorSheetFeatures, - UseSystemPrincipal::No, aOriginPrincipal, - aPreloadEncoding, aReferrerInfo, - aObserver, aCORSMode, aIntegrity); + return InternalLoadNonDocumentSheet( + aURL, aIsPreload, eAuthorSheetFeatures, UseSystemPrincipal::No, + aPreloadEncoding, aReferrerInfo, aObserver, aCORSMode, aIntegrity); } Result, nsresult> Loader::InternalLoadNonDocumentSheet( nsIURI* aURL, IsPreload aIsPreload, SheetParsingMode aParsingMode, - UseSystemPrincipal aUseSystemPrincipal, nsIPrincipal* aOriginPrincipal, - const Encoding* aPreloadEncoding, nsIReferrerInfo* aReferrerInfo, - nsICSSLoaderObserver* aObserver, CORSMode aCORSMode, - const nsAString& aIntegrity) { + UseSystemPrincipal aUseSystemPrincipal, const Encoding* aPreloadEncoding, + nsIReferrerInfo* aReferrerInfo, nsICSSLoaderObserver* aObserver, + CORSMode aCORSMode, const nsAString& aIntegrity) { MOZ_ASSERT(aURL, "Must have a URI to load"); MOZ_ASSERT(aUseSystemPrincipal == UseSystemPrincipal::No || !aObserver, "Shouldn't load system-principal sheets async"); @@ -2314,8 +2318,8 @@ Result, nsresult> Loader::InternalLoadNonDocumentSheet( } nsCOMPtr loadingPrincipal = - (aOriginPrincipal && mDocument ? mDocument->NodePrincipal() : nullptr); - nsresult rv = CheckContentPolicy(loadingPrincipal, aOriginPrincipal, aURL, + mDocument ? mDocument->NodePrincipal() : nullptr; + nsresult rv = CheckContentPolicy(loadingPrincipal, loadingPrincipal, aURL, mDocument, EmptyString(), aIsPreload); if (NS_FAILED(rv)) { return Err(rv); @@ -2323,7 +2327,7 @@ Result, nsresult> Loader::InternalLoadNonDocumentSheet( bool syncLoad = !aObserver; auto [sheet, state] = - CreateSheet(aURL, nullptr, aOriginPrincipal, aParsingMode, aCORSMode, + CreateSheet(aURL, nullptr, loadingPrincipal, aParsingMode, aCORSMode, aReferrerInfo, aIntegrity, syncLoad, aIsPreload); PrepareSheet(*sheet, EmptyString(), EmptyString(), nullptr, IsAlternate::No, @@ -2331,7 +2335,7 @@ Result, nsresult> Loader::InternalLoadNonDocumentSheet( auto data = MakeRefPtr( this, aURL, sheet, syncLoad, aUseSystemPrincipal, aIsPreload, - aPreloadEncoding, aObserver, aOriginPrincipal, aReferrerInfo, mDocument); + aPreloadEncoding, aObserver, loadingPrincipal, aReferrerInfo, mDocument); if (state == SheetState::Complete) { LOG((" Sheet already complete")); if (aObserver || !mObservers.IsEmpty()) { diff --git a/layout/style/Loader.h b/layout/style/Loader.h index 3258b550c9..950696cd9f 100644 --- a/layout/style/Loader.h +++ b/layout/style/Loader.h @@ -12,6 +12,7 @@ #include "mozilla/Attributes.h" #include "mozilla/CORSMode.h" +#include "mozilla/dom/LinkStyle.h" #include "mozilla/Maybe.h" #include "mozilla/MemoryReporting.h" #include "mozilla/StyleSheet.h" @@ -21,7 +22,6 @@ #include "nsCycleCollectionParticipant.h" #include "nsDataHashtable.h" #include "nsIPrincipal.h" -#include "nsIStyleSheetLinkingElement.h" #include "nsRefPtrHashtable.h" #include "nsStringFwd.h" #include "nsTArray.h" @@ -89,14 +89,14 @@ class Loader final { using ReferrerPolicy = dom::ReferrerPolicy; public: - typedef nsIStyleSheetLinkingElement::Completed Completed; - typedef nsIStyleSheetLinkingElement::HasAlternateRel HasAlternateRel; - typedef nsIStyleSheetLinkingElement::IsAlternate IsAlternate; - typedef nsIStyleSheetLinkingElement::IsInline IsInline; - typedef nsIStyleSheetLinkingElement::IsExplicitlyEnabled IsExplicitlyEnabled; - typedef nsIStyleSheetLinkingElement::MediaMatched MediaMatched; - typedef nsIStyleSheetLinkingElement::Update LoadSheetResult; - typedef nsIStyleSheetLinkingElement::SheetInfo SheetInfo; + using Completed = dom::LinkStyle::Completed; + using HasAlternateRel = dom::LinkStyle::HasAlternateRel; + using IsAlternate = dom::LinkStyle::IsAlternate; + using IsInline = dom::LinkStyle::IsInline; + using IsExplicitlyEnabled = dom::LinkStyle::IsExplicitlyEnabled; + using MediaMatched = dom::LinkStyle::MediaMatched; + using LoadSheetResult = dom::LinkStyle::Update; + using SheetInfo = dom::LinkStyle::SheetInfo; Loader(); // aDocGroup is used for dispatching SheetLoadData in PostLoadEvent(). It @@ -205,7 +205,15 @@ class Loader final { nsIURI*, SheetParsingMode = eAuthorSheetFeatures, UseSystemPrincipal = UseSystemPrincipal::No); - enum class IsPreload : uint8_t { No, Yes }; + enum class IsPreload : uint8_t { + No, + // This is a speculative load initiated by a tag + // scanned by the parser, or @import rules found in a