| Index: chrome/utility/shell_handler_win.cc
 | 
| diff --git a/chrome/utility/shell_handler_win.cc b/chrome/utility/shell_handler_win.cc
 | 
| index 9edd0427b40b979113bb797920c56193a1aa9e2f..f7e028fc4f59f58d5e5a5610ad0febbf415b4cc6 100644
 | 
| --- a/chrome/utility/shell_handler_win.cc
 | 
| +++ b/chrome/utility/shell_handler_win.cc
 | 
| @@ -23,6 +23,8 @@ bool ShellHandler::OnMessageReceived(const IPC::Message& message) {
 | 
|                          OnOpenItemViaShell)
 | 
|      IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetOpenFileName,
 | 
|                          OnGetOpenFileName)
 | 
| +    IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetSaveFileName,
 | 
| +                        OnGetSaveFileName)
 | 
|      IPC_MESSAGE_UNHANDLED(handled = false)
 | 
|    IPC_END_MESSAGE_MAP()
 | 
|    return handled;
 | 
| @@ -56,3 +58,32 @@ void ShellHandler::OnGetOpenFileName(
 | 
|          new ChromeUtilityHostMsg_GetOpenFileName_Failed());
 | 
|    }
 | 
|  }
 | 
| +
 | 
| +void ShellHandler::OnGetSaveFileName(
 | 
| +    const ChromeUtilityMsg_GetSaveFileName_Params& params) {
 | 
| +  ui::win::OpenFileName open_file_name(params.owner, params.flags);
 | 
| +  open_file_name.SetInitialSelection(params.initial_directory,
 | 
| +                                     params.suggested_filename);
 | 
| +  open_file_name.GetOPENFILENAME()->nFilterIndex =
 | 
| +      params.one_based_filter_index;
 | 
| +  open_file_name.GetOPENFILENAME()->lpstrDefExt =
 | 
| +      params.default_extension.c_str();
 | 
| +
 | 
| +  open_file_name.MaybeInstallWindowPositionHookForSaveAsOnXP();
 | 
| +
 | 
| +  if (::GetSaveFileName(open_file_name.GetOPENFILENAME())) {
 | 
| +    content::UtilityThread::Get()->Send(
 | 
| +        new ChromeUtilityHostMsg_GetSaveFileName_Result(
 | 
| +            base::FilePath(open_file_name.GetOPENFILENAME()->lpstrFile),
 | 
| +            open_file_name.GetOPENFILENAME()->nFilterIndex));
 | 
| +    return;
 | 
| +  }
 | 
| +
 | 
| +  // Zero means the dialog was closed, otherwise we had an error.
 | 
| +  DWORD error_code = ::CommDlgExtendedError();
 | 
| +  if (error_code != 0)
 | 
| +    NOTREACHED() << "GetSaveFileName failed with code: " << error_code;
 | 
| +
 | 
| +  content::UtilityThread::Get()->Send(
 | 
| +      new ChromeUtilityHostMsg_GetSaveFileName_Failed());
 | 
| +}
 | 
| 
 |