Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / browser_tabstrip.cc
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(&params);
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(&params);
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(&params);
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