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.
4
5 #include "chrome/browser/ui/browser_tabstrip.h"
6
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"
18
19 namespace chrome {
20
AddTabAt(Browser * browser,const GURL & url,int idx,bool foreground)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 content::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);
35 }
36
AddSelectedTabWithURL(Browser * browser,const GURL & url,content::PageTransition transition)37 content::WebContents* AddSelectedTabWithURL(
38 Browser* browser,
39 const GURL& url,
40 content::PageTransition transition) {
41 NavigateParams params(browser, url, transition);
42 params.disposition = NEW_FOREGROUND_TAB;
43 Navigate(¶ms);
44 return params.target_contents;
45 }
46
AddWebContents(Browser * browser,content::WebContents * source_contents,content::WebContents * new_contents,WindowOpenDisposition disposition,const gfx::Rect & initial_pos,bool user_gesture,bool * was_blocked)47 void AddWebContents(Browser* browser,
48 content::WebContents* source_contents,
49 content::WebContents* new_contents,
50 WindowOpenDisposition disposition,
51 const gfx::Rect& initial_pos,
52 bool user_gesture,
53 bool* was_blocked) {
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);
58
59 NavigateParams params(browser, new_contents);
60 params.source_contents = source_contents;
61 params.disposition = disposition;
62 params.window_bounds = initial_pos;
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;
68 Navigate(¶ms);
69 }
70
CloseWebContents(Browser * browser,content::WebContents * contents,bool add_to_history)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";
77 return;
78 }
79
80 browser->tab_strip_model()->CloseWebContentsAt(
81 index,
82 add_to_history ? TabStripModel::CLOSE_CREATE_HISTORICAL_TAB
83 : TabStripModel::CLOSE_NONE);
84 }
85
86 } // namespace chrome
87