Implement cross process redirection in Http on the parent process

RESOLVED FIXED in Firefox 64

Status

()

enhancement
P3
normal
RESOLVED FIXED
10 months ago
9 months ago

People

(Reporter: mayhemer, Assigned: valentin)

Tracking

(Blocks 1 bug)

Trunk
mozilla64
Points:
---
Dependency tree / graph

Firefox Tracking Flags

(firefox63 wontfix, firefox64 fixed)

Details

(Whiteboard: [necko-triaged], )

Attachments

(1 attachment)

Reporter

Description

10 months ago
See the URL for details.

The idea is to ask for a new process at [1] or somewhere even sooner and register the channel for redirect to get the ID and then suspend it until it is connected from the new content process.

The connection should "just work" except that we need one more thing we don't do now - resume the channel.  

It's easy to add it, since parent connection for "normal redirect" happens before the channel's been open, so no harm done to Suspend() at somewhere around [2] and resume at maybe [3] every time.

[1] https://searchfox.org/mozilla-central/rev/6f86cc3479f80ace97f62634e2c82a483d1ede40/netwerk/protocol/http/HttpChannelParentListener.cpp#68
[2] https://searchfox.org/mozilla-central/rev/88199de427d3c5762b7f3c2a4860c10734abd867/netwerk/protocol/http/HttpChannelParent.cpp#1903
[3] https://searchfox.org/mozilla-central/rev/88199de427d3c5762b7f3c2a4860c10734abd867/netwerk/protocol/http/HttpChannelParent.cpp#789
Reporter

Updated

10 months ago
Depends on: 1476978
Assignee

Updated

10 months ago
Priority: -- → P3
Whiteboard: [necko-triaged]
This is a WIP patch that works.
It redirects a channel to a different content process.
See nsIRedirectProcessChooser.idl and browser_cross_process_redirect.js for the proposed API.
More work needs to go into setting all of the correct attributes on the childChannel, handling failures, and maybe supporting other types of redirects.
Assignee

Updated

9 months ago
Duplicate of this bug: 1476978
Comment on attachment 8998634 [details]
Bug 1476996 - Implement cross process redirection in Http on the parent process

:Nika Layzell (digging out of backlog) has approved the revision.
Attachment #8998634 - Flags: review+
Attachment #8998634 - Attachment description: Bug 1476996 - [WIP] Implement cross process redirection in Http on the parent process → Bug 1476996 - Implement cross process redirection in Http on the parent process
Comment on attachment 8998634 [details]
Bug 1476996 - Implement cross process redirection in Http on the parent process

Daniel Stenberg [:bagder] has approved the revision.
Attachment #8998634 - Flags: review+

Comment 9

9 months ago
Pushed by valentin.gosu@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/45605798ecfe
Implement cross process redirection in Http on the parent process r=bagder,nika

Comment 10

9 months ago
Backout by rgurzau@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/eb6516c0e7ef
Backed out changeset 45605798ecfe for build bustage at netwerk/protocol/http/HttpChannelParentListener.cpp on a CLOSED TREE
Backed out changeset 45605798ecfe (bug 1476996) for build bustage at netwerk/protocol/http/HttpChannelParentListener.cpp on a CLOSED TREE

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

Push with failures: https://treeherder.mozilla.org/#/jobs?repo=autoland&revision=45605798ecfe97742b9571c04cc151afe5426c19

Log link: https://treeherder.mozilla.org/logviewer.html#?job_id=197416303&repo=autoland&lineNumber=14240

Log snippet: 

