browser_tabstrip.cc revision f2477e01787aa58f445919b809d89e252beef54f
197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved. 297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org// Use of this source code is governed by a BSD-style license that can be 397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org// found in the LICENSE file. 497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/ui/browser_tabstrip.h" 697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "base/command_line.h" 897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/profiles/profile.h" 997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/ui/browser.h" 1097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/ui/browser_navigator.h" 1197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/ui/tab_contents/core_tab_helper.h" 1297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/browser/ui/tabs/tab_strip_model.h" 1397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/common/chrome_switches.h" 1497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "chrome/common/url_constants.h" 1597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "content/public/browser/navigation_entry.h" 166059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein#include "content/public/browser/render_view_host.h" 1797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org#include "content/public/browser/web_contents.h" 1897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 1997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.orgnamespace chrome { 206059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein 216059f16fd98421ef1add03f708f3fd2c21cfc4f5mtkleinvoid AddTabAt(Browser* browser, const GURL& url, int idx, bool foreground) { 226059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein // Time new tab page creation time. We keep track of the timing data in 236059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein // WebContents, but we want to include the time it takes to create the 2497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org // WebContents object too. 256059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein base::TimeTicks new_tab_start_time = base::TimeTicks::Now(); 266059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein chrome::NavigateParams params(browser, 2797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org url.is_empty() ? GURL(chrome::kChromeUINewTabURL) : url, 286059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein content::PAGE_TRANSITION_TYPED); 2997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.disposition = foreground ? NEW_FOREGROUND_TAB : NEW_BACKGROUND_TAB; 3097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.tabstrip_index = idx; 3197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org chrome::Navigate(¶ms); 3297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org CoreTabHelper* core_tab_helper = 336059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein CoreTabHelper::FromWebContents(params.target_contents); 3497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org core_tab_helper->set_new_tab_start_time(new_tab_start_time); 3597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org} 3697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 3797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.orgcontent::WebContents* AddSelectedTabWithURL( 3897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org Browser* browser, 3997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org const GURL& url, 4097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org content::PageTransition transition) { 4197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org NavigateParams params(browser, url, transition); 4297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.disposition = NEW_FOREGROUND_TAB; 4397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org Navigate(¶ms); 4497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org return params.target_contents; 4597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org} 4697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 4797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.orgvoid AddWebContents(Browser* browser, 4897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org content::WebContents* source_contents, 4997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org content::WebContents* new_contents, 5097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org WindowOpenDisposition disposition, 5197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org const gfx::Rect& initial_pos, 5297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org bool user_gesture, 536059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein bool* was_blocked) { 546059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein // No code for this yet. 5597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org DCHECK(disposition != SAVE_TO_DISK); 566059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein // Can't create a new contents for the current tab - invalid case. 576059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein DCHECK(disposition != CURRENT_TAB); 5897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 5997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org NavigateParams params(browser, new_contents); 6097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.source_contents = source_contents; 6197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.disposition = disposition; 6297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.window_bounds = initial_pos; 6397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org params.window_action = NavigateParams::SHOW_WINDOW; 6497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org // At this point, we're already beyond the popup blocker. Even if the popup 6597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org // was created without a user gesture, we have to set |user_gesture| to true, 6697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org // so it gets correctly focused. 67f6351a071810b3a848a5002a0c0ba7e1490fd0dbcommit-bot@chromium.org params.user_gesture = true; 686059f16fd98421ef1add03f708f3fd2c21cfc4f5mtklein Navigate(¶ms); 6997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org} 7097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 7197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.orgvoid CloseWebContents(Browser* browser, 7297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org content::WebContents* contents, 7397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org bool add_to_history) { 7497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); 7597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org if (index == TabStripModel::kNoTab) { 7697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org NOTREACHED() << "CloseWebContents called for tab not in our strip"; 7797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org return; 7897de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org } 7997de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 8097de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org browser->tab_strip_model()->CloseWebContentsAt( 8197de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org index, 8297de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org add_to_history ? TabStripModel::CLOSE_CREATE_HISTORICAL_TAB 8397de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org : TabStripModel::CLOSE_NONE); 8497de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org} 8597de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org 8697de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org} // namespace chrome 8797de357270e54be53acb17e1cb4b4d5e25bacc01commit-bot@chromium.org