| 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 | 
|  |