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

Side by Side Diff: chrome/browser/ui/search/instant_controller.cc

Issue 14232007: InstantExtended: don't preload the local NTP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comment. Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/search/instant_controller.h" 5 #include "chrome/browser/ui/search/instant_controller.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 return true; 213 return true;
214 } 214 }
215 215
216 } // namespace 216 } // namespace
217 217
218 InstantController::InstantController(BrowserInstantController* browser, 218 InstantController::InstantController(BrowserInstantController* browser,
219 bool extended_enabled) 219 bool extended_enabled)
220 : browser_(browser), 220 : browser_(browser),
221 extended_enabled_(extended_enabled), 221 extended_enabled_(extended_enabled),
222 instant_enabled_(false), 222 instant_enabled_(false),
223 use_local_overlay_only_(true), 223 use_local_page_only_(true),
224 model_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 224 model_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
225 last_omnibox_text_has_inline_autocompletion_(false), 225 last_omnibox_text_has_inline_autocompletion_(false),
226 last_verbatim_(false), 226 last_verbatim_(false),
227 last_transition_type_(content::PAGE_TRANSITION_LINK), 227 last_transition_type_(content::PAGE_TRANSITION_LINK),
228 last_match_was_search_(false), 228 last_match_was_search_(false),
229 omnibox_focus_state_(OMNIBOX_FOCUS_NONE), 229 omnibox_focus_state_(OMNIBOX_FOCUS_NONE),
230 omnibox_bounds_(-1, -1, 0, 0), 230 omnibox_bounds_(-1, -1, 0, 0),
231 allow_overlay_to_show_search_suggestions_(false), 231 allow_overlay_to_show_search_suggestions_(false),
232 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { 232 ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
233 233
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 return scoped_ptr<content::WebContents>(NULL); 497 return scoped_ptr<content::WebContents>(NULL);
498 498
499 LOG_INSTANT_DEBUG_EVENT(this, "ReleaseNTPContents"); 499 LOG_INSTANT_DEBUG_EVENT(this, "ReleaseNTPContents");
500 500
501 // Switch to the local NTP unless we're already using one. 501 // Switch to the local NTP unless we're already using one.
502 if (!ntp_ || (ShouldSwitchToLocalNTP() && !ntp_->IsLocalNTP())) 502 if (!ntp_ || (ShouldSwitchToLocalNTP() && !ntp_->IsLocalNTP()))
503 ResetNTP(false, true); 503 ResetNTP(false, true);
504 504
505 scoped_ptr<content::WebContents> ntp_contents = ntp_->ReleaseContents(); 505 scoped_ptr<content::WebContents> ntp_contents = ntp_->ReleaseContents();
506 506
507 // Override the blacklist on an explicit user action. 507 if (!use_local_page_only_) {
508 ResetNTP(true, false); 508 // Preload a new Instant NTP, unless using the local NTP which is not
509 // preloaded to conserve memory.
510 //
511 // Since this corresponds to a user action, give the remote page another
512 // try, even if it's blacklisted. We don't want to blacklist pages for the
513 // duration of a Browser object (for some people, that's effectively
514 // "forever").
515 ResetNTP(true, false);
516 }
509 return ntp_contents.Pass(); 517 return ntp_contents.Pass();
510 } 518 }
511 519
512 // TODO(tonyg): This method only fires when the omnibox bounds change. It also 520 // TODO(tonyg): This method only fires when the omnibox bounds change. It also
513 // needs to fire when the overlay bounds change (e.g.: open/close info bar). 521 // needs to fire when the overlay bounds change (e.g.: open/close info bar).
514 void InstantController::SetPopupBounds(const gfx::Rect& bounds) { 522 void InstantController::SetPopupBounds(const gfx::Rect& bounds) {
515 if (!extended_enabled_ && !instant_enabled_) 523 if (!extended_enabled_ && !instant_enabled_)
516 return; 524 return;
517 525
518 if (popup_bounds_ == bounds) 526 if (popup_bounds_ == bounds)
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 void InstantController::TabDeactivated(content::WebContents* contents) { 888 void InstantController::TabDeactivated(content::WebContents* contents) {
881 LOG_INSTANT_DEBUG_EVENT(this, "TabDeactivated"); 889 LOG_INSTANT_DEBUG_EVENT(this, "TabDeactivated");
882 if (extended_enabled_ && !contents->IsBeingDestroyed()) 890 if (extended_enabled_ && !contents->IsBeingDestroyed())
883 CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST); 891 CommitIfPossible(INSTANT_COMMIT_FOCUS_LOST);
884 892
885 if (GetOverlayContents()) 893 if (GetOverlayContents())
886 HideOverlay(); 894 HideOverlay();
887 } 895 }
888 896
889 void InstantController::SetInstantEnabled(bool instant_enabled, 897 void InstantController::SetInstantEnabled(bool instant_enabled,
890 bool use_local_overlay_only) { 898 bool use_local_page_only) {
891 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf( 899 LOG_INSTANT_DEBUG_EVENT(this, base::StringPrintf(
892 "SetInstantEnabled: instant_enabled=%d, use_local_overlay_only=%d", 900 "SetInstantEnabled: instant_enabled=%d, use_local_page_only=%d",
893 instant_enabled, use_local_overlay_only)); 901 instant_enabled, use_local_page_only));
894 902
895 // Non extended mode does not care about |use_local_overlay_only|. 903 // Non extended mode does not care about |use_local_page_only|.
896 if (instant_enabled == instant_enabled_ && 904 if (instant_enabled == instant_enabled_ &&
897 (!extended_enabled_ || 905 (!extended_enabled_ ||
898 use_local_overlay_only == use_local_overlay_only_)) { 906 use_local_page_only == use_local_page_only_)) {
899 return; 907 return;
900 } 908 }
901 909
902 instant_enabled_ = instant_enabled; 910 instant_enabled_ = instant_enabled;
903 use_local_overlay_only_ = use_local_overlay_only; 911 use_local_page_only_ = use_local_page_only;
904 HideInternal(); 912 HideInternal();
905 overlay_.reset(); 913 overlay_.reset();
906 if (extended_enabled_ || instant_enabled_) 914 if (extended_enabled_ || instant_enabled_)
907 EnsureOverlayIsCurrent(false); 915 EnsureOverlayIsCurrent(false);
908 if (extended_enabled_) 916 if (extended_enabled_) {
909 ResetNTP(false, false); 917 // Preload the Instant NTP. But if we are using the local NTP, delete any
918 // existing preloaded NTP (which we should no longer use) and don't preload
919 // the local one to conserve memory.
920 if (use_local_page_only_)
921 ntp_.reset();
922 else
923 ResetNTP(false, false);
924 }
910 if (instant_tab_) 925 if (instant_tab_)
911 instant_tab_->SetDisplayInstantResults(instant_enabled_); 926 instant_tab_->SetDisplayInstantResults(instant_enabled_);
912 } 927 }
913 928
914 void InstantController::ThemeChanged(const ThemeBackgroundInfo& theme_info) { 929 void InstantController::ThemeChanged(const ThemeBackgroundInfo& theme_info) {
915 if (!extended_enabled_) 930 if (!extended_enabled_)
916 return; 931 return;
917 932
918 if (overlay_) 933 if (overlay_)
919 overlay_->SendThemeBackgroundInfo(theme_info); 934 overlay_->SendThemeBackgroundInfo(theme_info);
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 DCHECK_LE(0, intersection.x()); 1457 DCHECK_LE(0, intersection.x());
1443 DCHECK_LE(0, intersection.width()); 1458 DCHECK_LE(0, intersection.width());
1444 DCHECK_LE(0, intersection.height()); 1459 DCHECK_LE(0, intersection.height());
1445 1460
1446 overlay_->SetPopupBounds(intersection); 1461 overlay_->SetPopupBounds(intersection);
1447 } 1462 }
1448 1463
1449 bool InstantController::GetInstantURL(Profile* profile, 1464 bool InstantController::GetInstantURL(Profile* profile,
1450 bool ignore_blacklist, 1465 bool ignore_blacklist,
1451 std::string* instant_url) const { 1466 std::string* instant_url) const {
1452 if (extended_enabled_ && use_local_overlay_only_) 1467 if (extended_enabled_ && use_local_page_only_)
1453 return false; 1468 return false;
1454 1469
1455 const GURL instant_url_obj = chrome::GetInstantURL(profile, 1470 const GURL instant_url_obj = chrome::GetInstantURL(profile,
1456 omnibox_bounds_.x()); 1471 omnibox_bounds_.x());
1457 if (!instant_url_obj.is_valid()) 1472 if (!instant_url_obj.is_valid())
1458 return false; 1473 return false;
1459 1474
1460 *instant_url = instant_url_obj.spec(); 1475 *instant_url = instant_url_obj.spec();
1461 1476
1462 if (!ignore_blacklist) { 1477 if (!ignore_blacklist) {
(...skipping 10 matching lines...) Expand all
1473 } 1488 }
1474 1489
1475 return true; 1490 return true;
1476 } 1491 }
1477 1492
1478 void InstantController::BlacklistAndResetNTP() { 1493 void InstantController::BlacklistAndResetNTP() {
1479 ++blacklisted_urls_[ntp_->instant_url()]; 1494 ++blacklisted_urls_[ntp_->instant_url()];
1480 RecordEventHistogram(INSTANT_CONTROLLER_EVENT_URL_ADDED_TO_BLACKLIST); 1495 RecordEventHistogram(INSTANT_CONTROLLER_EVENT_URL_ADDED_TO_BLACKLIST);
1481 delete ntp_->ReleaseContents().release(); 1496 delete ntp_->ReleaseContents().release();
1482 MessageLoop::current()->DeleteSoon(FROM_HERE, ntp_.release()); 1497 MessageLoop::current()->DeleteSoon(FROM_HERE, ntp_.release());
1483 ResetNTP(false, false); 1498 ResetNTP(false, false);
sreeram 2013/04/18 00:00:34 You should add a similar sort of "if (!use_local_p
samarth 2013/04/18 00:31:19 The only situation I can think of where we get her
1484 } 1499 }
1485 1500
1486 void InstantController::BlacklistAndResetOverlay() { 1501 void InstantController::BlacklistAndResetOverlay() {
1487 ++blacklisted_urls_[overlay_->instant_url()]; 1502 ++blacklisted_urls_[overlay_->instant_url()];
1488 RecordEventHistogram(INSTANT_CONTROLLER_EVENT_URL_ADDED_TO_BLACKLIST); 1503 RecordEventHistogram(INSTANT_CONTROLLER_EVENT_URL_ADDED_TO_BLACKLIST);
1489 HideInternal(); 1504 HideInternal();
1490 delete overlay_->ReleaseContents().release(); 1505 delete overlay_->ReleaseContents().release();
1491 MessageLoop::current()->DeleteSoon(FROM_HERE, overlay_.release()); 1506 MessageLoop::current()->DeleteSoon(FROM_HERE, overlay_.release());
1492 EnsureOverlayIsCurrent(false); 1507 EnsureOverlayIsCurrent(false);
1493 } 1508 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1640 return false; 1655 return false;
1641 1656
1642 // If this is not window startup, switch. 1657 // If this is not window startup, switch.
1643 // TODO(shishir): This is not completely reliable. Find a better way to detect 1658 // TODO(shishir): This is not completely reliable. Find a better way to detect
1644 // startup time. 1659 // startup time.
1645 if (browser_->GetActiveWebContents()) 1660 if (browser_->GetActiveWebContents())
1646 return true; 1661 return true;
1647 1662
1648 return chrome::IsAggressiveLocalNTPFallbackEnabled(); 1663 return chrome::IsAggressiveLocalNTPFallbackEnabled();
1649 } 1664 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/search/instant_controller.h ('k') | chrome/browser/ui/search/instant_extended_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698