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