| Index: chrome/browser/extensions/api/tabs/tabs_api.cc | 
| diff --git a/chrome/browser/extensions/api/tabs/tabs_api.cc b/chrome/browser/extensions/api/tabs/tabs_api.cc | 
| index 229d89aaed2445c1b428504800768e261b4dedac..b2af4e3e4b29d763095157510d407251541f2faa 100644 | 
| --- a/chrome/browser/extensions/api/tabs/tabs_api.cc | 
| +++ b/chrome/browser/extensions/api/tabs/tabs_api.cc | 
| @@ -181,6 +181,23 @@ void AssignOptionalValue(const scoped_ptr<T>& source, | 
| } | 
| } | 
|  | 
| +ui::WindowShowState ConvertToWindowShowState(windows::State state) { | 
| +  switch (state) { | 
| +    case windows::STATE_NORMAL: | 
| +      return ui::SHOW_STATE_NORMAL; | 
| +    case windows::STATE_MINIMIZED: | 
| +      return ui::SHOW_STATE_MINIMIZED; | 
| +    case windows::STATE_MAXIMIZED: | 
| +      return ui::SHOW_STATE_MAXIMIZED; | 
| +    case windows::STATE_FULLSCREEN: | 
| +      return ui::SHOW_STATE_FULLSCREEN; | 
| +    case windows::STATE_NONE: | 
| +      return ui::SHOW_STATE_DEFAULT; | 
| +  } | 
| +  NOTREACHED(); | 
| +  return ui::SHOW_STATE_DEFAULT; | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| void ZoomModeToZoomSettings(ZoomController::ZoomMode zoom_mode, | 
| @@ -559,6 +576,10 @@ bool WindowsCreateFunction::RunSync() { | 
| host_desktop_type); | 
| } | 
| create_params.initial_show_state = ui::SHOW_STATE_NORMAL; | 
| +  if (create_data && create_data->state) { | 
| +    create_params.initial_show_state = | 
| +        ConvertToWindowShowState(create_data->state); | 
| +  } | 
| create_params.host_desktop_type = chrome::GetActiveDesktop(); | 
|  | 
| Browser* new_window = new Browser(create_params); | 
| @@ -595,20 +616,29 @@ bool WindowsCreateFunction::RunSync() { | 
| if (!saw_focus_key && create_panel) | 
| focused = false; | 
|  | 
| +  WindowController* controller = new_window->extension_window_controller(); | 
| +  // Start being fullscreen before Show(). This make the window looks like | 
| +  // initialy fullscreen. | 
| +  if (create_params.initial_show_state == ui::SHOW_STATE_FULLSCREEN) | 
| +    controller->SetFullscreenMode(true, extension()->url()); | 
| + | 
| if (focused) | 
| new_window->window()->Show(); | 
| else | 
| new_window->window()->ShowInactive(); | 
|  | 
| +  if (create_params.initial_show_state == ui::SHOW_STATE_MAXIMIZED) | 
| +    new_window->window()->Maximize(); | 
| +  else if (create_params.initial_show_state == ui::SHOW_STATE_MINIMIZED) | 
| +    new_window->window()->Minimize(); | 
| + | 
| if (new_window->profile()->IsOffTheRecord() && | 
| !GetProfile()->IsOffTheRecord() && !include_incognito()) { | 
| // Don't expose incognito windows if extension itself works in non-incognito | 
| // profile and CanCrossIncognito isn't allowed. | 
| SetResult(base::Value::CreateNullValue()); | 
| } else { | 
| -    SetResult( | 
| -        new_window->extension_window_controller()->CreateWindowValueWithTabs( | 
| -            extension())); | 
| +    SetResult(controller->CreateWindowValueWithTabs(extension())); | 
| } | 
|  | 
| return true; | 
| @@ -624,26 +654,8 @@ bool WindowsUpdateFunction::RunSync() { | 
| &controller)) | 
| return false; | 
|  | 
| -  ui::WindowShowState show_state = ui::SHOW_STATE_DEFAULT;  // No change. | 
| -  switch (params->update_info.state) { | 
| -    case windows::Update::Params::UpdateInfo::STATE_NORMAL: | 
| -      show_state = ui::SHOW_STATE_NORMAL; | 
| -      break; | 
| -    case windows::Update::Params::UpdateInfo::STATE_MINIMIZED: | 
| -      show_state = ui::SHOW_STATE_MINIMIZED; | 
| -      break; | 
| -    case windows::Update::Params::UpdateInfo::STATE_MAXIMIZED: | 
| -      show_state = ui::SHOW_STATE_MAXIMIZED; | 
| -      break; | 
| -    case windows::Update::Params::UpdateInfo::STATE_FULLSCREEN: | 
| -      show_state = ui::SHOW_STATE_FULLSCREEN; | 
| -      break; | 
| -    case windows::Update::Params::UpdateInfo::STATE_NONE: | 
| -      break; | 
| -    default: | 
| -      error_ = keys::kInvalidWindowStateError; | 
| -      return false; | 
| -  } | 
| +  ui::WindowShowState show_state = | 
| +      ConvertToWindowShowState(params->update_info.state); | 
|  | 
| if (show_state != ui::SHOW_STATE_FULLSCREEN && | 
| show_state != ui::SHOW_STATE_DEFAULT) | 
|  |