Browse Source

fix: handle a race condition between preload scripts executing and navigations (#17595)

There is a race condition between DidCreateScriptContext and another
navigation occuring in the main process. If the navigation occurs while
the preload script is running, the same process is re-used.  This
ensures that any pending navigations are completely removed / ignored
when we trigger a new navigation.

Fixes #17576
trop[bot] 6 years ago
parent
commit
7b11604435
1 changed files with 3 additions and 0 deletions
  1. 3 0
      atom/browser/api/atom_api_web_contents.cc

+ 3 - 0
atom/browser/api/atom_api_web_contents.cc

@@ -1150,6 +1150,9 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
   params.transition_type = ui::PAGE_TRANSITION_TYPED;
   params.should_clear_history_list = true;
   params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
+  // Discord non-committed entries to ensure that we don't re-use a pending
+  // entry
+  web_contents()->GetController().DiscardNonCommittedEntries();
   web_contents()->GetController().LoadURLWithParams(params);
 
   // Set the background color of RenderWidgetHostView.