Closed Bug 1598516 Opened 5 years ago Closed 4 years ago

Switch DocumentChannel to use a list of disallowed types

Categories

(Core :: Networking, enhancement, P2)

enhancement

Tracking

()

RESOLVED FIXED
mozilla73
Fission Milestone M4.1
Tracking Status
firefox73 --- fixed

People

(Reporter: mattwoodrow, Assigned: mattwoodrow)

References

Details

Crash Data

Attachments

(8 files)

DocumentChannel works for most protocols now, so we should enable as many as we can and use a list of types that we explicitly disallow instead.

Without DocumentChannel, nsExtProtocolChannel::OpenURL calls into nsExternalHelperAppService::LoadURI in the content process.
We then manually forward this to the parent process over PContent, create a RemoteWindowContext around the browser parent, and then call LoadURI again.

With DocumemntChannel, the nsExtProtocolChannel already lives in the parent, so we just need to provide a RemoteWindowContext directly (that the code accesses via GetInterface on the callbacks).

Depends on D54246

Previously this error occurred synchronously during AsyncOpen, and we handled it there.
With DocumentChannel we don't find out until it's handled in the parent, so the error is returned to the docshell via a failed status on the request.

Depends on D54247

Looks like this can sometimes fail with moz-extension URIs, so we shouldn't crash

Depends on D54248

Depends on D54249

Without DocumentChannel, we create the real channel in the content process, which fully resolves the URI and so tabbrowser can see this as the URI.

With DocumentChannel, we only create the real channel in the parent, so the initial onStateChange only has the provided URI (which is still about:<page>).

I'm not sure if this is the best fix though.

Other options:

  • Create a temporary real channel in DocumentChannelChild just to get the resolved URI correct.
  • Avoid firing onStateChange until DocumentChannel responds with the resolved URI.
  • Add a new way to resolve just the URI without creating a channel.

Depends on D54250

Fission Milestone: --- → M5

Changing to M4.1 because it blocks a M4.1 mochitests bug.

Fission Milestone: M5 → M4.1
Priority: P3 → P2
Attachment #9110753 - Attachment description: Bug 1598516 - Manually resolve about: URIs in the frontend. r?kmag,Gijs → Bug 1598516 - Remove isLocalAboutURI since all about: URIs are local. r?Gijs
Pushed by mwoodrow@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/b235cf22b0e4
Enable DocumentChannel for all protocols, except for list of known issues. r=kmag
https://hg.mozilla.org/integration/autoland/rev/6ba74ff735ba
Expose a RemoteWindowContext on ParentChannelListener. r=mayhemer,kmag
https://hg.mozilla.org/integration/autoland/rev/72f2256ae171
Handle malformed uri load error with an error page. r=kmag
https://hg.mozilla.org/integration/autoland/rev/e19ada9e8b30
Don't crash if NS_NewChannelInternal fails. r=mayhemer
https://hg.mozilla.org/integration/autoland/rev/894aaa4bc62e
Add DocumentChannel MOZ_LOGs. r=jya
https://hg.mozilla.org/integration/autoland/rev/63a84cdfd937
Remove isLocalAboutURI since all about: URIs are local. r=Gijs
Blocks: 1596932
Pushed by mwoodrow@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/943b440179b9
Enable DocumentChannel for all protocols, except for list of known issues. r=kmag
https://hg.mozilla.org/integration/autoland/rev/b664c8af6e2d
Expose a RemoteWindowContext on ParentChannelListener. r=mayhemer,kmag
https://hg.mozilla.org/integration/autoland/rev/1dc19a039cab
Handle malformed uri load error with an error page. r=kmag
https://hg.mozilla.org/integration/autoland/rev/0a0f80b0b278
Don't crash if NS_NewChannelInternal fails. r=mayhemer
https://hg.mozilla.org/integration/autoland/rev/cc2599921b5e
Add DocumentChannel MOZ_LOGs. r=jya
https://hg.mozilla.org/integration/autoland/rev/e48c0ce38498
Remove isLocalAboutURI since all about: URIs are local. r=Gijs
https://hg.mozilla.org/integration/autoland/rev/b62c5b49b91c
Make Quitter extension retry sending the quit message in case the background script wasn't ready yet. r=mixedpuppy
https://hg.mozilla.org/integration/autoland/rev/7ac1b091aa5f
Don't run extension iframes in their own process. r=kmag

