Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(547)

Side by Side Diff: chrome/browser/file_select_helper.cc

Issue 10804026: Fix open dialog not remembering last opened folder on drive (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/file_select_helper.h" 5 #include "chrome/browser/file_select_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 base::PLATFORM_FILE_WRITE | 60 base::PLATFORM_FILE_WRITE |
61 base::PLATFORM_FILE_WRITE_ATTRIBUTES | 61 base::PLATFORM_FILE_WRITE_ATTRIBUTES |
62 base::PLATFORM_FILE_ASYNC; 62 base::PLATFORM_FILE_ASYNC;
63 63
64 int permissions = kReadFilePermissions; 64 int permissions = kReadFilePermissions;
65 if (dialog_type == SelectFileDialog::SELECT_SAVEAS_FILE) 65 if (dialog_type == SelectFileDialog::SELECT_SAVEAS_FILE)
66 permissions = kWriteFilePermissions; 66 permissions = kWriteFilePermissions;
67 render_view_host->FilesSelectedInChooser(files, permissions); 67 render_view_host->FilesSelectedInChooser(files, permissions);
68 } 68 }
69 69
70 // Converts a list of FilePaths to a list of SelectedFileInfo, with the 70 // Converts a list of FilePaths to a list of ui::SelectedFileInfo.
71 // display name field left empty. 71 std::vector<ui::SelectedFileInfo> FilePathListToSelectedFileInfoList(
72 std::vector<ui::SelectedFileInfo> ConvertToSelectedFileInfoList(
73 const std::vector<FilePath>& paths) { 72 const std::vector<FilePath>& paths) {
74 std::vector<ui::SelectedFileInfo> selected_files; 73 std::vector<ui::SelectedFileInfo> selected_files;
75 for (size_t i = 0; i < paths.size(); ++i) { 74 for (size_t i = 0; i < paths.size(); ++i) {
76 selected_files.push_back( 75 selected_files.push_back(
77 ui::SelectedFileInfo(paths[i], FilePath::StringType())); 76 ui::SelectedFileInfo(paths[i], paths[i]));
78 } 77 }
79 return selected_files; 78 return selected_files;
80 } 79 }
81 80
82 } // namespace 81 } // namespace
83 82
84 struct FileSelectHelper::ActiveDirectoryEnumeration { 83 struct FileSelectHelper::ActiveDirectoryEnumeration {
85 ActiveDirectoryEnumeration() : rvh_(NULL) {} 84 ActiveDirectoryEnumeration() : rvh_(NULL) {}
86 85
87 scoped_ptr<DirectoryListerDispatchDelegate> delegate_; 86 scoped_ptr<DirectoryListerDispatchDelegate> delegate_;
(...skipping 23 matching lines...) Expand all
111 for (iter = directory_enumerations_.begin(); 110 for (iter = directory_enumerations_.begin();
112 iter != directory_enumerations_.end(); 111 iter != directory_enumerations_.end();
113 ++iter) { 112 ++iter) {
114 iter->second->lister_.reset(); 113 iter->second->lister_.reset();
115 delete iter->second; 114 delete iter->second;
116 } 115 }
117 } 116 }
118 117
119 void FileSelectHelper::FileSelected(const FilePath& path, 118 void FileSelectHelper::FileSelected(const FilePath& path,
120 int index, void* params) { 119 int index, void* params) {
121 FileSelectedWithExtraInfo( 120 FileSelectedWithExtraInfo(ui::SelectedFileInfo(path, path), index, params);
122 ui::SelectedFileInfo(path, FilePath::StringType()),
123 index, params);
124 } 121 }
125 122
126 void FileSelectHelper::FileSelectedWithExtraInfo( 123 void FileSelectHelper::FileSelectedWithExtraInfo(
127 const ui::SelectedFileInfo& file, 124 const ui::SelectedFileInfo& file,
128 int index, 125 int index,
129 void* params) { 126 void* params) {
130 if (!render_view_host_) 127 if (!render_view_host_)
131 return; 128 return;
132 129
133 const FilePath& path = file.path; 130 profile_->set_last_selected_directory(file.file_path.DirName());
134 profile_->set_last_selected_directory(path.DirName());
135 131
132 const FilePath& path = file.local_path;
136 if (dialog_type_ == SelectFileDialog::SELECT_FOLDER) { 133 if (dialog_type_ == SelectFileDialog::SELECT_FOLDER) {
137 StartNewEnumeration(path, kFileSelectEnumerationId, render_view_host_); 134 StartNewEnumeration(path, kFileSelectEnumerationId, render_view_host_);
138 return; 135 return;
139 } 136 }
140 137
141 std::vector<ui::SelectedFileInfo> files; 138 std::vector<ui::SelectedFileInfo> files;
142 files.push_back(file); 139 files.push_back(file);
143 NotifyRenderViewHost(render_view_host_, files, dialog_type_); 140 NotifyRenderViewHost(render_view_host_, files, dialog_type_);
144 141
145 // No members should be accessed from here on. 142 // No members should be accessed from here on.
146 RunFileChooserEnd(); 143 RunFileChooserEnd();
147 } 144 }
148 145
149 void FileSelectHelper::MultiFilesSelected(const std::vector<FilePath>& files, 146 void FileSelectHelper::MultiFilesSelected(const std::vector<FilePath>& files,
150 void* params) { 147 void* params) {
151 std::vector<ui::SelectedFileInfo> selected_files = 148 std::vector<ui::SelectedFileInfo> selected_files =
152 ConvertToSelectedFileInfoList(files); 149 FilePathListToSelectedFileInfoList(files);
150
153 MultiFilesSelectedWithExtraInfo(selected_files, params); 151 MultiFilesSelectedWithExtraInfo(selected_files, params);
154 } 152 }
155 153
156 void FileSelectHelper::MultiFilesSelectedWithExtraInfo( 154 void FileSelectHelper::MultiFilesSelectedWithExtraInfo(
157 const std::vector<ui::SelectedFileInfo>& files, 155 const std::vector<ui::SelectedFileInfo>& files,
158 void* params) { 156 void* params) {
159 if (!files.empty()) 157 if (!files.empty())
160 profile_->set_last_selected_directory(files[0].path.DirName()); 158 profile_->set_last_selected_directory(files[0].file_path.DirName());
161 if (!render_view_host_) 159 if (!render_view_host_)
162 return; 160 return;
163 161
164 NotifyRenderViewHost(render_view_host_, files, dialog_type_); 162 NotifyRenderViewHost(render_view_host_, files, dialog_type_);
165 163
166 // No members should be accessed from here on. 164 // No members should be accessed from here on.
167 RunFileChooserEnd(); 165 RunFileChooserEnd();
168 } 166 }
169 167
170 void FileSelectHelper::FileSelectionCanceled(void* params) { 168 void FileSelectHelper::FileSelectionCanceled(void* params) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 scoped_ptr<ActiveDirectoryEnumeration> entry(directory_enumerations_[id]); 219 scoped_ptr<ActiveDirectoryEnumeration> entry(directory_enumerations_[id]);
222 directory_enumerations_.erase(id); 220 directory_enumerations_.erase(id);
223 if (!entry->rvh_) 221 if (!entry->rvh_)
224 return; 222 return;
225 if (error) { 223 if (error) {
226 FileSelectionCanceled(NULL); 224 FileSelectionCanceled(NULL);
227 return; 225 return;
228 } 226 }
229 227
230 std::vector<ui::SelectedFileInfo> selected_files = 228 std::vector<ui::SelectedFileInfo> selected_files =
231 ConvertToSelectedFileInfoList(entry->results_); 229 FilePathListToSelectedFileInfoList(entry->results_);
232 230
233 if (id == kFileSelectEnumerationId) 231 if (id == kFileSelectEnumerationId)
234 NotifyRenderViewHost(entry->rvh_, selected_files, dialog_type_); 232 NotifyRenderViewHost(entry->rvh_, selected_files, dialog_type_);
235 else 233 else
236 entry->rvh_->DirectoryEnumerationFinished(id, entry->results_); 234 entry->rvh_->DirectoryEnumerationFinished(id, entry->results_);
237 235
238 EnumerateDirectoryEnd(); 236 EnumerateDirectoryEnd();
239 } 237 }
240 238
241 SelectFileDialog::FileTypeInfo* FileSelectHelper::GetFileTypesFromAcceptType( 239 SelectFileDialog::FileTypeInfo* FileSelectHelper::GetFileTypesFromAcceptType(
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 // A 1 character accept type will always be invalid (either a "." in the case 471 // A 1 character accept type will always be invalid (either a "." in the case
474 // of an extension or a "/" in the case of a MIME type). 472 // of an extension or a "/" in the case of a MIME type).
475 std::string unused; 473 std::string unused;
476 if (accept_type.length() <= 1 || 474 if (accept_type.length() <= 1 ||
477 StringToLowerASCII(accept_type) != accept_type || 475 StringToLowerASCII(accept_type) != accept_type ||
478 TrimWhitespaceASCII(accept_type, TRIM_ALL, &unused) != TRIM_NONE) { 476 TrimWhitespaceASCII(accept_type, TRIM_ALL, &unused) != TRIM_NONE) {
479 return false; 477 return false;
480 } 478 }
481 return true; 479 return true;
482 } 480 }
OLDNEW
« no previous file with comments | « chrome/browser/download/save_package_file_picker_chromeos.cc ('k') | chrome/browser/ui/browser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698