Index: chrome/browser/ui/webui/downloads_dom_handler.cc |
diff --git a/chrome/browser/ui/webui/downloads_dom_handler.cc b/chrome/browser/ui/webui/downloads_dom_handler.cc |
index f5e7929ce49d63f00a34573c4dad7fb57e61c438..d31777132b3709b944bcf7a9572892559f9fb786 100644 |
--- a/chrome/browser/ui/webui/downloads_dom_handler.cc |
+++ b/chrome/browser/ui/webui/downloads_dom_handler.cc |
@@ -17,7 +17,9 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/download/download_history.h" |
#include "chrome/browser/download/download_item.h" |
+#include "chrome/browser/download/download_prefs.h" |
#include "chrome/browser/download/download_util.h" |
+#include "chrome/browser/platform_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/webui/chrome_url_data_manager.h" |
#include "chrome/browser/ui/webui/fileicon_source.h" |
@@ -97,6 +99,8 @@ void DownloadsDOMHandler::RegisterMessages() { |
NewCallback(this, &DownloadsDOMHandler::HandleCancel)); |
web_ui_->RegisterMessageCallback("clearAll", |
NewCallback(this, &DownloadsDOMHandler::HandleClearAll)); |
+ web_ui_->RegisterMessageCallback("openDownloadsFolder", |
+ NewCallback(this, &DownloadsDOMHandler::HandleOpenDownloadsFolder)); |
} |
void DownloadsDOMHandler::OnDownloadUpdated(DownloadItem* download) { |
@@ -227,6 +231,19 @@ void DownloadsDOMHandler::HandleClearAll(const ListValue* args) { |
download_manager_->RemoveAllDownloads(); |
} |
+void DownloadsDOMHandler::HandleOpenDownloadsFolder(const ListValue* args) { |
+ FilePath path = download_manager_->download_prefs()->download_path(); |
+ |
+#if defined(OS_MACOSX) |
+ // Must be called from the UI thread on Mac. |
+ platform_util::OpenItem(path); |
+#else |
+ BrowserThread::PostTask( |
+ BrowserThread::FILE, FROM_HERE, |
+ NewRunnableFunction(&platform_util::OpenItem, path)); |
+#endif |
+} |
+ |
// DownloadsDOMHandler, private: ---------------------------------------------- |
void DownloadsDOMHandler::SendCurrentDownloads() { |