OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
620 CHECK(proxy); | 620 CHECK(proxy); |
621 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); | 621 render_frame = RenderFrameImpl::Create(proxy->render_view(), routing_id); |
622 web_frame = | 622 web_frame = |
623 blink::WebLocalFrame::create(replicated_state.scope, render_frame); | 623 blink::WebLocalFrame::create(replicated_state.scope, render_frame); |
624 render_frame->proxy_routing_id_ = proxy_routing_id; | 624 render_frame->proxy_routing_id_ = proxy_routing_id; |
625 web_frame->initializeToReplaceRemoteFrame( | 625 web_frame->initializeToReplaceRemoteFrame( |
626 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), | 626 proxy->web_frame(), WebString::fromUTF8(replicated_state.name), |
627 replicated_state.sandbox_flags); | 627 replicated_state.sandbox_flags); |
628 } | 628 } |
629 render_frame->SetWebFrame(web_frame); | 629 render_frame->SetWebFrame(web_frame); |
630 CHECK_IMPLIES(parent_routing_id == MSG_ROUTING_NONE, !web_frame->parent()); | 630 CHECK(parent_routing_id != MSG_ROUTING_NONE || !web_frame->parent()); |
631 | 631 |
632 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); | 632 WebFrame* opener = ResolveOpener(opener_routing_id, nullptr); |
633 web_frame->setOpener(opener); | 633 web_frame->setOpener(opener); |
634 | 634 |
635 if (widget_params.routing_id != MSG_ROUTING_NONE) { | 635 if (widget_params.routing_id != MSG_ROUTING_NONE) { |
636 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 636 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
637 render_frame->render_widget_ = RenderWidget::CreateForFrame( | 637 render_frame->render_widget_ = RenderWidget::CreateForFrame( |
638 widget_params.routing_id, widget_params.hidden, | 638 widget_params.routing_id, widget_params.hidden, |
639 render_frame->render_view_->screen_info(), compositor_deps, web_frame); | 639 render_frame->render_view_->screen_info(), compositor_deps, web_frame); |
640 // TODO(kenrb): Observing shouldn't be necessary when we sort out | 640 // TODO(kenrb): Observing shouldn't be necessary when we sort out |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1226 void RenderFrameImpl::OnSwapOut( | 1226 void RenderFrameImpl::OnSwapOut( |
1227 int proxy_routing_id, | 1227 int proxy_routing_id, |
1228 bool is_loading, | 1228 bool is_loading, |
1229 const FrameReplicationState& replicated_frame_state) { | 1229 const FrameReplicationState& replicated_frame_state) { |
1230 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); | 1230 TRACE_EVENT1("navigation", "RenderFrameImpl::OnSwapOut", "id", routing_id_); |
1231 RenderFrameProxy* proxy = NULL; | 1231 RenderFrameProxy* proxy = NULL; |
1232 bool swapped_out_forbidden = | 1232 bool swapped_out_forbidden = |
1233 SiteIsolationPolicy::IsSwappedOutStateForbidden(); | 1233 SiteIsolationPolicy::IsSwappedOutStateForbidden(); |
1234 | 1234 |
1235 // This codepath should only be hit for subframes when in --site-per-process. | 1235 // This codepath should only be hit for subframes when in --site-per-process. |
1236 CHECK_IMPLIES(!is_main_frame_, | 1236 CHECK(is_main_frame_ || SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
1237 SiteIsolationPolicy::AreCrossProcessFramesPossible()); | |
1238 | 1237 |
1239 // Only run unload if we're not swapped out yet, but send the ack either way. | 1238 // Only run unload if we're not swapped out yet, but send the ack either way. |
1240 if (!is_swapped_out_) { | 1239 if (!is_swapped_out_) { |
1241 // Swap this RenderFrame out so the frame can navigate to a page rendered by | 1240 // Swap this RenderFrame out so the frame can navigate to a page rendered by |
1242 // a different process. This involves running the unload handler and | 1241 // a different process. This involves running the unload handler and |
1243 // clearing the page. We also allow this process to exit if there are no | 1242 // clearing the page. We also allow this process to exit if there are no |
1244 // other active RenderFrames in it. | 1243 // other active RenderFrames in it. |
1245 | 1244 |
1246 // Send an UpdateState message before we get swapped out. | 1245 // Send an UpdateState message before we get swapped out. |
1247 render_view_->SendUpdateState(); | 1246 render_view_->SendUpdateState(); |
(...skipping 1399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2647 // callback is invoked. | 2646 // callback is invoked. |
2648 if (!ds) | 2647 if (!ds) |
2649 return; | 2648 return; |
2650 | 2649 |
2651 TRACE_EVENT2("navigation,benchmark", | 2650 TRACE_EVENT2("navigation,benchmark", |
2652 "RenderFrameImpl::didStartProvisionalLoad", "id", routing_id_, | 2651 "RenderFrameImpl::didStartProvisionalLoad", "id", routing_id_, |
2653 "url", ds->request().url().string().utf8()); | 2652 "url", ds->request().url().string().utf8()); |
2654 DocumentState* document_state = DocumentState::FromDataSource(ds); | 2653 DocumentState* document_state = DocumentState::FromDataSource(ds); |
2655 | 2654 |
2656 // We should only navigate to swappedout:// when is_swapped_out_ is true. | 2655 // We should only navigate to swappedout:// when is_swapped_out_ is true. |
2657 CHECK_IMPLIES(ds->request().url() == GURL(kSwappedOutURL), is_swapped_out_) | 2656 CHECK(ds->request().url() != GURL(kSwappedOutURL) || is_swapped_out_) |
2658 << "Heard swappedout:// when not swapped out."; | 2657 << "Heard swappedout:// when not swapped out."; |
2659 | 2658 |
2660 // Update the request time if WebKit has better knowledge of it. | 2659 // Update the request time if WebKit has better knowledge of it. |
2661 if (document_state->request_time().is_null() && | 2660 if (document_state->request_time().is_null() && |
2662 triggering_event_time != 0.0) { | 2661 triggering_event_time != 0.0) { |
2663 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); | 2662 document_state->set_request_time(Time::FromDoubleT(triggering_event_time)); |
2664 } | 2663 } |
2665 | 2664 |
2666 // Start time is only set after request time. | 2665 // Start time is only set after request time. |
2667 document_state->set_start_load_time(Time::Now()); | 2666 document_state->set_start_load_time(Time::Now()); |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2813 if (is_new_navigation) { | 2812 if (is_new_navigation) { |
2814 // We bump our Page ID to correspond with the new session history entry. | 2813 // We bump our Page ID to correspond with the new session history entry. |
2815 render_view_->page_id_ = render_view_->next_page_id_++; | 2814 render_view_->page_id_ = render_view_->next_page_id_++; |
2816 | 2815 |
2817 // Don't update history list values for kSwappedOutURL, since | 2816 // Don't update history list values for kSwappedOutURL, since |
2818 // we don't want to forget the entry that was there, and since we will | 2817 // we don't want to forget the entry that was there, and since we will |
2819 // never come back to kSwappedOutURL. Note that we have to call | 2818 // never come back to kSwappedOutURL. Note that we have to call |
2820 // SendUpdateState and update page_id_ even in this case, so that | 2819 // SendUpdateState and update page_id_ even in this case, so that |
2821 // the current entry gets a state update and so that we don't send a | 2820 // the current entry gets a state update and so that we don't send a |
2822 // state update to the wrong entry when we swap back in. | 2821 // state update to the wrong entry when we swap back in. |
2823 DCHECK_IMPLIES( | 2822 DCHECK(!navigation_state->common_params().should_replace_current_entry || |
2824 navigation_state->common_params().should_replace_current_entry, | 2823 render_view_->history_list_length_ > 0); |
2825 render_view_->history_list_length_ > 0); | |
2826 if (GetLoadingUrl() != GURL(kSwappedOutURL) && | 2824 if (GetLoadingUrl() != GURL(kSwappedOutURL) && |
2827 !navigation_state->common_params().should_replace_current_entry) { | 2825 !navigation_state->common_params().should_replace_current_entry) { |
2828 // Advance our offset in session history, applying the length limit. | 2826 // Advance our offset in session history, applying the length limit. |
2829 // There is now no forward history. | 2827 // There is now no forward history. |
2830 render_view_->history_list_offset_++; | 2828 render_view_->history_list_offset_++; |
2831 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries) | 2829 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries) |
2832 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1; | 2830 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1; |
2833 render_view_->history_list_length_ = | 2831 render_view_->history_list_length_ = |
2834 render_view_->history_list_offset_ + 1; | 2832 render_view_->history_list_offset_ + 1; |
2835 } | 2833 } |
(...skipping 2133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4969 } | 4967 } |
4970 | 4968 |
4971 // These values are assumed on the browser side for navigations. These checks | 4969 // These values are assumed on the browser side for navigations. These checks |
4972 // ensure the renderer has the correct values. | 4970 // ensure the renderer has the correct values. |
4973 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN, | 4971 DCHECK_EQ(FETCH_REQUEST_MODE_SAME_ORIGIN, |
4974 GetFetchRequestModeForWebURLRequest(*request)); | 4972 GetFetchRequestModeForWebURLRequest(*request)); |
4975 DCHECK_EQ(FETCH_CREDENTIALS_MODE_INCLUDE, | 4973 DCHECK_EQ(FETCH_CREDENTIALS_MODE_INCLUDE, |
4976 GetFetchCredentialsModeForWebURLRequest(*request)); | 4974 GetFetchCredentialsModeForWebURLRequest(*request)); |
4977 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) == | 4975 DCHECK(GetFetchRedirectModeForWebURLRequest(*request) == |
4978 FetchRedirectMode::MANUAL_MODE); | 4976 FetchRedirectMode::MANUAL_MODE); |
4979 DCHECK_IMPLIES(!frame_->parent(), | 4977 DCHECK(frame_->parent() || |
4980 GetRequestContextFrameTypeForWebURLRequest(*request) == | 4978 GetRequestContextFrameTypeForWebURLRequest(*request) == |
4981 REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); | 4979 REQUEST_CONTEXT_FRAME_TYPE_TOP_LEVEL); |
4982 DCHECK_IMPLIES(frame_->parent(), | 4980 DCHECK(!frame_->parent() || |
4983 GetRequestContextFrameTypeForWebURLRequest(*request) == | 4981 GetRequestContextFrameTypeForWebURLRequest(*request) == |
4984 REQUEST_CONTEXT_FRAME_TYPE_NESTED); | 4982 REQUEST_CONTEXT_FRAME_TYPE_NESTED); |
4985 | 4983 |
4986 Send(new FrameHostMsg_BeginNavigation( | 4984 Send(new FrameHostMsg_BeginNavigation( |
4987 routing_id_, | 4985 routing_id_, |
4988 MakeCommonNavigationParams(request, should_replace_current_entry), | 4986 MakeCommonNavigationParams(request, should_replace_current_entry), |
4989 BeginNavigationParams( | 4987 BeginNavigationParams( |
4990 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), | 4988 request->httpMethod().latin1(), GetWebURLRequestHeaders(*request), |
4991 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture(), | 4989 GetLoadFlagsForWebURLRequest(*request), request->hasUserGesture(), |
4992 request->skipServiceWorker(), | 4990 request->skipServiceWorker(), |
4993 GetRequestContextTypeForWebURLRequest(*request)), | 4991 GetRequestContextTypeForWebURLRequest(*request)), |
4994 GetRequestBodyForWebURLRequest(*request))); | 4992 GetRequestBodyForWebURLRequest(*request))); |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5251 mojo::ServiceProviderPtr service_provider; | 5249 mojo::ServiceProviderPtr service_provider; |
5252 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 5250 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
5253 request->url = mojo::String::From(url); | 5251 request->url = mojo::String::From(url); |
5254 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), | 5252 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), |
5255 nullptr, nullptr, | 5253 nullptr, nullptr, |
5256 base::Bind(&OnGotContentHandlerID)); | 5254 base::Bind(&OnGotContentHandlerID)); |
5257 return service_provider.Pass(); | 5255 return service_provider.Pass(); |
5258 } | 5256 } |
5259 | 5257 |
5260 } // namespace content | 5258 } // namespace content |
OLD | NEW |