Chromium Code Reviews| 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..2cd0a486ddf75a03dd8211c562bcc3f794b02ca8 100644 |
| --- a/chrome/browser/external_tab/external_tab_container_win.cc |
| +++ b/chrome/browser/external_tab/external_tab_container_win.cc |
| @@ -355,57 +355,27 @@ 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) { |
| + return (NULL == OpenUrlInExtenalHost(source, url, disposition, referrer)); |
|
ananta
2012/04/11 23:08:05
The OpenUrlInExtenalHost function will return NULL
mkosiba (inactive)
2012/04/12 10:12:52
Done.
|
| } |
| - |
| - return NULL; |
| + return false; |
| } |
| void ExternalTabContainer::NavigationStateChanged(const WebContents* source, |
| @@ -1150,8 +1120,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 +1161,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) |