diff options
Diffstat (limited to 'chrome/browser/browser.cc')
-rw-r--r-- | chrome/browser/browser.cc | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index 374ca34..9a8648f 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -308,7 +308,7 @@ void Browser::OpenURLOffTheRecord(Profile* profile, const GURL& url) { if (!browser) browser = Browser::Create(off_the_record_profile); // TODO(eroman): should we have referrer here? - browser->AddTabWithURL(url, GURL(), PageTransition::LINK, true, NULL); + browser->AddTabWithURL(url, GURL(), PageTransition::LINK, true, -1, NULL); browser->window()->Show(); } @@ -318,7 +318,8 @@ void Browser::OpenApplicationWindow(Profile* profile, const GURL& url) { RegisterAppPrefs(app_name); Browser* browser = Browser::CreateForApp(app_name, profile, false); - browser->AddTabWithURL(url, GURL(), PageTransition::START_PAGE, true, NULL); + browser->AddTabWithURL(url, GURL(), PageTransition::START_PAGE, true, -1, + NULL); browser->window()->Show(); // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial // focus explicitly. @@ -479,23 +480,27 @@ void Browser::OnWindowClosing() { TabContents* Browser::AddTabWithURL( const GURL& url, const GURL& referrer, PageTransition::Type transition, - bool foreground, SiteInstance* instance) { - if ((type_ & TYPE_APP) != 0 && tabstrip_model_.count() == 1) { - NOTREACHED() << "Cannot add a tab in a mono tab application."; - return NULL; - } - - GURL url_to_load = url; - if (url_to_load.is_empty()) - url_to_load = GetHomePage(); - TabContents* contents = - CreateTabContentsForURL(url_to_load, referrer, profile_, transition, - false, instance); - tabstrip_model_.AddTabContents(contents, -1, transition, foreground); - // By default, content believes it is not hidden. When adding contents - // in the background, tell it that it's hidden. - if (!foreground) - contents->WasHidden(); + bool foreground, int index, SiteInstance* instance) { + TabContents* contents = NULL; + if (type_ == TYPE_NORMAL || tabstrip_model()->empty()) { + GURL url_to_load = url; + if (url_to_load.is_empty()) + url_to_load = GetHomePage(); + contents = CreateTabContentsForURL(url_to_load, referrer, profile_, + transition, false, instance); + tabstrip_model_.AddTabContents(contents, index, transition, foreground); + // By default, content believes it is not hidden. When adding contents + // in the background, tell it that it's hidden. + if (!foreground) + contents->WasHidden(); + } else { + // We're in an app window or a popup window. Find an existing browser to + // open this URL in, creating one if none exists. + Browser* b = GetOrCreateTabbedBrowser(); + contents = b->AddTabWithURL(url, referrer, transition, foreground, index, + instance); + b->window()->Show(); + } return contents; } @@ -548,7 +553,7 @@ void Browser::ShowSingleDOMUITab(const GURL& url) { } // Otherwise, just create a new tab. - AddTabWithURL(url, GURL(), PageTransition::AUTO_BOOKMARK, true, NULL); + AddTabWithURL(url, GURL(), PageTransition::AUTO_BOOKMARK, true, -1, NULL); } /////////////////////////////////////////////////////////////////////////////// @@ -1076,7 +1081,7 @@ void Browser::OpenAboutChromeDialog() { void Browser::OpenHelpTab() { GURL help_url(WideToASCII(l10n_util::GetString(IDS_HELP_CONTENT_URL))); - AddTabWithURL(help_url, GURL(), PageTransition::AUTO_BOOKMARK, true, + AddTabWithURL(help_url, GURL(), PageTransition::AUTO_BOOKMARK, true, -1, NULL); } @@ -1306,8 +1311,13 @@ void Browser::ExecuteCommand(int id) { /////////////////////////////////////////////////////////////////////////////// // Browser, TabStripModelDelegate implementation: -GURL Browser::GetBlankTabURL() const { - return GURL(chrome::kChromeUINewTabURL); +TabContents* Browser::AddBlankTab(bool foreground) { + return AddBlankTabAt(-1, foreground); +} + +TabContents* Browser::AddBlankTabAt(int index, bool foreground) { + return AddTabWithURL(GURL(chrome::kChromeUINewTabURL), GURL(), + PageTransition::TYPED, foreground, index, NULL); } Browser* Browser::CreateNewStripWithContents(TabContents* detached_contents, @@ -1655,7 +1665,7 @@ void Browser::OpenURLFromTab(TabContents* source, return; } else if (disposition == NEW_WINDOW) { Browser* browser = Browser::Create(profile_); - new_contents = browser->AddTabWithURL(url, referrer, transition, true, + new_contents = browser->AddTabWithURL(url, referrer, transition, true, -1, instance); browser->window()->Show(); } else if ((disposition == CURRENT_TAB) && current_tab) { @@ -1682,7 +1692,8 @@ void Browser::OpenURLFromTab(TabContents* source, return; } else if (disposition != SUPPRESS_OPEN) { new_contents = AddTabWithURL(url, referrer, transition, - disposition != NEW_BACKGROUND_TAB, instance); + disposition != NEW_BACKGROUND_TAB, -1, + instance); } if (disposition != NEW_BACKGROUND_TAB && source_tab_was_frontmost) { |