Index: chrome/browser/ui/webui/active_downloads_ui.cc |
diff --git a/chrome/browser/ui/webui/active_downloads_ui.cc b/chrome/browser/ui/webui/active_downloads_ui.cc |
deleted file mode 100644 |
index 26792ffec74619dd9f5a2a1ad7a4ffd4b6cb0dc8..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/active_downloads_ui.cc |
+++ /dev/null |
@@ -1,400 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/webui/active_downloads_ui.h" |
- |
-#include <algorithm> |
-#include <string> |
-#include <vector> |
- |
-#include "base/bind.h" |
-#include "base/bind_helpers.h" |
-#include "base/command_line.h" |
-#include "base/file_util.h" |
-#include "base/logging.h" |
-#include "base/memory/singleton.h" |
-#include "base/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/string_piece.h" |
-#include "base/string_util.h" |
-#include "base/threading/thread.h" |
-#include "base/time.h" |
-#include "base/utf_string_conversions.h" |
-#include "base/values.h" |
-#include "chrome/browser/chromeos/cros/cros_library.h" |
-#include "chrome/browser/chromeos/extensions/file_manager_util.h" |
-#include "chrome/browser/chromeos/media/media_player.h" |
-#include "chrome/browser/download/chrome_download_manager_delegate.h" |
-#include "chrome/browser/download/download_prefs.h" |
-#include "chrome/browser/download/download_service.h" |
-#include "chrome/browser/download/download_service_factory.h" |
-#include "chrome/browser/download/download_util.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_list.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
-#include "chrome/browser/ui/webui/chrome_web_ui_data_source.h" |
-#include "chrome/browser/ui/webui/fileicon_source.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/url_constants.h" |
-#include "content/public/browser/download_item.h" |
-#include "content/public/browser/download_manager.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/render_view_host_delegate.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_ui.h" |
-#include "content/public/browser/web_ui_message_handler.h" |
-#include "grit/browser_resources.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/locale_settings.h" |
-#include "net/base/escape.h" |
-#include "net/url_request/url_request_file_job.h" |
-#include "ui/base/resource/resource_bundle.h" |
- |
-using content::WebContents; |
-using content::WebUIMessageHandler; |
- |
-namespace { |
- |
-static const int kPopupLeft = 0; |
-static const int kPopupTop = 0; |
-static const int kPopupWidth = 250; |
-// Minimum height of window must be 100, so kPopupHeight has space for |
-// 2 download rows of 36 px and 'Show all files' link which is 29px. |
-static const int kPopupHeight = 36 * 2 + 29; |
- |
-static const char kPropertyPath[] = "path"; |
-static const char kPropertyTitle[] = "title"; |
-static const char kPropertyDirectory[] = "isDirectory"; |
-static const char kActiveDownloadAppName[] = "active-downloads"; |
- |
-ChromeWebUIDataSource* CreateActiveDownloadsUIHTMLSource() { |
- ChromeWebUIDataSource* source = |
- new ChromeWebUIDataSource(chrome::kChromeUIActiveDownloadsHost); |
- |
- source->AddLocalizedString("dangerousfile", IDS_PROMPT_DANGEROUS_DOWNLOAD); |
- source->AddLocalizedString("dangerousextension", |
- IDS_PROMPT_DANGEROUS_DOWNLOAD_EXTENSION); |
- source->AddLocalizedString("dangerousurl", IDS_PROMPT_MALICIOUS_DOWNLOAD_URL); |
- source->AddLocalizedString("dangerouscontent", |
- IDS_PROMPT_MALICIOUS_DOWNLOAD_CONTENT); |
- source->AddLocalizedString("cancel", IDS_DOWNLOAD_LINK_CANCEL); |
- source->AddLocalizedString("discard", IDS_DISCARD_DOWNLOAD); |
- source->AddLocalizedString("continue", IDS_CONTINUE_EXTENSION_DOWNLOAD); |
- source->AddLocalizedString("pause", IDS_DOWNLOAD_LINK_PAUSE); |
- source->AddLocalizedString("resume", IDS_DOWNLOAD_LINK_RESUME); |
- source->AddLocalizedString("showallfiles", |
- IDS_FILE_BROWSER_MORE_FILES); |
- source->AddLocalizedString("error_unknown_file_type", |
- IDS_FILE_BROWSER_ERROR_UNKNOWN_FILE_TYPE); |
- |
- FilePath default_download_path; |
- if (!PathService::Get(chrome::DIR_DEFAULT_DOWNLOADS, |
- &default_download_path)) { |
- NOTREACHED(); |
- } |
- // TODO(viettrungluu): this is wrong -- FilePath's need not be Unicode. |
- source->AddString("downloadpath", UTF8ToUTF16(default_download_path.value())); |
- |
- source->set_json_path("strings.js"); |
- source->add_resource_path("active_downloads.js", IDR_ACTIVE_DOWNLOADS_JS); |
- source->set_default_resource(IDR_ACTIVE_DOWNLOADS_HTML); |
- return source; |
-} |
- |
-} // namespace |
- |
-using content::DownloadItem; |
-using content::DownloadManager; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// ActiveDownloadsHandler |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// The handler for Javascript messages related to the "active_downloads" view. |
-class ActiveDownloadsHandler |
- : public WebUIMessageHandler, |
- public DownloadManager::Observer, |
- public DownloadItem::Observer { |
- public: |
- ActiveDownloadsHandler(); |
- virtual ~ActiveDownloadsHandler(); |
- |
- // WebUIMessageHandler implementation. |
- virtual void RegisterMessages() OVERRIDE; |
- |
- // DownloadItem::Observer interface. |
- virtual void OnDownloadUpdated(DownloadItem* item) OVERRIDE; |
- virtual void OnDownloadOpened(DownloadItem* item) OVERRIDE { } |
- |
- // DownloadManager::Observer interface. |
- virtual void ModelChanged(DownloadManager* manager) OVERRIDE; |
- |
- // WebUI Callbacks. |
- void HandleGetDownloads(const ListValue* args); |
- void HandlePauseToggleDownload(const ListValue* args); |
- void HandleAllowDownload(const ListValue* args); |
- void HandleCancelDownload(const ListValue* args); |
- void HandleShowAllFiles(const ListValue* args); |
- void ViewFile(const ListValue* args); |
- |
- // For testing. |
- typedef std::vector<DownloadItem*> DownloadList; |
- const DownloadList& downloads() const { return downloads_; } |
- |
- private: |
- // Downloads helpers. |
- DownloadItem* GetDownloadById(const ListValue* args); |
- void UpdateDownloadList(); |
- void SendDownloads(); |
- void AddDownload(DownloadItem* item); |
- |
- Profile* profile_; |
- DownloadManager* download_manager_; |
- |
- DownloadList active_downloads_; |
- DownloadList downloads_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ActiveDownloadsHandler); |
-}; |
- |
-ActiveDownloadsHandler::ActiveDownloadsHandler() |
- : profile_(NULL), |
- download_manager_(NULL) { |
-} |
- |
-ActiveDownloadsHandler::~ActiveDownloadsHandler() { |
- for (size_t i = 0; i < downloads_.size(); ++i) { |
- downloads_[i]->RemoveObserver(this); |
- } |
- download_manager_->RemoveObserver(this); |
-} |
- |
-void ActiveDownloadsHandler::RegisterMessages() { |
- profile_ = Profile::FromWebUI(web_ui()); |
- profile_->GetChromeURLDataManager()->AddDataSource(new FileIconSource()); |
- |
- web_ui()->RegisterMessageCallback("getDownloads", |
- base::Bind(&ActiveDownloadsHandler::HandleGetDownloads, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback("pauseToggleDownload", |
- base::Bind(&ActiveDownloadsHandler::HandlePauseToggleDownload, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback("allowDownload", |
- base::Bind(&ActiveDownloadsHandler::HandleAllowDownload, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback("cancelDownload", |
- base::Bind(&ActiveDownloadsHandler::HandleCancelDownload, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback("showAllFiles", |
- base::Bind(&ActiveDownloadsHandler::HandleShowAllFiles, |
- base::Unretained(this))); |
- web_ui()->RegisterMessageCallback("viewFile", |
- base::Bind(&ActiveDownloadsHandler::ViewFile, |
- base::Unretained(this))); |
- |
- download_manager_ = |
- DownloadServiceFactory::GetForProfile(profile_)->GetDownloadManager(); |
- download_manager_->AddObserver(this); |
-} |
- |
-DownloadItem* ActiveDownloadsHandler::GetDownloadById( |
- const ListValue* args) { |
- int i; |
- if (!ExtractIntegerValue(args, &i)) |
- return NULL; |
- size_t id(i); |
- return id < downloads_.size() ? downloads_[id] : NULL; |
-} |
- |
-void ActiveDownloadsHandler::HandlePauseToggleDownload(const ListValue* args) { |
- DownloadItem* item = GetDownloadById(args); |
- if (item && item->IsPartialDownload()) |
- item->TogglePause(); |
-} |
- |
-void ActiveDownloadsHandler::HandleAllowDownload(const ListValue* args) { |
- DownloadItem* item = GetDownloadById(args); |
- if (item) |
- item->DangerousDownloadValidated(); |
-} |
- |
-void ActiveDownloadsHandler::HandleCancelDownload(const ListValue* args) { |
- DownloadItem* item = GetDownloadById(args); |
- if (item) { |
- if (item->IsPartialDownload()) |
- item->Cancel(true); |
- item->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); |
- } |
-} |
- |
-void ActiveDownloadsHandler::HandleShowAllFiles(const ListValue* args) { |
- file_manager_util::ViewFolder( |
- DownloadPrefs::FromDownloadManager(download_manager_)->download_path()); |
-} |
- |
-void ActiveDownloadsHandler::ViewFile(const ListValue* args) { |
- file_manager_util::ViewFile(FilePath(UTF16ToUTF8(ExtractStringValue(args))), |
- false); |
-} |
- |
-void ActiveDownloadsHandler::ModelChanged(DownloadManager* manager) { |
- UpdateDownloadList(); |
-} |
- |
-void ActiveDownloadsHandler::HandleGetDownloads(const ListValue* args) { |
- UpdateDownloadList(); |
-} |
- |
-void ActiveDownloadsHandler::UpdateDownloadList() { |
- DownloadList downloads; |
- download_manager_->GetAllDownloads(FilePath(), &downloads); |
- active_downloads_.clear(); |
- for (size_t i = 0; i < downloads.size(); ++i) { |
- AddDownload(downloads[i]); |
- } |
- SendDownloads(); |
-} |
- |
-void ActiveDownloadsHandler::AddDownload(DownloadItem* item) { |
- // Observe in progress and dangerous downloads. |
- if (item->GetState() == DownloadItem::IN_PROGRESS || |
- item->GetSafetyState() == DownloadItem::DANGEROUS) { |
- active_downloads_.push_back(item); |
- |
- DownloadList::const_iterator it = |
- std::find(downloads_.begin(), downloads_.end(), item); |
- if (it == downloads_.end()) { |
- downloads_.push_back(item); |
- item->AddObserver(this); |
- } |
- } |
-} |
- |
-void ActiveDownloadsHandler::SendDownloads() { |
- ListValue results; |
- for (size_t i = 0; i < downloads_.size(); ++i) { |
- results.Append(download_util::CreateDownloadItemValue(downloads_[i], i)); |
- } |
- |
- web_ui()->CallJavascriptFunction("downloadsList", results); |
-} |
- |
-void ActiveDownloadsHandler::OnDownloadUpdated(DownloadItem* item) { |
- DownloadList::iterator it = |
- find(downloads_.begin(), downloads_.end(), item); |
- |
- if (it == downloads_.end()) { |
- NOTREACHED() << "Updated item " << item->GetFullPath().value() |
- << " not found"; |
- } |
- |
- if (item->GetState() == DownloadItem::REMOVING || item->GetAutoOpened()) { |
- // Item is going away, or item is an extension that has auto opened. |
- item->RemoveObserver(this); |
- downloads_.erase(it); |
- DownloadList::iterator ita = |
- find(active_downloads_.begin(), active_downloads_.end(), item); |
- if (ita != active_downloads_.end()) |
- active_downloads_.erase(ita); |
- SendDownloads(); |
- } else { |
- const size_t id = it - downloads_.begin(); |
- scoped_ptr<DictionaryValue> result( |
- download_util::CreateDownloadItemValue(item, id)); |
- web_ui()->CallJavascriptFunction("downloadUpdated", *result); |
- } |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// ActiveDownloadsUI |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
- |
- |
-ActiveDownloadsUI::ActiveDownloadsUI(content::WebUI* web_ui) |
- : HtmlDialogUI(web_ui), |
- handler_(new ActiveDownloadsHandler()) { |
- web_ui->AddMessageHandler(handler_); |
- |
- // Set up the chrome://active-downloads/ source. |
- Profile* profile = Profile::FromWebUI(web_ui); |
- profile->GetChromeURLDataManager()->AddDataSource( |
- CreateActiveDownloadsUIHTMLSource()); |
-} |
- |
-// static |
-bool ActiveDownloadsUI::ShouldShowPopup(Profile* profile, |
- DownloadItem* download) { |
- // Don't show downloads panel for extension/theme downloads from gallery, |
- // or temporary downloads. |
- ExtensionService* service = profile->GetExtensionService(); |
- return !download->IsTemporary() && |
- (!ChromeDownloadManagerDelegate::IsExtensionDownload(download) || |
- service == NULL || |
- !service->IsDownloadFromGallery(download->GetURL(), |
- download->GetReferrerUrl())); |
-} |
- |
-// static |
-Browser* ActiveDownloadsUI::OpenPopup(Profile* profile) { |
- Browser* browser = GetPopup(); |
- |
- // Create new browser if no matching pop up is found. |
- if (browser == NULL) { |
- browser = Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, |
- gfx::Rect(), profile); |
- |
- browser::NavigateParams params( |
- browser, |
- GURL(chrome::kChromeUIActiveDownloadsURL), |
- content::PAGE_TRANSITION_LINK); |
- params.disposition = NEW_FOREGROUND_TAB; |
- browser::Navigate(¶ms); |
- |
- DCHECK_EQ(browser, params.browser); |
- // TODO(beng): The following two calls should be automatic by Navigate(). |
- browser->window()->SetBounds(gfx::Rect(kPopupLeft, |
- kPopupTop, |
- kPopupWidth, |
- kPopupHeight)); |
- } |
- |
- browser->window()->Show(); |
- return browser; |
-} |
- |
-// static |
-Browser* ActiveDownloadsUI::GetPopup() { |
- for (BrowserList::const_iterator it = BrowserList::begin(); |
- it != BrowserList::end(); |
- ++it) { |
- if ((*it)->is_type_panel() && (*it)->is_app()) { |
- WebContents* web_contents = (*it)->GetSelectedWebContents(); |
- DCHECK(web_contents); |
- if (!web_contents) |
- continue; |
- const GURL& url = web_contents->GetURL(); |
- |
- if (url.SchemeIs(chrome::kChromeUIScheme) && |
- url.host() == chrome::kChromeUIActiveDownloadsHost) { |
- return (*it); |
- } |
- } |
- } |
- return NULL; |
-} |
- |
-const ActiveDownloadsUI::DownloadList& ActiveDownloadsUI::GetDownloads() const { |
- return handler_->downloads(); |
-} |