| Index: chrome/browser/external_tab/external_tab_container_win.cc | 
| diff --git a/chrome/browser/external_tab/external_tab_container_win.cc b/chrome/browser/external_tab/external_tab_container_win.cc | 
| index d76005913fd9cfc9842ff594cf1692403f42506f..59baf75f3ee63f69b12abf9ad61c6a5ecb9c732b 100644 | 
| --- a/chrome/browser/external_tab/external_tab_container_win.cc | 
| +++ b/chrome/browser/external_tab/external_tab_container_win.cc | 
| @@ -355,57 +355,28 @@ ExternalTabContainer* | 
|  | 
| WebContents* ExternalTabContainer::OpenURLFromTab(WebContents* source, | 
| const OpenURLParams& params) { | 
| -  if (pending()) { | 
| -    pending_open_url_requests_.push_back(params); | 
| -    return NULL; | 
| -  } | 
| - | 
| -  switch (params.disposition) { | 
| -    case CURRENT_TAB: | 
| -    case SINGLETON_TAB: | 
| -    case NEW_FOREGROUND_TAB: | 
| -    case NEW_BACKGROUND_TAB: | 
| -    case NEW_POPUP: | 
| -    case NEW_WINDOW: | 
| -    case SAVE_TO_DISK: | 
| -      if (automation_) { | 
| -        GURL referrer = GURL(WebSecurityPolicy::generateReferrerHeader( | 
| -            params.referrer.policy, | 
| -            params.url, | 
| -            WebString::fromUTF8(params.referrer.url.spec())).utf8()); | 
| -        automation_->Send(new AutomationMsg_OpenURL(tab_handle_, | 
| -                                                    params.url, | 
| -                                                    referrer, | 
| -                                                    params.disposition)); | 
| -        // TODO(ananta) | 
| -        // We should populate other fields in the | 
| -        // ViewHostMsg_FrameNavigate_Params structure. Another option could be | 
| -        // to refactor the UpdateHistoryForNavigation function in TabContents. | 
| -        content::FrameNavigateParams nav_params; | 
| -        nav_params.referrer = content::Referrer(referrer, | 
| -                                                params.referrer.policy); | 
| -        nav_params.url = params.url; | 
| -        nav_params.page_id = -1; | 
| -        nav_params.transition = content::PAGE_TRANSITION_LINK; | 
| - | 
| -        content::LoadCommittedDetails details; | 
| -        details.did_replace_entry = false; | 
| - | 
| -        scoped_refptr<history::HistoryAddPageArgs> add_page_args( | 
| -            tab_contents_->history_tab_helper()-> | 
| -                CreateHistoryAddPageArgs(params.url, details, nav_params)); | 
| -        tab_contents_->history_tab_helper()-> | 
| -            UpdateHistoryForNavigation(add_page_args); | 
| +  GURL referrer_url = GURL(WebSecurityPolicy::generateReferrerHeader( | 
| +      params.referrer.policy, | 
| +      params.url, | 
| +      WebString::fromUTF8(params.referrer.url.spec())).utf8()); | 
| +  content::Referrer referrer = content::Referrer(referrer_url, | 
| +                                                 params.referrer.policy); | 
| +  return OpenUrlInExtenalHost(source, params.url, params.disposition, referrer); | 
| +} | 
|  | 
| -        return tab_contents_->web_contents(); | 
| -      } | 
| -      break; | 
| -    default: | 
| -      NOTREACHED(); | 
| -      break; | 
| +bool ExternalTabContainer::ShouldIgnoreNavigation( | 
| +    WebContents* source, | 
| +    const GURL& url, | 
| +    const content::Referrer& referrer, | 
| +    WindowOpenDisposition disposition, | 
| +    bool is_content_initiated, | 
| +    content::PageTransition transition_type) { | 
| + | 
| +  if (is_content_initiated) { | 
| +    OpenUrlInExtenalHost(source, url, disposition, referrer); | 
| +    return true; | 
| } | 
| - | 
| -  return NULL; | 
| +  return false; | 
| } | 
|  | 
| void ExternalTabContainer::NavigationStateChanged(const WebContents* source, | 
| @@ -1150,8 +1121,10 @@ void ExternalTabContainer::ServicePendingOpenURLRequests() { | 
|  | 
| for (size_t index = 0; index < pending_open_url_requests_.size(); | 
| ++index) { | 
| -    const OpenURLParams& url_request = pending_open_url_requests_[index]; | 
| -    OpenURLFromTab(web_contents(), url_request); | 
| +    const PendingOpenUrlRequest& url_request = | 
| +        pending_open_url_requests_[index]; | 
| +    OpenUrlInExtenalHost(web_contents(), url_request.url, | 
| +                         url_request.disposition, url_request.referrer); | 
| } | 
| pending_open_url_requests_.clear(); | 
| } | 
| @@ -1189,6 +1162,64 @@ void ExternalTabContainer::SetupExternalTabView() { | 
| tab_contents_container_->ChangeWebContents(web_contents()); | 
| } | 
|  | 
| +content::WebContents* ExternalTabContainer::OpenUrlInExtenalHost( | 
| +    content::WebContents* source, | 
| +    const GURL& url, | 
| +    WindowOpenDisposition disposition, | 
| +    const content::Referrer& referrer) { | 
| + | 
| +  if (pending()) { | 
| +    PendingOpenUrlRequest pending_request; | 
| +    pending_request.url = url; | 
| +    pending_request.disposition = disposition; | 
| +    pending_request.referrer = referrer; | 
| +    pending_open_url_requests_.push_back(pending_request); | 
| +    return NULL; | 
| +  } | 
| + | 
| +  switch (disposition) { | 
| +    case CURRENT_TAB: | 
| +    case SINGLETON_TAB: | 
| +    case NEW_FOREGROUND_TAB: | 
| +    case NEW_BACKGROUND_TAB: | 
| +    case NEW_POPUP: | 
| +    case NEW_WINDOW: | 
| +    case SAVE_TO_DISK: | 
| +      if (automation_) { | 
| +        automation_->Send(new AutomationMsg_OpenURL(tab_handle_, | 
| +                                                    url, | 
| +                                                    referrer.url, | 
| +                                                    disposition)); | 
| +        // TODO(ananta) | 
| +        // We should populate other fields in the | 
| +        // ViewHostMsg_FrameNavigate_Params structure. Another option could be | 
| +        // to refactor the UpdateHistoryForNavigation function in TabContents. | 
| +        content::FrameNavigateParams nav_params; | 
| +        nav_params.referrer = referrer; | 
| +        nav_params.url = url; | 
| +        nav_params.page_id = -1; | 
| +        nav_params.transition = content::PAGE_TRANSITION_LINK; | 
| + | 
| +        content::LoadCommittedDetails details; | 
| +        details.did_replace_entry = false; | 
| + | 
| +        scoped_refptr<history::HistoryAddPageArgs> add_page_args( | 
| +            tab_contents_->history_tab_helper()-> | 
| +                CreateHistoryAddPageArgs(url, details, nav_params)); | 
| +        tab_contents_->history_tab_helper()-> | 
| +            UpdateHistoryForNavigation(add_page_args); | 
| + | 
| +        return tab_contents_->web_contents(); | 
| +      } | 
| +      break; | 
| +    default: | 
| +      NOTREACHED(); | 
| +      break; | 
| +  } | 
| + | 
| +  return NULL; | 
| +} | 
| + | 
| TemporaryPopupExternalTabContainer::TemporaryPopupExternalTabContainer( | 
| AutomationProvider* automation, | 
| AutomationResourceMessageFilter* filter) | 
|  |