Fix the leak of browser when chrome::Navigate creates a new browser.
If FindOrCreateTabbedBrowser creates a browser and chrome::Navigate creates
another browser (e.g NEW_WINDOW or NEW_POPUP is specified as disposition),
the former one leaks.
This CL fixes it.
BUG=129187
TEST=None
Review URL: https://chromiumcodereview.appspot.com/10790067
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@147461 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_tab_util.cc b/chrome/browser/extensions/extension_tab_util.cc
index 4c12f05..df9df2b 100644
--- a/chrome/browser/extensions/extension_tab_util.cc
+++ b/chrome/browser/extensions/extension_tab_util.cc
@@ -228,7 +228,10 @@
bool user_gesture) {
Profile* profile =
Profile::FromBrowserContext(web_contents->GetBrowserContext());
- Browser* browser = browser::FindOrCreateTabbedBrowser(profile);
+ Browser* browser = browser::FindTabbedBrowser(profile, false);
+ const bool browser_created = !browser;
+ if (!browser)
+ browser = Browser::Create(profile);
TabContents* tab_contents = new TabContents(web_contents);
chrome::NavigateParams params(browser, tab_contents);
@@ -245,6 +248,10 @@
params.window_action = chrome::NavigateParams::SHOW_WINDOW;
params.user_gesture = user_gesture;
chrome::Navigate(¶ms);
+
+ // Close the browser if chrome::Navigate created a new one.
+ if (browser_created && (browser != params.browser))
+ browser->window()->Close();
}
// static