Index: chrome/browser/instant/instant_loader.cc |
diff --git a/chrome/browser/instant/instant_loader.cc b/chrome/browser/instant/instant_loader.cc |
index 9b44f76528da9610f353de4c17c7810e14723622..328299fba62bb7deef214e834a81c9a8156832d7 100644 |
--- a/chrome/browser/instant/instant_loader.cc |
+++ b/chrome/browser/instant/instant_loader.cc |
@@ -58,10 +58,12 @@ const char kPreviewHeaderValue[] = "preview"; |
// instant after it has loaded. |
class InstantLoader::FrameLoadObserver : public NotificationObserver { |
public: |
- FrameLoadObserver(TabContents* tab_contents, |
+ FrameLoadObserver(InstantLoader* loader, |
+ TabContents* tab_contents, |
const string16& text, |
bool verbatim) |
- : tab_contents_(tab_contents), |
+ : loader_(loader), |
+ tab_contents_(tab_contents), |
text_(text), |
verbatim_(verbatim), |
unique_id_(tab_contents_->controller().pending_entry()->unique_id()) { |
@@ -88,6 +90,7 @@ class InstantLoader::FrameLoadObserver : public NotificationObserver { |
active_entry->unique_id() != unique_id_) { |
return; |
} |
+ loader_->SendBoundsToPage(true); |
tab_contents_->render_view_host()->DetermineIfPageSupportsInstant( |
text_, verbatim_); |
break; |
@@ -99,6 +102,8 @@ class InstantLoader::FrameLoadObserver : public NotificationObserver { |
} |
private: |
+ InstantLoader* loader_; |
+ |
// The TabContents we're listening for changes on. |
TabContents* tab_contents_; |
@@ -386,13 +391,10 @@ class InstantLoader::TabContentsDelegateImpl : public TabContentsDelegate { |
page_id != source->controller().GetActiveEntry()->page_id()) |
return; |
- if (result) { |
- gfx::Rect bounds = loader_->GetOmniboxBoundsInTermsOfPreview(); |
- loader_->last_omnibox_bounds_ = loader_->omnibox_bounds_; |
+ if (result) |
loader_->PageFinishedLoading(); |
- } else { |
+ else |
loader_->PageDoesntSupportInstant(user_typed_before_load_); |
- } |
} |
private: |
@@ -560,8 +562,10 @@ void InstantLoader::Update(TabContentsWrapper* tab_contents, |
preview_contents_->controller().LoadURL( |
instant_url, GURL(), transition_type); |
frame_load_observer_.reset( |
- new FrameLoadObserver(preview_contents()->tab_contents(), |
- user_text_, verbatim)); |
+ new FrameLoadObserver(this, |
+ preview_contents()->tab_contents(), |
+ user_text_, |
+ verbatim)); |
} |
} else { |
DCHECK(template_url_id_ == 0); |
@@ -717,6 +721,10 @@ void InstantLoader::Observe(NotificationType type, |
void InstantLoader::PageFinishedLoading() { |
frame_load_observer_.reset(); |
+ |
+ // Send the bounds of the omnibox down now. |
+ SendBoundsToPage(false); |
+ |
// Wait for the user input before showing, this way the page should be up to |
// date by the time we show it. |
} |
@@ -750,12 +758,16 @@ void InstantLoader::PageDoesntSupportInstant(bool needs_reload) { |
} |
void InstantLoader::ProcessBoundsChange() { |
+ SendBoundsToPage(false); |
+} |
+ |
+void InstantLoader::SendBoundsToPage(bool force_if_waiting) { |
if (last_omnibox_bounds_ == omnibox_bounds_) |
return; |
- last_omnibox_bounds_ = omnibox_bounds_; |
if (preview_contents_.get() && is_showing_instant() && |
- !is_waiting_for_load()) { |
+ (force_if_waiting || !is_waiting_for_load())) { |
+ last_omnibox_bounds_ = omnibox_bounds_; |
preview_contents_->render_view_host()->SearchBoxResize( |
GetOmniboxBoundsInTermsOfPreview()); |
} |