diff options
-rw-r--r-- | chrome/renderer/navigation_state.cc | 9 | ||||
-rw-r--r-- | chrome/renderer/navigation_state.h | 8 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 49 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 3 |
4 files changed, 25 insertions, 44 deletions
diff --git a/chrome/renderer/navigation_state.cc b/chrome/renderer/navigation_state.cc index dfa9f84..57be7eb 100644 --- a/chrome/renderer/navigation_state.cc +++ b/chrome/renderer/navigation_state.cc @@ -39,14 +39,6 @@ void NavigationState::set_alt_error_page_fetcher( alt_error_page_fetcher_.reset(f); } -bool NavigationState::is_prerendering() const { - return is_prerendering_; -} - -void NavigationState::set_is_prerendering(bool is_prerendering) { - is_prerendering_ = is_prerendering; -} - bool NavigationState::was_started_as_prerender() const { return was_started_as_prerender_; } @@ -72,7 +64,6 @@ NavigationState::NavigationState(PageTransition::Type transition_type, pending_page_id_(pending_page_id), pending_history_list_offset_(pending_history_list_offset), use_error_page_(false), - is_prerendering_(false), was_started_as_prerender_(false), cache_policy_override_set_(false), cache_policy_override_(WebKit::WebURLRequest::UseProtocolCachePolicy), diff --git a/chrome/renderer/navigation_state.h b/chrome/renderer/navigation_state.h index 9549f62..e5071e9 100644 --- a/chrome/renderer/navigation_state.h +++ b/chrome/renderer/navigation_state.h @@ -215,9 +215,6 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { use_error_page_ = use_error_page; } - bool is_prerendering() const; - void set_is_prerendering(bool is_prerendering); - bool was_started_as_prerender() const; void set_was_started_as_prerender(bool was_started_as_prerender); @@ -315,11 +312,6 @@ class NavigationState : public WebKit::WebDataSource::ExtraData { // an error. bool use_error_page_; - // True if page is being prerendered. False once prerendered page is - // displayed. Preserved across redirects. Only set for the main frame's - // data source. - bool is_prerendering_; - // True if a page load started as a prerender. Preserved across redirects. bool was_started_as_prerender_; diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 65004f2..994d6b9 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -562,6 +562,7 @@ RenderView::RenderView(RenderThreadBase* render_thread, 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), @@ -1438,8 +1439,7 @@ void RenderView::OnNavigate(const ViewMsg_Navigate_Params& params) { 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); @@ -2740,11 +2740,8 @@ WebPlugin* RenderView::createPlugin(WebFrame* frame, 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, @@ -3249,19 +3246,7 @@ void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { 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); } @@ -4713,15 +4698,25 @@ void RenderView::OnInstallMissingPlugin() { } 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* provisional_ds = + webview()->mainFrame()->provisionalDataSource(); + if (provisional_ds) { + NavigationState* provisional_navigation_state = + NavigationState::FromDataSource(provisional_ds); + if (provisional_navigation_state) { + provisional_navigation_state->set_prerendered_page_display_time( + Time::Now()); + } + } } void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 7b78c93..cf41866 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -1174,6 +1174,9 @@ class RenderView : public RenderWidget, // Timer used to delay the updating of nav state (see SyncNavigationState). base::OneShotTimer<RenderView> nav_state_sync_timer_; + // True if the RenderView is currently prerendering a page. + bool is_prerendering_; + // Page IDs ------------------------------------------------------------------ // // Page IDs allow the browser to identify pages in each renderer process for |