Index: chrome/browser/platform_util.h |
diff --git a/chrome/browser/platform_util.h b/chrome/browser/platform_util.h |
index 3e9346964fe4e399e3a47e4109521577fc41c7d5..f45e3a580fd5f92cb8df5c315bd4aad3f5f59ec4 100644 |
--- a/chrome/browser/platform_util.h |
+++ b/chrome/browser/platform_util.h |
@@ -7,6 +7,7 @@ |
#include <string> |
+#include "base/callback_forward.h" |
#include "base/strings/string16.h" |
#include "ui/gfx/native_widget_types.h" |
@@ -19,15 +20,45 @@ class FilePath; |
namespace platform_util { |
-// Show the given file in a file manager. If possible, select the file. |
-// The |profile| is used to determine the running profile of file manager app |
-// in Chrome OS only. Not used in other platforms. |
-// Must be called from the UI thread. |
+// Result of calling OpenFile() or OpenFolder() passed into OpenOperationResult. |
+enum OpenOperationResult { |
+ OPEN_SUCCEEDED, |
+ OPEN_FAILED_PATH_NOT_FOUND, // Specified path does not exist. |
+ OPEN_FAILED_INVALID_TYPE, // Type of object found at path did not match what |
+ // was expected. I.e. OpenFile was called on a |
+ // folder or OpenFolder called on a file. |
+ OPEN_FAILED_NO_HANLDER_FOR_FILE_TYPE, // There was no file handler capable of |
+ // opening file. Only returned on |
+ // ChromeOS. |
+ OPEN_FAILED_FILE_ERROR, // Open operation failed due to some other file |
+ // error. |
+}; |
+ |
+// Callback used with OpenFile and OpenFolder. |
+typedef base::Callback<void(OpenOperationResult)> OpenOperationCallback; |
+ |
+// Opens the folder containing the item specified by |full_path| in the |
+// desktop's default manner. If possible, the item will be selected. The |
+// |profile| is used to determine the running profile of file manager app in |
+// Chrome OS only. Not used in other platforms. Must be called on the UI |
+// thread. |
void ShowItemInFolder(Profile* profile, const base::FilePath& full_path); |
-// Open the given file in the desktop's default manner. |
-// Must be called from the UI thread. |
-void OpenItem(Profile* profile, const base::FilePath& full_path); |
+// Opens the file specified by |full_path| in the desktop's default manner. |
+// |callback| will be invoked on the UI thread with the result of the open |
+// operation. |full_path| must point to a valid file. If it doesn't exist or is |
+// not a file, the corresponding error will be returned to |callback|. |
+void OpenFile(Profile* profile, |
+ const base::FilePath& full_path, |
+ const OpenOperationCallback& callback); |
+ |
+// Opens the folder specified by |full_path| in the desktop's default manner. |
+// |callback| will be invoked on the UI thread with the result of the open |
+// operation. |full_path| must be an existing directory. If not, the |
+// corresponding error will be returned to |callback|. |
+void OpenFolder(Profile* profile, |
+ const base::FilePath& full_path, |
+ const OpenOperationCallback& callback); |
// Open the given external protocol URL in the desktop's default manner. |
// (For example, mailto: URLs in the default mail user agent.) |