summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/navigation_state.cc9
-rw-r--r--chrome/renderer/navigation_state.h8
-rw-r--r--chrome/renderer/render_view.cc49
-rw-r--r--chrome/renderer/render_view.h3
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