[task 2018-09-04T17:29:09.546Z] 17:29:09     INFO -  mkdir -p '.deps/'
[task 2018-09-04T17:29:09.547Z] 17:29:09     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/peerconnection'
[task 2018-09-04T17:29:09.547Z] 17:29:09     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/peerconnection'
[task 2018-09-04T17:29:09.547Z] 17:29:09     INFO -  media/webrtc/signaling/src/peerconnection
[task 2018-09-04T17:29:09.548Z] 17:29:09     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/peerconnection'
[task 2018-09-04T17:29:09.548Z] 17:29:09     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/peerconnection'
[task 2018-09-04T17:29:09.548Z] 17:29:09     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/peerconnection'
[task 2018-09-04T17:29:09.556Z] 17:29:09     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:09.556Z] 17:29:09     INFO -  media/webrtc/signaling/src/mediapipeline
[task 2018-09-04T17:29:09.556Z] 17:29:09     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:09.563Z] 17:29:09     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:09.563Z] 17:29:09     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:10.228Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.228Z] 17:29:10     INFO -  /builds/worker/workspace/build/src/sccache2/sccache /builds/worker/workspace/build/src/clang/bin/clang++ --target=i686-linux-gnu -o UnifiedProtocols14.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 -DNDEBUG=1 -DTRIMMED=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/ipc/ipdl -I/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl -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/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 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Qunused-arguments -Wall -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++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -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 -march=pentium-m -msse -msse2 -mfpmath=sse -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -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 -O2 -fno-omit-frame-pointer -Werror -I/builds/worker/workspace/build/src/widget/gtk/compat-gtk3 -pthread -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/freetype2 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/usr/include/gtk-3.0/unix-print  -MD -MP -MF .deps/UnifiedProtocols14.o.pp   /builds/worker/workspace/build/src/obj-firefox/ipc/ipdl/UnifiedProtocols14.cpp
[task 2018-09-04T17:29:10.229Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.230Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.231Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.232Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.233Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.455Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:10.462Z] 17:29:10     INFO -  /builds/worker/workspace/build/src/sccache2/sccache /builds/worker/workspace/build/src/clang/bin/clang++ --target=i686-linux-gnu -o Unified_cpp_src_mediapipeline0.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 -DNDEBUG=1 -DTRIMMED=1 -DHAVE_UINT64_T -DWEBRTC_POSIX -DWEBRTC_BUILD_LIBEVENT -DWEBRTC_LINUX -DTRACING -DSTATIC_EXPORTABLE_JS_API -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -I/builds/worker/workspace/build/src/media/webrtc/signaling/src/mediapipeline -I/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline -I/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl/_ipdlheaders -I/builds/worker/workspace/build/src/dom/media -I/builds/worker/workspace/build/src/ipc/chromium/src -I/builds/worker/workspace/build/src/media/libyuv/libyuv/include -I/builds/worker/workspace/build/src/media/mtransport -I/builds/worker/workspace/build/src/media/webrtc -I/builds/worker/workspace/build/src/media/webrtc/signaling/src/media-conduit -I/builds/worker/workspace/build/src/media/webrtc/trunk -I/builds/worker/workspace/build/src/netwerk/srtp/src/crypto/include -I/builds/worker/workspace/build/src/netwerk/srtp/src/include -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 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Qunused-arguments -Wall -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++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -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 -march=pentium-m -msse -msse2 -mfpmath=sse -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -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 -O2 -fno-omit-frame-pointer -Werror -Wno-error=shadow  -MD -MP -MF .deps/Unified_cpp_src_mediapipeline0.o.pp   /builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline/Unified_cpp_src_mediapipeline0.cpp
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/media/webrtc/signaling/src/mediapipeline'
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http'
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -  /builds/worker/workspace/build/src/sccache2/sccache /builds/worker/workspace/build/src/clang/bin/clang++ --target=i686-linux-gnu -o Unified_cpp_protocol_http1.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 -DNDEBUG=1 -DTRIMMED=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/netwerk/base -I/builds/worker/workspace/build/src/netwerk/cookie -I/builds/worker/workspace/build/src/security/pkix/include -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 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Qunused-arguments -Wall -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++1z-compat -Wc++2a-compat -Wcomma -Wimplicit-fallthrough -Werror=non-literal-null-conversion -Wstring-conversion -Wtautological-overlap-compare -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -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 -march=pentium-m -msse -msse2 -mfpmath=sse -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -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 -O2 -fno-omit-frame-pointer -Werror  -MD -MP -MF .deps/Unified_cpp_protocol_http1.o.pp   /builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http/Unified_cpp_protocol_http1.cpp
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -  In file included from /builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http/Unified_cpp_protocol_http1.cpp:11:
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -  /builds/worker/workspace/build/src/netwerk/protocol/http/HttpChannelParentListener.cpp:213:18: error: unused variable 'result' [-Werror,-Wunused-variable]
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -              auto result = neckoParent->SendCrossProcessRedirect(self->mRedirectChannelId,
[task 2018-09-04T17:29:10.464Z] 17:29:10     INFO -                   ^
[task 2018-09-04T17:29:10.465Z] 17:29:10     INFO -  1 error generated.
[task 2018-09-04T17:29:10.465Z] 17:29:10     INFO -  /builds/worker/workspace/build/src/config/rules.mk:1110: recipe for target 'Unified_cpp_protocol_http1.o' failed
[task 2018-09-04T17:29:10.465Z] 17:29:10     INFO -  make[4]: *** [Unified_cpp_protocol_http1.o] Error 1
[task 2018-09-04T17:29:10.465Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/netwerk/protocol/http'
[task 2018-09-04T17:29:10.466Z] 17:29:10     INFO -  make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/ipc/ipdl'
[task 2018-09-04T17:29:10.466Z] 17:29:10     INFO -  make[4]: Leaving directory '/builds/worker/w
Flags: needinfo?(valentin.gosu)

Comment 13

9 months ago
Pushed by valentin.gosu@gmail.com:
https://hg.mozilla.org/integration/autoland/rev/417abd88f307
Implement cross process redirection in Http on the parent process r=bagder,nika
Assignee

Updated

9 months ago
Flags: needinfo?(valentin.gosu)
https://hg.mozilla.org/mozilla-central/rev/417abd88f307
Status: NEW → RESOLVED
Last Resolved: 9 months ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla64
Assignee

Updated

9 months ago
Duplicate of this bug: 1476988
You need to log in before you can comment on or make changes to this bug.