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