Index: chrome/browser/autocomplete/network_action_predictor.cc |
diff --git a/chrome/browser/autocomplete/network_action_predictor.cc b/chrome/browser/autocomplete/network_action_predictor.cc |
index b43ee3c0167eaa6e4d10d2c8e22c1b400a202b08..11bf63098db906740faf5a430791ee7ea7840786 100644 |
--- a/chrome/browser/autocomplete/network_action_predictor.cc |
+++ b/chrome/browser/autocomplete/network_action_predictor.cc |
@@ -20,6 +20,8 @@ |
#include "chrome/browser/history/history_notifications.h" |
#include "chrome/browser/history/in_memory_database.h" |
#include "chrome/browser/prerender/prerender_field_trial.h" |
+#include "chrome/browser/prerender/prerender_manager.h" |
+#include "chrome/browser/prerender/prerender_manager_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "chrome/common/guid.h" |
@@ -235,6 +237,15 @@ void NetworkActionPredictor::OnOmniboxOpenedUrl(const AutocompleteLog& log) { |
const GURL& opened_url = match.destination_url; |
+ // If the Omnibox triggered a prerender but the URL doesn't match the one the |
+ // user is navigating to, cancel the prerender. |
+ prerender::PrerenderManager* prerender_manager = |
+ prerender::PrerenderManagerFactory::GetForProfile(profile_); |
+ // |prerender_manager| can be NULL in incognito mode or if prerendering is |
+ // otherwise disabled. |
+ if (prerender_manager && !prerender_manager->IsPrerendering(opened_url)) |
+ prerender_manager->CancelOmniboxPrerenders(); |
+ |
const string16 lower_user_text(base::i18n::ToLower(log.text)); |
BeginTransaction(); |
@@ -291,7 +302,6 @@ void NetworkActionPredictor::OnOmniboxOpenedUrl(const AutocompleteLog& log) { |
tracked_urls_.clear(); |
} |
- |
void NetworkActionPredictor::DeleteOldIdsFromCaches( |
history::URLDatabase* url_db, |
std::vector<NetworkActionPredictorDatabase::Row::Id>* id_list) { |