Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1242)

Unified Diff: chrome/browser/prerender/prerender_manager.cc

Issue 233353003: Only commit cookie changes in prerenders after a prerender is shown (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add browser tests, fix a bug in what was changed yesterday. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_manager.cc
===================================================================
--- chrome/browser/prerender/prerender_manager.cc (revision 265252)
+++ chrome/browser/prerender/prerender_manager.cc (working copy)
@@ -58,6 +58,7 @@
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/session_storage_namespace.h"
+#include "content/public/browser/storage_partition.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_delegate.h"
#include "content/public/browser/web_contents_view.h"
@@ -246,7 +247,8 @@
prerender_history_(new PrerenderHistory(kHistoryLength)),
histograms_(new PrerenderHistograms()),
profile_network_bytes_(0),
- last_recorded_profile_network_bytes_(0) {
+ last_recorded_profile_network_bytes_(0),
+ cookie_store_loaded_(false) {
// There are some assumptions that the PrerenderManager is on the UI thread.
// Any other checks simply make sure that the PrerenderManager is accessed on
// the same thread that it was created on.
@@ -578,6 +580,8 @@
}
// At this point, we've determined that we will use the prerender.
+ prerender_tracker()->OnPrerenderSwapped(
+ prerender_data->contents()->GetRenderViewHost()->GetProcess());
if (!prerender_data->contents()->load_start_time().is_null()) {
histograms_->RecordTimeUntilUsed(
prerender_data->contents()->origin(),
@@ -1218,6 +1222,12 @@
SortActivePrerenders();
}
+net::URLRequestContextGetter* PrerenderManager::GetURLRequestContext() {
+ return content::BrowserContext::GetDefaultStoragePartition(profile_)->
+ GetURLRequestContext();
+}
+
+
// private
PrerenderHandle* PrerenderManager::AddPrerender(
Origin origin,
@@ -1282,6 +1292,13 @@
return NULL;
}
+ if (!cookie_store_loaded()) {
+ // Only prerender if the cookie store for this profile has been loaded.
+ // This is required by PrerenderCookieMonster.
+ RecordFinalStatus(origin, experiment, FINAL_STATUS_COOKIE_STORE_NOT_LOADED);
+ return NULL;
+ }
+
PrerenderContents* prerender_contents = CreatePrerenderContents(
url, referrer, origin, experiment);
DCHECK(prerender_contents);
@@ -1306,11 +1323,16 @@
gfx::Size contents_size =
size.IsEmpty() ? config_.default_tab_bounds.size() : size;
+ net::URLRequestContextGetter* request_context = GetURLRequestContext();
+
prerender_contents->StartPrerendering(process_id, contents_size,
- session_storage_namespace);
+ session_storage_namespace,
+ request_context);
DCHECK(IsControlGroup(experiment) ||
- prerender_contents->prerendering_has_started());
+ prerender_contents->prerendering_has_started() ||
+ (origin == ORIGIN_LOCAL_PREDICTOR &&
+ IsLocalPredictorPrerenderAlwaysControlEnabled()));
if (GetMode() == PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP)
histograms_->RecordConcurrency(active_prerenders_.size());
@@ -1828,4 +1850,10 @@
profile_network_bytes_ += bytes;
}
+void PrerenderManager::OnCookieStoreLoaded() {
+ cookie_store_loaded_ = true;
+ if (!on_cookie_store_loaded_cb_.is_null())
+ on_cookie_store_loaded_cb_.Run();
+}
+
} // namespace prerender

Powered by Google App Engine
This is Rietveld 408576698