| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/renderer/render_view.h" | 5 #include "chrome/renderer/render_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 3247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3258 break; | 3258 break; |
| 3259 case WebURLRequest::ReturnCacheDataElseLoad: // allow stale data. | 3259 case WebURLRequest::ReturnCacheDataElseLoad: // allow stale data. |
| 3260 state->set_load_type(NavigationState::LINK_LOAD_CACHE_STALE_OK); | 3260 state->set_load_type(NavigationState::LINK_LOAD_CACHE_STALE_OK); |
| 3261 break; | 3261 break; |
| 3262 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. | 3262 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. |
| 3263 state->set_load_type(NavigationState::LINK_LOAD_CACHE_ONLY); | 3263 state->set_load_type(NavigationState::LINK_LOAD_CACHE_ONLY); |
| 3264 break; | 3264 break; |
| 3265 } | 3265 } |
| 3266 } | 3266 } |
| 3267 | 3267 |
| 3268 state->set_user_script_idle_scheduler( | 3268 // If this datasource already has a UserScriptIdleScheduler, reuse that one. |
| 3269 new UserScriptIdleScheduler(this, frame)); | 3269 // This is for navigations within a page (didNavigateWithinPage). See |
| 3270 // http://code.google.com/p/chromium/issues/detail?id=64093 |
| 3271 NavigationState* old_state = NavigationState::FromDataSource(ds); |
| 3272 if (old_state && old_state->user_script_idle_scheduler()) { |
| 3273 state->swap_user_script_idle_scheduler(old_state); |
| 3274 } else { |
| 3275 state->set_user_script_idle_scheduler( |
| 3276 new UserScriptIdleScheduler(this, frame)); |
| 3277 } |
| 3270 ds->setExtraData(state); | 3278 ds->setExtraData(state); |
| 3271 } | 3279 } |
| 3272 | 3280 |
| 3273 void RenderView::didStartProvisionalLoad(WebFrame* frame) { | 3281 void RenderView::didStartProvisionalLoad(WebFrame* frame) { |
| 3274 WebDataSource* ds = frame->provisionalDataSource(); | 3282 WebDataSource* ds = frame->provisionalDataSource(); |
| 3275 NavigationState* navigation_state = NavigationState::FromDataSource(ds); | 3283 NavigationState* navigation_state = NavigationState::FromDataSource(ds); |
| 3276 | 3284 |
| 3277 // Update the request time if WebKit has better knowledge of it. | 3285 // Update the request time if WebKit has better knowledge of it. |
| 3278 if (navigation_state->request_time().is_null()) { | 3286 if (navigation_state->request_time().is_null()) { |
| 3279 double event_time = ds->triggeringEventTime(); | 3287 double event_time = ds->triggeringEventTime(); |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3588 navigation_state->user_script_idle_scheduler()->DidFinishLoad(); | 3596 navigation_state->user_script_idle_scheduler()->DidFinishLoad(); |
| 3589 | 3597 |
| 3590 // Let the password manager know which password forms are actually visible. | 3598 // Let the password manager know which password forms are actually visible. |
| 3591 password_autocomplete_manager_->SendPasswordForms(frame, true); | 3599 password_autocomplete_manager_->SendPasswordForms(frame, true); |
| 3592 | 3600 |
| 3593 Send(new ViewHostMsg_DidFinishLoad(routing_id_, frame->identifier())); | 3601 Send(new ViewHostMsg_DidFinishLoad(routing_id_, frame->identifier())); |
| 3594 } | 3602 } |
| 3595 | 3603 |
| 3596 void RenderView::didNavigateWithinPage( | 3604 void RenderView::didNavigateWithinPage( |
| 3597 WebFrame* frame, bool is_new_navigation) { | 3605 WebFrame* frame, bool is_new_navigation) { |
| 3598 // Determine if the UserScriptIdleScheduler already ran scripts on this page, | |
| 3599 // since a new one gets created by didCreateDataSource. | |
| 3600 NavigationState* state = NavigationState::FromDataSource(frame->dataSource()); | |
| 3601 bool idle_scheduler_ran = state->user_script_idle_scheduler()->has_run(); | |
| 3602 | |
| 3603 // If this was a reference fragment navigation that we initiated, then we | 3606 // If this was a reference fragment navigation that we initiated, then we |
| 3604 // could end up having a non-null pending navigation state. We just need to | 3607 // could end up having a non-null pending navigation state. We just need to |
| 3605 // update the ExtraData on the datasource so that others who read the | 3608 // update the ExtraData on the datasource so that others who read the |
| 3606 // ExtraData will get the new NavigationState. Similarly, if we did not | 3609 // ExtraData will get the new NavigationState. Similarly, if we did not |
| 3607 // initiate this navigation, then we need to take care to reset any pre- | 3610 // initiate this navigation, then we need to take care to reset any pre- |
| 3608 // existing navigation state to a content-initiated navigation state. | 3611 // existing navigation state to a content-initiated navigation state. |
| 3609 // DidCreateDataSource conveniently takes care of this for us. | 3612 // DidCreateDataSource conveniently takes care of this for us. |
| 3610 didCreateDataSource(frame, frame->dataSource()); | 3613 didCreateDataSource(frame, frame->dataSource()); |
| 3611 | 3614 |
| 3612 NavigationState* new_state = | 3615 NavigationState* new_state = |
| 3613 NavigationState::FromDataSource(frame->dataSource()); | 3616 NavigationState::FromDataSource(frame->dataSource()); |
| 3614 new_state->set_was_within_same_page(true); | 3617 new_state->set_was_within_same_page(true); |
| 3615 | 3618 |
| 3616 if (idle_scheduler_ran) { | |
| 3617 // Update the new UserScriptIdleScheduler so we don't re-run scripts. | |
| 3618 new_state->user_script_idle_scheduler()->set_has_run(true); | |
| 3619 } | |
| 3620 | |
| 3621 didCommitProvisionalLoad(frame, is_new_navigation); | 3619 didCommitProvisionalLoad(frame, is_new_navigation); |
| 3622 | 3620 |
| 3623 UpdateTitle(frame, frame->view()->mainFrame()->dataSource()->pageTitle()); | 3621 UpdateTitle(frame, frame->view()->mainFrame()->dataSource()->pageTitle()); |
| 3624 } | 3622 } |
| 3625 | 3623 |
| 3626 void RenderView::didUpdateCurrentHistoryItem(WebFrame* frame) { | 3624 void RenderView::didUpdateCurrentHistoryItem(WebFrame* frame) { |
| 3627 StartNavStateSyncTimerIfNecessary(); | 3625 StartNavStateSyncTimerIfNecessary(); |
| 3628 } | 3626 } |
| 3629 | 3627 |
| 3630 void RenderView::assignIdentifierToRequest( | 3628 void RenderView::assignIdentifierToRequest( |
| (...skipping 2150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5781 } | 5779 } |
| 5782 #endif | 5780 #endif |
| 5783 | 5781 |
| 5784 void RenderView::OnJavaScriptStressTestControl(int cmd, int param) { | 5782 void RenderView::OnJavaScriptStressTestControl(int cmd, int param) { |
| 5785 if (cmd == kJavaScriptStressTestSetStressRunType) { | 5783 if (cmd == kJavaScriptStressTestSetStressRunType) { |
| 5786 v8::Testing::SetStressRunType(static_cast<v8::Testing::StressType>(param)); | 5784 v8::Testing::SetStressRunType(static_cast<v8::Testing::StressType>(param)); |
| 5787 } else if (cmd == kJavaScriptStressTestPrepareStressRun) { | 5785 } else if (cmd == kJavaScriptStressTestPrepareStressRun) { |
| 5788 v8::Testing::PrepareStressRun(param); | 5786 v8::Testing::PrepareStressRun(param); |
| 5789 } | 5787 } |
| 5790 } | 5788 } |
| OLD | NEW |