Chromium Code Reviews| Index: chrome/renderer/render_view.cc |
| =================================================================== |
| --- chrome/renderer/render_view.cc (revision 75181) |
| +++ chrome/renderer/render_view.cc (working copy) |
| @@ -557,6 +557,7 @@ |
| navigation_gesture_(NavigationGestureUnknown), |
| opened_by_user_gesture_(true), |
| opener_suppressed_(false), |
| + is_prerendering_(false), |
| page_id_(-1), |
| last_page_id_sent_to_browser_(-1), |
| last_indexed_page_id_(-1), |
| @@ -1425,8 +1426,7 @@ |
| navigation_state->set_load_type(NavigationState::NORMAL_LOAD); |
| } else { |
| navigation_state->set_load_type(NavigationState::PRERENDER_LOAD); |
| - navigation_state->set_was_started_as_prerender(true); |
| - navigation_state->set_is_prerendering(true); |
| + is_prerendering_ = true; |
| } |
| } |
| main_frame->loadRequest(request); |
| @@ -2720,11 +2720,8 @@ |
| if (info.path.value() == webkit::npapi::kDefaultPluginLibraryName || |
| plugin_setting == CONTENT_SETTING_ALLOW || |
| host_setting == CONTENT_SETTING_ALLOW) { |
| - // Delay loading plugins if prerendering main frame. |
| - WebDataSource* main_frame_ds = webview()->mainFrame()->dataSource(); |
| - NavigationState* navigation_state = |
| - NavigationState::FromDataSource(main_frame_ds); |
| - if (navigation_state->is_prerendering()) { |
| + // Delay loading plugins if prerendering. |
| + if (is_prerendering_) { |
| return CreatePluginPlaceholder(frame, |
| params, |
| *group, |
| @@ -3229,19 +3226,7 @@ |
| new UserScriptIdleScheduler(this, frame)); |
| } |
| - // If the RenderView was prerendering before, it is still prerendering. |
| - if (!frame->parent() && content_initiated) { |
| - WebDataSource* ds_old = webview()->mainFrame()->dataSource(); |
| - if (ds_old) { |
| - NavigationState* navigation_state = |
| - NavigationState::FromDataSource(ds_old); |
| - if (navigation_state) { |
| - state->set_is_prerendering(navigation_state->is_prerendering()); |
| - state->set_was_started_as_prerender( |
| - navigation_state->was_started_as_prerender()); |
| - } |
| - } |
| - } |
| + state->set_was_started_as_prerender(is_prerendering_); |
| ds->setExtraData(state); |
| } |
| @@ -4718,15 +4703,25 @@ |
| } |
| void RenderView::OnDisplayPrerenderedPage() { |
| - NavigationState* navigation_state = pending_navigation_state_.get(); |
| - if (!navigation_state) { |
| - WebDataSource* ds = webview()->mainFrame()->dataSource(); |
| - navigation_state = NavigationState::FromDataSource(ds); |
| - } |
| + DCHECK(is_prerendering_); |
| + is_prerendering_ = false; |
| - DCHECK(navigation_state->is_prerendering()); |
| - navigation_state->set_is_prerendering(false); |
| + // Update NavigationState for histograms. |
| + WebDataSource* ds = webview()->mainFrame()->dataSource(); |
| + NavigationState* navigation_state = NavigationState::FromDataSource(ds); |
| navigation_state->set_prerendered_page_display_time(Time::Now()); |
| + |
| + // If there is a provisional data source, update its NavigationState, too. |
| + WebDataSource* povisional_ds = |
|
cbentzel
2011/02/18 13:56:47
provisional_ds - although at least the misspelling
mmenke
2011/02/18 14:53:04
Fixed, though I prefer my more creative spelling.
|
| + webview()->mainFrame()->provisionalDataSource(); |
| + if (povisional_ds) { |
| + NavigationState* provisional_navigation_state = |
| + NavigationState::FromDataSource(povisional_ds); |
| + if (provisional_navigation_state) { |
| + provisional_navigation_state->set_prerendered_page_display_time( |
| + Time::Now()); |
| + } |
| + } |
| } |
| void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { |