Index: chrome/browser/ui/browser_tabstrip.cc |
=================================================================== |
--- chrome/browser/ui/browser_tabstrip.cc (revision 0) |
+++ chrome/browser/ui/browser_tabstrip.cc (revision 0) |
@@ -0,0 +1,153 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/browser_tabstrip.h" |
+ |
+#include "base/command_line.h" |
+#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_navigator.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/common/chrome_switches.h" |
+#include "content/public/browser/navigation_entry.h" |
+#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/web_contents.h" |
+ |
+namespace chrome { |
+ |
+int GetIndexOfTab(const Browser* browser, |
+ const content::WebContents* contents) { |
+ return browser->tab_strip_model()->GetIndexOfWebContents(contents); |
+} |
+ |
+TabContents* GetActiveTabContents(const Browser* browser) { |
+ return browser->tab_strip_model()->GetActiveTabContents(); |
+} |
+ |
+content::WebContents* GetActiveWebContents(const Browser* browser) { |
+ TabContents* active_tab = GetActiveTabContents(browser); |
+ return active_tab ? active_tab->web_contents() : NULL; |
+} |
+ |
+TabContents* GetTabContentsAt(const Browser* browser, int index) { |
+ return browser->tab_strip_model()->GetTabContentsAt(index); |
+} |
+ |
+content::WebContents* GetWebContentsAt(const Browser* browser, int index) { |
+ TabContents* tab = GetTabContentsAt(browser, index); |
+ return tab ? tab->web_contents() : NULL; |
+} |
+ |
+void ActivateTabAt(Browser* browser, int index, bool user_gesture) { |
+ browser->tab_strip_model()->ActivateTabAt(index, user_gesture); |
+} |
+ |
+bool IsTabStripEditable(Browser* browser) { |
+ return browser->window()->IsTabStripEditable(); |
+} |
+ |
+TabContents* AddSelectedTabWithURL(Browser* browser, |
+ const GURL& url, |
+ content::PageTransition transition) { |
+ browser::NavigateParams params(browser, url, transition); |
+ params.disposition = NEW_FOREGROUND_TAB; |
+ browser::Navigate(¶ms); |
+ return params.target_contents; |
+} |
+ |
+void AddTab(Browser* browser, |
+ TabContents* tab_contents, |
+ content::PageTransition type) { |
+ browser->tab_strip_model()->AddTabContents(tab_contents, -1, type, |
+ TabStripModel::ADD_ACTIVE); |
+} |
+ |
+void AddWebContents(Browser* browser, |
+ content::WebContents* source_contents, |
+ content::WebContents* new_contents, |
+ WindowOpenDisposition disposition, |
+ const gfx::Rect& initial_pos, |
+ bool user_gesture) { |
+ // No code for this yet. |
+ DCHECK(disposition != SAVE_TO_DISK); |
+ // Can't create a new contents for the current tab - invalid case. |
+ DCHECK(disposition != CURRENT_TAB); |
+ |
+ TabContents* source_tab_contents = NULL; |
+ BlockedContentTabHelper* source_blocked_content = NULL; |
+ TabContents* new_tab_contents = TabContents::FromWebContents(new_contents); |
+ if (!new_tab_contents) |
+ new_tab_contents = new TabContents(new_contents); |
+ if (source_contents) { |
+ source_tab_contents = TabContents::FromWebContents(source_contents); |
+ source_blocked_content = source_tab_contents->blocked_content_tab_helper(); |
+ } |
+ |
+ if (source_tab_contents) { |
+ // Handle blocking of all contents. |
+ if (source_blocked_content->all_contents_blocked()) { |
+ source_blocked_content->AddTabContents(new_tab_contents, |
+ disposition, |
+ initial_pos, |
+ user_gesture); |
+ return; |
+ } |
+ |
+ // Handle blocking of popups. |
+ if ((disposition == NEW_POPUP) && !user_gesture && |
+ !CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kDisablePopupBlocking)) { |
+ // Unrequested popups from normal pages are constrained unless they're in |
+ // the white list. The popup owner will handle checking this. |
+ source_tab_contents->blocked_content_tab_helper()-> |
+ AddPopup(new_tab_contents, initial_pos, user_gesture); |
+ return; |
+ } |
+ |
+ new_contents->GetRenderViewHost()->DisassociateFromPopupCount(); |
+ } |
+ |
+ browser::NavigateParams params(browser, new_tab_contents); |
+ params.source_contents = source_contents ? |
+ GetTabContentsAt(browser, GetIndexOfTab(browser, source_contents)) : NULL; |
+ params.disposition = disposition; |
+ params.window_bounds = initial_pos; |
+ params.window_action = browser::NavigateParams::SHOW_WINDOW; |
+ params.user_gesture = user_gesture; |
+ browser::Navigate(¶ms); |
+} |
+ |
+void CloseWebContents(Browser* browser, content::WebContents* contents) { |
+ int index = browser->tab_strip_model()->GetIndexOfWebContents(contents); |
+ if (index == TabStripModel::kNoTab) { |
+ NOTREACHED() << "CloseWebContents called for tab not in our strip"; |
+ return; |
+ } |
+ browser->tab_strip_model()->CloseTabContentsAt( |
+ index, |
+ TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); |
+} |
+ |
+void CloseAllTabs(Browser* browser) { |
+ browser->tab_strip_model()->CloseAllTabs(); |
+} |
+ |
+TabContents* TabContentsFactory( |
+ Profile* profile, |
+ content::SiteInstance* site_instance, |
+ int routing_id, |
+ const content::WebContents* base_web_contents, |
+ content::SessionStorageNamespace* session_storage_namespace) { |
+ return new TabContents(content::WebContents::Create( |
+ profile, |
+ site_instance, |
+ routing_id, |
+ base_web_contents, |
+ session_storage_namespace)); |
+} |
+ |
+} // namespace chrome |
Property changes on: chrome\browser\ui\browser_tabstrip.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |