| Index: chrome/browser/instant/instant_loader.cc
 | 
| diff --git a/chrome/browser/instant/instant_loader.cc b/chrome/browser/instant/instant_loader.cc
 | 
| index 39727772457df53efdceb563cd3ba4ade5e57cf6..50e29c44b241a0b67267eea490a42103ee197257 100644
 | 
| --- a/chrome/browser/instant/instant_loader.cc
 | 
| +++ b/chrome/browser/instant/instant_loader.cc
 | 
| @@ -728,32 +728,8 @@ bool InstantLoader::Update(TabContentsWrapper* tab_contents,
 | 
|              complete_suggested_text_.substr(user_text_.size());
 | 
|        }
 | 
|      } else {
 | 
| -      preview_tab_contents_delegate_->PrepareForNewLoad();
 | 
| -
 | 
| -      // Load the instant URL. We don't reflect the url we load in url() as
 | 
| -      // callers expect that we're loading the URL they tell us to.
 | 
| -      //
 | 
| -      // This uses an empty string for the replacement text as the url doesn't
 | 
| -      // really have the search params, but we need to use the replace
 | 
| -      // functionality so that embeded tags (like {google:baseURL}) are escaped
 | 
| -      // correctly.
 | 
| -      // TODO(sky): having to use a replaceable url is a bit of a hack here.
 | 
| -      GURL instant_url(
 | 
| -          template_url->instant_url()->ReplaceSearchTerms(
 | 
| -              *template_url, string16(), -1, string16()));
 | 
| -      CommandLine* cl = CommandLine::ForCurrentProcess();
 | 
| -      if (cl->HasSwitch(switches::kInstantURL))
 | 
| -        instant_url = GURL(cl->GetSwitchValueASCII(switches::kInstantURL));
 | 
| -      preview_contents_->controller().LoadURL(
 | 
| -          instant_url, GURL(), transition_type);
 | 
| -      RenderViewHost* host = preview_contents_->render_view_host();
 | 
| -      host->Send(new ViewMsg_SearchBoxChange(
 | 
| -          host->routing_id(), user_text_, verbatim, 0, 0));
 | 
| -      frame_load_observer_.reset(
 | 
| -          new FrameLoadObserver(this,
 | 
| -                                preview_contents()->tab_contents(),
 | 
| -                                user_text_,
 | 
| -                                verbatim));
 | 
| +      LoadInstantURL(tab_contents, template_url, transition_type, user_text_,
 | 
| +                     verbatim);
 | 
|      }
 | 
|    } else {
 | 
|      DCHECK(template_url_id_ == 0);
 | 
| @@ -856,6 +832,21 @@ void InstantLoader::CommitInstantLoader() {
 | 
|    delegate_->CommitInstantLoader(this);
 | 
|  }
 | 
|  
 | 
| +void InstantLoader::MaybeLoadInstantURL(TabContentsWrapper* tab_contents,
 | 
| +                                        const TemplateURL* template_url) {
 | 
| +  DCHECK(template_url_id_ == template_url->id());
 | 
| +
 | 
| +  // If we already have a |preview_contents_|, future search queries will be
 | 
| +  // issued into it (see the "if (!created_preview_contents)" block in |Update|
 | 
| +  // above), so there is no need to load the |template_url|'s instant URL.
 | 
| +  if (preview_contents_.get())
 | 
| +    return;
 | 
| +
 | 
| +  CreatePreviewContents(tab_contents);
 | 
| +  LoadInstantURL(tab_contents, template_url, PageTransition::GENERATED,
 | 
| +                 string16(), true);
 | 
| +}
 | 
| +
 | 
|  void InstantLoader::SetCompleteSuggestedText(
 | 
|      const string16& complete_suggested_text,
 | 
|      InstantCompleteBehavior behavior) {
 | 
| @@ -1093,3 +1084,31 @@ void InstantLoader::CreatePreviewContents(TabContentsWrapper* tab_contents) {
 | 
|  
 | 
|    preview_contents_->tab_contents()->ShowContents();
 | 
|  }
 | 
| +
 | 
| +void InstantLoader::LoadInstantURL(TabContentsWrapper* tab_contents,
 | 
| +                                   const TemplateURL* template_url,
 | 
| +                                   PageTransition::Type transition_type,
 | 
| +                                   const string16& user_text,
 | 
| +                                   bool verbatim) {
 | 
| +  preview_tab_contents_delegate_->PrepareForNewLoad();
 | 
| +
 | 
| +  // Load the instant URL. We don't reflect the url we load in url() as
 | 
| +  // callers expect that we're loading the URL they tell us to.
 | 
| +  //
 | 
| +  // This uses an empty string for the replacement text as the url doesn't
 | 
| +  // really have the search params, but we need to use the replace
 | 
| +  // functionality so that embeded tags (like {google:baseURL}) are escaped
 | 
| +  // correctly.
 | 
| +  // TODO(sky): having to use a replaceable url is a bit of a hack here.
 | 
| +  GURL instant_url(template_url->instant_url()->ReplaceSearchTerms(
 | 
| +      *template_url, string16(), -1, string16()));
 | 
| +  CommandLine* cl = CommandLine::ForCurrentProcess();
 | 
| +  if (cl->HasSwitch(switches::kInstantURL))
 | 
| +    instant_url = GURL(cl->GetSwitchValueASCII(switches::kInstantURL));
 | 
| +  preview_contents_->controller().LoadURL(instant_url, GURL(), transition_type);
 | 
| +  RenderViewHost* host = preview_contents_->render_view_host();
 | 
| +  host->Send(new ViewMsg_SearchBoxChange(
 | 
| +      host->routing_id(), user_text, verbatim, 0, 0));
 | 
| +  frame_load_observer_.reset(new FrameLoadObserver(
 | 
| +      this, preview_contents()->tab_contents(), user_text, verbatim));
 | 
| +}
 | 
| 
 |