| 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)
|
|
|