| 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 2569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2580 } | 2580 } |
| 2581 } | 2581 } |
| 2582 | 2582 |
| 2583 // Remember that we've already processed this request, so we don't update | 2583 // Remember that we've already processed this request, so we don't update |
| 2584 // the session history again. We do this regardless of whether this is | 2584 // the session history again. We do this regardless of whether this is |
| 2585 // a session history navigation, because if we attempted a session history | 2585 // a session history navigation, because if we attempted a session history |
| 2586 // navigation without valid HistoryItem state, WebCore will think it is a | 2586 // navigation without valid HistoryItem state, WebCore will think it is a |
| 2587 // new navigation. | 2587 // new navigation. |
| 2588 navigation_state->set_request_committed(true); | 2588 navigation_state->set_request_committed(true); |
| 2589 | 2589 |
| 2590 SendDidCommitProvisionalLoad(frame); | 2590 SendDidCommitProvisionalLoad(frame, commit_type); |
| 2591 | 2591 |
| 2592 // Check whether we have new encoding name. | 2592 // Check whether we have new encoding name. |
| 2593 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); | 2593 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); |
| 2594 } | 2594 } |
| 2595 | 2595 |
| 2596 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) { | 2596 void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) { |
| 2597 DCHECK(!frame_ || frame_ == frame); | 2597 DCHECK(!frame_ || frame_ == frame); |
| 2598 | 2598 |
| 2599 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2599 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
| 2600 DidCreateNewDocument(frame)); | 2600 DidCreateNewDocument(frame)); |
| (...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3654 blink::WebPageVisibilityStateVisible, false); | 3654 blink::WebPageVisibilityStateVisible, false); |
| 3655 } | 3655 } |
| 3656 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); | 3656 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WasShown()); |
| 3657 } | 3657 } |
| 3658 | 3658 |
| 3659 bool RenderFrameImpl::IsHidden() { | 3659 bool RenderFrameImpl::IsHidden() { |
| 3660 return GetRenderWidget()->is_hidden(); | 3660 return GetRenderWidget()->is_hidden(); |
| 3661 } | 3661 } |
| 3662 | 3662 |
| 3663 // Tell the embedding application that the URL of the active page has changed. | 3663 // Tell the embedding application that the URL of the active page has changed. |
| 3664 void RenderFrameImpl::SendDidCommitProvisionalLoad(blink::WebFrame* frame) { | 3664 void RenderFrameImpl::SendDidCommitProvisionalLoad( |
| 3665 blink::WebFrame* frame, |
| 3666 blink::WebHistoryCommitType commit_type) { |
| 3665 DCHECK(!frame_ || frame_ == frame); | 3667 DCHECK(!frame_ || frame_ == frame); |
| 3666 WebDataSource* ds = frame->dataSource(); | 3668 WebDataSource* ds = frame->dataSource(); |
| 3667 DCHECK(ds); | 3669 DCHECK(ds); |
| 3668 | 3670 |
| 3669 const WebURLRequest& request = ds->request(); | 3671 const WebURLRequest& request = ds->request(); |
| 3670 const WebURLResponse& response = ds->response(); | 3672 const WebURLResponse& response = ds->response(); |
| 3671 | 3673 |
| 3672 DocumentState* document_state = DocumentState::FromDataSource(ds); | 3674 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 3673 NavigationState* navigation_state = document_state->navigation_state(); | 3675 NavigationState* navigation_state = document_state->navigation_state(); |
| 3674 InternalDocumentStateData* internal_data = | 3676 InternalDocumentStateData* internal_data = |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3717 params.should_update_history = !ds->hasUnreachableURL() && | 3719 params.should_update_history = !ds->hasUnreachableURL() && |
| 3718 !response.isMultipartPayload() && (response.httpStatusCode() != 404); | 3720 !response.isMultipartPayload() && (response.httpStatusCode() != 404); |
| 3719 | 3721 |
| 3720 params.searchable_form_url = internal_data->searchable_form_url(); | 3722 params.searchable_form_url = internal_data->searchable_form_url(); |
| 3721 params.searchable_form_encoding = internal_data->searchable_form_encoding(); | 3723 params.searchable_form_encoding = internal_data->searchable_form_encoding(); |
| 3722 | 3724 |
| 3723 params.gesture = render_view_->navigation_gesture_; | 3725 params.gesture = render_view_->navigation_gesture_; |
| 3724 render_view_->navigation_gesture_ = NavigationGestureUnknown; | 3726 render_view_->navigation_gesture_ = NavigationGestureUnknown; |
| 3725 | 3727 |
| 3726 // Make navigation state a part of the DidCommitProvisionalLoad message so | 3728 // Make navigation state a part of the DidCommitProvisionalLoad message so |
| 3727 // that commited entry has it at all times. | 3729 // that committed entry has it at all times. |
| 3728 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); | 3730 HistoryEntry* entry = render_view_->history_controller()->GetCurrentEntry(); |
| 3729 if (entry) | 3731 if (entry) |
| 3730 params.page_state = HistoryEntryToPageState(entry); | 3732 params.page_state = HistoryEntryToPageState(entry); |
| 3731 else | 3733 else |
| 3732 params.page_state = PageState::CreateFromURL(request.url()); | 3734 params.page_state = PageState::CreateFromURL(request.url()); |
| 3733 | 3735 |
| 3734 if (!frame->parent()) { | 3736 if (!frame->parent()) { |
| 3735 // Top-level navigation. | 3737 // Top-level navigation. |
| 3736 | 3738 |
| 3737 // Reset the zoom limits in case a plugin had changed them previously. This | 3739 // Reset the zoom limits in case a plugin had changed them previously. This |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3822 | 3824 |
| 3823 // This message needs to be sent before any of allowScripts(), | 3825 // This message needs to be sent before any of allowScripts(), |
| 3824 // allowImages(), allowPlugins() is called for the new page, so that when | 3826 // allowImages(), allowPlugins() is called for the new page, so that when |
| 3825 // these functions send a ViewHostMsg_ContentBlocked message, it arrives | 3827 // these functions send a ViewHostMsg_ContentBlocked message, it arrives |
| 3826 // after the FrameHostMsg_DidCommitProvisionalLoad message. | 3828 // after the FrameHostMsg_DidCommitProvisionalLoad message. |
| 3827 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3829 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
| 3828 } else { | 3830 } else { |
| 3829 // Subframe navigation: the type depends on whether this navigation | 3831 // Subframe navigation: the type depends on whether this navigation |
| 3830 // generated a new session history entry. When they do generate a session | 3832 // generated a new session history entry. When they do generate a session |
| 3831 // history entry, it means the user initiated the navigation and we should | 3833 // history entry, it means the user initiated the navigation and we should |
| 3832 // mark it as such. This test checks if this is the first time | 3834 // mark it as such. |
| 3833 // SendDidCommitProvisionalLoad has been called since WillNavigateToURL was | 3835 bool is_history_navigation = commit_type == blink::WebBackForwardCommit; |
| 3834 // called to initiate the load. | 3836 if (is_history_navigation || ds->replacesCurrentHistoryItem()) |
| 3835 if (render_view_->page_id_ > render_view_->last_page_id_sent_to_browser_) | 3837 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; |
| 3838 else |
| 3836 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; | 3839 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; |
| 3837 else | |
| 3838 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; | |
| 3839 | 3840 |
| 3840 DCHECK(!navigation_state->history_list_was_cleared()); | 3841 DCHECK(!navigation_state->history_list_was_cleared()); |
| 3841 params.history_list_was_cleared = false; | 3842 params.history_list_was_cleared = false; |
| 3842 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT; | 3843 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT; |
| 3843 | 3844 |
| 3844 // Don't send this message while the subframe is swapped out. | 3845 // Don't send this message while the subframe is swapped out. |
| 3845 if (!is_swapped_out()) | 3846 if (!is_swapped_out()) |
| 3846 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3847 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
| 3847 } | 3848 } |
| 3848 | 3849 |
| 3849 render_view_->last_page_id_sent_to_browser_ = | |
| 3850 std::max(render_view_->last_page_id_sent_to_browser_, | |
| 3851 render_view_->page_id_); | |
| 3852 | |
| 3853 // If we end up reusing this WebRequest (for example, due to a #ref click), | 3850 // If we end up reusing this WebRequest (for example, due to a #ref click), |
| 3854 // we don't want the transition type to persist. Just clear it. | 3851 // we don't want the transition type to persist. Just clear it. |
| 3855 navigation_state->set_transition_type(ui::PAGE_TRANSITION_LINK); | 3852 navigation_state->set_transition_type(ui::PAGE_TRANSITION_LINK); |
| 3856 } | 3853 } |
| 3857 | 3854 |
| 3858 void RenderFrameImpl::didStartLoading(bool to_different_document) { | 3855 void RenderFrameImpl::didStartLoading(bool to_different_document) { |
| 3859 TRACE_EVENT1("navigation", "RenderFrameImpl::didStartLoading", | 3856 TRACE_EVENT1("navigation", "RenderFrameImpl::didStartLoading", |
| 3860 "id", routing_id_); | 3857 "id", routing_id_); |
| 3861 render_view_->FrameDidStartLoading(frame_); | 3858 render_view_->FrameDidStartLoading(frame_); |
| 3862 Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document)); | 3859 Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document)); |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4477 | 4474 |
| 4478 #if defined(ENABLE_BROWSER_CDMS) | 4475 #if defined(ENABLE_BROWSER_CDMS) |
| 4479 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 4476 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
| 4480 if (!cdm_manager_) | 4477 if (!cdm_manager_) |
| 4481 cdm_manager_ = new RendererCdmManager(this); | 4478 cdm_manager_ = new RendererCdmManager(this); |
| 4482 return cdm_manager_; | 4479 return cdm_manager_; |
| 4483 } | 4480 } |
| 4484 #endif // defined(ENABLE_BROWSER_CDMS) | 4481 #endif // defined(ENABLE_BROWSER_CDMS) |
| 4485 | 4482 |
| 4486 } // namespace content | 4483 } // namespace content |
| OLD | NEW |