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 1921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1932 | 1932 |
1933 void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame, | 1933 void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame, |
1934 const blink::WebFormElement& form) { | 1934 const blink::WebFormElement& form) { |
1935 DCHECK(!frame_ || frame_ == frame); | 1935 DCHECK(!frame_ || frame_ == frame); |
1936 DocumentState* document_state = | 1936 DocumentState* document_state = |
1937 DocumentState::FromDataSource(frame->provisionalDataSource()); | 1937 DocumentState::FromDataSource(frame->provisionalDataSource()); |
1938 NavigationState* navigation_state = document_state->navigation_state(); | 1938 NavigationState* navigation_state = document_state->navigation_state(); |
1939 InternalDocumentStateData* internal_data = | 1939 InternalDocumentStateData* internal_data = |
1940 InternalDocumentStateData::FromDocumentState(document_state); | 1940 InternalDocumentStateData::FromDocumentState(document_state); |
1941 | 1941 |
1942 if (PageTransitionCoreTypeIs(navigation_state->transition_type(), | 1942 if (ui::PageTransitionCoreTypeIs(navigation_state->transition_type(), |
1943 PAGE_TRANSITION_LINK)) { | 1943 ui::PAGE_TRANSITION_LINK)) { |
1944 navigation_state->set_transition_type(PAGE_TRANSITION_FORM_SUBMIT); | 1944 navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT); |
1945 } | 1945 } |
1946 | 1946 |
1947 // Save these to be processed when the ensuing navigation is committed. | 1947 // Save these to be processed when the ensuing navigation is committed. |
1948 WebSearchableFormData web_searchable_form_data(form); | 1948 WebSearchableFormData web_searchable_form_data(form); |
1949 internal_data->set_searchable_form_url(web_searchable_form_data.url()); | 1949 internal_data->set_searchable_form_url(web_searchable_form_data.url()); |
1950 internal_data->set_searchable_form_encoding( | 1950 internal_data->set_searchable_form_encoding( |
1951 web_searchable_form_data.encoding().utf8()); | 1951 web_searchable_form_data.encoding().utf8()); |
1952 | 1952 |
1953 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 1953 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
1954 WillSubmitForm(frame, form)); | 1954 WillSubmitForm(frame, form)); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2007 bool is_top_most = !frame->parent(); | 2007 bool is_top_most = !frame->parent(); |
2008 if (is_top_most) { | 2008 if (is_top_most) { |
2009 render_view_->set_navigation_gesture( | 2009 render_view_->set_navigation_gesture( |
2010 WebUserGestureIndicator::isProcessingUserGesture() ? | 2010 WebUserGestureIndicator::isProcessingUserGesture() ? |
2011 NavigationGestureUser : NavigationGestureAuto); | 2011 NavigationGestureUser : NavigationGestureAuto); |
2012 } else if (ds->replacesCurrentHistoryItem()) { | 2012 } else if (ds->replacesCurrentHistoryItem()) { |
2013 // Subframe navigations that don't add session history items must be | 2013 // Subframe navigations that don't add session history items must be |
2014 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we | 2014 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we |
2015 // handle loading of error pages. | 2015 // handle loading of error pages. |
2016 document_state->navigation_state()->set_transition_type( | 2016 document_state->navigation_state()->set_transition_type( |
2017 PAGE_TRANSITION_AUTO_SUBFRAME); | 2017 ui::PAGE_TRANSITION_AUTO_SUBFRAME); |
2018 } | 2018 } |
2019 | 2019 |
2020 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2020 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
2021 DidStartProvisionalLoad(frame)); | 2021 DidStartProvisionalLoad(frame)); |
2022 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); | 2022 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); |
2023 | 2023 |
2024 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 2024 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( |
2025 routing_id_, ds->request().url(), is_transition_navigation)); | 2025 routing_id_, ds->request().url(), is_transition_navigation)); |
2026 } | 2026 } |
2027 | 2027 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2121 // Otherwise, we do a normal load, which simulates a 'go' navigation as far | 2121 // Otherwise, we do a normal load, which simulates a 'go' navigation as far |
2122 // as session history is concerned. | 2122 // as session history is concerned. |
2123 // | 2123 // |
2124 // AUTO_SUBFRAME loads should always be treated as loads that do not advance | 2124 // AUTO_SUBFRAME loads should always be treated as loads that do not advance |
2125 // the page id. | 2125 // the page id. |
2126 // | 2126 // |
2127 // TODO(davidben): This should also take the failed navigation's replacement | 2127 // TODO(davidben): This should also take the failed navigation's replacement |
2128 // state into account, if a location.replace() failed. | 2128 // state into account, if a location.replace() failed. |
2129 bool replace = | 2129 bool replace = |
2130 navigation_state->pending_page_id() != -1 || | 2130 navigation_state->pending_page_id() != -1 || |
2131 PageTransitionCoreTypeIs(navigation_state->transition_type(), | 2131 ui::PageTransitionCoreTypeIs(navigation_state->transition_type(), |
2132 PAGE_TRANSITION_AUTO_SUBFRAME); | 2132 ui::PAGE_TRANSITION_AUTO_SUBFRAME); |
2133 | 2133 |
2134 // If we failed on a browser initiated request, then make sure that our error | 2134 // If we failed on a browser initiated request, then make sure that our error |
2135 // page load is regarded as the same browser initiated request. | 2135 // page load is regarded as the same browser initiated request. |
2136 if (!navigation_state->is_content_initiated()) { | 2136 if (!navigation_state->is_content_initiated()) { |
2137 render_view_->pending_navigation_params_.reset( | 2137 render_view_->pending_navigation_params_.reset( |
2138 new FrameMsg_Navigate_Params); | 2138 new FrameMsg_Navigate_Params); |
2139 render_view_->pending_navigation_params_->page_id = | 2139 render_view_->pending_navigation_params_->page_id = |
2140 navigation_state->pending_page_id(); | 2140 navigation_state->pending_page_id(); |
2141 render_view_->pending_navigation_params_->pending_history_list_offset = | 2141 render_view_->pending_navigation_params_->pending_history_list_offset = |
2142 navigation_state->pending_history_list_offset(); | 2142 navigation_state->pending_history_list_offset(); |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2640 // TODO(nasko): Hack around asking about top-frame data source. This means | 2640 // TODO(nasko): Hack around asking about top-frame data source. This means |
2641 // for out-of-process iframes we are treating the current frame as the | 2641 // for out-of-process iframes we are treating the current frame as the |
2642 // top-level frame, which is wrong. | 2642 // top-level frame, which is wrong. |
2643 if (!top_frame || top_frame->isWebRemoteFrame()) | 2643 if (!top_frame || top_frame->isWebRemoteFrame()) |
2644 top_frame = frame; | 2644 top_frame = frame; |
2645 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); | 2645 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); |
2646 WebDataSource* top_data_source = top_frame->dataSource(); | 2646 WebDataSource* top_data_source = top_frame->dataSource(); |
2647 WebDataSource* data_source = | 2647 WebDataSource* data_source = |
2648 provisional_data_source ? provisional_data_source : top_data_source; | 2648 provisional_data_source ? provisional_data_source : top_data_source; |
2649 | 2649 |
2650 PageTransition transition_type = PAGE_TRANSITION_LINK; | 2650 ui::PageTransition transition_type = ui::PAGE_TRANSITION_LINK; |
2651 DocumentState* document_state = DocumentState::FromDataSource(data_source); | 2651 DocumentState* document_state = DocumentState::FromDataSource(data_source); |
2652 DCHECK(document_state); | 2652 DCHECK(document_state); |
2653 InternalDocumentStateData* internal_data = | 2653 InternalDocumentStateData* internal_data = |
2654 InternalDocumentStateData::FromDocumentState(document_state); | 2654 InternalDocumentStateData::FromDocumentState(document_state); |
2655 NavigationState* navigation_state = document_state->navigation_state(); | 2655 NavigationState* navigation_state = document_state->navigation_state(); |
2656 transition_type = navigation_state->transition_type(); | 2656 transition_type = navigation_state->transition_type(); |
2657 | 2657 |
2658 GURL request_url(request.url()); | 2658 GURL request_url(request.url()); |
2659 GURL new_url; | 2659 GURL new_url; |
2660 if (GetContentClient()->renderer()->WillSendRequest( | 2660 if (GetContentClient()->renderer()->WillSendRequest( |
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3352 // This zoom level was merely recorded transiently for this load. We can | 3352 // This zoom level was merely recorded transiently for this load. We can |
3353 // erase it now. If at some point we reload this page, the browser will | 3353 // erase it now. If at some point we reload this page, the browser will |
3354 // send us a new, up-to-date zoom level. | 3354 // send us a new, up-to-date zoom level. |
3355 render_view_->host_zoom_levels_.erase(host_zoom); | 3355 render_view_->host_zoom_levels_.erase(host_zoom); |
3356 } | 3356 } |
3357 | 3357 |
3358 // Update contents MIME type for main frame. | 3358 // Update contents MIME type for main frame. |
3359 params.contents_mime_type = ds->response().mimeType().utf8(); | 3359 params.contents_mime_type = ds->response().mimeType().utf8(); |
3360 | 3360 |
3361 params.transition = navigation_state->transition_type(); | 3361 params.transition = navigation_state->transition_type(); |
3362 if (!PageTransitionIsMainFrame(params.transition)) { | 3362 if (!ui::PageTransitionIsMainFrame(params.transition)) { |
3363 // If the main frame does a load, it should not be reported as a subframe | 3363 // If the main frame does a load, it should not be reported as a subframe |
3364 // navigation. This can occur in the following case: | 3364 // navigation. This can occur in the following case: |
3365 // 1. You're on a site with frames. | 3365 // 1. You're on a site with frames. |
3366 // 2. You do a subframe navigation. This is stored with transition type | 3366 // 2. You do a subframe navigation. This is stored with transition type |
3367 // MANUAL_SUBFRAME. | 3367 // MANUAL_SUBFRAME. |
3368 // 3. You navigate to some non-frame site, say, google.com. | 3368 // 3. You navigate to some non-frame site, say, google.com. |
3369 // 4. You navigate back to the page from step 2. Since it was initially | 3369 // 4. You navigate back to the page from step 2. Since it was initially |
3370 // MANUAL_SUBFRAME, it will be that same transition type here. | 3370 // MANUAL_SUBFRAME, it will be that same transition type here. |
3371 // We don't want that, because any navigation that changes the toplevel | 3371 // We don't want that, because any navigation that changes the toplevel |
3372 // frame should be tracked as a toplevel navigation (this allows us to | 3372 // frame should be tracked as a toplevel navigation (this allows us to |
3373 // update the URL bar, etc). | 3373 // update the URL bar, etc). |
3374 params.transition = PAGE_TRANSITION_LINK; | 3374 params.transition = ui::PAGE_TRANSITION_LINK; |
3375 } | 3375 } |
3376 | 3376 |
3377 // If the page contained a client redirect (meta refresh, document.loc...), | 3377 // If the page contained a client redirect (meta refresh, document.loc...), |
3378 // set the referrer and transition appropriately. | 3378 // set the referrer and transition appropriately. |
3379 if (ds->isClientRedirect()) { | 3379 if (ds->isClientRedirect()) { |
3380 params.referrer = | 3380 params.referrer = |
3381 Referrer(params.redirects[0], ds->request().referrerPolicy()); | 3381 Referrer(params.redirects[0], ds->request().referrerPolicy()); |
3382 params.transition = static_cast<PageTransition>( | 3382 params.transition = ui::PageTransitionFromInt( |
3383 params.transition | PAGE_TRANSITION_CLIENT_REDIRECT); | 3383 params.transition | ui::PAGE_TRANSITION_CLIENT_REDIRECT); |
3384 } else { | 3384 } else { |
3385 params.referrer = RenderViewImpl::GetReferrerFromRequest( | 3385 params.referrer = RenderViewImpl::GetReferrerFromRequest( |
3386 frame, ds->request()); | 3386 frame, ds->request()); |
3387 } | 3387 } |
3388 | 3388 |
3389 base::string16 method = request.httpMethod(); | 3389 base::string16 method = request.httpMethod(); |
3390 if (EqualsASCII(method, "POST")) { | 3390 if (EqualsASCII(method, "POST")) { |
3391 params.is_post = true; | 3391 params.is_post = true; |
3392 params.post_id = ExtractPostId(entry->root()); | 3392 params.post_id = ExtractPostId(entry->root()); |
3393 } | 3393 } |
(...skipping 20 matching lines...) Expand all Loading... |
3414 // after the FrameHostMsg_DidCommitProvisionalLoad message. | 3414 // after the FrameHostMsg_DidCommitProvisionalLoad message. |
3415 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3415 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
3416 } else { | 3416 } else { |
3417 // Subframe navigation: the type depends on whether this navigation | 3417 // Subframe navigation: the type depends on whether this navigation |
3418 // generated a new session history entry. When they do generate a session | 3418 // generated a new session history entry. When they do generate a session |
3419 // history entry, it means the user initiated the navigation and we should | 3419 // history entry, it means the user initiated the navigation and we should |
3420 // mark it as such. This test checks if this is the first time | 3420 // mark it as such. This test checks if this is the first time |
3421 // SendDidCommitProvisionalLoad has been called since WillNavigateToURL was | 3421 // SendDidCommitProvisionalLoad has been called since WillNavigateToURL was |
3422 // called to initiate the load. | 3422 // called to initiate the load. |
3423 if (render_view_->page_id_ > render_view_->last_page_id_sent_to_browser_) | 3423 if (render_view_->page_id_ > render_view_->last_page_id_sent_to_browser_) |
3424 params.transition = PAGE_TRANSITION_MANUAL_SUBFRAME; | 3424 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; |
3425 else | 3425 else |
3426 params.transition = PAGE_TRANSITION_AUTO_SUBFRAME; | 3426 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; |
3427 | 3427 |
3428 DCHECK(!navigation_state->history_list_was_cleared()); | 3428 DCHECK(!navigation_state->history_list_was_cleared()); |
3429 params.history_list_was_cleared = false; | 3429 params.history_list_was_cleared = false; |
3430 | 3430 |
3431 // Don't send this message while the subframe is swapped out. | 3431 // Don't send this message while the subframe is swapped out. |
3432 if (!is_swapped_out()) | 3432 if (!is_swapped_out()) |
3433 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3433 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
3434 } | 3434 } |
3435 | 3435 |
3436 render_view_->last_page_id_sent_to_browser_ = | 3436 render_view_->last_page_id_sent_to_browser_ = |
3437 std::max(render_view_->last_page_id_sent_to_browser_, | 3437 std::max(render_view_->last_page_id_sent_to_browser_, |
3438 render_view_->page_id_); | 3438 render_view_->page_id_); |
3439 | 3439 |
3440 // If we end up reusing this WebRequest (for example, due to a #ref click), | 3440 // If we end up reusing this WebRequest (for example, due to a #ref click), |
3441 // we don't want the transition type to persist. Just clear it. | 3441 // we don't want the transition type to persist. Just clear it. |
3442 navigation_state->set_transition_type(PAGE_TRANSITION_LINK); | 3442 navigation_state->set_transition_type(ui::PAGE_TRANSITION_LINK); |
3443 } | 3443 } |
3444 | 3444 |
3445 WebElement RenderFrameImpl::GetFocusedElement() { | 3445 WebElement RenderFrameImpl::GetFocusedElement() { |
3446 WebDocument doc = frame_->document(); | 3446 WebDocument doc = frame_->document(); |
3447 if (!doc.isNull()) | 3447 if (!doc.isNull()) |
3448 return doc.focusedElement(); | 3448 return doc.focusedElement(); |
3449 | 3449 |
3450 return WebElement(); | 3450 return WebElement(); |
3451 } | 3451 } |
3452 | 3452 |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3914 | 3914 |
3915 #if defined(ENABLE_BROWSER_CDMS) | 3915 #if defined(ENABLE_BROWSER_CDMS) |
3916 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 3916 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
3917 if (!cdm_manager_) | 3917 if (!cdm_manager_) |
3918 cdm_manager_ = new RendererCdmManager(this); | 3918 cdm_manager_ = new RendererCdmManager(this); |
3919 return cdm_manager_; | 3919 return cdm_manager_; |
3920 } | 3920 } |
3921 #endif // defined(ENABLE_BROWSER_CDMS) | 3921 #endif // defined(ENABLE_BROWSER_CDMS) |
3922 | 3922 |
3923 } // namespace content | 3923 } // namespace content |
OLD | NEW |