Implemented HandlePopupNavigation from tab_android.

This patch handled opening of already  blocked popups,
here it creates the webcontents and load the url in the
webcontents and invokes AddNewContents() of
ChromeWebContentsDelegateAndroid class so that it will notify
the application to add a new tab.

BUG=

Review URL: https://codereview.chromium.org/368983004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284015 0039d316-1c4b-4281-b951-d872f2087c98
parent 773272b5
...@@ -323,6 +323,8 @@ void ChromeWebContentsDelegateAndroid::AddNewContents( ...@@ -323,6 +323,8 @@ void ChromeWebContentsDelegateAndroid::AddNewContents(
user_gesture); user_gesture);
} }
if (was_blocked)
*was_blocked = !handled;
if (!handled) if (!handled)
delete new_contents; delete new_contents;
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "chrome/browser/search/search.h" #include "chrome/browser/search/search.h"
#include "chrome/browser/sessions/session_tab_helper.h" #include "chrome/browser/sessions/session_tab_helper.h"
#include "chrome/browser/sync/glue/synced_tab_delegate_android.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/content_settings/popup_blocked_infobar_delegate.h"
#include "chrome/browser/ui/android/context_menu_helper.h" #include "chrome/browser/ui/android/context_menu_helper.h"
#include "chrome/browser/ui/android/infobars/infobar_container_android.h" #include "chrome/browser/ui/android/infobars/infobar_container_android.h"
...@@ -47,6 +48,38 @@ ...@@ -47,6 +48,38 @@
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "jni/Tab_jni.h" #include "jni/Tab_jni.h"
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h" #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
#include "ui/base/window_open_disposition.h"
using content::GlobalRequestID;
using content::NavigationController;
using content::WebContents;
namespace {
WebContents* CreateTargetContents(const chrome::NavigateParams& params,
const GURL& url) {
Profile* profile = params.initiating_profile;
if (profile->IsOffTheRecord() || params.disposition == OFF_THE_RECORD) {
profile = profile->GetOffTheRecordProfile();
}
WebContents::CreateParams create_params(
profile, tab_util::GetSiteInstanceForNewTab(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);
return target_contents;
}
} // namespace
TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) { TabAndroid* TabAndroid::FromWebContents(content::WebContents* web_contents) {
CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents); CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(web_contents);
...@@ -170,7 +203,31 @@ void TabAndroid::SetSyncId(int sync_id) { ...@@ -170,7 +203,31 @@ void TabAndroid::SetSyncId(int sync_id) {
} }
void TabAndroid::HandlePopupNavigation(chrome::NavigateParams* params) { void TabAndroid::HandlePopupNavigation(chrome::NavigateParams* params) {
NOTIMPLEMENTED(); if (params->disposition != SUPPRESS_OPEN &&
params->disposition != SAVE_TO_DISK &&
params->disposition != IGNORE_ACTION) {
if (!params->url.is_empty()) {
bool was_blocked = false;
GURL url(params->url);
NavigationController::LoadURLParams load_url_params(url);
MakeLoadURLParams(params, &load_url_params);
if (params->disposition == CURRENT_TAB) {
web_contents_.get()->GetController().LoadURLWithParams(load_url_params);
} else {
params->target_contents = CreateTargetContents(*params, url);
params->target_contents->GetController().LoadURLWithParams(
load_url_params);
web_contents_delegate_->AddNewContents(params->source_contents,
params->target_contents,
params->disposition,
params->window_bounds,
params->user_gesture,
&was_blocked);
if (was_blocked)
params->target_contents = NULL;
}
}
}
} }
bool TabAndroid::ShouldWelcomePageLinkToTermsOfService() { bool TabAndroid::ShouldWelcomePageLinkToTermsOfService() {
...@@ -197,6 +254,32 @@ bool TabAndroid::HasPrerenderedUrl(GURL gurl) { ...@@ -197,6 +254,32 @@ bool TabAndroid::HasPrerenderedUrl(GURL gurl) {
return false; return false;
} }
void TabAndroid::MakeLoadURLParams(
chrome::NavigateParams* params,
NavigationController::LoadURLParams* load_url_params) {
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->transferred_global_request_id =
params->transferred_global_request_id;
}
load_url_params->is_renderer_initiated = params->is_renderer_initiated;
// 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;
}
}
void TabAndroid::SwapTabContents(content::WebContents* old_contents, void TabAndroid::SwapTabContents(content::WebContents* old_contents,
content::WebContents* new_contents, content::WebContents* new_contents,
bool did_start_load, bool did_start_load,
......
...@@ -100,6 +100,10 @@ class TabAndroid : public CoreTabHelperDelegate, ...@@ -100,6 +100,10 @@ class TabAndroid : public CoreTabHelperDelegate,
bool HasPrerenderedUrl(GURL gurl); bool HasPrerenderedUrl(GURL gurl);
void MakeLoadURLParams(
chrome::NavigateParams* params,
content::NavigationController::LoadURLParams* load_url_params);
// CoreTabHelperDelegate ---------------------------------------------------- // CoreTabHelperDelegate ----------------------------------------------------
virtual void SwapTabContents(content::WebContents* old_contents, virtual void SwapTabContents(content::WebContents* old_contents,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment