Index: chrome/renderer/render_view.cc |
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc |
index 64b0812a663f44d56b4f88c80137764d7dff9fc7..89aec82df7ec8959f8a7ea73434fe70b73dfd87a 100644 |
--- a/chrome/renderer/render_view.cc |
+++ b/chrome/renderer/render_view.cc |
@@ -3265,8 +3265,16 @@ void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { |
} |
} |
- state->set_user_script_idle_scheduler( |
- new UserScriptIdleScheduler(this, frame)); |
+ // If this datasource already has a UserScriptIdleScheduler, reuse that one. |
+ // This is for navigations within a page (didNavigateWithinPage). See |
+ // http://code.google.com/p/chromium/issues/detail?id=64093 |
+ NavigationState* old_state = NavigationState::FromDataSource(ds); |
+ if (old_state && old_state->user_script_idle_scheduler()) { |
+ state->swap_user_script_idle_scheduler(old_state); |
+ } else { |
+ state->set_user_script_idle_scheduler( |
+ new UserScriptIdleScheduler(this, frame)); |
+ } |
ds->setExtraData(state); |
} |
@@ -3595,11 +3603,6 @@ void RenderView::didFinishLoad(WebFrame* frame) { |
void RenderView::didNavigateWithinPage( |
WebFrame* frame, bool is_new_navigation) { |
- // Determine if the UserScriptIdleScheduler already ran scripts on this page, |
- // since a new one gets created by didCreateDataSource. |
- NavigationState* state = NavigationState::FromDataSource(frame->dataSource()); |
- bool idle_scheduler_ran = state->user_script_idle_scheduler()->has_run(); |
- |
// If this was a reference fragment navigation that we initiated, then we |
// could end up having a non-null pending navigation state. We just need to |
// update the ExtraData on the datasource so that others who read the |
@@ -3613,11 +3616,6 @@ void RenderView::didNavigateWithinPage( |
NavigationState::FromDataSource(frame->dataSource()); |
new_state->set_was_within_same_page(true); |
- if (idle_scheduler_ran) { |
- // Update the new UserScriptIdleScheduler so we don't re-run scripts. |
- new_state->user_script_idle_scheduler()->set_has_run(true); |
- } |
- |
didCommitProvisionalLoad(frame, is_new_navigation); |
UpdateTitle(frame, frame->view()->mainFrame()->dataSource()->pageTitle()); |