Backed out 8 changesets (bug 1598516) for build bustage at ParentChannelListener.cpp on a CLOSED TREE.

Backout link: https://hg.mozilla.org/integration/autoland/rev/dd7bf37dadb0f64904181900a3861d4424c9c32e

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed%2Cbusted%2Cexception&revision=7ac1b091aa5f91ddfac46ecdfdf3f14a2e5540d0&selectedJob=279401156

Log link: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=279401156&repo=autoland&lineNumber=18869

Log snippet:

[task 2019-12-03T19:44:49.673Z] 19:44:49 INFO - media/webrtc/signaling/src/sdp/RsdparsaSdp.o
[task 2019-12-03T19:44:49.673Z] 19:44:49 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/sdp'
[task 2019-12-03T19:44:49.688Z] 19:44:49 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/gtest'
[task 2019-12-03T19:44:49.688Z] 19:44:49 INFO - media/webrtc/signaling/gtest/rtpsources_unittests.o
[task 2019-12-03T19:44:49.688Z] 19:44:49 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/gtest'
[task 2019-12-03T19:44:49.809Z] 19:44:49 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http'
[task 2019-12-03T19:44:49.811Z] 19:44:49 INFO - /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang++ -std=gnu++17 -m32 -o Unified_cpp_protocol_http2.o -c -I/builds/worker/workspace/build/src/obj-firefox/dist/stl_wrappers -I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers -include /builds/worker/workspace/build/src/config/gcc_hidden.h -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -DDEBUG=1 -DOS_POSIX=1 -DOS_LINUX=1 -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -I/builds/worker/workspace/build/src/netwerk/protocol/http -I/builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http -I/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl/_ipdlheaders -I/builds/worker/workspace/build/src/ipc/chromium/src -I/builds/worker/workspace/build/src/ipc/glue -I/builds/worker/workspace/build/src/dom/base -I/builds/worker/workspace/build/src/extensions/auth -I/builds/worker/workspace/build/src/netwerk/base -I/builds/worker/workspace/build/src/netwerk/cookie -I/builds/worker/workspace/build/src/netwerk/ipc -I/builds/worker/workspace/build/src/netwerk/socket/neqo_glue -I/builds/worker/workspace/build/src/netwerk/url-classifier -I/builds/worker/workspace/build/src/obj-firefox/dist/include -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr -I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss -fPIC -DMOZILLA_CLIENT -include /builds/worker/workspace/build/src/obj-firefox/mozilla-config.h -Qunused-arguments -Qunused-arguments -Wall -Wbitfield-enum-conversion -Wempty-body -Wignored-qualifiers -Woverloaded-virtual -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtype-limits -Wunreachable-code -Wunreachable-code-return -Wwrite-strings -Wno-invalid-offsetof -Wclass-varargs -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wtautological-unsigned-enum-zero-compare -Wtautological-unsigned-zero-compare -Wno-error=tautological-type-limit-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=backend-plugin -Wno-error=return-std-move -Wno-error=atomic-alignment -Wformat -Wformat-security -Wno-gnu-zero-variadic-macro-arguments -Wno-unknown-warning-option -Wno-return-type-c-linkage -D_GLIBCXX_USE_CXX11_ABI=0 -fno-sized-deallocation -fno-aligned-new -fcrash-diagnostics-dir=/builds/worker/artifacts -march=pentium-m -msse -msse2 -mfpmath=sse -fno-exceptions -fno-strict-aliasing -fno-rtti -ffunction-sections -fdata-sections -fno-exceptions -fno-math-errno -pthread -pipe -g -Xclang -load -Xclang /builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -Os -fno-omit-frame-pointer -funwind-tables -Werror -MD -MP -MF .deps/Unified_cpp_protocol_http2.o.pp Unified_cpp_protocol_http2.cpp
[task 2019-12-03T19:44:49.811Z] 19:44:49 INFO - In file included from Unified_cpp_protocol_http2.cpp:11:
[task 2019-12-03T19:44:49.812Z] 19:44:49 ERROR - /builds/worker/workspace/build/src/netwerk/protocol/http/ParentChannelListener.cpp:163:13: error: unknown type name 'RemoteWindowContext'; did you mean 'dom::RemoteWindowContext'?
[task 2019-12-03T19:44:49.812Z] 19:44:49 INFO - new RemoteWindowContext(mBrowserParent));
[task 2019-12-03T19:44:49.813Z] 19:44:49 INFO - ^~~~~~~~~~~~~~~~~~~
[task 2019-12-03T19:44:49.813Z] 19:44:49 INFO - dom::RemoteWindowContext
[task 2019-12-03T19:44:49.813Z] 19:44:49 INFO - /builds/worker/workspace/build/src/obj-firefox/dist/include/mozilla/dom/ContentParent.h:1415:7: note: 'dom::RemoteWindowContext' declared here
[task 2019-12-03T19:44:49.814Z] 19:44:49 INFO - class RemoteWindowContext final : public nsIRemoteWindowContext,
[task 2019-12-03T19:44:49.814Z] 19:44:49 INFO - ^
[task 2019-12-03T19:44:49.814Z] 19:44:49 INFO - 1 error generated.
[task 2019-12-03T19:44:49.815Z] 19:44:49 INFO - /builds/worker/workspace/build/src/config/rules.mk:804: recipe for target 'Unified_cpp_protocol_http2.o' failed
[task 2019-12-03T19:44:49.815Z] 19:44:49 ERROR - make[4]: *** [Unified_cpp_protocol_http2.o] Error 1
[task 2019-12-03T19:44:49.815Z] 19:44:49 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http'
[task 2019-12-03T19:44:49.815Z] 19:44:49 INFO - /builds/worker/workspace/build/src/config/recurse.mk:74: recipe for target 'netwerk/protocol/http/target-objects' failed
[task 2019-12-03T19:44:49.816Z] 19:44:49 ERROR - make[3]: *** [netwerk/protocol/http/target-objects] Error 2
[task 2019-12-03T19:44:49.816Z] 19:44:49 INFO - make[3]: *** Waiting for unfinished jobs....
[task 2019-12-03T19:44:49.816Z] 19:44:49 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/gtest'
[task 2019-12-03T19:44:49.816Z] 19:44:49 INFO - media/webrtc/signaling/gtest/sdp_unittests.o

