| Index: chrome/browser/browser.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/browser.cc	(revision 54528)
 | 
| +++ chrome/browser/browser.cc	(working copy)
 | 
| @@ -531,10 +531,10 @@
 | 
|      case Extension::LAUNCH_WINDOW:
 | 
|      case Extension::LAUNCH_PANEL:
 | 
|        tab = Browser::OpenApplicationWindow(profile, extension, container,
 | 
| -                                           GURL());
 | 
| +                                           GURL(), &browser);
 | 
|        break;
 | 
|      case Extension::LAUNCH_TAB: {
 | 
| -      tab = Browser::OpenApplicationTab(profile, extension);
 | 
| +      tab = Browser::OpenApplicationTab(profile, extension, &browser);
 | 
|        break;
 | 
|      }
 | 
|      default:
 | 
| @@ -542,7 +542,6 @@
 | 
|        break;
 | 
|    }
 | 
|    if (tab) {
 | 
| -    Browser* browser = tab->delegate()->GetBrowser();
 | 
|      if (browser && extension && extension->launch_fullscreen())
 | 
|        browser->window()->SetFullscreen(true);
 | 
|    }
 | 
| @@ -554,7 +553,8 @@
 | 
|      Profile* profile,
 | 
|      Extension* extension,
 | 
|      Extension::LaunchContainer container,
 | 
| -    const GURL& url_input) {
 | 
| +    const GURL& url_input,
 | 
| +    Browser** browser) {
 | 
|    GURL url;
 | 
|    if (!url_input.is_empty()) {
 | 
|      if (extension)
 | 
| @@ -570,15 +570,15 @@
 | 
|    RegisterAppPrefs(app_name);
 | 
|  
 | 
|    bool as_panel = extension && (container == Extension::LAUNCH_PANEL);
 | 
| -  Browser* browser = Browser::CreateForApp(app_name, extension, profile,
 | 
| -                                           as_panel);
 | 
| -  TabContents* tab_contents = browser->AddTabWithURL(
 | 
| +  Browser* local_browser = Browser::CreateForApp(app_name, extension, profile,
 | 
| +                                                 as_panel);
 | 
| +  TabContents* tab_contents = local_browser->AddTabWithURL(
 | 
|        url, GURL(), PageTransition::START_PAGE, -1, TabStripModel::ADD_SELECTED,
 | 
|        NULL, std::string());
 | 
|  
 | 
|    tab_contents->GetMutableRendererPrefs()->can_accept_load_drops = false;
 | 
|    tab_contents->render_view_host()->SyncRendererPrefs();
 | 
| -  browser->window()->Show();
 | 
| +  local_browser->window()->Show();
 | 
|  
 | 
|    // TODO(jcampan): http://crbug.com/8123 we should not need to set the initial
 | 
|    //                focus explicitly.
 | 
| @@ -591,33 +591,42 @@
 | 
|      // OnDidGetApplicationInfo, which calls
 | 
|      // web_app::UpdateShortcutForTabContents when it sees UPDATE_SHORTCUT as
 | 
|      // pending web app action.
 | 
| -    browser->pending_web_app_action_ = UPDATE_SHORTCUT;
 | 
| +    local_browser->pending_web_app_action_ = UPDATE_SHORTCUT;
 | 
|    }
 | 
|  
 | 
| +  if (browser)
 | 
| +    *browser = local_browser;
 | 
| +
 | 
|    return tab_contents;
 | 
|  }
 | 
|  
 | 
|  // static
 | 
|  TabContents* Browser::OpenApplicationWindow(Profile* profile,
 | 
| -                                            GURL& url) {
 | 
| -  return OpenApplicationWindow(profile, NULL, Extension::LAUNCH_WINDOW, url);
 | 
| +                                            GURL& url, Browser** browser) {
 | 
| +  return OpenApplicationWindow(profile, NULL, Extension::LAUNCH_WINDOW, url,
 | 
| +                               browser);
 | 
|  }
 | 
|  
 | 
|  // static
 | 
|  TabContents* Browser::OpenApplicationTab(Profile* profile,
 | 
| -                                         Extension* extension) {
 | 
| -  Browser* browser = BrowserList::GetLastActiveWithProfile(profile);
 | 
| -  if (!browser || browser->type() != Browser::TYPE_NORMAL)
 | 
| +                                         Extension* extension,
 | 
| +                                         Browser** browser) {
 | 
| +  Browser* local_browser = BrowserList::GetLastActiveWithProfile(profile);
 | 
| +  if (!local_browser || local_browser->type() != Browser::TYPE_NORMAL)
 | 
|      return NULL;
 | 
|  
 | 
|    // TODO(erikkay): This doesn't seem like the right transition in all cases.
 | 
|    PageTransition::Type transition = PageTransition::START_PAGE;
 | 
|    GURL url = extension->GetFullLaunchURL();
 | 
|    TabContents* tab_contents =
 | 
| -      browser->CreateTabContentsForURL(url, GURL(), profile,
 | 
| -                                       transition, false, NULL);
 | 
| +      local_browser->CreateTabContentsForURL(url, GURL(), profile,
 | 
| +                                             transition, false, NULL);
 | 
|    tab_contents->SetExtensionApp(extension);
 | 
| -  browser->AddTab(tab_contents, transition);
 | 
| +  local_browser->AddTab(tab_contents, transition);
 | 
| +
 | 
| +  if (browser)
 | 
| +    *browser = local_browser;
 | 
| +
 | 
|    return tab_contents;
 | 
|  }
 | 
|  
 | 
| @@ -2374,6 +2383,13 @@
 | 
|    UseVerticalTabsChanged();
 | 
|  }
 | 
|  
 | 
| +bool Browser::LargeIconsPermitted() const {
 | 
| +  // We don't show the big icons in tabs for TYPE_EXTENSION_APP windows because
 | 
| +  // for those windows, we already have a big icon in the top-left outside any
 | 
| +  // tab. Having big tab icons too looks kinda redonk.
 | 
| +  return TYPE_EXTENSION_APP != type();
 | 
| +}
 | 
| +
 | 
|  ///////////////////////////////////////////////////////////////////////////////
 | 
|  // Browser, TabStripModelObserver implementation:
 | 
|  
 | 
| @@ -2925,10 +2941,6 @@
 | 
|    pending_web_app_action_ = NONE;
 | 
|  }
 | 
|  
 | 
| -Browser* Browser::GetBrowser() {
 | 
| -  return this;
 | 
| -}
 | 
| -
 | 
|  void Browser::ContentTypeChanged(TabContents* source) {
 | 
|    if (source == GetSelectedTabContents())
 | 
|      UpdateZoomCommandsForTabState();
 | 
| @@ -3729,7 +3741,7 @@
 | 
|      if (destination_extension->launch_container() ==
 | 
|          Extension::LAUNCH_WINDOW) {
 | 
|        Browser::OpenApplicationWindow(profile_, destination_extension,
 | 
| -                                     Extension::LAUNCH_WINDOW, url);
 | 
| +                                     Extension::LAUNCH_WINDOW, url, NULL);
 | 
|        return true;
 | 
|      }
 | 
|    }
 | 
| 
 |