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 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); 35 } 36 37 content::WebContents* AddSelectedTabWithURL( 38 Browser* browser, 39 const GURL& url, 40 ui::PageTransition transition) { 41 NavigateParams params(browser, url, transition); 42 params.disposition = NEW_FOREGROUND_TAB; 43 Navigate(¶ms); 44 return params.target_contents; 45 } 46 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 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