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

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: Formatting and initializer refactor Created 6 years, 2 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 action_id == "open" || 80 action_id == "open" ||
81 action_id == "select"); 81 action_id == "select");
82 content::RecordAction(base::UserMetricsAction("ShowFileBrowserFullTab")); 82 content::RecordAction(base::UserMetricsAction("ShowFileBrowserFullTab"));
83 83
84 file_tasks::TaskDescriptor task(kFileManagerAppId, 84 file_tasks::TaskDescriptor task(kFileManagerAppId,
85 file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER, 85 file_tasks::TASK_TYPE_FILE_BROWSER_HANDLER,
86 action_id); 86 action_id);
87 ExecuteFileTaskForUrl(profile, task, url); 87 ExecuteFileTaskForUrl(profile, task, url);
88 } 88 }
89 89
90 // Opens the file with fetched MIME type and calls the callback. 90 void WarnOnOpenFileFailure(Profile* profile, const base::FilePath& file_path) {
91 int message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE;
92 if (file_path.Extension() == FILE_PATH_LITERAL(".dmg"))
93 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_DMG;
94 else if (file_path.Extension() == FILE_PATH_LITERAL(".exe") ||
95 file_path.Extension() == FILE_PATH_LITERAL(".msi"))
96 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_EXECUTABLE;
97 ShowWarningMessageBox(profile, file_path, message);
98 }
99
100 // Opens the file with fetched MIME type and warns the user on failure.
91 void OpenFileWithMimeType(Profile* profile, 101 void OpenFileWithMimeType(Profile* profile,
92 const base::FilePath& path, 102 const base::FilePath& path,
93 const GURL& url, 103 const GURL& url,
94 const base::Callback<void(bool)>& callback,
95 const std::string& mime_type) { 104 const std::string& mime_type) {
96 extensions::app_file_handler_util::PathAndMimeTypeSet path_mime_set; 105 extensions::app_file_handler_util::PathAndMimeTypeSet path_mime_set;
97 path_mime_set.insert(std::make_pair(path, mime_type)); 106 path_mime_set.insert(std::make_pair(path, mime_type));
98 107
99 std::vector<GURL> file_urls; 108 std::vector<GURL> file_urls;
100 file_urls.push_back(url); 109 file_urls.push_back(url);
101 110
102 std::vector<file_tasks::FullTaskDescriptor> tasks; 111 std::vector<file_tasks::FullTaskDescriptor> tasks;
103 file_tasks::FindAllTypesOfTasks( 112 file_tasks::FindAllTypesOfTasks(
104 profile, 113 profile,
105 drive::util::GetDriveAppRegistryByProfile(profile), 114 drive::util::GetDriveAppRegistryByProfile(profile),
106 path_mime_set, 115 path_mime_set,
107 file_urls, 116 file_urls,
108 &tasks); 117 &tasks);
109 118
110 if (tasks.empty()) { 119 if (tasks.empty()) {
111 callback.Run(false); 120 WarnOnOpenFileFailure(profile, path);
112 return; 121 return;
113 } 122 }
114 123
115 const file_tasks::FullTaskDescriptor* chosen_task = &tasks[0]; 124 const file_tasks::FullTaskDescriptor* chosen_task = &tasks[0];
116 for (size_t i = 0; i < tasks.size(); ++i) { 125 for (size_t i = 0; i < tasks.size(); ++i) {
117 if (tasks[i].is_default()) { 126 if (tasks[i].is_default()) {
118 chosen_task = &tasks[i]; 127 chosen_task = &tasks[i];
119 break; 128 break;
120 } 129 }
121 } 130 }
122 131
123 ExecuteFileTaskForUrl(profile, chosen_task->task_descriptor(), url); 132 ExecuteFileTaskForUrl(profile, chosen_task->task_descriptor(), url);
124 callback.Run(true);
125 }
126
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
129 // returned value is false.
130 void OpenFile(Profile* profile,
131 const base::FilePath& path,
132 const GURL& url,
133 const base::Callback<void(bool)>& callback) {
134 extensions::app_file_handler_util::GetMimeTypeForLocalPath(
135 profile,
136 path,
137 base::Bind(&OpenFileWithMimeType, profile, path, url, callback));
138 }
139
140 // Called when execution of ContinueOpenItem() is completed.
141 void OnContinueOpenItemCompleted(Profile* profile,
142 const base::FilePath& file_path,
143 bool result) {
144 if (!result) {
145 int message;
146 if (file_path.Extension() == FILE_PATH_LITERAL(".dmg"))
147 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_DMG;
148 else if (file_path.Extension() == FILE_PATH_LITERAL(".exe") ||
149 file_path.Extension() == FILE_PATH_LITERAL(".msi"))
150 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_EXECUTABLE;
151 else
152 message = IDS_FILE_BROWSER_ERROR_VIEWING_FILE;
153 ShowWarningMessageBox(profile, file_path, message);
154 }
155 }
156
157 // Used to implement OpenItem().
158 void ContinueOpenItem(Profile* profile,
159 const base::FilePath& file_path,
160 const GURL& url,
161 base::File::Error error) {
162 DCHECK_CURRENTLY_ON(BrowserThread::UI);
163
164 if (error == base::File::FILE_OK) {
165 // A directory exists at |url|. Open it with the file manager.
166 OpenFileManagerWithInternalActionId(profile, url, "open");
167 } else {
168 // |url| should be a file. Open it.
169 OpenFile(profile,
170 file_path,
171 url,
172 base::Bind(&OnContinueOpenItemCompleted, profile, file_path));
173 }
174 } 133 }
175 134
176 // Converts the |given_path| passed from external callers to the form that the 135 // 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 136 // 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. 137 // folder path to the new formats, and then converts path to filesystem URL.
179 // 138 //
180 // When conversion fails, it shows a warning dialog UI and returns false. 139 // When conversion fails, it shows a warning dialog UI and returns false.
181 bool ConvertPath(Profile* profile, 140 bool ConvertPath(Profile* profile,
182 const base::FilePath& given_path, 141 const base::FilePath& given_path,
183 base::FilePath* path, 142 base::FilePath* path,
(...skipping 19 matching lines...) Expand all
203 DCHECK_CURRENTLY_ON(BrowserThread::UI); 162 DCHECK_CURRENTLY_ON(BrowserThread::UI);
204 163
205 base::FilePath converted_path; 164 base::FilePath converted_path;
206 GURL url; 165 GURL url;
207 if (!ConvertPath(profile, file_path, &converted_path, &url)) 166 if (!ConvertPath(profile, file_path, &converted_path, &url))
208 return; 167 return;
209 168
210 OpenFileManagerWithInternalActionId(profile, url, "auto-open"); 169 OpenFileManagerWithInternalActionId(profile, url, "auto-open");
211 } 170 }
212 171
213 void OpenItem(Profile* profile, const base::FilePath& file_path) { 172 void OpenFile(Profile* profile, const base::FilePath& file_path) {
214 DCHECK_CURRENTLY_ON(BrowserThread::UI); 173 DCHECK_CURRENTLY_ON(BrowserThread::UI);
215 174
216 base::FilePath converted_path; 175 base::FilePath converted_path;
176 GURL url;
177 if (!ConvertPath(profile, file_path, &converted_path, &url))
178 return;
179
180 extensions::app_file_handler_util::GetMimeTypeForLocalPath(
181 profile,
182 converted_path,
183 base::Bind(&OpenFileWithMimeType, profile, converted_path, url));
184 }
185
186 void OpenFolder(Profile* profile, const base::FilePath& file_path) {
187 DCHECK_CURRENTLY_ON(BrowserThread::UI);
188
189 base::FilePath converted_path;
217 GURL url; 190 GURL url;
218 if (!ConvertPath(profile, file_path, &converted_path, &url)) 191 if (!ConvertPath(profile, file_path, &converted_path, &url))
219 return; 192 return;
220 193
221 CheckIfDirectoryExists( 194 // This call will only open Files.app.
222 GetFileSystemContextForExtensionId(profile, kFileManagerAppId), 195 OpenFileManagerWithInternalActionId(profile, url, "open");
223 url,
224 base::Bind(&ContinueOpenItem, profile, converted_path, url));
225 } 196 }
226 197
227 void ShowItemInFolder(Profile* profile, const base::FilePath& file_path) { 198 void ShowItemInFolder(Profile* profile, const base::FilePath& file_path) {
228 DCHECK_CURRENTLY_ON(BrowserThread::UI); 199 DCHECK_CURRENTLY_ON(BrowserThread::UI);
229 200
230 base::FilePath converted_path; 201 base::FilePath converted_path;
231 GURL url; 202 GURL url;
232 if (!ConvertPath(profile, file_path, &converted_path, &url)) 203 if (!ConvertPath(profile, file_path, &converted_path, &url))
233 return; 204 return;
234 205
235 // This action changes the selection so we do not reuse existing tabs. 206 // This action changes the selection so we do not reuse existing tabs.
236 OpenFileManagerWithInternalActionId(profile, url, "select"); 207 OpenFileManagerWithInternalActionId(profile, url, "select");
237 } 208 }
238 209
239 } // namespace util 210 } // namespace util
240 } // namespace file_manager 211 } // namespace file_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698