| Index: chrome/browser/ui/browser.cc
 | 
| diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
 | 
| index 3a3e35fad37676e05457023a605953f298dd5f5a..6686583187f52ac50242b04698784123e69efb5c 100644
 | 
| --- a/chrome/browser/ui/browser.cc
 | 
| +++ b/chrome/browser/ui/browser.cc
 | 
| @@ -323,7 +323,9 @@ bool ParseCommaSeparatedIntegers(const std::string& str,
 | 
|  
 | 
|  Browser::CreateParams::CreateParams(Type type, Profile* profile)
 | 
|      : type(type),
 | 
| -      profile(profile) {
 | 
| +      profile(profile),
 | 
| +      initial_show_state(ui::SHOW_STATE_DEFAULT),
 | 
| +      is_session_restore(false) {
 | 
|  }
 | 
|  
 | 
|  ///////////////////////////////////////////////////////////////////////////////
 | 
| @@ -488,9 +490,15 @@ Browser* Browser::Create(Profile* profile) {
 | 
|  
 | 
|  // static
 | 
|  Browser* Browser::CreateWithParams(const CreateParams& params) {
 | 
| +  if (!params.app_name.empty())
 | 
| +    RegisterAppPrefs(params.app_name, params.profile);
 | 
| +
 | 
|    Browser* browser = new Browser(params.type, params.profile);
 | 
|    browser->app_name_ = params.app_name;
 | 
|    browser->set_override_bounds(params.initial_bounds);
 | 
| +  browser->set_show_state(params.initial_show_state);
 | 
| +  browser->set_is_session_restore(params.is_session_restore);
 | 
| +
 | 
|    browser->InitBrowserWindow();
 | 
|    return browser;
 | 
|  }
 | 
| @@ -509,8 +517,6 @@ Browser* Browser::CreateForApp(Type type,
 | 
|    DCHECK(type != TYPE_TABBED);
 | 
|    DCHECK(!app_name.empty());
 | 
|  
 | 
| -  RegisterAppPrefs(app_name, profile);
 | 
| -
 | 
|  #if !defined(OS_CHROMEOS) || defined(USE_AURA)
 | 
|    if (type == TYPE_PANEL &&
 | 
|        !PanelManager::ShouldUsePanels(
 | 
| @@ -987,6 +993,10 @@ bool Browser::ShouldSaveWindowPlacement() const {
 | 
|      case TYPE_POPUP:
 | 
|        // Only save the window placement of popups if they are restored,
 | 
|        // or the window belongs to DevTools.
 | 
| +#if defined USE_AURA
 | 
| +      if (is_app())
 | 
| +        return true;
 | 
| +#endif
 | 
|        return browser_defaults::kRestorePopups || is_devtools();
 | 
|      case TYPE_PANEL:
 | 
|        // Do not save the window placement of panels.
 | 
| @@ -1046,7 +1056,14 @@ gfx::Rect Browser::GetSavedWindowBounds() const {
 | 
|  
 | 
|  ui::WindowShowState Browser::GetSavedWindowShowState() const {
 | 
|    // Only tabbed browsers use the command line or preference state.
 | 
| -  if (!is_type_tabbed())
 | 
| +  bool show_state = !is_type_tabbed();
 | 
| +
 | 
| +#if defined(USE_AURA)
 | 
| +  // Apps save state on aura.
 | 
| +  show_state &= !is_app();
 | 
| +#endif
 | 
| +
 | 
| +  if (show_state)
 | 
|      return show_state_;
 | 
|  
 | 
|    if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kStartMaximized))
 | 
| @@ -1163,6 +1180,12 @@ void Browser::OnWindowClosing() {
 | 
|  
 | 
|    TabRestoreService* tab_restore_service =
 | 
|        TabRestoreServiceFactory::GetForProfile(profile());
 | 
| +
 | 
| +#if defined(USE_AURA)
 | 
| +  if (tab_restore_service && is_app())
 | 
| +    tab_restore_service->BrowserClosing(tab_restore_service_delegate());
 | 
| +#endif
 | 
| +
 | 
|    if (tab_restore_service && is_type_tabbed() && tab_count())
 | 
|      tab_restore_service->BrowserClosing(tab_restore_service_delegate());
 | 
|  
 | 
| 
 |