1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/browser_tabstrip.h"
7 #include "base/command_line.h"
8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/ui/browser.h"
10 #include "chrome/browser/ui/browser_navigator.h"
11 #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/common/chrome_switches.h"
14 #include "chrome/common/url_constants.h"
15 #include "content/public/browser/navigation_entry.h"
16 #include "content/public/browser/render_view_host.h"
17 #include "content/public/browser/web_contents.h"
21 void AddTabAt(Browser
* browser
, const GURL
& url
, int idx
, bool foreground
) {
22 // Time new tab page creation time. We keep track of the timing data in
23 // WebContents, but we want to include the time it takes to create the
24 // WebContents object too.
25 base::TimeTicks new_tab_start_time
= base::TimeTicks::Now();
26 chrome::NavigateParams
params(browser
,
27 url
.is_empty() ? GURL(chrome::kChromeUINewTabURL
) : url
,
28 ui::PAGE_TRANSITION_TYPED
);
29 params
.disposition
= foreground
? NEW_FOREGROUND_TAB
: NEW_BACKGROUND_TAB
;
30 params
.tabstrip_index
= idx
;
31 chrome::Navigate(¶ms
);
32 CoreTabHelper
* core_tab_helper
=
33 CoreTabHelper::FromWebContents(params
.target_contents
);
34 core_tab_helper
->set_new_tab_start_time(new_tab_start_time
);
37 content::WebContents
* AddSelectedTabWithURL(
40 ui::PageTransition transition
) {
41 NavigateParams
params(browser
, url
, transition
);
42 params
.disposition
= NEW_FOREGROUND_TAB
;
44 return params
.target_contents
;
47 void AddWebContents(Browser
* browser
,
48 content::WebContents
* source_contents
,
49 content::WebContents
* new_contents
,
50 WindowOpenDisposition disposition
,
51 const gfx::Rect
& initial_rect
,
54 // No code for this yet.
55 DCHECK(disposition
!= SAVE_TO_DISK
);
56 // Can't create a new contents for the current tab - invalid case.
57 DCHECK(disposition
!= CURRENT_TAB
);
59 NavigateParams
params(browser
, new_contents
);
60 params
.source_contents
= source_contents
;
61 params
.disposition
= disposition
;
62 params
.window_bounds
= initial_rect
;
63 params
.window_action
= NavigateParams::SHOW_WINDOW
;
64 // At this point, we're already beyond the popup blocker. Even if the popup
65 // was created without a user gesture, we have to set |user_gesture| to true,
66 // so it gets correctly focused.
67 params
.user_gesture
= true;
71 void CloseWebContents(Browser
* browser
,
72 content::WebContents
* contents
,
73 bool add_to_history
) {
74 int index
= browser
->tab_strip_model()->GetIndexOfWebContents(contents
);
75 if (index
== TabStripModel::kNoTab
) {
76 NOTREACHED() << "CloseWebContents called for tab not in our strip";
80 browser
->tab_strip_model()->CloseWebContentsAt(
82 add_to_history
? TabStripModel::CLOSE_CREATE_HISTORICAL_TAB
83 : TabStripModel::CLOSE_NONE
);