Don't force restart renderer process for in-page navigation
This commit is contained in:
		
					parent
					
						
							
								40631edb70
							
						
					
				
			
			
				commit
				
					
						d1545a64ae
					
				
			
		
					 3 changed files with 19 additions and 0 deletions
				
			
		| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <set>
 | 
					#include <set>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "atom/browser/atom_browser_client.h"
 | 
				
			||||||
#include "atom/browser/atom_browser_context.h"
 | 
					#include "atom/browser/atom_browser_context.h"
 | 
				
			||||||
#include "atom/browser/atom_javascript_dialog_manager.h"
 | 
					#include "atom/browser/atom_javascript_dialog_manager.h"
 | 
				
			||||||
#include "atom/browser/native_window.h"
 | 
					#include "atom/browser/native_window.h"
 | 
				
			||||||
| 
						 | 
					@ -444,10 +445,12 @@ void WebContents::ReloadIgnoringCache() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebContents::GoBack() {
 | 
					void WebContents::GoBack() {
 | 
				
			||||||
 | 
					  atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
 | 
				
			||||||
  web_contents()->GetController().GoBack();
 | 
					  web_contents()->GetController().GoBack();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void WebContents::GoForward() {
 | 
					void WebContents::GoForward() {
 | 
				
			||||||
 | 
					  atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
 | 
				
			||||||
  web_contents()->GetController().GoForward();
 | 
					  web_contents()->GetController().GoForward();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,9 @@ namespace atom {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace {
 | 
					namespace {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Next navigation should not restart renderer process.
 | 
				
			||||||
 | 
					bool g_suppress_renderer_process_restart = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct FindByProcessId {
 | 
					struct FindByProcessId {
 | 
				
			||||||
  explicit FindByProcessId(int child_process_id)
 | 
					  explicit FindByProcessId(int child_process_id)
 | 
				
			||||||
      : child_process_id_(child_process_id) {
 | 
					      : child_process_id_(child_process_id) {
 | 
				
			||||||
| 
						 | 
					@ -51,6 +54,11 @@ struct FindByProcessId {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}  // namespace
 | 
					}  // namespace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// static
 | 
				
			||||||
 | 
					void AtomBrowserClient::SuppressRendererProcessRestartForOnce() {
 | 
				
			||||||
 | 
					  g_suppress_renderer_process_restart = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AtomBrowserClient::AtomBrowserClient()
 | 
					AtomBrowserClient::AtomBrowserClient()
 | 
				
			||||||
    : dying_render_process_(nullptr) {
 | 
					    : dying_render_process_(nullptr) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -131,6 +139,11 @@ void AtomBrowserClient::OverrideSiteInstanceForNavigation(
 | 
				
			||||||
    content::SiteInstance* current_instance,
 | 
					    content::SiteInstance* current_instance,
 | 
				
			||||||
    const GURL& url,
 | 
					    const GURL& url,
 | 
				
			||||||
    content::SiteInstance** new_instance) {
 | 
					    content::SiteInstance** new_instance) {
 | 
				
			||||||
 | 
					  if (g_suppress_renderer_process_restart) {
 | 
				
			||||||
 | 
					    g_suppress_renderer_process_restart = false;
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (current_instance->HasProcess())
 | 
					  if (current_instance->HasProcess())
 | 
				
			||||||
    dying_render_process_ = current_instance->GetProcess();
 | 
					    dying_render_process_ = current_instance->GetProcess();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,9 @@ class AtomBrowserClient : public brightray::BrowserClient {
 | 
				
			||||||
  AtomBrowserClient();
 | 
					  AtomBrowserClient();
 | 
				
			||||||
  virtual ~AtomBrowserClient();
 | 
					  virtual ~AtomBrowserClient();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Don't force renderer process to restart for once.
 | 
				
			||||||
 | 
					  static void SuppressRendererProcessRestartForOnce();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 protected:
 | 
					 protected:
 | 
				
			||||||
  // content::ContentBrowserClient:
 | 
					  // content::ContentBrowserClient:
 | 
				
			||||||
  void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
 | 
					  void RenderProcessWillLaunch(content::RenderProcessHost* host) override;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue