diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-16 18:31:53 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-16 18:31:53 +0000 |
commit | c240acea944449e6e74e1462c93b6115b0d8c9be (patch) | |
tree | 7602f32c474f633162de138d0717b59cd90a671d | |
parent | 260efdab7eaf501d046a212dff5534ab8da48aab (diff) | |
download | chromium_src-c240acea944449e6e74e1462c93b6115b0d8c9be.zip chromium_src-c240acea944449e6e74e1462c93b6115b0d8c9be.tar.gz chromium_src-c240acea944449e6e74e1462c93b6115b0d8c9be.tar.bz2 |
Allow POST requests made from an extension process to reuse the same process,
even when navigating to an external URL. See bug for details.
BUG=39025
Review URL: http://codereview.chromium.org/2800005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49993 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/renderer_host/browser_render_process_host.cc | 12 | ||||
-rwxr-xr-x | chrome/renderer/render_view.cc | 3 |
2 files changed, 6 insertions, 9 deletions
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc index d6fb813..887c04a 100644 --- a/chrome/browser/renderer_host/browser_render_process_host.cc +++ b/chrome/browser/renderer_host/browser_render_process_host.cc @@ -251,16 +251,12 @@ bool BrowserRenderProcessHost::Init(bool is_extensions_process, URLRequestContextGetter* request_context) { // calling Init() more than once does nothing, this makes it more convenient // for the view host which may not be sure in some cases - if (channel_.get()) { - // Ensure that |is_extensions_process| doesn't change across multiple calls - // to Init(). - if (!run_renderer_in_process()) { - DCHECK_EQ(extension_process_, is_extensions_process); - } + if (channel_.get()) return true; - } - extension_process_ = is_extensions_process; + // It is possible for an extension process to be reused for non-extension + // content, e.g. if an extension calls window.open. + extension_process_ = extension_process_ || is_extensions_process; // run the IPC channel on the shared IO thread. base::Thread* io_thread = g_browser_process->io_thread(); diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 089e0f2..7d6b339 100755 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2414,6 +2414,7 @@ WebNavigationPolicy RenderView::decidePolicyForNavigation( // still allow that. if (default_policy == WebKit::WebNavigationPolicyCurrentTab && is_content_initiated && frame->parent() == NULL && + type != WebKit::WebNavigationTypeFormSubmitted && !url.SchemeIs(chrome::kAboutScheme)) { // When we received such unsolicited navigations, we sometimes want to // punt them up to the browser to handle. @@ -2431,7 +2432,7 @@ WebNavigationPolicy RenderView::decidePolicyForNavigation( // Note that we've already forwarded cross-extension extents navigations // above. if (BindingsPolicy::is_extension_enabled(enabled_bindings_) && - IsNonLocalTopLevelNavigation(url, frame, type)) { + IsNonLocalTopLevelNavigation(url, frame, type)) { OpenURL(url, GURL(), default_policy); return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. } |