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

Side by Side Diff: chrome/browser/chromeos/file_manager/open_util.cc

Issue 352393002: Be explicit about target type in platform_util::OpenItem() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 3 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/chromeos/file_manager/open_util.h" 5 #include "chrome/browser/chromeos/file_manager/open_util.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 } 120 }
121 } 121 }
122 122
123 ExecuteFileTaskForUrl(profile, chosen_task->task_descriptor(), url); 123 ExecuteFileTaskForUrl(profile, chosen_task->task_descriptor(), url);
124 callback.Run(true); 124 callback.Run(true);
125 } 125 }
126 126
127 // Opens the file specified by |url| by finding and executing a file task for 127 // Opens the file specified by |url| by finding and executing a file task for
128 // the file. In case of success, calls |callback| with true. Otherwise the 128 // the file. In case of success, calls |callback| with true. Otherwise the
129 // returned value is false. 129 // returned value is false.
130 void OpenFile(Profile* profile, 130 void OpenFileInternal(Profile* profile,
131 const base::FilePath& path, 131 const base::FilePath& path,
132 const GURL& url, 132 const GURL& url,
133 const base::Callback<void(bool)>& callback) { 133 const base::Callback<void(bool)>& callback) {
134 extensions::app_file_handler_util::GetMimeTypeForLocalPath( 134 extensions::app_file_handler_util::GetMimeTypeForLocalPath(
135 profile, 135 profile,
136 path, 136 path,
137 base::Bind(&OpenFileWithMimeType, profile, path, url, callback)); 137 base::Bind(&OpenFileWithMimeType, profile, path, url, callback));
138 } 138 }
139 139
140 enum ExpectedOpenTarget {
141 OPEN_FILE,
142 OPEN_FOLDER
143 };
144
140 // Called when execution of ContinueOpenItem() is completed. 145 // Called when execution of ContinueOpenItem() is completed.
141 void OnContinueOpenItemCompleted(Profile* profile, 146 void OnContinueOpenItemCompleted(Profile* profile,
142 const base::FilePath& file_path, 147 const base::FilePath& file_path,
143 bool result) { 148 bool result) {
144 if (!result) { 149 if (!result) {
145 int message; 150 int message;
146 if (file_path.Extension() == FILE_PATH_LITERAL(".dmg")) 151 if (file_path.Extension() == FILE_PATH_LITERAL(".dmg"))
147 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_DMG; 152 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_DMG;
148 else if (file_path.Extension() == FILE_PATH_LITERAL(".exe") || 153 else if (file_path.Extension() == FILE_PATH_LITERAL(".exe") ||
149 file_path.Extension() == FILE_PATH_LITERAL(".msi")) 154 file_path.Extension() == FILE_PATH_LITERAL(".msi"))
150 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_EXECUTABLE; 155 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_EXECUTABLE;
151 else 156 else
152 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE; 157 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE;
153 ShowWarningMessageBox(profile, file_path, message); 158 ShowWarningMessageBox(profile, file_path, message);
154 } 159 }
155 } 160 }
156 161
157 // Used to implement OpenItem(). 162 // Used to implement OpenFile()/OpenFolder().
158 void ContinueOpenItem(Profile* profile, 163 void ContinueOpenItem(Profile* profile,
hashimoto 2014/09/25 02:34:05 I think it's better to split this function into tw
asanka 2014/09/25 22:24:20 Done. Good call.
164 ExpectedOpenTarget expected_target,
159 const base::FilePath& file_path, 165 const base::FilePath& file_path,
160 const GURL& url, 166 const GURL& url,
161 base::File::Error error) { 167 base::File::Error check_directory_result) {
162 DCHECK_CURRENTLY_ON(BrowserThread::UI); 168 DCHECK_CURRENTLY_ON(BrowserThread::UI);
169 const bool target_is_a_directory =
170 (check_directory_result == base::File::FILE_OK);
163 171
164 if (error == base::File::FILE_OK) { 172 switch (expected_target) {
165 // A directory exists at |url|. Open it with the file manager. 173 case OPEN_FILE:
166 OpenFileManagerWithInternalActionId(profile, url, "open"); 174 if (target_is_a_directory)
167 } else { 175 break;
168 // |url| should be a file. Open it. 176 OpenFileInternal(
169 OpenFile(profile, 177 profile,
170 file_path, 178 file_path,
171 url, 179 url,
172 base::Bind(&OnContinueOpenItemCompleted, profile, file_path)); 180 base::Bind(&OnContinueOpenItemCompleted, profile, file_path));
181 return;
182
183 case OPEN_FOLDER:
184 if (target_is_a_directory) {
185 OpenFileManagerWithInternalActionId(profile, url, "open");
186 return;
187 }
188 break;
173 } 189 }
190 OnContinueOpenItemCompleted(profile, file_path, false);
174 } 191 }
175 192
176 // Converts the |given_path| passed from external callers to the form that the 193 // Converts the |given_path| passed from external callers to the form that the
177 // file manager can correctly handle. It first migrates old Drive/Download 194 // file manager can correctly handle. It first migrates old Drive/Download
178 // folder path to the new formats, and then converts path to filesystem URL. 195 // folder path to the new formats, and then converts path to filesystem URL.
179 // 196 //
180 // When conversion fails, it shows a warning dialog UI and returns false. 197 // When conversion fails, it shows a warning dialog UI and returns false.
181 bool ConvertPath(Profile* profile, 198 bool ConvertPath(Profile* profile,
182 const base::FilePath& given_path, 199 const base::FilePath& given_path,
183 base::FilePath* path, 200 base::FilePath* path,
(...skipping 19 matching lines...) Expand all
203 DCHECK_CURRENTLY_ON(BrowserThread::UI); 220 DCHECK_CURRENTLY_ON(BrowserThread::UI);
204 221
205 base::FilePath converted_path; 222 base::FilePath converted_path;
206 GURL url; 223 GURL url;
207 if (!ConvertPath(profile, file_path, &converted_path, &url)) 224 if (!ConvertPath(profile, file_path, &converted_path, &url))
208 return; 225 return;
209 226
210 OpenFileManagerWithInternalActionId(profile, url, "auto-open"); 227 OpenFileManagerWithInternalActionId(profile, url, "auto-open");
211 } 228 }
212 229
213 void OpenItem(Profile* profile, const base::FilePath& file_path) { 230 void OpenFile(Profile* profile, const base::FilePath& file_path) {
214 DCHECK_CURRENTLY_ON(BrowserThread::UI); 231 DCHECK_CURRENTLY_ON(BrowserThread::UI);
215 232
216 base::FilePath converted_path; 233 base::FilePath converted_path;
234 GURL url;
235 if (!ConvertPath(profile, file_path, &converted_path, &url))
236 return;
237
238 CheckIfDirectoryExists(
239 GetFileSystemContextForExtensionId(profile, kFileManagerAppId),
240 url,
241 base::Bind(&ContinueOpenItem, profile, OPEN_FILE, converted_path, url));
242 }
243
244 void OpenFolder(Profile* profile, const base::FilePath& file_path) {
245 DCHECK_CURRENTLY_ON(BrowserThread::UI);
246
247 base::FilePath converted_path;
217 GURL url; 248 GURL url;
218 if (!ConvertPath(profile, file_path, &converted_path, &url)) 249 if (!ConvertPath(profile, file_path, &converted_path, &url))
219 return; 250 return;
220 251
221 CheckIfDirectoryExists( 252 CheckIfDirectoryExists(
222 GetFileSystemContextForExtensionId(profile, kFileManagerAppId), 253 GetFileSystemContextForExtensionId(profile, kFileManagerAppId),
223 url, 254 url,
224 base::Bind(&ContinueOpenItem, profile, converted_path, url)); 255 base::Bind(&ContinueOpenItem, profile, OPEN_FOLDER, converted_path, url));
225 } 256 }
226 257
227 void ShowItemInFolder(Profile* profile, const base::FilePath& file_path) { 258 void ShowItemInFolder(Profile* profile, const base::FilePath& file_path) {
228 DCHECK_CURRENTLY_ON(BrowserThread::UI); 259 DCHECK_CURRENTLY_ON(BrowserThread::UI);
229 260
230 base::FilePath converted_path; 261 base::FilePath converted_path;
231 GURL url; 262 GURL url;
232 if (!ConvertPath(profile, file_path, &converted_path, &url)) 263 if (!ConvertPath(profile, file_path, &converted_path, &url))
233 return; 264 return;
234 265
235 // This action changes the selection so we do not reuse existing tabs. 266 // This action changes the selection so we do not reuse existing tabs.
236 OpenFileManagerWithInternalActionId(profile, url, "select"); 267 OpenFileManagerWithInternalActionId(profile, url, "select");
237 } 268 }
238 269
239 } // namespace util 270 } // namespace util
240 } // namespace file_manager 271 } // namespace file_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698