blocked_window_params.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// Copyright 2013 The Chromium Authors. All rights reserved. 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// Use of this source code is governed by a BSD-style license that can be 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// found in the LICENSE file. 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "chrome/browser/ui/blocked_content/blocked_window_params.h" 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "chrome/browser/profiles/profile.h" 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "chrome/browser/ui/tabs/tab_strip_model.h" 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "content/public/browser/render_process_host.h" 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "content/public/browser/web_contents.h" 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "third_party/WebKit/public/web/WebWindowFeatures.h" 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "url/gurl.h" 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1430692c65c4174412c90e79489e98ab85c1a7412fBen ChengBlockedWindowParams::BlockedWindowParams( 1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng const GURL& target_url, 1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng const content::Referrer& referrer, 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng WindowOpenDisposition disposition, 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng const blink::WebWindowFeatures& features, 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng bool user_gesture, 2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng bool opener_suppressed, 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int render_process_id, 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng int opener_id) 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng : target_url_(target_url), 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng referrer_(referrer), 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng disposition_(disposition), 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng features_(features), 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng user_gesture_(user_gesture), 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng opener_suppressed_(opener_suppressed), 2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng render_process_id_(render_process_id), 3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng opener_id_(opener_id) { 3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3330692c65c4174412c90e79489e98ab85c1a7412fBen Chengchrome::NavigateParams BlockedWindowParams::CreateNavigateParams( 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng content::WebContents* web_contents) const { 3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng GURL popup_url(target_url_); 3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng web_contents->GetRenderProcessHost()->FilterURL(false, &popup_url); 3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng chrome::NavigateParams nav_params( 3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng Profile::FromBrowserContext(web_contents->GetBrowserContext()), 3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng popup_url, 4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng ui::PAGE_TRANSITION_LINK); 4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.referrer = referrer_; 4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.source_contents = web_contents; 4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.is_renderer_initiated = true; 4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.tabstrip_add_types = TabStripModel::ADD_ACTIVE; 4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_action = chrome::NavigateParams::SHOW_WINDOW; 4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.user_gesture = user_gesture_; 4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.should_set_opener = !opener_suppressed_; 4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_bounds = web_contents->GetContainerBounds(); 4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (features_.xSet) 5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_bounds.set_x(features_.x); 5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (features_.ySet) 5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_bounds.set_y(features_.y); 5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (features_.widthSet) 5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_bounds.set_width(features_.width); 5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (features_.heightSet) 5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.window_bounds.set_height(features_.height); 5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng // Compare RenderViewImpl::show(). 5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (!user_gesture_ && disposition_ != NEW_BACKGROUND_TAB) 6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.disposition = NEW_POPUP; 6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng else 6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng nav_params.disposition = disposition_; 6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng return nav_params; 6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} 6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng