| Index: content/browser/web_contents/web_contents_impl.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
|
| index 7872c6a68e5f6df3219eceb33d9eccea5bd1344b..c28815076c43b6d04d097b68a7aed22253c1f871 100644
|
| --- a/content/browser/web_contents/web_contents_impl.cc
|
| +++ b/content/browser/web_contents/web_contents_impl.cc
|
| @@ -135,6 +135,7 @@
|
| // it, but if so, the existing frame relationships will be maintained.
|
|
|
| using webkit_glue::WebPreferences;
|
| +using webkit_glue::ResourceRequestBody;
|
|
|
| namespace content {
|
| namespace {
|
| @@ -212,11 +213,8 @@ void MakeNavigateParams(const NavigationEntryImpl& entry,
|
| params->allow_download = !entry.IsViewSourceMode();
|
| params->is_post = entry.GetHasPostData();
|
| if(entry.GetBrowserInitiatedPostData()) {
|
| - params->browser_initiated_post_data.assign(
|
| - entry.GetBrowserInitiatedPostData()->front(),
|
| - entry.GetBrowserInitiatedPostData()->front() +
|
| - entry.GetBrowserInitiatedPostData()->size());
|
| -
|
| + params->browser_initiated_post_data =
|
| + entry.GetBrowserInitiatedPostData();
|
| }
|
|
|
| if (reload_type == NavigationControllerImpl::RELOAD_ORIGINAL_REQUEST_URL &&
|
| @@ -2884,12 +2882,15 @@ void WebContentsImpl::DocumentOnLoadCompletedInMainFrame(
|
| Details<int>(&page_id));
|
| }
|
|
|
| -void WebContentsImpl::RequestOpenURL(RenderViewHost* rvh,
|
| - const GURL& url,
|
| - const Referrer& referrer,
|
| - WindowOpenDisposition disposition,
|
| - int64 source_frame_id,
|
| - bool is_cross_site_redirect) {
|
| +void WebContentsImpl::RequestOpenURL(
|
| + RenderViewHost* rvh,
|
| + const GURL& url,
|
| + const Referrer& referrer,
|
| + WindowOpenDisposition disposition,
|
| + int64 source_frame_id,
|
| + bool is_cross_site_redirect,
|
| + std::string extra_header,
|
| + scoped_refptr<ResourceRequestBody> request_body) {
|
| // If this came from a swapped out RenderViewHost, we only allow the request
|
| // if we are still in the same BrowsingInstance.
|
| if (static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out() &&
|
| @@ -2900,7 +2901,8 @@ void WebContentsImpl::RequestOpenURL(RenderViewHost* rvh,
|
| // Delegate to RequestTransferURL because this is just the generic
|
| // case where |old_request_id| is empty.
|
| RequestTransferURL(url, referrer, disposition, source_frame_id,
|
| - GlobalRequestID(), is_cross_site_redirect);
|
| + GlobalRequestID(), is_cross_site_redirect,
|
| + extra_header, request_body);
|
| }
|
|
|
| void WebContentsImpl::RequestTransferURL(
|
| @@ -2909,7 +2911,9 @@ void WebContentsImpl::RequestTransferURL(
|
| WindowOpenDisposition disposition,
|
| int64 source_frame_id,
|
| const GlobalRequestID& old_request_id,
|
| - bool is_cross_site_redirect) {
|
| + bool is_cross_site_redirect,
|
| + std::string extra_header,
|
| + scoped_refptr<ResourceRequestBody> request_body) {
|
| WebContents* new_contents = NULL;
|
| PageTransition transition_type = PAGE_TRANSITION_LINK;
|
| if (render_manager_.web_ui()) {
|
| @@ -2932,6 +2936,11 @@ void WebContentsImpl::RequestTransferURL(
|
| PAGE_TRANSITION_LINK, true /* is_renderer_initiated */);
|
| params.transferred_global_request_id = old_request_id;
|
| params.is_cross_site_redirect = is_cross_site_redirect;
|
| + if (request_body) {
|
| + params.transition = content::PAGE_TRANSITION_FORM_SUBMIT;
|
| + params.extra_headers = extra_header;
|
| + params.browser_initiated_post_data = request_body;
|
| + }
|
| new_contents = OpenURL(params);
|
| }
|
| if (new_contents) {
|
|
|