Chromium Code Reviews| 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 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 #include "content/renderer/media/crypto/render_cdm_factory.h" | 77 #include "content/renderer/media/crypto/render_cdm_factory.h" |
| 78 #include "content/renderer/media/media_permission_dispatcher.h" | 78 #include "content/renderer/media/media_permission_dispatcher.h" |
| 79 #include "content/renderer/media/media_stream_dispatcher.h" | 79 #include "content/renderer/media/media_stream_dispatcher.h" |
| 80 #include "content/renderer/media/media_stream_renderer_factory.h" | 80 #include "content/renderer/media/media_stream_renderer_factory.h" |
| 81 #include "content/renderer/media/midi_dispatcher.h" | 81 #include "content/renderer/media/midi_dispatcher.h" |
| 82 #include "content/renderer/media/render_media_log.h" | 82 #include "content/renderer/media/render_media_log.h" |
| 83 #include "content/renderer/media/user_media_client_impl.h" | 83 #include "content/renderer/media/user_media_client_impl.h" |
| 84 #include "content/renderer/media/webmediaplayer_ms.h" | 84 #include "content/renderer/media/webmediaplayer_ms.h" |
| 85 #include "content/renderer/memory_benchmarking_extension.h" | 85 #include "content/renderer/memory_benchmarking_extension.h" |
| 86 #include "content/renderer/mojo/service_registry_js_wrapper.h" | 86 #include "content/renderer/mojo/service_registry_js_wrapper.h" |
| 87 #include "content/renderer/navigation_state_impl.h" | |
| 87 #include "content/renderer/notification_permission_dispatcher.h" | 88 #include "content/renderer/notification_permission_dispatcher.h" |
| 88 #include "content/renderer/npapi/plugin_channel_host.h" | 89 #include "content/renderer/npapi/plugin_channel_host.h" |
| 89 #include "content/renderer/pepper/plugin_instance_throttler_impl.h" | 90 #include "content/renderer/pepper/plugin_instance_throttler_impl.h" |
| 90 #include "content/renderer/presentation/presentation_dispatcher.h" | 91 #include "content/renderer/presentation/presentation_dispatcher.h" |
| 91 #include "content/renderer/push_messaging/push_messaging_dispatcher.h" | 92 #include "content/renderer/push_messaging/push_messaging_dispatcher.h" |
| 92 #include "content/renderer/render_frame_proxy.h" | 93 #include "content/renderer/render_frame_proxy.h" |
| 93 #include "content/renderer/render_process.h" | 94 #include "content/renderer/render_process.h" |
| 94 #include "content/renderer/render_thread_impl.h" | 95 #include "content/renderer/render_thread_impl.h" |
| 95 #include "content/renderer/render_view_impl.h" | 96 #include "content/renderer/render_view_impl.h" |
| 96 #include "content/renderer/render_widget_fullscreen_pepper.h" | 97 #include "content/renderer/render_widget_fullscreen_pepper.h" |
| (...skipping 1914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2011 } | 2012 } |
| 2012 | 2013 |
| 2013 void RenderFrameImpl::didAccessInitialDocument(blink::WebLocalFrame* frame) { | 2014 void RenderFrameImpl::didAccessInitialDocument(blink::WebLocalFrame* frame) { |
| 2014 DCHECK(!frame_ || frame_ == frame); | 2015 DCHECK(!frame_ || frame_ == frame); |
| 2015 // If the request hasn't yet committed, notify the browser process that it is | 2016 // If the request hasn't yet committed, notify the browser process that it is |
| 2016 // no longer safe to show the pending URL of the main frame, since a URL spoof | 2017 // no longer safe to show the pending URL of the main frame, since a URL spoof |
| 2017 // is now possible. (If the request has committed, the browser already knows.) | 2018 // is now possible. (If the request has committed, the browser already knows.) |
| 2018 if (!frame->parent()) { | 2019 if (!frame->parent()) { |
| 2019 DocumentState* document_state = | 2020 DocumentState* document_state = |
| 2020 DocumentState::FromDataSource(frame->dataSource()); | 2021 DocumentState::FromDataSource(frame->dataSource()); |
| 2021 NavigationState* navigation_state = document_state->navigation_state(); | 2022 NavigationStateImpl* navigation_state = |
| 2023 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 2022 | 2024 |
| 2023 if (!navigation_state->request_committed()) { | 2025 if (!navigation_state->request_committed()) { |
| 2024 Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_)); | 2026 Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_)); |
| 2025 } | 2027 } |
| 2026 } | 2028 } |
| 2027 } | 2029 } |
| 2028 | 2030 |
| 2029 blink::WebFrame* RenderFrameImpl::createChildFrame( | 2031 blink::WebFrame* RenderFrameImpl::createChildFrame( |
| 2030 blink::WebLocalFrame* parent, | 2032 blink::WebLocalFrame* parent, |
| 2031 const blink::WebString& name, | 2033 const blink::WebString& name, |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2252 DCHECK(!frame_ || frame_ == frame); | 2254 DCHECK(!frame_ || frame_ == frame); |
| 2253 | 2255 |
| 2254 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form)); | 2256 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSendSubmitEvent(form)); |
| 2255 } | 2257 } |
| 2256 | 2258 |
| 2257 void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame, | 2259 void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame, |
| 2258 const blink::WebFormElement& form) { | 2260 const blink::WebFormElement& form) { |
| 2259 DCHECK(!frame_ || frame_ == frame); | 2261 DCHECK(!frame_ || frame_ == frame); |
| 2260 DocumentState* document_state = | 2262 DocumentState* document_state = |
| 2261 DocumentState::FromDataSource(frame->provisionalDataSource()); | 2263 DocumentState::FromDataSource(frame->provisionalDataSource()); |
| 2262 NavigationState* navigation_state = document_state->navigation_state(); | 2264 NavigationStateImpl* navigation_state = |
| 2265 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 2263 InternalDocumentStateData* internal_data = | 2266 InternalDocumentStateData* internal_data = |
| 2264 InternalDocumentStateData::FromDocumentState(document_state); | 2267 InternalDocumentStateData::FromDocumentState(document_state); |
| 2265 | 2268 |
| 2266 if (ui::PageTransitionCoreTypeIs(navigation_state->transition_type(), | 2269 if (ui::PageTransitionCoreTypeIs(navigation_state->common_params().transition, |
|
Charlie Reis
2015/03/17 03:26:31
Why not navigation_state->GetTransitionType()?
clamy
2015/03/17 16:08:18
Done.
| |
| 2267 ui::PAGE_TRANSITION_LINK)) { | 2270 ui::PAGE_TRANSITION_LINK)) { |
| 2268 navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT); | 2271 navigation_state->common_params().transition = |
|
Charlie Reis
2015/03/17 03:26:31
Should use a setter for this. Same below.
clamy
2015/03/17 16:08:18
Done.
| |
| 2272 ui::PAGE_TRANSITION_FORM_SUBMIT; | |
| 2269 } | 2273 } |
| 2270 | 2274 |
| 2271 // Save these to be processed when the ensuing navigation is committed. | 2275 // Save these to be processed when the ensuing navigation is committed. |
| 2272 WebSearchableFormData web_searchable_form_data(form); | 2276 WebSearchableFormData web_searchable_form_data(form); |
| 2273 internal_data->set_searchable_form_url(web_searchable_form_data.url()); | 2277 internal_data->set_searchable_form_url(web_searchable_form_data.url()); |
| 2274 internal_data->set_searchable_form_encoding( | 2278 internal_data->set_searchable_form_encoding( |
| 2275 web_searchable_form_data.encoding().utf8()); | 2279 web_searchable_form_data.encoding().utf8()); |
| 2276 | 2280 |
| 2277 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSubmitForm(form)); | 2281 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSubmitForm(form)); |
| 2278 } | 2282 } |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2334 | 2338 |
| 2335 bool is_top_most = !frame->parent(); | 2339 bool is_top_most = !frame->parent(); |
| 2336 if (is_top_most) { | 2340 if (is_top_most) { |
| 2337 render_view_->set_navigation_gesture( | 2341 render_view_->set_navigation_gesture( |
| 2338 WebUserGestureIndicator::isProcessingUserGesture() ? | 2342 WebUserGestureIndicator::isProcessingUserGesture() ? |
| 2339 NavigationGestureUser : NavigationGestureAuto); | 2343 NavigationGestureUser : NavigationGestureAuto); |
| 2340 } else if (ds->replacesCurrentHistoryItem()) { | 2344 } else if (ds->replacesCurrentHistoryItem()) { |
| 2341 // Subframe navigations that don't add session history items must be | 2345 // Subframe navigations that don't add session history items must be |
| 2342 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we | 2346 // marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we |
| 2343 // handle loading of error pages. | 2347 // handle loading of error pages. |
| 2344 document_state->navigation_state()->set_transition_type( | 2348 static_cast<NavigationStateImpl*>(document_state->navigation_state()) |
| 2345 ui::PAGE_TRANSITION_AUTO_SUBFRAME); | 2349 ->common_params() |
| 2350 .transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; | |
| 2346 } | 2351 } |
| 2347 | 2352 |
| 2348 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), | 2353 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(), |
| 2349 DidStartProvisionalLoad(frame)); | 2354 DidStartProvisionalLoad(frame)); |
| 2350 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); | 2355 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, DidStartProvisionalLoad()); |
| 2351 | 2356 |
| 2352 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( | 2357 Send(new FrameHostMsg_DidStartProvisionalLoadForFrame( |
| 2353 routing_id_, ds->request().url(), is_transition_navigation)); | 2358 routing_id_, ds->request().url(), is_transition_navigation)); |
| 2354 } | 2359 } |
| 2355 | 2360 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2417 | 2422 |
| 2418 if (RenderThreadImpl::current() && | 2423 if (RenderThreadImpl::current() && |
| 2419 RenderThreadImpl::current()->layout_test_mode()) { | 2424 RenderThreadImpl::current()->layout_test_mode()) { |
| 2420 return; | 2425 return; |
| 2421 } | 2426 } |
| 2422 | 2427 |
| 2423 // Make sure we never show errors in view source mode. | 2428 // Make sure we never show errors in view source mode. |
| 2424 frame->enableViewSourceMode(false); | 2429 frame->enableViewSourceMode(false); |
| 2425 | 2430 |
| 2426 DocumentState* document_state = DocumentState::FromDataSource(ds); | 2431 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 2427 NavigationState* navigation_state = document_state->navigation_state(); | 2432 NavigationStateImpl* navigation_state = |
| 2433 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 2428 | 2434 |
| 2429 // If this is a failed back/forward/reload navigation, then we need to do a | 2435 // If this is a failed back/forward/reload navigation, then we need to do a |
| 2430 // 'replace' load. This is necessary to avoid messing up session history. | 2436 // 'replace' load. This is necessary to avoid messing up session history. |
| 2431 // Otherwise, we do a normal load, which simulates a 'go' navigation as far | 2437 // Otherwise, we do a normal load, which simulates a 'go' navigation as far |
| 2432 // as session history is concerned. | 2438 // as session history is concerned. |
| 2433 // | 2439 // |
| 2434 // AUTO_SUBFRAME loads should always be treated as loads that do not advance | 2440 // AUTO_SUBFRAME loads should always be treated as loads that do not advance |
| 2435 // the page id. | 2441 // the page id. |
| 2436 // | 2442 // |
| 2437 // TODO(davidben): This should also take the failed navigation's replacement | 2443 // TODO(davidben): This should also take the failed navigation's replacement |
| 2438 // state into account, if a location.replace() failed. | 2444 // state into account, if a location.replace() failed. |
| 2439 bool replace = | 2445 bool replace = |
| 2440 navigation_state->pending_page_id() != -1 || | 2446 navigation_state->history_params().page_id != -1 || |
| 2441 ui::PageTransitionCoreTypeIs(navigation_state->transition_type(), | 2447 ui::PageTransitionCoreTypeIs(navigation_state->common_params().transition, |
| 2442 ui::PAGE_TRANSITION_AUTO_SUBFRAME); | 2448 ui::PAGE_TRANSITION_AUTO_SUBFRAME); |
| 2443 | 2449 |
| 2444 // If we failed on a browser initiated request, then make sure that our error | 2450 // If we failed on a browser initiated request, then make sure that our error |
| 2445 // page load is regarded as the same browser initiated request. | 2451 // page load is regarded as the same browser initiated request. |
| 2446 if (!navigation_state->is_content_initiated()) { | 2452 if (!navigation_state->IsContentInitiated()) { |
| 2447 render_view_->pending_navigation_params_.reset(new NavigationParams( | 2453 render_view_->pending_navigation_params_.reset(new NavigationParams( |
| 2448 CommonNavigationParams( | 2454 navigation_state->common_params(), navigation_state->start_params(), |
| 2449 error.unreachableURL, Referrer(), | |
|
Charlie Reis
2015/03/17 03:26:31
I don't understand how the new code is equivalent
clamy
2015/03/17 16:08:18
Well until https://codereview.chromium.org/9716530
Charlie Reis
2015/03/17 16:29:06
Oh I see-- it's from a recent change. Ok, I'll de
| |
| 2450 navigation_state->transition_type(), FrameMsg_Navigate_Type::NORMAL, | |
| 2451 true, base::TimeTicks(), | |
| 2452 FrameMsg_UILoadMetricsReportType::NO_REPORT, GURL(), GURL()), | |
| 2453 StartNavigationParams(false, std::string(), | |
| 2454 std::vector<unsigned char>(), replace, -1, -1), | |
| 2455 CommitNavigationParams(false, base::TimeTicks(), std::vector<GURL>(), | 2455 CommitNavigationParams(false, base::TimeTicks(), std::vector<GURL>(), |
| 2456 false, std::string(), | 2456 false, std::string(), |
| 2457 document_state->request_time()), | 2457 document_state->request_time()), |
| 2458 HistoryNavigationParams( | 2458 navigation_state->history_params())); |
| 2459 PageState(), navigation_state->pending_page_id(), | |
| 2460 navigation_state->pending_history_list_offset(), -1, 0, | |
| 2461 navigation_state->history_list_was_cleared()))); | |
| 2462 } | 2459 } |
| 2463 | 2460 |
| 2464 // Load an error page. | 2461 // Load an error page. |
| 2465 LoadNavigationErrorPage(failed_request, error, replace); | 2462 LoadNavigationErrorPage(failed_request, error, replace); |
| 2466 } | 2463 } |
| 2467 | 2464 |
| 2468 void RenderFrameImpl::didCommitProvisionalLoad( | 2465 void RenderFrameImpl::didCommitProvisionalLoad( |
| 2469 blink::WebLocalFrame* frame, | 2466 blink::WebLocalFrame* frame, |
| 2470 const blink::WebHistoryItem& item, | 2467 const blink::WebHistoryItem& item, |
| 2471 blink::WebHistoryCommitType commit_type) { | 2468 blink::WebHistoryCommitType commit_type) { |
| 2472 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", | 2469 TRACE_EVENT2("navigation", "RenderFrameImpl::didCommitProvisionalLoad", |
| 2473 "id", routing_id_, | 2470 "id", routing_id_, |
| 2474 "url", GetLoadingUrl().possibly_invalid_spec()); | 2471 "url", GetLoadingUrl().possibly_invalid_spec()); |
| 2475 DCHECK(!frame_ || frame_ == frame); | 2472 DCHECK(!frame_ || frame_ == frame); |
| 2476 DocumentState* document_state = | 2473 DocumentState* document_state = |
| 2477 DocumentState::FromDataSource(frame->dataSource()); | 2474 DocumentState::FromDataSource(frame->dataSource()); |
| 2478 NavigationState* navigation_state = document_state->navigation_state(); | 2475 NavigationStateImpl* navigation_state = |
| 2476 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 2479 | 2477 |
| 2480 if (proxy_routing_id_ != MSG_ROUTING_NONE) { | 2478 if (proxy_routing_id_ != MSG_ROUTING_NONE) { |
| 2481 RenderFrameProxy* proxy = | 2479 RenderFrameProxy* proxy = |
| 2482 RenderFrameProxy::FromRoutingID(proxy_routing_id_); | 2480 RenderFrameProxy::FromRoutingID(proxy_routing_id_); |
| 2483 CHECK(proxy); | 2481 CHECK(proxy); |
| 2484 proxy->web_frame()->swap(frame_); | 2482 proxy->web_frame()->swap(frame_); |
| 2485 proxy_routing_id_ = MSG_ROUTING_NONE; | 2483 proxy_routing_id_ = MSG_ROUTING_NONE; |
| 2486 } | 2484 } |
| 2487 | 2485 |
| 2488 // When we perform a new navigation, we need to update the last committed | 2486 // When we perform a new navigation, we need to update the last committed |
| 2489 // session history entry with state for the page we are leaving. Do this | 2487 // session history entry with state for the page we are leaving. Do this |
| 2490 // before updating the HistoryController state. | 2488 // before updating the HistoryController state. |
| 2491 render_view_->UpdateSessionHistory(frame); | 2489 render_view_->UpdateSessionHistory(frame); |
| 2492 | 2490 |
| 2493 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, | 2491 render_view_->history_controller()->UpdateForCommit( |
| 2494 navigation_state->was_within_same_page()); | 2492 this, item, commit_type, navigation_state->GetWasWithinSamePage()); |
| 2495 | 2493 |
| 2496 InternalDocumentStateData* internal_data = | 2494 InternalDocumentStateData* internal_data = |
| 2497 InternalDocumentStateData::FromDocumentState(document_state); | 2495 InternalDocumentStateData::FromDocumentState(document_state); |
| 2498 | 2496 |
| 2499 if (document_state->commit_load_time().is_null()) | 2497 if (document_state->commit_load_time().is_null()) |
| 2500 document_state->set_commit_load_time(Time::Now()); | 2498 document_state->set_commit_load_time(Time::Now()); |
| 2501 | 2499 |
| 2502 if (internal_data->must_reset_scroll_and_scale_state()) { | 2500 if (internal_data->must_reset_scroll_and_scale_state()) { |
| 2503 render_view_->webview()->resetScrollAndScaleState(); | 2501 render_view_->webview()->resetScrollAndScaleState(); |
| 2504 internal_data->set_must_reset_scroll_and_scale_state(false); | 2502 internal_data->set_must_reset_scroll_and_scale_state(false); |
| 2505 } | 2503 } |
| 2506 internal_data->set_use_error_page(false); | 2504 internal_data->set_use_error_page(false); |
| 2507 | 2505 |
| 2508 bool is_new_navigation = commit_type == blink::WebStandardCommit; | 2506 bool is_new_navigation = commit_type == blink::WebStandardCommit; |
| 2509 if (is_new_navigation) { | 2507 if (is_new_navigation) { |
| 2510 // We bump our Page ID to correspond with the new session history entry. | 2508 // We bump our Page ID to correspond with the new session history entry. |
| 2511 render_view_->page_id_ = render_view_->next_page_id_++; | 2509 render_view_->page_id_ = render_view_->next_page_id_++; |
| 2512 | 2510 |
| 2513 // Don't update history list values for kSwappedOutURL, since | 2511 // Don't update history list values for kSwappedOutURL, since |
| 2514 // we don't want to forget the entry that was there, and since we will | 2512 // we don't want to forget the entry that was there, and since we will |
| 2515 // never come back to kSwappedOutURL. Note that we have to call | 2513 // never come back to kSwappedOutURL. Note that we have to call |
| 2516 // UpdateSessionHistory and update page_id_ even in this case, so that | 2514 // UpdateSessionHistory and update page_id_ even in this case, so that |
| 2517 // the current entry gets a state update and so that we don't send a | 2515 // the current entry gets a state update and so that we don't send a |
| 2518 // state update to the wrong entry when we swap back in. | 2516 // state update to the wrong entry when we swap back in. |
| 2519 DCHECK_IMPLIES(navigation_state->should_replace_current_entry(), | 2517 DCHECK_IMPLIES( |
| 2520 render_view_->history_list_length_ > 0); | 2518 navigation_state->start_params().should_replace_current_entry, |
| 2519 render_view_->history_list_length_ > 0); | |
| 2521 if (GetLoadingUrl() != GURL(kSwappedOutURL) && | 2520 if (GetLoadingUrl() != GURL(kSwappedOutURL) && |
| 2522 !navigation_state->should_replace_current_entry()) { | 2521 !navigation_state->start_params().should_replace_current_entry) { |
| 2523 // Advance our offset in session history, applying the length limit. | 2522 // Advance our offset in session history, applying the length limit. |
| 2524 // There is now no forward history. | 2523 // There is now no forward history. |
| 2525 render_view_->history_list_offset_++; | 2524 render_view_->history_list_offset_++; |
| 2526 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries) | 2525 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries) |
| 2527 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1; | 2526 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1; |
| 2528 render_view_->history_list_length_ = | 2527 render_view_->history_list_length_ = |
| 2529 render_view_->history_list_offset_ + 1; | 2528 render_view_->history_list_offset_ + 1; |
| 2530 } | 2529 } |
| 2531 } else { | 2530 } else { |
| 2532 // Inspect the navigation_state on this frame to see if the navigation | 2531 // Inspect the navigation_state on this frame to see if the navigation |
| 2533 // corresponds to a session history navigation... Note: |frame| may or | 2532 // corresponds to a session history navigation... Note: |frame| may or |
| 2534 // may not be the toplevel frame, but for the case of capturing session | 2533 // may not be the toplevel frame, but for the case of capturing session |
| 2535 // history, the first committed frame suffices. We keep track of whether | 2534 // history, the first committed frame suffices. We keep track of whether |
| 2536 // we've seen this commit before so that only capture session history once | 2535 // we've seen this commit before so that only capture session history once |
| 2537 // per navigation. | 2536 // per navigation. |
| 2538 // | 2537 // |
| 2539 // Note that we need to check if the page ID changed. In the case of a | 2538 // Note that we need to check if the page ID changed. In the case of a |
| 2540 // reload, the page ID doesn't change, and UpdateSessionHistory gets the | 2539 // reload, the page ID doesn't change, and UpdateSessionHistory gets the |
| 2541 // previous URL and the current page ID, which would be wrong. | 2540 // previous URL and the current page ID, which would be wrong. |
| 2542 if (navigation_state->pending_page_id() != -1 && | 2541 if (navigation_state->history_params().page_id != -1 && |
| 2543 navigation_state->pending_page_id() != render_view_->page_id_ && | 2542 navigation_state->history_params().page_id != render_view_->page_id_ && |
| 2544 !navigation_state->request_committed()) { | 2543 !navigation_state->request_committed()) { |
| 2545 // This is a successful session history navigation! | 2544 // This is a successful session history navigation! |
| 2546 render_view_->page_id_ = navigation_state->pending_page_id(); | 2545 render_view_->page_id_ = navigation_state->history_params().page_id; |
| 2547 | 2546 |
| 2548 render_view_->history_list_offset_ = | 2547 render_view_->history_list_offset_ = |
| 2549 navigation_state->pending_history_list_offset(); | 2548 navigation_state->history_params().pending_history_list_offset; |
| 2550 } | 2549 } |
| 2551 } | 2550 } |
| 2552 | 2551 |
| 2553 bool sent = Send( | 2552 bool sent = Send( |
| 2554 new FrameHostMsg_DidAssignPageId(routing_id_, render_view_->page_id_)); | 2553 new FrameHostMsg_DidAssignPageId(routing_id_, render_view_->page_id_)); |
| 2555 CHECK(sent); // http://crbug.com/407376 | 2554 CHECK(sent); // http://crbug.com/407376 |
| 2556 | 2555 |
| 2557 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_, | 2556 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_, |
| 2558 DidCommitProvisionalLoad(frame, is_new_navigation)); | 2557 DidCommitProvisionalLoad(frame, is_new_navigation)); |
| 2559 FOR_EACH_OBSERVER(RenderFrameObserver, observers_, | 2558 FOR_EACH_OBSERVER( |
| 2560 DidCommitProvisionalLoad( | 2559 RenderFrameObserver, observers_, |
| 2561 is_new_navigation, | 2560 DidCommitProvisionalLoad(is_new_navigation, |
| 2562 navigation_state->was_within_same_page())); | 2561 navigation_state->GetWasWithinSamePage())); |
| 2563 | 2562 |
| 2564 if (!frame->parent()) { // Only for top frames. | 2563 if (!frame->parent()) { // Only for top frames. |
| 2565 RenderThreadImpl* render_thread_impl = RenderThreadImpl::current(); | 2564 RenderThreadImpl* render_thread_impl = RenderThreadImpl::current(); |
| 2566 if (render_thread_impl) { // Can be NULL in tests. | 2565 if (render_thread_impl) { // Can be NULL in tests. |
| 2567 render_thread_impl->histogram_customizer()-> | 2566 render_thread_impl->histogram_customizer()-> |
| 2568 RenderViewNavigatedToHost(GURL(GetLoadingUrl()).host(), | 2567 RenderViewNavigatedToHost(GURL(GetLoadingUrl()).host(), |
| 2569 RenderViewImpl::GetRenderViewCount()); | 2568 RenderViewImpl::GetRenderViewCount()); |
| 2570 } | 2569 } |
| 2571 } | 2570 } |
| 2572 | 2571 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2766 // could end up having a non-null pending navigation params. We just need to | 2765 // could end up having a non-null pending navigation params. We just need to |
| 2767 // update the ExtraData on the datasource so that others who read the | 2766 // update the ExtraData on the datasource so that others who read the |
| 2768 // ExtraData will get the new NavigationState. Similarly, if we did not | 2767 // ExtraData will get the new NavigationState. Similarly, if we did not |
| 2769 // initiate this navigation, then we need to take care to reset any pre- | 2768 // initiate this navigation, then we need to take care to reset any pre- |
| 2770 // existing navigation state to a content-initiated navigation state. | 2769 // existing navigation state to a content-initiated navigation state. |
| 2771 // DidCreateDataSource conveniently takes care of this for us. | 2770 // DidCreateDataSource conveniently takes care of this for us. |
| 2772 didCreateDataSource(frame, frame->dataSource()); | 2771 didCreateDataSource(frame, frame->dataSource()); |
| 2773 | 2772 |
| 2774 DocumentState* document_state = | 2773 DocumentState* document_state = |
| 2775 DocumentState::FromDataSource(frame->dataSource()); | 2774 DocumentState::FromDataSource(frame->dataSource()); |
| 2776 NavigationState* new_state = document_state->navigation_state(); | 2775 static_cast<NavigationStateImpl*>(document_state->navigation_state()) |
| 2777 new_state->set_was_within_same_page(true); | 2776 ->set_was_within_same_page(true); |
| 2778 | 2777 |
| 2779 didCommitProvisionalLoad(frame, item, commit_type); | 2778 didCommitProvisionalLoad(frame, item, commit_type); |
| 2780 } | 2779 } |
| 2781 | 2780 |
| 2782 void RenderFrameImpl::didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame) { | 2781 void RenderFrameImpl::didUpdateCurrentHistoryItem(blink::WebLocalFrame* frame) { |
| 2783 DCHECK(!frame_ || frame_ == frame); | 2782 DCHECK(!frame_ || frame_ == frame); |
| 2784 // TODO(nasko): Move implementation here. Needed methods: | 2783 // TODO(nasko): Move implementation here. Needed methods: |
| 2785 // * StartNavStateSyncTimerIfNecessary | 2784 // * StartNavStateSyncTimerIfNecessary |
| 2786 render_view_->didUpdateCurrentHistoryItem(frame); | 2785 render_view_->didUpdateCurrentHistoryItem(frame); |
| 2787 } | 2786 } |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2983 top_frame = frame; | 2982 top_frame = frame; |
| 2984 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); | 2983 WebDataSource* provisional_data_source = top_frame->provisionalDataSource(); |
| 2985 WebDataSource* top_data_source = top_frame->dataSource(); | 2984 WebDataSource* top_data_source = top_frame->dataSource(); |
| 2986 WebDataSource* data_source = | 2985 WebDataSource* data_source = |
| 2987 provisional_data_source ? provisional_data_source : top_data_source; | 2986 provisional_data_source ? provisional_data_source : top_data_source; |
| 2988 | 2987 |
| 2989 DocumentState* document_state = DocumentState::FromDataSource(data_source); | 2988 DocumentState* document_state = DocumentState::FromDataSource(data_source); |
| 2990 DCHECK(document_state); | 2989 DCHECK(document_state); |
| 2991 InternalDocumentStateData* internal_data = | 2990 InternalDocumentStateData* internal_data = |
| 2992 InternalDocumentStateData::FromDocumentState(document_state); | 2991 InternalDocumentStateData::FromDocumentState(document_state); |
| 2993 NavigationState* navigation_state = document_state->navigation_state(); | 2992 NavigationStateImpl* navigation_state = |
| 2994 ui::PageTransition transition_type = navigation_state->transition_type(); | 2993 static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
| 2994 ui::PageTransition transition_type = | |
| 2995 navigation_state->common_params().transition; | |
| 2995 WebDataSource* frame_ds = frame->provisionalDataSource(); | 2996 WebDataSource* frame_ds = frame->provisionalDataSource(); |
| 2996 if (frame_ds && frame_ds->isClientRedirect()) { | 2997 if (frame_ds && frame_ds->isClientRedirect()) { |
| 2997 transition_type = ui::PageTransitionFromInt( | 2998 transition_type = ui::PageTransitionFromInt( |
| 2998 transition_type | ui::PAGE_TRANSITION_CLIENT_REDIRECT); | 2999 transition_type | ui::PAGE_TRANSITION_CLIENT_REDIRECT); |
| 2999 } | 3000 } |
| 3000 | 3001 |
| 3001 GURL request_url(request.url()); | 3002 GURL request_url(request.url()); |
| 3002 GURL new_url; | 3003 GURL new_url; |
| 3003 if (GetContentClient()->renderer()->WillSendRequest( | 3004 if (GetContentClient()->renderer()->WillSendRequest( |
| 3004 frame, | 3005 frame, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3053 } | 3054 } |
| 3054 | 3055 |
| 3055 // Add an empty HTTP origin header for non GET methods if none is currently | 3056 // Add an empty HTTP origin header for non GET methods if none is currently |
| 3056 // present. | 3057 // present. |
| 3057 request.addHTTPOriginIfNeeded(WebString()); | 3058 request.addHTTPOriginIfNeeded(WebString()); |
| 3058 | 3059 |
| 3059 // Attach |should_replace_current_entry| state to requests so that, should | 3060 // Attach |should_replace_current_entry| state to requests so that, should |
| 3060 // this navigation later require a request transfer, all state is preserved | 3061 // this navigation later require a request transfer, all state is preserved |
| 3061 // when it is re-created in the new process. | 3062 // when it is re-created in the new process. |
| 3062 bool should_replace_current_entry = false; | 3063 bool should_replace_current_entry = false; |
| 3063 if (navigation_state->is_content_initiated()) { | 3064 if (navigation_state->IsContentInitiated()) { |
| 3064 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); | 3065 should_replace_current_entry = data_source->replacesCurrentHistoryItem(); |
| 3065 } else { | 3066 } else { |
| 3066 // If the navigation is browser-initiated, the NavigationState contains the | 3067 // If the navigation is browser-initiated, the NavigationState contains the |
| 3067 // correct value instead of the WebDataSource. | 3068 // correct value instead of the WebDataSource. |
| 3068 // | 3069 // |
| 3069 // TODO(davidben): Avoid this awkward duplication of state. See comment on | 3070 // TODO(davidben): Avoid this awkward duplication of state. See comment on |
| 3070 // NavigationState::should_replace_current_entry(). | 3071 // NavigationState::should_replace_current_entry(). |
| 3071 should_replace_current_entry = | 3072 should_replace_current_entry = |
| 3072 navigation_state->should_replace_current_entry(); | 3073 navigation_state->start_params().should_replace_current_entry; |
| 3073 } | 3074 } |
| 3074 | 3075 |
| 3075 int provider_id = kInvalidServiceWorkerProviderId; | 3076 int provider_id = kInvalidServiceWorkerProviderId; |
| 3076 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || | 3077 if (request.frameType() == blink::WebURLRequest::FrameTypeTopLevel || |
| 3077 request.frameType() == blink::WebURLRequest::FrameTypeNested) { | 3078 request.frameType() == blink::WebURLRequest::FrameTypeNested) { |
| 3078 // |provisionalDataSource| may be null in some content::ResourceFetcher | 3079 // |provisionalDataSource| may be null in some content::ResourceFetcher |
| 3079 // use cases, we don't hook those requests. | 3080 // use cases, we don't hook those requests. |
| 3080 if (frame->provisionalDataSource()) { | 3081 if (frame->provisionalDataSource()) { |
| 3081 ServiceWorkerNetworkProvider* provider = | 3082 ServiceWorkerNetworkProvider* provider = |
| 3082 ServiceWorkerNetworkProvider::FromDocumentState( | 3083 ServiceWorkerNetworkProvider::FromDocumentState( |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 3103 RequestExtraData* extra_data = new RequestExtraData(); | 3104 RequestExtraData* extra_data = new RequestExtraData(); |
| 3104 extra_data->set_visibility_state(render_view_->visibilityState()); | 3105 extra_data->set_visibility_state(render_view_->visibilityState()); |
| 3105 extra_data->set_custom_user_agent(custom_user_agent); | 3106 extra_data->set_custom_user_agent(custom_user_agent); |
| 3106 extra_data->set_requested_with(requested_with); | 3107 extra_data->set_requested_with(requested_with); |
| 3107 extra_data->set_render_frame_id(routing_id_); | 3108 extra_data->set_render_frame_id(routing_id_); |
| 3108 extra_data->set_is_main_frame(!parent); | 3109 extra_data->set_is_main_frame(!parent); |
| 3109 extra_data->set_frame_origin( | 3110 extra_data->set_frame_origin( |
| 3110 GURL(frame->document().securityOrigin().toString())); | 3111 GURL(frame->document().securityOrigin().toString())); |
| 3111 extra_data->set_parent_is_main_frame(parent && !parent->parent()); | 3112 extra_data->set_parent_is_main_frame(parent && !parent->parent()); |
| 3112 extra_data->set_parent_render_frame_id(parent_routing_id); | 3113 extra_data->set_parent_render_frame_id(parent_routing_id); |
| 3113 extra_data->set_allow_download(navigation_state->allow_download()); | 3114 extra_data->set_allow_download( |
| 3115 navigation_state->common_params().allow_download); | |
| 3114 extra_data->set_transition_type(transition_type); | 3116 extra_data->set_transition_type(transition_type); |
| 3115 extra_data->set_should_replace_current_entry(should_replace_current_entry); | 3117 extra_data->set_should_replace_current_entry(should_replace_current_entry); |
| 3116 extra_data->set_transferred_request_child_id( | 3118 extra_data->set_transferred_request_child_id( |
| 3117 navigation_state->transferred_request_child_id()); | 3119 navigation_state->start_params().transferred_request_child_id); |
| 3118 extra_data->set_transferred_request_request_id( | 3120 extra_data->set_transferred_request_request_id( |
| 3119 navigation_state->transferred_request_request_id()); | 3121 navigation_state->start_params().transferred_request_request_id); |
| 3120 extra_data->set_service_worker_provider_id(provider_id); | 3122 extra_data->set_service_worker_provider_id(provider_id); |
| 3121 extra_data->set_stream_override(stream_override.Pass()); | 3123 extra_data->set_stream_override(stream_override.Pass()); |
| 3122 request.setExtraData(extra_data); | 3124 request.setExtraData(extra_data); |
| 3123 | 3125 |
| 3124 DocumentState* top_document_state = | 3126 DocumentState* top_document_state = |
| 3125 DocumentState::FromDataSource(top_data_source); | 3127 DocumentState::FromDataSource(top_data_source); |
| 3126 if (top_document_state) { | 3128 if (top_document_state) { |
| 3127 // TODO(gavinp): separate out prefetching and prerender field trials | 3129 // TODO(gavinp): separate out prefetching and prerender field trials |
| 3128 // if the rel=prerender rel type is sticking around. | 3130 // if the rel=prerender rel type is sticking around. |
| 3129 if (request.requestContext() == WebURLRequest::RequestContextPrefetch) | 3131 if (request.requestContext() == WebURLRequest::RequestContextPrefetch) |
| 3130 top_document_state->set_was_prefetcher(true); | 3132 top_document_state->set_was_prefetcher(true); |
| 3131 } | 3133 } |
| 3132 | 3134 |
| 3133 // This is an instance where we embed a copy of the routing id | 3135 // This is an instance where we embed a copy of the routing id |
| 3134 // into the data portion of the message. This can cause problems if we | 3136 // into the data portion of the message. This can cause problems if we |
| 3135 // don't register this id on the browser side, since the download manager | 3137 // don't register this id on the browser side, since the download manager |
| 3136 // expects to find a RenderViewHost based off the id. | 3138 // expects to find a RenderViewHost based off the id. |
| 3137 request.setRequestorID(render_view_->GetRoutingID()); | 3139 request.setRequestorID(render_view_->GetRoutingID()); |
| 3138 request.setHasUserGesture(WebUserGestureIndicator::isProcessingUserGesture()); | 3140 request.setHasUserGesture(WebUserGestureIndicator::isProcessingUserGesture()); |
| 3139 | 3141 |
| 3140 if (!navigation_state->extra_headers().empty()) { | 3142 if (!navigation_state->start_params().extra_headers.empty()) { |
| 3141 for (net::HttpUtil::HeadersIterator i( | 3143 for (net::HttpUtil::HeadersIterator i( |
| 3142 navigation_state->extra_headers().begin(), | 3144 navigation_state->start_params().extra_headers.begin(), |
| 3143 navigation_state->extra_headers().end(), "\n"); | 3145 navigation_state->start_params().extra_headers.end(), "\n"); |
| 3144 i.GetNext(); ) { | 3146 i.GetNext();) { |
| 3145 if (LowerCaseEqualsASCII(i.name(), "referer")) { | 3147 if (LowerCaseEqualsASCII(i.name(), "referer")) { |
| 3146 WebString referrer = WebSecurityPolicy::generateReferrerHeader( | 3148 WebString referrer = WebSecurityPolicy::generateReferrerHeader( |
| 3147 blink::WebReferrerPolicyDefault, | 3149 blink::WebReferrerPolicyDefault, |
| 3148 request.url(), | 3150 request.url(), |
| 3149 WebString::fromUTF8(i.values())); | 3151 WebString::fromUTF8(i.values())); |
| 3150 request.setHTTPReferrer(referrer, blink::WebReferrerPolicyDefault); | 3152 request.setHTTPReferrer(referrer, blink::WebReferrerPolicyDefault); |
| 3151 } else { | 3153 } else { |
| 3152 request.setHTTPHeaderField(WebString::fromUTF8(i.name()), | 3154 request.setHTTPHeaderField(WebString::fromUTF8(i.name()), |
| 3153 WebString::fromUTF8(i.values())); | 3155 WebString::fromUTF8(i.values())); |
| 3154 } | 3156 } |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3689 blink::WebFrame* frame, | 3691 blink::WebFrame* frame, |
| 3690 blink::WebHistoryCommitType commit_type) { | 3692 blink::WebHistoryCommitType commit_type) { |
| 3691 DCHECK(!frame_ || frame_ == frame); | 3693 DCHECK(!frame_ || frame_ == frame); |
| 3692 WebDataSource* ds = frame->dataSource(); | 3694 WebDataSource* ds = frame->dataSource(); |
| 3693 DCHECK(ds); | 3695 DCHECK(ds); |
| 3694 | 3696 |
| 3695 const WebURLRequest& request = ds->request(); | 3697 const WebURLRequest& request = ds->request(); |
| 3696 const WebURLResponse& response = ds->response(); | 3698 const WebURLResponse& response = ds->response(); |
| 3697 | 3699 |
| 3698 DocumentState* document_state = DocumentState::FromDataSource(ds); | 3700 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 3699 NavigationState* navigation_state = document_state->navigation_state(); | 3701 NavigationStateImpl* navigation_state = |
| 3702 static_cast<NavigationStateImpl*>(document_state->navigation_state()); | |
| 3700 InternalDocumentStateData* internal_data = | 3703 InternalDocumentStateData* internal_data = |
| 3701 InternalDocumentStateData::FromDocumentState(document_state); | 3704 InternalDocumentStateData::FromDocumentState(document_state); |
| 3702 | 3705 |
| 3703 FrameHostMsg_DidCommitProvisionalLoad_Params params; | 3706 FrameHostMsg_DidCommitProvisionalLoad_Params params; |
| 3704 params.http_status_code = response.httpStatusCode(); | 3707 params.http_status_code = response.httpStatusCode(); |
| 3705 params.url_is_unreachable = ds->hasUnreachableURL(); | 3708 params.url_is_unreachable = ds->hasUnreachableURL(); |
| 3706 params.is_post = false; | 3709 params.is_post = false; |
| 3707 params.post_id = -1; | 3710 params.post_id = -1; |
| 3708 params.page_id = render_view_->page_id_; | 3711 params.page_id = render_view_->page_id_; |
| 3709 // We need to track the RenderViewHost routing_id because of downstream | 3712 // We need to track the RenderViewHost routing_id because of downstream |
| 3710 // dependencies (crbug.com/392171 DownloadRequestHandle, SaveFileManager, | 3713 // dependencies (crbug.com/392171 DownloadRequestHandle, SaveFileManager, |
| 3711 // ResourceDispatcherHostImpl, MediaStreamUIProxy, | 3714 // ResourceDispatcherHostImpl, MediaStreamUIProxy, |
| 3712 // SpeechRecognitionDispatcherHost and possibly others). They look up the view | 3715 // SpeechRecognitionDispatcherHost and possibly others). They look up the view |
| 3713 // based on the ID stored in the resource requests. Once those dependencies | 3716 // based on the ID stored in the resource requests. Once those dependencies |
| 3714 // are unwound or moved to RenderFrameHost (crbug.com/304341) we can move the | 3717 // are unwound or moved to RenderFrameHost (crbug.com/304341) we can move the |
| 3715 // client to be based on the routing_id of the RenderFrameHost. | 3718 // client to be based on the routing_id of the RenderFrameHost. |
| 3716 params.render_view_routing_id = render_view_->routing_id(); | 3719 params.render_view_routing_id = render_view_->routing_id(); |
| 3717 params.socket_address.set_host(response.remoteIPAddress().utf8()); | 3720 params.socket_address.set_host(response.remoteIPAddress().utf8()); |
| 3718 params.socket_address.set_port(response.remotePort()); | 3721 params.socket_address.set_port(response.remotePort()); |
| 3719 WebURLResponseExtraDataImpl* extra_data = GetExtraDataFromResponse(response); | 3722 WebURLResponseExtraDataImpl* extra_data = GetExtraDataFromResponse(response); |
| 3720 if (extra_data) | 3723 if (extra_data) |
| 3721 params.was_fetched_via_proxy = extra_data->was_fetched_via_proxy(); | 3724 params.was_fetched_via_proxy = extra_data->was_fetched_via_proxy(); |
| 3722 params.was_within_same_page = navigation_state->was_within_same_page(); | 3725 params.was_within_same_page = navigation_state->GetWasWithinSamePage(); |
| 3723 params.security_info = response.securityInfo(); | 3726 params.security_info = response.securityInfo(); |
| 3724 | 3727 |
| 3725 // Set the URL to be displayed in the browser UI to the user. | 3728 // Set the URL to be displayed in the browser UI to the user. |
| 3726 params.url = GetLoadingUrl(); | 3729 params.url = GetLoadingUrl(); |
| 3727 DCHECK(!is_swapped_out_ || params.url == GURL(kSwappedOutURL)); | 3730 DCHECK(!is_swapped_out_ || params.url == GURL(kSwappedOutURL)); |
| 3728 | 3731 |
| 3729 // Set the origin of the frame. This will be replicated to the corresponding | 3732 // Set the origin of the frame. This will be replicated to the corresponding |
| 3730 // RenderFrameProxies in other processes. | 3733 // RenderFrameProxies in other processes. |
| 3731 // TODO(alexmos): Origins for URLs with non-standard schemes are excluded due | 3734 // TODO(alexmos): Origins for URLs with non-standard schemes are excluded due |
| 3732 // to https://crbug.com/439608 and will be replicated as unique origins. | 3735 // to https://crbug.com/439608 and will be replicated as unique origins. |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3784 if (host_zoom != render_view_->host_zoom_levels_.end()) { | 3787 if (host_zoom != render_view_->host_zoom_levels_.end()) { |
| 3785 // This zoom level was merely recorded transiently for this load. We can | 3788 // This zoom level was merely recorded transiently for this load. We can |
| 3786 // erase it now. If at some point we reload this page, the browser will | 3789 // erase it now. If at some point we reload this page, the browser will |
| 3787 // send us a new, up-to-date zoom level. | 3790 // send us a new, up-to-date zoom level. |
| 3788 render_view_->host_zoom_levels_.erase(host_zoom); | 3791 render_view_->host_zoom_levels_.erase(host_zoom); |
| 3789 } | 3792 } |
| 3790 | 3793 |
| 3791 // Update contents MIME type for main frame. | 3794 // Update contents MIME type for main frame. |
| 3792 params.contents_mime_type = ds->response().mimeType().utf8(); | 3795 params.contents_mime_type = ds->response().mimeType().utf8(); |
| 3793 | 3796 |
| 3794 params.transition = navigation_state->transition_type(); | 3797 params.transition = navigation_state->common_params().transition; |
| 3795 if (!ui::PageTransitionIsMainFrame(params.transition)) { | 3798 if (!ui::PageTransitionIsMainFrame(params.transition)) { |
| 3796 // If the main frame does a load, it should not be reported as a subframe | 3799 // If the main frame does a load, it should not be reported as a subframe |
| 3797 // navigation. This can occur in the following case: | 3800 // navigation. This can occur in the following case: |
| 3798 // 1. You're on a site with frames. | 3801 // 1. You're on a site with frames. |
| 3799 // 2. You do a subframe navigation. This is stored with transition type | 3802 // 2. You do a subframe navigation. This is stored with transition type |
| 3800 // MANUAL_SUBFRAME. | 3803 // MANUAL_SUBFRAME. |
| 3801 // 3. You navigate to some non-frame site, say, google.com. | 3804 // 3. You navigate to some non-frame site, say, google.com. |
| 3802 // 4. You navigate back to the page from step 2. Since it was initially | 3805 // 4. You navigate back to the page from step 2. Since it was initially |
| 3803 // MANUAL_SUBFRAME, it will be that same transition type here. | 3806 // MANUAL_SUBFRAME, it will be that same transition type here. |
| 3804 // We don't want that, because any navigation that changes the toplevel | 3807 // We don't want that, because any navigation that changes the toplevel |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 3827 | 3830 |
| 3828 // Send the user agent override back. | 3831 // Send the user agent override back. |
| 3829 params.is_overriding_user_agent = internal_data->is_overriding_user_agent(); | 3832 params.is_overriding_user_agent = internal_data->is_overriding_user_agent(); |
| 3830 | 3833 |
| 3831 // Track the URL of the original request. We use the first entry of the | 3834 // Track the URL of the original request. We use the first entry of the |
| 3832 // redirect chain if it exists because the chain may have started in another | 3835 // redirect chain if it exists because the chain may have started in another |
| 3833 // process. | 3836 // process. |
| 3834 params.original_request_url = GetOriginalRequestURL(ds); | 3837 params.original_request_url = GetOriginalRequestURL(ds); |
| 3835 | 3838 |
| 3836 params.history_list_was_cleared = | 3839 params.history_list_was_cleared = |
| 3837 navigation_state->history_list_was_cleared(); | 3840 navigation_state->history_params().should_clear_history_list; |
| 3838 | 3841 |
| 3839 params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>( | 3842 params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>( |
| 3840 frame->dataSource()->request().inputPerfMetricReportPolicy()); | 3843 frame->dataSource()->request().inputPerfMetricReportPolicy()); |
| 3841 params.ui_timestamp = base::TimeTicks() + base::TimeDelta::FromSecondsD( | 3844 params.ui_timestamp = base::TimeTicks() + base::TimeDelta::FromSecondsD( |
| 3842 frame->dataSource()->request().uiStartTime()); | 3845 frame->dataSource()->request().uiStartTime()); |
| 3843 | 3846 |
| 3844 // Save some histogram data so we can compute the average memory used per | 3847 // Save some histogram data so we can compute the average memory used per |
| 3845 // page load of the glyphs. | 3848 // page load of the glyphs. |
| 3846 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", | 3849 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", |
| 3847 blink::WebGlyphCache::pageCount()); | 3850 blink::WebGlyphCache::pageCount()); |
| 3848 | 3851 |
| 3849 // This message needs to be sent before any of allowScripts(), | 3852 // This message needs to be sent before any of allowScripts(), |
| 3850 // allowImages(), allowPlugins() is called for the new page, so that when | 3853 // allowImages(), allowPlugins() is called for the new page, so that when |
| 3851 // these functions send a ViewHostMsg_ContentBlocked message, it arrives | 3854 // these functions send a ViewHostMsg_ContentBlocked message, it arrives |
| 3852 // after the FrameHostMsg_DidCommitProvisionalLoad message. | 3855 // after the FrameHostMsg_DidCommitProvisionalLoad message. |
| 3853 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3856 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
| 3854 } else { | 3857 } else { |
| 3855 // Subframe navigation: the type depends on whether this navigation | 3858 // Subframe navigation: the type depends on whether this navigation |
| 3856 // generated a new session history entry. When they do generate a session | 3859 // generated a new session history entry. When they do generate a session |
| 3857 // history entry, it means the user initiated the navigation and we should | 3860 // history entry, it means the user initiated the navigation and we should |
| 3858 // mark it as such. | 3861 // mark it as such. |
| 3859 if (commit_type == blink::WebStandardCommit) | 3862 if (commit_type == blink::WebStandardCommit) |
| 3860 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; | 3863 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; |
| 3861 else | 3864 else |
| 3862 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; | 3865 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; |
| 3863 | 3866 |
| 3864 DCHECK(!navigation_state->history_list_was_cleared()); | 3867 DCHECK(!navigation_state->history_params().should_clear_history_list); |
| 3865 params.history_list_was_cleared = false; | 3868 params.history_list_was_cleared = false; |
| 3866 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT; | 3869 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT; |
| 3867 | 3870 |
| 3868 // Don't send this message while the subframe is swapped out. | 3871 // Don't send this message while the subframe is swapped out. |
| 3869 if (!is_swapped_out()) | 3872 if (!is_swapped_out()) |
| 3870 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); | 3873 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); |
| 3871 } | 3874 } |
| 3872 | 3875 |
| 3873 // If we end up reusing this WebRequest (for example, due to a #ref click), | 3876 // If we end up reusing this WebRequest (for example, due to a #ref click), |
| 3874 // we don't want the transition type to persist. Just clear it. | 3877 // we don't want the transition type to persist. Just clear it. |
| 3875 navigation_state->set_transition_type(ui::PAGE_TRANSITION_LINK); | 3878 navigation_state->common_params().transition = ui::PAGE_TRANSITION_LINK; |
| 3876 } | 3879 } |
| 3877 | 3880 |
| 3878 void RenderFrameImpl::didStartLoading(bool to_different_document) { | 3881 void RenderFrameImpl::didStartLoading(bool to_different_document) { |
| 3879 TRACE_EVENT1("navigation", "RenderFrameImpl::didStartLoading", | 3882 TRACE_EVENT1("navigation", "RenderFrameImpl::didStartLoading", |
| 3880 "id", routing_id_); | 3883 "id", routing_id_); |
| 3881 render_view_->FrameDidStartLoading(frame_); | 3884 render_view_->FrameDidStartLoading(frame_); |
| 3882 Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document)); | 3885 Send(new FrameHostMsg_DidStartLoading(routing_id_, to_different_document)); |
| 3883 } | 3886 } |
| 3884 | 3887 |
| 3885 void RenderFrameImpl::didStopLoading() { | 3888 void RenderFrameImpl::didStopLoading() { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4020 } | 4023 } |
| 4021 } | 4024 } |
| 4022 | 4025 |
| 4023 // Webkit is asking whether to navigate to a new URL. | 4026 // Webkit is asking whether to navigate to a new URL. |
| 4024 // This is fine normally, except if we're showing UI from one security | 4027 // This is fine normally, except if we're showing UI from one security |
| 4025 // context and they're trying to navigate to a different context. | 4028 // context and they're trying to navigate to a different context. |
| 4026 const GURL& url = info.urlRequest.url(); | 4029 const GURL& url = info.urlRequest.url(); |
| 4027 | 4030 |
| 4028 // A content initiated navigation may have originated from a link-click, | 4031 // A content initiated navigation may have originated from a link-click, |
| 4029 // script, drag-n-drop operation, etc. | 4032 // script, drag-n-drop operation, etc. |
| 4030 bool is_content_initiated = static_cast<DocumentState*>(info.extraData)-> | 4033 DocumentState* document_state = static_cast<DocumentState*>(info.extraData); |
| 4031 navigation_state()->is_content_initiated(); | 4034 bool is_content_initiated = |
| 4035 static_cast<NavigationStateImpl*>(document_state->navigation_state()) | |
|
Charlie Reis
2015/03/17 03:26:31
Why do you need this static cast? IsContentInitia
clamy
2015/03/17 16:08:18
Done (it was not initially).
| |
| 4036 ->IsContentInitiated(); | |
| 4032 | 4037 |
| 4033 // Experimental: | 4038 // Experimental: |
| 4034 // If --enable-strict-site-isolation is enabled, send all top-level | 4039 // If --enable-strict-site-isolation is enabled, send all top-level |
| 4035 // navigations to the browser to let it swap processes when crossing site | 4040 // navigations to the browser to let it swap processes when crossing site |
| 4036 // boundaries. This is currently expected to break some script calls and | 4041 // boundaries. This is currently expected to break some script calls and |
| 4037 // navigations, such as form submissions. | 4042 // navigations, such as form submissions. |
| 4038 bool force_swap_due_to_flag = | 4043 bool force_swap_due_to_flag = |
| 4039 command_line.HasSwitch(switches::kEnableStrictSiteIsolation); | 4044 command_line.HasSwitch(switches::kEnableStrictSiteIsolation); |
| 4040 if (force_swap_due_to_flag && | 4045 if (force_swap_due_to_flag && |
| 4041 !info.frame->parent() && (is_content_initiated || info.isRedirect)) { | 4046 !info.frame->parent() && (is_content_initiated || info.isRedirect)) { |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4201 WebNavigationPolicy policy) { | 4206 WebNavigationPolicy policy) { |
| 4202 DCHECK_EQ(frame_, frame); | 4207 DCHECK_EQ(frame_, frame); |
| 4203 | 4208 |
| 4204 FrameHostMsg_OpenURL_Params params; | 4209 FrameHostMsg_OpenURL_Params params; |
| 4205 params.url = url; | 4210 params.url = url; |
| 4206 params.referrer = referrer; | 4211 params.referrer = referrer; |
| 4207 params.disposition = RenderViewImpl::NavigationPolicyToDisposition(policy); | 4212 params.disposition = RenderViewImpl::NavigationPolicyToDisposition(policy); |
| 4208 WebDataSource* ds = frame->provisionalDataSource(); | 4213 WebDataSource* ds = frame->provisionalDataSource(); |
| 4209 if (ds) { | 4214 if (ds) { |
| 4210 DocumentState* document_state = DocumentState::FromDataSource(ds); | 4215 DocumentState* document_state = DocumentState::FromDataSource(ds); |
| 4211 NavigationState* navigation_state = document_state->navigation_state(); | 4216 NavigationStateImpl* navigation_state = |
| 4212 if (navigation_state->is_content_initiated()) { | 4217 static_cast<NavigationStateImpl*>(document_state->navigation_state()); |
| 4218 if (navigation_state->IsContentInitiated()) { | |
| 4213 params.should_replace_current_entry = | 4219 params.should_replace_current_entry = |
| 4214 ds->replacesCurrentHistoryItem() && | 4220 ds->replacesCurrentHistoryItem() && |
| 4215 render_view_->history_list_length_; | 4221 render_view_->history_list_length_; |
| 4216 } else { | 4222 } else { |
| 4217 // This is necessary to preserve the should_replace_current_entry value on | 4223 // This is necessary to preserve the should_replace_current_entry value on |
| 4218 // cross-process redirects, in the event it was set by a previous process. | 4224 // cross-process redirects, in the event it was set by a previous process. |
| 4219 // | 4225 // |
| 4220 // TODO(davidben): Avoid this awkward duplication of state. See comment on | 4226 // TODO(davidben): Avoid this awkward duplication of state. See comment on |
| 4221 // NavigationState::should_replace_current_entry(). | 4227 // NavigationState::should_replace_current_entry(). |
| 4222 params.should_replace_current_entry = | 4228 params.should_replace_current_entry = |
| 4223 navigation_state->should_replace_current_entry(); | 4229 navigation_state->start_params().should_replace_current_entry; |
| 4224 } | 4230 } |
| 4225 } else { | 4231 } else { |
| 4226 params.should_replace_current_entry = false; | 4232 params.should_replace_current_entry = false; |
| 4227 } | 4233 } |
| 4228 params.user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); | 4234 params.user_gesture = WebUserGestureIndicator::isProcessingUserGesture(); |
| 4229 if (GetContentClient()->renderer()->AllowPopup()) | 4235 if (GetContentClient()->renderer()->AllowPopup()) |
| 4230 params.user_gesture = true; | 4236 params.user_gesture = true; |
| 4231 | 4237 |
| 4232 if (policy == blink::WebNavigationPolicyNewBackgroundTab || | 4238 if (policy == blink::WebNavigationPolicyNewBackgroundTab || |
| 4233 policy == blink::WebNavigationPolicyNewForegroundTab || | 4239 policy == blink::WebNavigationPolicyNewForegroundTab || |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4523 | 4529 |
| 4524 #if defined(ENABLE_BROWSER_CDMS) | 4530 #if defined(ENABLE_BROWSER_CDMS) |
| 4525 RendererCdmManager* RenderFrameImpl::GetCdmManager() { | 4531 RendererCdmManager* RenderFrameImpl::GetCdmManager() { |
| 4526 if (!cdm_manager_) | 4532 if (!cdm_manager_) |
| 4527 cdm_manager_ = new RendererCdmManager(this); | 4533 cdm_manager_ = new RendererCdmManager(this); |
| 4528 return cdm_manager_; | 4534 return cdm_manager_; |
| 4529 } | 4535 } |
| 4530 #endif // defined(ENABLE_BROWSER_CDMS) | 4536 #endif // defined(ENABLE_BROWSER_CDMS) |
| 4531 | 4537 |
| 4532 } // namespace content | 4538 } // namespace content |
| OLD | NEW |