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(&params);
+
+  // Close the browser if chrome::Navigate created a new one.
+  if (browser_created && (browser != params.browser))
+    browser->window()->Close();
 }
 
 // static