Index: chrome/browser/instant/instant_controller.cc |
diff --git a/chrome/browser/instant/instant_controller.cc b/chrome/browser/instant/instant_controller.cc |
index e0fc9e77fef1b23103ee22eca53921410a28aee3..335f19000c5cbf499718aa2cbcc1bd269c888a08 100644 |
--- a/chrome/browser/instant/instant_controller.cc |
+++ b/chrome/browser/instant/instant_controller.cc |
@@ -157,6 +157,8 @@ InstantController::InstantController(chrome::BrowserInstantController* browser, |
last_transition_type_(content::PAGE_TRANSITION_LINK), |
last_match_was_search_(false), |
omnibox_focus_state_(OMNIBOX_FOCUS_NONE), |
+ start_margin_(0), |
+ end_margin_(0), |
allow_preview_to_show_search_suggestions_(false) { |
} |
@@ -354,24 +356,36 @@ bool InstantController::Update(const AutocompleteMatch& match, |
// TODO(tonyg): This method only fires when the omnibox bounds change. It also |
// needs to fire when the preview bounds change (e.g.: open/close info bar). |
-void InstantController::SetOmniboxBounds(const gfx::Rect& bounds) { |
+void InstantController::SetPopupBounds(const gfx::Rect& bounds) { |
if (!extended_enabled_ && !instant_enabled_) |
return; |
- if (omnibox_bounds_ == bounds) |
+ if (popup_bounds_ == bounds) |
return; |
- omnibox_bounds_ = bounds; |
- if (omnibox_bounds_.height() > last_omnibox_bounds_.height()) { |
+ popup_bounds_ = bounds; |
+ if (popup_bounds_.height() > last_popup_bounds_.height()) { |
update_bounds_timer_.Stop(); |
- SendBoundsToPage(); |
+ SendPopupBoundsToPage(); |
} else if (!update_bounds_timer_.IsRunning()) { |
update_bounds_timer_.Start(FROM_HERE, |
base::TimeDelta::FromMilliseconds(kUpdateBoundsDelayMS), this, |
- &InstantController::SendBoundsToPage); |
+ &InstantController::SendPopupBoundsToPage); |
} |
} |
+void InstantController::SetMarginSize(int start, int end) { |
+ if (!extended_enabled_ || (start_margin_ == start && end_margin_ == end)) |
+ return; |
+ |
+ start_margin_ = start; |
+ end_margin_ = end; |
+ if (loader_) |
+ loader_->SetMarginSize(start_margin_, end_margin_); |
+ if (instant_tab_) |
+ instant_tab_->SetMarginSize(start_margin_, end_margin_); |
+} |
+ |
void InstantController::HandleAutocompleteResults( |
const std::vector<AutocompleteProvider*>& providers) { |
if (!extended_enabled_) |
@@ -859,6 +873,7 @@ bool InstantController::ResetLoader(const TemplateURL* template_url, |
loader_->SetDisplayInstantResults(instant_enabled_); |
loader_->SearchModeChanged(search_mode_); |
loader_->KeyCaptureChanged(omnibox_focus_state_ == OMNIBOX_FOCUS_INVISIBLE); |
+ loader_->SetMarginSize(start_margin_, end_margin_); |
} |
// Restart the stale loader timer. |
@@ -901,6 +916,7 @@ void InstantController::ResetInstantTab() { |
instant_tab_.reset(new InstantTab(this, active_tab)); |
instant_tab_->Init(); |
instant_tab_->SetDisplayInstantResults(instant_enabled_); |
+ instant_tab_->SetMarginSize(start_margin_, end_margin_); |
} |
// Hide the |loader_| since we are now using |instant_tab_| instead. |
@@ -1017,14 +1033,14 @@ void InstantController::ShowLoader(InstantShownReason reason, |
CommitIfPossible(INSTANT_COMMIT_CLICKED_QUERY_SUGGESTION); |
} |
-void InstantController::SendBoundsToPage() { |
- if (last_omnibox_bounds_ == omnibox_bounds_ || !loader_ || |
+void InstantController::SendPopupBoundsToPage() { |
+ if (last_popup_bounds_ == popup_bounds_ || !loader_ || |
loader_->is_pointer_down_from_activate()) |
return; |
- last_omnibox_bounds_ = omnibox_bounds_; |
+ last_popup_bounds_ = popup_bounds_; |
gfx::Rect preview_bounds = browser_->GetInstantBounds(); |
- gfx::Rect intersection = gfx::IntersectRects(omnibox_bounds_, preview_bounds); |
+ gfx::Rect intersection = gfx::IntersectRects(popup_bounds_, preview_bounds); |
// Translate into window coordinates. |
if (!intersection.IsEmpty()) { |
@@ -1041,7 +1057,7 @@ void InstantController::SendBoundsToPage() { |
DCHECK_LE(0, intersection.width()); |
DCHECK_LE(0, intersection.height()); |
- loader_->SetOmniboxBounds(intersection); |
+ loader_->SetPopupBounds(intersection); |
} |
bool InstantController::GetInstantURL(const TemplateURL* template_url, |