summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-16 18:31:53 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-16 18:31:53 +0000
commitc240acea944449e6e74e1462c93b6115b0d8c9be (patch)
tree7602f32c474f633162de138d0717b59cd90a671d
parent260efdab7eaf501d046a212dff5534ab8da48aab (diff)
downloadchromium_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.cc12
-rwxr-xr-xchrome/renderer/render_view.cc3
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.
}