Pushed by mwoodrow@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/bf370938463e
Enable DocumentChannel for all protocols, except for list of known issues. r=kmag
https://hg.mozilla.org/integration/autoland/rev/74d136798dd3
Expose a RemoteWindowContext on ParentChannelListener. r=mayhemer,kmag
https://hg.mozilla.org/integration/autoland/rev/b6f84b01cbd9
Handle malformed uri load error with an error page. r=kmag
https://hg.mozilla.org/integration/autoland/rev/76b86080c868
Don't crash if NS_NewChannelInternal fails. r=mayhemer
https://hg.mozilla.org/integration/autoland/rev/4e269a638350
Add DocumentChannel MOZ_LOGs. r=jya
https://hg.mozilla.org/integration/autoland/rev/31c11dd9146d
Remove isLocalAboutURI since all about: URIs are local. r=Gijs
https://hg.mozilla.org/integration/autoland/rev/33603b723337
Make Quitter extension retry sending the quit message in case the background script wasn't ready yet. r=mixedpuppy
https://hg.mozilla.org/integration/autoland/rev/bc0035aa57fe
Don't run extension iframes in their own process. r=kmag

Backed out 8 changesets (Bug 1598516) for run startup hangs

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&searchStr=linux%2Crun&fromchange=d2f8a8875708e694346e9ec7b5d5d0761e3662ca&tochange=09111adf1bd1502668e50d0983afc0bc97b99694&selectedJob=279424792

