Chromium Code Reviews| Index: chrome/browser/android/tab_android.cc |
| diff --git a/chrome/browser/android/tab_android.cc b/chrome/browser/android/tab_android.cc |
| index baa0a000cb2aeef6856c7b08386b17534184d8da..d94ffe43585cceff1aea93941840ac291804cac0 100644 |
| --- a/chrome/browser/android/tab_android.cc |
| +++ b/chrome/browser/android/tab_android.cc |
| @@ -23,6 +23,7 @@ |
| #include "chrome/browser/search/search.h" |
| #include "chrome/browser/sessions/session_tab_helper.h" |
| #include "chrome/browser/sync/glue/synced_tab_delegate_android.h" |
| +#include "chrome/browser/tab_contents/tab_util.h" |
| #include "chrome/browser/ui/android/content_settings/popup_blocked_infobar_delegate.h" |
| #include "chrome/browser/ui/android/context_menu_helper.h" |
| #include "chrome/browser/ui/android/infobars/infobar_container_android.h" |
| @@ -48,6 +49,10 @@ |
| #include "jni/Tab_jni.h" |
| #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" |
| +using content::GlobalRequestID; |
| +using content::NavigationController; |
| +using content::WebContents; |
| + |
| TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { |
| CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); |
| if (!core_tab_helper) |
| @@ -170,7 +175,75 @@ void TabAndroid::SetSyncId(int sync_id) { |
| } |
| void TabAndroid::HandlePopupNavigation(chrome::NavigateParams* params) { |
| - NOTIMPLEMENTED(); |
| + if (!params->url.is_empty()) { |
| + bool was_blocked = false; |
| + GURL url = params->url; |
| + params->target_contents = CreateTargetContents(*params, url); |
| + LoadURLInContents(params->target_contents, url, params); |
| + web_contents_delegate_->AddNewContents( |
| + params->source_contents, |
|
Bernhard Bauer
2014/07/04 14:06:29
Fix alignment. `git cl format` can help you there.
Bernhard Bauer
2014/07/04 16:46:19
This is not fixed yet. Please make sure that you a
|
| + params->target_contents, |
| + params->disposition, |
| + params->window_bounds, |
| + params->user_gesture, |
| + &was_blocked); |
| + if (was_blocked) |
| + params->target_contents = NULL; |
| + } |
| +} |
| + |
| +WebContents* TabAndroid::CreateTargetContents( |
| + const chrome::NavigateParams& params, |
| + const GURL& url) { |
| + WebContents::CreateParams create_params( |
| + params.initiating_profile, |
| + tab_util::GetSiteInstanceForNewTab(params.initiating_profile, url)); |
| + if (params.source_contents) { |
| + create_params.initial_size = |
| + params.source_contents->GetContainerBounds().size(); |
| + if (params.should_set_opener) |
| + create_params.opener = params.source_contents; |
| + } |
| + if (params.disposition == NEW_BACKGROUND_TAB) |
| + create_params.initially_hidden = true; |
| + |
| + WebContents* target_contents = WebContents::Create(create_params); |
| + |
| + // New tabs can have WebUI URLs that will make calls back to arbitrary |
| + // tab helpers, so the entire set of tab helpers needs to be set up |
| + // immediately. |
| + TabHelpers::AttachTabHelpers(target_contents); |
| + return target_contents; |
| +} |
| + |
| +void TabAndroid::LoadURLInContents(content::WebContents* target_contents, |
| + const GURL& url, |
|
Bernhard Bauer
2014/07/04 14:06:29
Alignment
|
| + chrome::NavigateParams* params) { |
| + NavigationController::LoadURLParams load_url_params(url); |
| + load_url_params.referrer = params->referrer; |
| + load_url_params.frame_tree_node_id = params->frame_tree_node_id; |
| + load_url_params.redirect_chain = params->redirect_chain; |
| + load_url_params.transition_type = params->transition; |
| + load_url_params.extra_headers = params->extra_headers; |
| + load_url_params.should_replace_current_entry = |
| + params->should_replace_current_entry; |
| + |
| + if (params->transferred_global_request_id != GlobalRequestID()) { |
| + load_url_params.is_renderer_initiated = params->is_renderer_initiated; |
| + load_url_params.transferred_global_request_id = |
| + params->transferred_global_request_id; |
| + } else if (params->is_renderer_initiated) { |
| + load_url_params.is_renderer_initiated = true; |
| + } |
| + |
| + // Only allows the browser-initiated navigation to use POST. |
| + if (params->uses_post && !params->is_renderer_initiated) { |
| + load_url_params.load_type = |
| + NavigationController::LOAD_TYPE_BROWSER_INITIATED_HTTP_POST; |
| + load_url_params.browser_initiated_post_data = |
| + params->browser_initiated_post_data; |
| + } |
| + target_contents->GetController().LoadURLWithParams(load_url_params); |
| } |
| void TabAndroid::OnReceivedHttpAuthRequest(jobject auth_handler, |