Index: chrome/browser/autocomplete/autocomplete_edit.cc |
diff --git a/chrome/browser/autocomplete/autocomplete_edit.cc b/chrome/browser/autocomplete/autocomplete_edit.cc |
index eb6c6a72b782779372fb4ea3fb45d43dfe1b4950..8c6eb8f4d4903b4f4c4a13538f5c188d94692e74 100644 |
--- a/chrome/browser/autocomplete/autocomplete_edit.cc |
+++ b/chrome/browser/autocomplete/autocomplete_edit.cc |
@@ -23,6 +23,7 @@ |
#include "chrome/browser/instant/instant_controller.h" |
#include "chrome/browser/net/predictor_api.h" |
#include "chrome/browser/net/url_fixer_upper.h" |
+#include "chrome/browser/prerender/prerender_manager.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/search_engines/template_url.h" |
#include "chrome/browser/search_engines/template_url_service.h" |
@@ -79,7 +80,7 @@ AutocompleteEditModel::AutocompleteEditModel( |
control_key_state_(UP), |
is_keyword_hint_(false), |
profile_(profile), |
- update_instant_(true), |
+ in_revert_(false), |
allow_exact_keyword_match_(false), |
instant_complete_behavior_(INSTANT_COMPLETE_DELAYED) { |
} |
@@ -213,22 +214,33 @@ void AutocompleteEditModel::OnChanged() { |
string16 suggested_text; |
TabContentsWrapper* tab = controller_->GetTabContentsWrapper(); |
bool might_support_instant = false; |
- if (update_instant_ && instant && tab) { |
- if (user_input_in_progress() && popup_->IsOpen()) { |
- AutocompleteMatch current_match = CurrentMatch(); |
- if (current_match.destination_url == PermanentURL()) { |
- // The destination is the same as the current url. This typically |
- // happens if the user presses the down error in the omnibox, in which |
- // case we don't want to load a preview. |
- instant->DestroyPreviewContentsAndLeaveActive(); |
+ if (!in_revert_ && tab) { |
+ if (instant) { |
+ if (user_input_in_progress() && popup_->IsOpen()) { |
+ AutocompleteMatch current_match = CurrentMatch(); |
+ if (current_match.destination_url == PermanentURL()) { |
+ // The destination is the same as the current url. This typically |
+ // happens if the user presses the down error in the omnibox, in which |
+ // case we don't want to load a preview. |
+ instant->DestroyPreviewContentsAndLeaveActive(); |
+ } else { |
+ instant->Update(tab, current_match, view_->GetText(), |
+ UseVerbatimInstant(), &suggested_text); |
+ } |
} else { |
- instant->Update(tab, CurrentMatch(), view_->GetText(), |
- UseVerbatimInstant(), &suggested_text); |
+ instant->DestroyPreviewContents(); |
+ } |
+ might_support_instant = instant->MightSupportInstant(); |
+ } else if (user_input_in_progress() && popup_->IsOpen()) { |
+ // Start Prerender of this page instead. |
+ CHECK(tab->tab_contents()); |
+ prerender::PrerenderManager* prerender_manager = |
+ tab->tab_contents()->profile()->GetPrerenderManager(); |
+ if (prerender_manager) { |
+ prerender_manager->AddPrerender(prerender::ORIGIN_OMNIBOX, |
+ CurrentMatch().destination_url); |
} |
- } else { |
- instant->DestroyPreviewContents(); |
} |
- might_support_instant = instant->MightSupportInstant(); |
} |
if (!might_support_instant) { |
@@ -399,7 +411,7 @@ void AutocompleteEditModel::StartAutocomplete( |
} |
void AutocompleteEditModel::StopAutocomplete() { |
- if (popup_->IsOpen() && update_instant_) { |
+ if (popup_->IsOpen() && !in_revert_) { |
InstantController* instant = controller_->GetInstant(); |
if (instant && !instant->commit_on_mouse_up()) |
instant->DestroyPreviewContents(); |
@@ -534,7 +546,7 @@ void AutocompleteEditModel::OpenMatch(const AutocompleteMatch& match, |
} |
if (disposition != NEW_BACKGROUND_TAB) { |
- update_instant_ = false; |
+ in_revert_ = true; |
view_->RevertAll(); // Revert the box to its unedited state |
} |
@@ -548,7 +560,7 @@ void AutocompleteEditModel::OpenMatch(const AutocompleteMatch& match, |
InstantController* instant = controller_->GetInstant(); |
if (instant && !popup_->IsOpen()) |
instant->DestroyPreviewContents(); |
- update_instant_ = true; |
+ in_revert_ = false; |
} |
bool AutocompleteEditModel::AcceptKeyword() { |