Backout link: https://hg.mozilla.org/integration/autoland/rev/9cead615dadbd3652e527c97f05f55434415729a

Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=279424792&repo=autoland&lineNumber=310

[task 2019-12-03T21:29:09.584Z] Installing setuptools, pip, wheel...done.
[task 2019-12-03T21:29:10.597Z] running build_ext
[task 2019-12-03T21:29:10.597Z] building 'psutil._psutil_linux' extension
[task 2019-12-03T21:29:10.597Z] creating build
[task 2019-12-03T21:29:10.597Z] creating build/temp.linux-x86_64-2.7
[task 2019-12-03T21:29:10.597Z] creating build/temp.linux-x86_64-2.7/psutil
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=563 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_common.o
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=563 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_posix.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_posix.o
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=563 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o
[task 2019-12-03T21:29:10.597Z] creating build/lib.linux-x86_64-2.7
[task 2019-12-03T21:29:10.597Z] creating build/lib.linux-x86_64-2.7/psutil
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/psutil/_psutil_common.o build/temp.linux-x86_64-2.7/psutil/_psutil_posix.o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o -o build/lib.linux-x86_64-2.7/psutil/_psutil_linux.so
[task 2019-12-03T21:29:10.597Z] building 'psutil._psutil_posix' extension
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=563 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_common.o
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=563 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_posix.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_posix.o
[task 2019-12-03T21:29:10.597Z] x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-2.7.13=. -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/psutil/_psutil_common.o build/temp.linux-x86_64-2.7/psutil/_psutil_posix.o -o build/lib.linux-x86_64-2.7/psutil/_psutil_posix.so
[task 2019-12-03T21:29:10.597Z] copying build/lib.linux-x86_64-2.7/psutil/_psutil_linux.so -> psutil
[task 2019-12-03T21:29:10.597Z] copying build/lib.linux-x86_64-2.7/psutil/_psutil_posix.so -> psutil
[task 2019-12-03T21:29:10.597Z]
[task 2019-12-03T21:29:10.597Z] Error processing command. Ignoring because optional. (optional:packages.txt:comm/build/virtualenv_packages.txt)
[taskcluster:error] Task timeout after 1200 seconds. Force killing container.
[taskcluster 2019-12-03 21:48:37.433Z] === Task Finished ===
[taskcluster 2019-12-03 21:48:37.434Z] Unsuccessful task run with exit code: -1 completed in 1218.749 seconds

Pushed by mwoodrow@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/9a9051421265
Enable DocumentChannel for all protocols, except for list of known issues. r=kmag
https://hg.mozilla.org/integration/autoland/rev/fd3b7af6c012
Expose a RemoteWindowContext on ParentChannelListener. r=mayhemer,kmag
https://hg.mozilla.org/integration/autoland/rev/3422602420a0
Handle malformed uri load error with an error page. r=kmag
https://hg.mozilla.org/integration/autoland/rev/dfb2624a9857
Don't crash if NS_NewChannelInternal fails. r=mayhemer
https://hg.mozilla.org/integration/autoland/rev/abece0ceac3d
Add DocumentChannel MOZ_LOGs. r=jya
https://hg.mozilla.org/integration/autoland/rev/dfee5b58e921
Remove isLocalAboutURI since all about: URIs are local. r=Gijs
https://hg.mozilla.org/integration/autoland/rev/e100ba2fc666
Make Quitter extension retry sending the quit message in case the background script wasn't ready yet. r=mixedpuppy
https://hg.mozilla.org/integration/autoland/rev/94663676950d
Don't run extension iframes in their own process. r=kmag
Crash Signature: [@ mozilla::dom::ContentChild::RecvCrossProcessRedirect]
Regressions: 1601959
Flags: needinfo?(matt.woodrow)
Regressions: 1601243
Regressions: 1601252
Blocks: 1217387
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: