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