1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Cheng Zhao <[email protected]>
- Date: Thu, 20 Sep 2018 17:45:03 -0700
- Subject: blink_local_frame.patch
- According to electron/electron#3699, it is unreliable to use |unload|
- event for process.exit('exit'), so we have to do that in
- willReleaseScriptContext.
- Refs changes in:
- * https://codereview.chromium.org/1657583002
- * https://chromium-review.googlesource.com/c/chromium/src/+/2596880
- * https://chromium-review.googlesource.com/c/chromium/src/+/2597169
- This patch reverts the changes to fix associated crashes in Electron.
- diff --git a/third_party/blink/renderer/core/frame/frame.cc b/third_party/blink/renderer/core/frame/frame.cc
- index 88bb66bd03b880f4e1e946a0fd1a31f512226db4..a100709c7b3bd0bcd5c9307e00f343aaf4c27620 100644
- --- a/third_party/blink/renderer/core/frame/frame.cc
- +++ b/third_party/blink/renderer/core/frame/frame.cc
- @@ -122,14 +122,6 @@ bool Frame::Detach(FrameDetachType type) {
-
- DCHECK(!IsDetached());
-
- - // TODO(dcheng): FocusController::FrameDetached() *should* fire JS events,
- - // hence the above check for `client_` being null. However, when this was
- - // previously placed before the `FrameDetached()` call, nothing crashes, which
- - // is suspicious. Investigate if we really don't need to fire JS events--and
- - // if we don't, move `forbid_scripts` up to be instantiated sooner and
- - // simplify this code.
- - ScriptForbiddenScope forbid_scripts;
- -
- if (type == FrameDetachType::kRemove) {
- if (provisional_frame_) {
- provisional_frame_->Detach(FrameDetachType::kRemove);
- @@ -152,6 +144,14 @@ bool Frame::Detach(FrameDetachType type) {
- GetWindowProxyManager()->ClearForSwap();
- }
-
- + // TODO(dcheng): FocusController::FrameDetached() *should* fire JS events,
- + // hence the above check for `client_` being null. However, when this was
- + // previously placed before the `FrameDetached()` call, nothing crashes, which
- + // is suspicious. Investigate if we really don't need to fire JS events--and
- + // if we don't, move `forbid_scripts` up to be instantiated sooner and
- + // simplify this code.
- + ScriptForbiddenScope forbid_scripts;
- +
- // After this, we must no longer talk to the client since this clears
- // its owning reference back to our owning LocalFrame.
- client_->Detached(type);
- diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
- index d02022a64426a47a568d438bd3d17ca63a3ac28f..f9817a21e00a66845138d321dd829ea1df39acb7 100644
- --- a/third_party/blink/renderer/core/frame/local_frame.cc
- +++ b/third_party/blink/renderer/core/frame/local_frame.cc
- @@ -531,10 +531,6 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
- }
- DCHECK(!view_ || !view_->IsAttached());
-
- - // This is the earliest that scripting can be disabled:
- - // - FrameLoader::Detach() can fire XHR abort events
- - // - Document::Shutdown() can dispose plugins which can run script.
- - ScriptForbiddenScope forbid_script;
- if (!Client())
- return false;
-
- @@ -580,6 +576,11 @@ bool LocalFrame::DetachImpl(FrameDetachType type) {
- DCHECK(!view_->IsAttached());
- Client()->WillBeDetached();
-
- + // This is the earliest that scripting can be disabled:
- + // - FrameLoader::Detach() can fire XHR abort events
- + // - Document::Shutdown() can dispose plugins which can run script.
- + ScriptForbiddenScope forbid_script;
- +
- // TODO(crbug.com/729196): Trace why LocalFrameView::DetachFromLayout crashes.
- CHECK(!view_->IsAttached());
- SetView(nullptr);
|