Index: chrome/browser/platform_util_chromeos.cc |
diff --git a/chrome/browser/platform_util_chromeos.cc b/chrome/browser/platform_util_chromeos.cc |
index aad0b73602f9396699b2ae1b17ebdf69b738a162..8d463bf65689decaa77480ebd86f9a28fea5851d 100644 |
--- a/chrome/browser/platform_util_chromeos.cc |
+++ b/chrome/browser/platform_util_chromeos.cc |
@@ -4,34 +4,99 @@ |
#include "chrome/browser/platform_util.h" |
+#include "base/bind.h" |
+#include "base/files/file_path.h" |
#include "chrome/browser/chromeos/file_manager/open_util.h" |
+#include "chrome/browser/platform_util_internal.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_finder.h" |
#include "chrome/browser/ui/browser_navigator.h" |
+#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/simple_message_box.h" |
+#include "chrome/grit/generated_resources.h" |
#include "content/public/browser/browser_thread.h" |
+#include "ui/base/l10n/l10n_util.h" |
#include "url/gurl.h" |
using content::BrowserThread; |
+namespace platform_util { |
+ |
namespace { |
const char kGmailComposeUrl[] = |
"https://mail.google.com/mail/?extsrc=mailto&url="; |
+void ShowWarningOnOpenOperationResult(Profile* profile, |
+ const base::FilePath& path, |
+ OpenOperationResult result) { |
+ int message_id = IDS_FILE_BROWSER_ERROR_VIEWING_FILE; |
+ switch (result) { |
+ case OPEN_SUCCEEDED: |
+ return; |
+ |
+ case OPEN_FAILED_PATH_NOT_FOUND: |
+ message_id = IDS_FILE_BROWSER_ERROR_UNRESOLVABLE_FILE; |
+ break; |
+ |
+ case OPEN_FAILED_INVALID_TYPE: |
+ return; |
+ |
+ case OPEN_FAILED_NO_HANLDER_FOR_FILE_TYPE: |
+ if (path.MatchesExtension(FILE_PATH_LITERAL(".dmg"))) |
+ message_id = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_DMG; |
+ else if (path.MatchesExtension(FILE_PATH_LITERAL(".exe")) || |
+ path.MatchesExtension(FILE_PATH_LITERAL(".msi"))) |
+ message_id = IDS_FILE_BROWSER_ERROR_VIEWING_FILE_FOR_EXECUTABLE; |
+ else |
+ message_id = IDS_FILE_BROWSER_ERROR_VIEWING_FILE; |
+ break; |
+ |
+ case OPEN_FAILED_FILE_ERROR: |
+ message_id = IDS_FILE_BROWSER_ERROR_VIEWING_FILE; |
+ break; |
+ } |
+ |
+ Browser* browser = |
+ chrome::FindTabbedBrowser(profile, false, chrome::HOST_DESKTOP_TYPE_ASH); |
+ chrome::ShowMessageBox( |
+ browser ? browser->window()->GetNativeWindow() : nullptr, |
+ l10n_util::GetStringFUTF16(IDS_FILE_BROWSER_ERROR_VIEWING_FILE_TITLE, |
+ path.BaseName().AsUTF16Unsafe()), |
+ l10n_util::GetStringUTF16(message_id), chrome::MESSAGE_BOX_TYPE_WARNING); |
+} |
+ |
} // namespace |
-namespace platform_util { |
+namespace internal { |
+ |
+void DisableShellOperationsForTesting() { |
+ file_manager::util::DisableShellOperationsForTesting(); |
+} |
+ |
+} // namespace internal |
void ShowItemInFolder(Profile* profile, const base::FilePath& full_path) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- file_manager::util::ShowItemInFolder(profile, full_path); |
+ file_manager::util::ShowItemInFolder( |
+ profile, full_path, |
+ base::Bind(&ShowWarningOnOpenOperationResult, profile, full_path)); |
} |
-void OpenItem(Profile* profile, const base::FilePath& full_path) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- file_manager::util::OpenItem(profile, full_path); |
+void OpenItem(Profile* profile, |
+ const base::FilePath& full_path, |
+ OpenItemType item_type, |
+ const OpenOperationCallback& callback) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ file_manager::util::OpenItem( |
+ profile, full_path, item_type, |
+ callback.is_null() |
+ ? base::Bind(&ShowWarningOnOpenOperationResult, profile, full_path) |
+ : callback); |
} |
void OpenExternal(Profile* profile, const GURL& url) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ DCHECK_CURRENTLY_ON(BrowserThread::UI); |
// This code should be obsolete since we have default handlers in ChromeOS |
// which should handle this. However - there are two things which make it |