Index: content/renderer/render_view_impl.cc |
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc |
index 56a719eb8be62f6cf566b47f515741e7ea1e2f46..6e63184eb339dabc683d04e198474d0fe8f328b3 100644 |
--- a/content/renderer/render_view_impl.cc |
+++ b/content/renderer/render_view_impl.cc |
@@ -766,15 +766,26 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) { |
main_render_frame_->set_render_frame_proxy(proxy); |
} |
+ bool is_site_per_process = |
+ CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess); |
+ |
// In --site-per-process, just use the WebRemoteFrame as the main frame. |
- if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess) && |
- proxy) { |
+ if (is_site_per_process && proxy) { |
webview()->setMainFrame(proxy->web_frame()); |
} else { |
webview()->setMainFrame(main_render_frame_->GetWebFrame()); |
} |
main_render_frame_->Initialize(); |
+ // In --site-per-process, the browser process passes us state replicated from |
+ // the process where this frame is being rendered. Use this to initialize |
+ // the remote frame's security origin. |
+ if (is_site_per_process && proxy) { |
+ proxy->web_frame()->setReplicatedOrigin( |
+ blink::WebURL(GURL(params->remote_frame_state.origin.string())), |
+ params->remote_frame_state.is_unique_origin); |
+ } |
+ |
if (switches::IsTouchDragDropEnabled()) |
webview()->settings()->setTouchDragDropEnabled(true); |
@@ -1142,7 +1153,8 @@ RenderViewImpl* RenderViewImpl::Create( |
bool hidden, |
bool never_visible, |
int32 next_page_id, |
- const blink::WebScreenInfo& screen_info) { |
+ const blink::WebScreenInfo& screen_info, |
+ const FrameReplicationState& remote_frame_state) { |
DCHECK(routing_id != MSG_ROUTING_NONE); |
RenderViewImplParams params(opener_id, |
window_was_created_with_opener, |
@@ -1159,7 +1171,8 @@ RenderViewImpl* RenderViewImpl::Create( |
hidden, |
never_visible, |
next_page_id, |
- screen_info); |
+ screen_info, |
+ remote_frame_state); |
RenderViewImpl* render_view = NULL; |
if (g_create_render_view_impl) |
render_view = g_create_render_view_impl(¶ms); |
@@ -1693,7 +1706,8 @@ WebView* RenderViewImpl::createView(WebLocalFrame* creator, |
params.disposition == NEW_BACKGROUND_TAB, // hidden |
never_visible, |
1, // next_page_id |
- screen_info_); |
+ screen_info_, |
+ FrameReplicationState()); // empty since swapped_out is false |
view->opened_by_user_gesture_ = params.user_gesture; |
// Record whether the creator frame is trying to suppress the opener field. |