| 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 1110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1121 frame->reload(ignore_cache); | 1121 frame->reload(ignore_cache); |
| 1122 } else if (is_history_navigation) { | 1122 } else if (is_history_navigation) { |
| 1123 // We must know the page ID of the page we are navigating back to. | 1123 // We must know the page ID of the page we are navigating back to. |
| 1124 DCHECK_NE(history_params.page_id, -1); | 1124 DCHECK_NE(history_params.page_id, -1); |
| 1125 scoped_ptr<HistoryEntry> entry = | 1125 scoped_ptr<HistoryEntry> entry = |
| 1126 PageStateToHistoryEntry(history_params.page_state); | 1126 PageStateToHistoryEntry(history_params.page_state); |
| 1127 if (entry) { | 1127 if (entry) { |
| 1128 // Ensure we didn't save the swapped out URL in UpdateState, since the | 1128 // Ensure we didn't save the swapped out URL in UpdateState, since the |
| 1129 // browser should never be telling us to navigate to swappedout://. | 1129 // browser should never be telling us to navigate to swappedout://. |
| 1130 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); | 1130 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); |
| 1131 render_view_->history_controller()->GoToEntry(entry.Pass(), cache_policy); | 1131 |
| 1132 // TODO(creis): Remove this HistoryEntry hack. We need it to find the |
| 1133 // frame sequence number when swapping a remote frame back to local. |
| 1134 RenderFrameProxy* proxy = |
| 1135 RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
| 1136 if (proxy) |
| 1137 HistoryEntry::UpdateFrameMap(proxy_routing_id_, routing_id_); |
| 1138 |
| 1139 // TODO(creis): Same vs different document load. |
| 1140 // TODO(creis): Change PageState to FrameState. In the meantime, we store |
| 1141 // the relevant frame's HistoryItem in the root of the PageState. |
| 1142 blink::WebHistoryItem history_item = entry->root(); |
| 1143 frame->loadHistoryItem(history_item, |
| 1144 blink::WebHistoryDifferentDocumentLoad, |
| 1145 cache_policy); |
| 1132 } | 1146 } |
| 1133 } else if (!common_params.base_url_for_data_url.is_empty()) { | 1147 } else if (!common_params.base_url_for_data_url.is_empty()) { |
| 1134 LoadDataURL(common_params, frame); | 1148 LoadDataURL(common_params, frame); |
| 1135 } else { | 1149 } else { |
| 1136 // Navigate to the given URL. | 1150 // Navigate to the given URL. |
| 1137 WebURLRequest request = CreateURLRequestForNavigation( | 1151 WebURLRequest request = CreateURLRequestForNavigation( |
| 1138 common_params, scoped_ptr<StreamOverrideParameters>(), | 1152 common_params, scoped_ptr<StreamOverrideParameters>(), |
| 1139 frame->isViewSourceModeEnabled()); | 1153 frame->isViewSourceModeEnabled()); |
| 1140 | 1154 |
| 1141 if (!start_params.extra_headers.empty()) { | 1155 if (!start_params.extra_headers.empty()) { |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1292 if (is_main_frame) | 1306 if (is_main_frame) |
| 1293 render_view_->suppress_dialogs_until_swap_out_ = false; | 1307 render_view_->suppress_dialogs_until_swap_out_ = false; |
| 1294 | 1308 |
| 1295 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); | 1309 Send(new FrameHostMsg_SwapOut_ACK(routing_id_)); |
| 1296 | 1310 |
| 1297 // Now that all of the cleanup is complete and the browser side is notified, | 1311 // Now that all of the cleanup is complete and the browser side is notified, |
| 1298 // start using the RenderFrameProxy, if one is created. | 1312 // start using the RenderFrameProxy, if one is created. |
| 1299 if (proxy) { | 1313 if (proxy) { |
| 1300 if (!is_main_frame) { | 1314 if (!is_main_frame) { |
| 1301 frame_->swap(proxy->web_frame()); | 1315 frame_->swap(proxy->web_frame()); |
| 1316 // TODO(creis): Remove this HistoryEntry hack. |
| 1317 HistoryEntry::UpdateFrameMap(routing_id_, proxy_routing_id); |
| 1302 | 1318 |
| 1303 if (is_loading) | 1319 if (is_loading) |
| 1304 proxy->OnDidStartLoading(); | 1320 proxy->OnDidStartLoading(); |
| 1305 | 1321 |
| 1306 if (is_site_per_process) { | 1322 if (is_site_per_process) { |
| 1307 // TODO(nasko): delete the frame here, since we've replaced it with a | 1323 // TODO(nasko): delete the frame here, since we've replaced it with a |
| 1308 // proxy. | 1324 // proxy. |
| 1309 } | 1325 } |
| 1310 } else { | 1326 } else { |
| 1311 set_render_frame_proxy(proxy); | 1327 set_render_frame_proxy(proxy); |
| (...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2528 | 2544 |
| 2529 if (internal_data->must_reset_scroll_and_scale_state()) { | 2545 if (internal_data->must_reset_scroll_and_scale_state()) { |
| 2530 render_view_->webview()->resetScrollAndScaleState(); | 2546 render_view_->webview()->resetScrollAndScaleState(); |
| 2531 internal_data->set_must_reset_scroll_and_scale_state(false); | 2547 internal_data->set_must_reset_scroll_and_scale_state(false); |
| 2532 } | 2548 } |
| 2533 internal_data->set_use_error_page(false); | 2549 internal_data->set_use_error_page(false); |
| 2534 | 2550 |
| 2535 bool is_new_navigation = commit_type == blink::WebStandardCommit; | 2551 bool is_new_navigation = commit_type == blink::WebStandardCommit; |
| 2536 if (is_new_navigation) { | 2552 if (is_new_navigation) { |
| 2537 // We bump our Page ID to correspond with the new session history entry. | 2553 // We bump our Page ID to correspond with the new session history entry. |
| 2538 render_view_->page_id_ = render_view_->next_page_id_++; | 2554 // TODO(creis): Update this. |
| 2555 //render_view_->page_id_ = render_view_->next_page_id_++; |
| 2556 render_view_->page_id_ = -1; |
| 2539 | 2557 |
| 2540 // Don't update history list values for kSwappedOutURL, since | 2558 // Don't update history list values for kSwappedOutURL, since |
| 2541 // we don't want to forget the entry that was there, and since we will | 2559 // we don't want to forget the entry that was there, and since we will |
| 2542 // never come back to kSwappedOutURL. Note that we have to call | 2560 // never come back to kSwappedOutURL. Note that we have to call |
| 2543 // UpdateSessionHistory and update page_id_ even in this case, so that | 2561 // UpdateSessionHistory and update page_id_ even in this case, so that |
| 2544 // the current entry gets a state update and so that we don't send a | 2562 // the current entry gets a state update and so that we don't send a |
| 2545 // state update to the wrong entry when we swap back in. | 2563 // state update to the wrong entry when we swap back in. |
| 2546 DCHECK_IMPLIES( | 2564 DCHECK_IMPLIES( |
| 2547 navigation_state->start_params().should_replace_current_entry, | 2565 navigation_state->start_params().should_replace_current_entry, |
| 2548 render_view_->history_list_length_ > 0); | 2566 render_view_->history_list_length_ > 0); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2598 } | 2616 } |
| 2599 } | 2617 } |
| 2600 | 2618 |
| 2601 // Remember that we've already processed this request, so we don't update | 2619 // Remember that we've already processed this request, so we don't update |
| 2602 // the session history again. We do this regardless of whether this is | 2620 // the session history again. We do this regardless of whether this is |
| 2603 // a session history navigation, because if we attempted a session history | 2621 // a session history navigation, because if we attempted a session history |
| 2604 // navigation without valid HistoryItem state, WebCore will think it is a | 2622 // navigation without valid HistoryItem state, WebCore will think it is a |
| 2605 // new navigation. | 2623 // new navigation. |
| 2606 navigation_state->set_request_committed(true); | 2624 navigation_state->set_request_committed(true); |
| 2607 | 2625 |
| 2608 SendDidCommitProvisionalLoad(frame, commit_type); | 2626 SendDidCommitProvisionalLoad(frame, commit_type, item); |
| 2609 | 2627 |
| 2610 // Check whether we have new encoding name. | 2628 // Check whether we have new encoding name. |
| 2611 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); | 2629 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); |
| 2612 } | 2630 } |
| 2613 | 2631 |
| 2614 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) { | 2632 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) { |
| 2615 DCHECK(!frame_ || frame_ == frame); | 2633 DCHECK(!frame_ || frame_ == frame); |
| 2616 | 2634 |
| 2617 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2635 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
| 2618 DidCreateNewDocument(frame)); | 2636 DidCreateNewDocument(frame)); |
| (...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3717 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); | 3735 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); |
| 3718 } | 3736 } |
| 3719 | 3737 |
| 3720 bool RenderFrameImpl::IsHidden() { | 3738 bool RenderFrameImpl::IsHidden() { |
| 3721 return GetRenderWidget()->is_hidden(); | 3739 return GetRenderWidget()->is_hidden(); |
| 3722 } | 3740 } |
| 3723 | 3741 |
| 3724 // Tell the embedding application that the URL of the active page has changed. | 3742 // Tell the embedding application that the URL of the active page has changed. |
| 3725 void RenderFrameImpl::SendDidCommitProvisionalLoad( | 3743 void RenderFrameImpl::SendDidCommitProvisionalLoad( |
| 3726 blink::WebFrame* frame, | 3744 blink::WebFrame* frame, |
| 3727 blink::WebHistoryCommitType commit_type) { | 3745 blink::WebHistoryCommitType commit_type, |
| 3746 const blink::WebHistoryItem& item) { |
| 3728 DCHECK(!frame_ || frame_ == frame); | 3747 DCHECK(!frame_ || frame_ == frame); |
| 3729 WebDataSource* ds = frame->dataSource(); | 3748 WebDataSource* ds = frame->dataSource(); |
| 3730 DCHECK(ds); | 3749 DCHECK(ds); |
| 3731 | 3750 |
| 3732 const WebURLRequest& request = ds->request(); | 3751 const WebURLRequest& request = ds->request(); |
| 3733 const WebURLResponse& response = ds->response(); | 3752 const WebURLResponse& response = ds->response(); |
| 3734 | 3753 |
| 3735 DocumentState* document_state = DocumentState::FromDataSource(ds); | 3754 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 3736 NavigationStateImpl* navigation_state = | 3755 NavigationStateImpl* navigation_state = |
| 3737 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | 3756 static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3783 | 3802 |
| 3784 params.searchable_form_url = internal_data->searchable_form_url(); | 3803 params.searchable_form_url = internal_data->searchable_form_url(); |
| 3785 params.searchable_form_encoding = internal_data->searchable_form_encoding(); | 3804 params.searchable_form_encoding = internal_data->searchable_form_encoding(); |
| 3786 | 3805 |
| 3787 params.gesture = render_view_->navigation_gesture_; | 3806 params.gesture = render_view_->navigation_gesture_; |
| 3788 render_view_->navigation_gesture_ = NavigationGestureUnknown; | 3807 render_view_->navigation_gesture_ = NavigationGestureUnknown; |
| 3789 | 3808 |
| 3790 // Make navigation state a part of the DidCommitProvisionalLoad message so | 3809 // Make navigation state a part of the DidCommitProvisionalLoad message so |
| 3791 // that committed entry has it at all times. | 3810 // that committed entry has it at all times. |
| 3792 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); | 3811 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); |
| 3793 if (entry) | 3812 // TODO(creis): Change PageState to FrameState. |
| 3794 params.page_state = HistoryEntryToPageState(entry); | 3813 params.page_state = SingleHistoryItemToPageState(item); |
| 3795 else | 3814 params.item_sequence_number = item.itemSequenceNumber(); |
| 3796 params.page_state = PageState::CreateFromURL(request.url()); | 3815 params.document_sequence_number = item.documentSequenceNumber(); |
| 3797 | 3816 |
| 3798 if (!frame->parent()) { | 3817 if (!frame->parent()) { |
| 3799 // Top-level navigation. | 3818 // Top-level navigation. |
| 3800 | 3819 |
| 3801 // Reset the zoom limits in case a plugin had changed them previously. This | 3820 // Reset the zoom limits in case a plugin had changed them previously. This |
| 3802 // will also call us back which will cause us to send a message to | 3821 // will also call us back which will cause us to send a message to |
| 3803 // update WebContentsImpl. | 3822 // update WebContentsImpl. |
| 3804 render_view_->webview()->zoomLimitsChanged( | 3823 render_view_->webview()->zoomLimitsChanged( |
| 3805 ZoomFactorToZoomLevel(kMinimumZoomFactor), | 3824 ZoomFactorToZoomLevel(kMinimumZoomFactor), |
| 3806 ZoomFactorToZoomLevel(kMaximumZoomFactor)); | 3825 ZoomFactorToZoomLevel(kMaximumZoomFactor)); |
| (...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4401 MaybeHandleDebugURL(url); | 4420 MaybeHandleDebugURL(url); |
| 4402 if (!render_view_->webview()) | 4421 if (!render_view_->webview()) |
| 4403 return false; | 4422 return false; |
| 4404 | 4423 |
| 4405 FOR_EACH_OBSERVER( | 4424 FOR_EACH_OBSERVER( |
| 4406 RenderViewObserver, render_view_->observers_, Navigate(url)); | 4425 RenderViewObserver, render_view_->observers_, Navigate(url)); |
| 4407 | 4426 |
| 4408 // If this is a stale back/forward (due to a recent navigation the browser | 4427 // If this is a stale back/forward (due to a recent navigation the browser |
| 4409 // didn't know about), ignore it. Only check if swapped in because if the | 4428 // didn't know about), ignore it. Only check if swapped in because if the |
| 4410 // frame is swapped out, it won't commit before asking the browser. | 4429 // frame is swapped out, it won't commit before asking the browser. |
| 4430 // TODO(creis): Make this check work for OOPIF. |
| 4411 if (!render_view_->is_swapped_out() && is_history_navigation && | 4431 if (!render_view_->is_swapped_out() && is_history_navigation && |
| 4412 render_view_->history_list_offset_ != | 4432 render_view_->history_list_offset_ != |
| 4413 history_params.current_history_list_offset) { | 4433 history_params.current_history_list_offset) { |
| 4414 return false; | 4434 return false; |
| 4415 } | 4435 } |
| 4416 | 4436 |
| 4417 render_view_->history_list_offset_ = | 4437 render_view_->history_list_offset_ = |
| 4418 history_params.current_history_list_offset; | 4438 history_params.current_history_list_offset; |
| 4419 render_view_->history_list_length_ = | 4439 render_view_->history_list_length_ = |
| 4420 history_params.current_history_list_length; | 4440 history_params.current_history_list_length; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4564 | 4584 |
| 4565 #if defined(ENABLE_BROWSER_CDMS) | 4585 #if defined(ENABLE_BROWSER_CDMS) |
| 4566 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 4586 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
| 4567 if (!cdm_manager_) | 4587 if (!cdm_manager_) |
| 4568 cdm_manager_ = new RendererCdmManager(this); | 4588 cdm_manager_ = new RendererCdmManager(this); |
| 4569 return cdm_manager_; | 4589 return cdm_manager_; |
| 4570 } | 4590 } |
| 4571 #endif // defined(ENABLE_BROWSER_CDMS) | 4591 #endif // defined(ENABLE_BROWSER_CDMS) |
| 4572 | 4592 |
| 4573 } // namespace content | 4593 } // namespace content |
| OLD | NEW |