Index: chrome/browser/ui/search/instant_controller.cc |
diff --git a/chrome/browser/ui/search/instant_controller.cc b/chrome/browser/ui/search/instant_controller.cc |
index 30676a536105ed61d4b161eac4ae7ccb088a0930..a10ccef914d5aedcddfc7302546eaed2a56afbb6 100644 |
--- a/chrome/browser/ui/search/instant_controller.cc |
+++ b/chrome/browser/ui/search/instant_controller.cc |
@@ -220,7 +220,7 @@ InstantController::InstantController(BrowserInstantController* browser, |
: browser_(browser), |
extended_enabled_(extended_enabled), |
instant_enabled_(false), |
- use_local_overlay_only_(true), |
+ use_local_page_only_(true), |
model_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
last_omnibox_text_has_inline_autocompletion_(false), |
last_verbatim_(false), |
@@ -504,8 +504,16 @@ scoped_ptr<content::WebContents> InstantController::ReleaseNTPContents() { |
scoped_ptr<content::WebContents> ntp_contents = ntp_->ReleaseContents(); |
- // Override the blacklist on an explicit user action. |
- ResetNTP(true, false); |
+ if (!use_local_page_only_) { |
+ // Preload a new Instant NTP, unless using the local NTP which is not |
+ // preloaded to conserve memory. |
+ // |
+ // Since this corresponds to a user action, give the remote page another |
+ // try, even if it's blacklisted. We don't want to blacklist pages for the |
+ // duration of a Browser object (for some people, that's effectively |
+ // "forever"). |
+ ResetNTP(true, false); |
+ } |
return ntp_contents.Pass(); |
} |
@@ -887,26 +895,33 @@ void InstantController::TabDeactivated(content::WebContents* contents) { |
} |
void InstantController::SetInstantEnabled(bool instant_enabled, |
- bool use_local_overlay_only) { |
+ bool use_local_page_only) { |
LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf( |
- "SetInstantEnabled: instant_enabled=%d, use_local_overlay_only=%d", |
- instant_enabled, use_local_overlay_only)); |
+ "SetInstantEnabled: instant_enabled=%d, use_local_page_only=%d", |
+ instant_enabled, use_local_page_only)); |
- // Non extended mode does not care about |use_local_overlay_only|. |
+ // Non extended mode does not care about |use_local_page_only|. |
if (instant_enabled == instant_enabled_ && |
(!extended_enabled_ || |
- use_local_overlay_only == use_local_overlay_only_)) { |
+ use_local_page_only == use_local_page_only_)) { |
return; |
} |
instant_enabled_ = instant_enabled; |
- use_local_overlay_only_ = use_local_overlay_only; |
+ use_local_page_only_ = use_local_page_only; |
HideInternal(); |
overlay_.reset(); |
if (extended_enabled_ || instant_enabled_) |
EnsureOverlayIsCurrent(false); |
- if (extended_enabled_) |
- ResetNTP(false, false); |
+ if (extended_enabled_) { |
+ // Preload the Instant NTP. But if we are using the local NTP, delete any |
+ // existing preloaded NTP (which we should no longer use) and don't preload |
+ // the local one to conserve memory. |
+ if (use_local_page_only_) |
+ ntp_.reset(); |
+ else |
+ ResetNTP(false, false); |
+ } |
if (instant_tab_) |
instant_tab_->SetDisplayInstantResults(instant_enabled_); |
} |
@@ -1449,7 +1464,7 @@ void InstantController::SendPopupBoundsToPage() { |
bool InstantController::GetInstantURL(Profile* profile, |
bool ignore_blacklist, |
std::string* instant_url) const { |
- if (extended_enabled_ && use_local_overlay_only_) |
+ if (extended_enabled_ && use_local_page_only_) |
return false; |
const GURL instant_url_obj = chrome::GetInstantURL(profile, |