| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/active_downloads_ui.h" | 5 #include "chrome/browser/ui/webui/active_downloads_ui.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "chrome/browser/chromeos/cros/cros_library.h" | 24 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 25 #include "chrome/browser/chromeos/login/user_manager.h" | 25 #include "chrome/browser/chromeos/login/user_manager.h" |
| 26 #include "chrome/browser/download/download_item.h" | 26 #include "chrome/browser/download/download_item.h" |
| 27 #include "chrome/browser/download/download_manager.h" | 27 #include "chrome/browser/download/download_manager.h" |
| 28 #include "chrome/browser/download/download_util.h" | 28 #include "chrome/browser/download/download_util.h" |
| 29 #include "chrome/browser/profiles/profile.h" | 29 #include "chrome/browser/profiles/profile.h" |
| 30 #include "chrome/browser/tabs/tab_strip_model.h" | 30 #include "chrome/browser/tabs/tab_strip_model.h" |
| 31 #include "chrome/browser/ui/browser.h" | 31 #include "chrome/browser/ui/browser.h" |
| 32 #include "chrome/browser/ui/browser_list.h" | 32 #include "chrome/browser/ui/browser_list.h" |
| 33 #include "chrome/browser/ui/browser_window.h" | 33 #include "chrome/browser/ui/browser_window.h" |
| 34 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 34 #include "chrome/browser/ui/webui/favicon_source.h" | 35 #include "chrome/browser/ui/webui/favicon_source.h" |
| 35 #include "chrome/browser/ui/webui/mediaplayer_ui.h" | 36 #include "chrome/browser/ui/webui/mediaplayer_ui.h" |
| 36 #include "chrome/common/chrome_paths.h" | 37 #include "chrome/common/chrome_paths.h" |
| 37 #include "chrome/common/chrome_switches.h" | 38 #include "chrome/common/chrome_switches.h" |
| 38 #include "chrome/common/jstemplate_builder.h" | 39 #include "chrome/common/jstemplate_builder.h" |
| 39 #include "chrome/common/net/url_fetcher.h" | 40 #include "chrome/common/net/url_fetcher.h" |
| 40 #include "chrome/common/url_constants.h" | 41 #include "chrome/common/url_constants.h" |
| 41 #include "content/browser/browser_thread.h" | 42 #include "content/browser/browser_thread.h" |
| 42 #include "content/browser/tab_contents/tab_contents.h" | 43 #include "content/browser/tab_contents/tab_contents.h" |
| 43 #include "grit/browser_resources.h" | 44 #include "grit/browser_resources.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 103 virtual void OnDownloadOpened(DownloadItem* item) { } | 104 virtual void OnDownloadOpened(DownloadItem* item) { } |
| 104 | 105 |
| 105 // DownloadManager::Observer interface. | 106 // DownloadManager::Observer interface. |
| 106 virtual void ModelChanged(); | 107 virtual void ModelChanged(); |
| 107 | 108 |
| 108 // WebUI Callbacks. | 109 // WebUI Callbacks. |
| 109 void HandleGetDownloads(const ListValue* args); | 110 void HandleGetDownloads(const ListValue* args); |
| 110 void HandlePauseToggleDownload(const ListValue* args); | 111 void HandlePauseToggleDownload(const ListValue* args); |
| 111 void HandleCancelDownload(const ListValue* args); | 112 void HandleCancelDownload(const ListValue* args); |
| 112 void HandleAllowDownload(const ListValue* args); | 113 void HandleAllowDownload(const ListValue* args); |
| 113 void OpenNewPopupWindow(const ListValue* args); | |
| 114 void OpenNewFullWindow(const ListValue* args); | 114 void OpenNewFullWindow(const ListValue* args); |
| 115 void PlayMediaFile(const ListValue* args); | 115 void PlayMediaFile(const ListValue* args); |
| 116 | 116 |
| 117 private: | 117 private: |
| 118 // Downloads helpers. | 118 // Downloads helpers. |
| 119 DownloadItem* GetDownloadById(const ListValue* args); | 119 DownloadItem* GetDownloadById(const ListValue* args); |
| 120 void UpdateDownloadList(); | 120 void UpdateDownloadList(); |
| 121 void SendDownloads(); | 121 void SendDownloads(); |
| 122 void AddDownload(DownloadItem* item); | 122 void AddDownload(DownloadItem* item); |
| 123 | 123 bool SelectTab(const GURL& url); |
| 124 void OpenNewWindow(const ListValue* args, bool popup); | |
| 125 | 124 |
| 126 Profile* profile_; | 125 Profile* profile_; |
| 127 TabContents* tab_contents_; | 126 TabContents* tab_contents_; |
| 128 DownloadManager* download_manager_; | 127 DownloadManager* download_manager_; |
| 129 | 128 |
| 130 typedef std::vector<DownloadItem*> DownloadList; | 129 typedef std::vector<DownloadItem*> DownloadList; |
| 131 DownloadList active_downloads_; | 130 DownloadList active_downloads_; |
| 132 DownloadList downloads_; | 131 DownloadList downloads_; |
| 133 | 132 |
| 134 DISALLOW_COPY_AND_ASSIGN(ActiveDownloadsHandler); | 133 DISALLOW_COPY_AND_ASSIGN(ActiveDownloadsHandler); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 222 |
| 224 void ActiveDownloadsHandler::RegisterMessages() { | 223 void ActiveDownloadsHandler::RegisterMessages() { |
| 225 web_ui_->RegisterMessageCallback("getDownloads", | 224 web_ui_->RegisterMessageCallback("getDownloads", |
| 226 NewCallback(this, &ActiveDownloadsHandler::HandleGetDownloads)); | 225 NewCallback(this, &ActiveDownloadsHandler::HandleGetDownloads)); |
| 227 web_ui_->RegisterMessageCallback("pauseToggleDownload", | 226 web_ui_->RegisterMessageCallback("pauseToggleDownload", |
| 228 NewCallback(this, &ActiveDownloadsHandler::HandlePauseToggleDownload)); | 227 NewCallback(this, &ActiveDownloadsHandler::HandlePauseToggleDownload)); |
| 229 web_ui_->RegisterMessageCallback("cancelDownload", | 228 web_ui_->RegisterMessageCallback("cancelDownload", |
| 230 NewCallback(this, &ActiveDownloadsHandler::HandleCancelDownload)); | 229 NewCallback(this, &ActiveDownloadsHandler::HandleCancelDownload)); |
| 231 web_ui_->RegisterMessageCallback("allowDownload", | 230 web_ui_->RegisterMessageCallback("allowDownload", |
| 232 NewCallback(this, &ActiveDownloadsHandler::HandleAllowDownload)); | 231 NewCallback(this, &ActiveDownloadsHandler::HandleAllowDownload)); |
| 233 web_ui_->RegisterMessageCallback("openNewPopupWindow", | |
| 234 NewCallback(this, &ActiveDownloadsHandler::OpenNewPopupWindow)); | |
| 235 web_ui_->RegisterMessageCallback("openNewFullWindow", | 232 web_ui_->RegisterMessageCallback("openNewFullWindow", |
| 236 NewCallback(this, &ActiveDownloadsHandler::OpenNewFullWindow)); | 233 NewCallback(this, &ActiveDownloadsHandler::OpenNewFullWindow)); |
| 237 web_ui_->RegisterMessageCallback("playMediaFile", | 234 web_ui_->RegisterMessageCallback("playMediaFile", |
| 238 NewCallback(this, &ActiveDownloadsHandler::PlayMediaFile)); | 235 NewCallback(this, &ActiveDownloadsHandler::PlayMediaFile)); |
| 239 } | 236 } |
| 240 | 237 |
| 241 void ActiveDownloadsHandler::PlayMediaFile(const ListValue* args) { | 238 void ActiveDownloadsHandler::PlayMediaFile(const ListValue* args) { |
| 242 FilePath file_path(UTF16ToUTF8(ExtractStringValue(args))); | 239 FilePath file_path(UTF16ToUTF8(ExtractStringValue(args))); |
| 243 | 240 |
| 244 Browser* browser = Browser::GetBrowserForController( | 241 Browser* browser = Browser::GetBrowserForController( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 270 | 267 |
| 271 void ActiveDownloadsHandler::HandleCancelDownload(const ListValue* args) { | 268 void ActiveDownloadsHandler::HandleCancelDownload(const ListValue* args) { |
| 272 DownloadItem* item = GetDownloadById(args); | 269 DownloadItem* item = GetDownloadById(args); |
| 273 if (item) { | 270 if (item) { |
| 274 if (item->IsPartialDownload()) | 271 if (item->IsPartialDownload()) |
| 275 item->Cancel(true); | 272 item->Cancel(true); |
| 276 item->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); | 273 item->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); |
| 277 } | 274 } |
| 278 } | 275 } |
| 279 | 276 |
| 280 void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) { | 277 bool ActiveDownloadsHandler::SelectTab(const GURL& url) { |
| 281 OpenNewWindow(args, false); | 278 for (TabContentsIterator it; !it.done(); ++it) { |
| 279 TabContents* tab_contents = it->tab_contents(); |
| 280 if (tab_contents->GetURL() == url) { |
| 281 tab_contents->Activate(); |
| 282 return true; |
| 283 } |
| 284 } |
| 285 return false; |
| 282 } | 286 } |
| 283 | 287 |
| 284 void ActiveDownloadsHandler::OpenNewPopupWindow(const ListValue* args) { | 288 void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) { |
| 285 OpenNewWindow(args, true); | 289 std::string url = UTF16ToUTF8(ExtractStringValue(args)); |
| 286 } | |
| 287 | 290 |
| 288 void ActiveDownloadsHandler::OpenNewWindow(const ListValue* args, bool popup) { | 291 if (SelectTab(GURL(url))) |
| 289 std::string url = UTF16ToUTF8(ExtractStringValue(args)); | 292 return; |
| 290 Browser* browser = popup ? | 293 |
| 291 Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, | 294 Browser* browser = BrowserList::GetLastActive(); |
| 292 gfx::Size(), profile_) : | |
| 293 BrowserList::GetLastActive(); | |
| 294 browser::NavigateParams params(browser, GURL(url), PageTransition::LINK); | 295 browser::NavigateParams params(browser, GURL(url), PageTransition::LINK); |
| 295 params.disposition = NEW_FOREGROUND_TAB; | 296 params.disposition = NEW_FOREGROUND_TAB; |
| 296 browser::Navigate(¶ms); | 297 browser::Navigate(¶ms); |
| 297 // TODO(beng): The following two calls should be automatic by Navigate(). | 298 browser->window()->Show(); |
| 298 if (popup) | |
| 299 params.browser->window()->SetBounds(gfx::Rect(0, 0, 400, 300)); | |
| 300 params.browser->window()->Show(); | |
| 301 } | 299 } |
| 302 | 300 |
| 303 void ActiveDownloadsHandler::ModelChanged() { | 301 void ActiveDownloadsHandler::ModelChanged() { |
| 304 UpdateDownloadList(); | 302 UpdateDownloadList(); |
| 305 } | 303 } |
| 306 | 304 |
| 307 void ActiveDownloadsHandler::HandleGetDownloads(const ListValue* args) { | 305 void ActiveDownloadsHandler::HandleGetDownloads(const ListValue* args) { |
| 308 UpdateDownloadList(); | 306 UpdateDownloadList(); |
| 309 } | 307 } |
| 310 | 308 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 browser = Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, | 394 browser = Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, |
| 397 gfx::Size(), profile); | 395 gfx::Size(), profile); |
| 398 | 396 |
| 399 browser::NavigateParams params( | 397 browser::NavigateParams params( |
| 400 browser, | 398 browser, |
| 401 GURL(chrome::kChromeUIActiveDownloadsURL), | 399 GURL(chrome::kChromeUIActiveDownloadsURL), |
| 402 PageTransition::LINK); | 400 PageTransition::LINK); |
| 403 params.disposition = NEW_FOREGROUND_TAB; | 401 params.disposition = NEW_FOREGROUND_TAB; |
| 404 browser::Navigate(¶ms); | 402 browser::Navigate(¶ms); |
| 405 | 403 |
| 404 DCHECK_EQ(browser, params.browser); |
| 406 // TODO(beng): The following two calls should be automatic by Navigate(). | 405 // TODO(beng): The following two calls should be automatic by Navigate(). |
| 407 params.browser->window()->SetBounds(gfx::Rect(kPopupLeft, | 406 browser->window()->SetBounds(gfx::Rect(kPopupLeft, |
| 408 kPopupTop, | 407 kPopupTop, |
| 409 kPopupWidth, | 408 kPopupWidth, |
| 410 kPopupHeight)); | 409 kPopupHeight)); |
| 411 params.browser->window()->Show(); | |
| 412 } else { | |
| 413 browser->window()->Show(); | |
| 414 } | 410 } |
| 415 | 411 |
| 412 browser->window()->Show(); |
| 416 return browser; | 413 return browser; |
| 417 } | 414 } |
| 418 | 415 |
| 419 Browser* ActiveDownloadsUI::GetPopup(Profile* profile) { | 416 Browser* ActiveDownloadsUI::GetPopup(Profile* profile) { |
| 420 for (BrowserList::const_iterator it = BrowserList::begin(); | 417 for (BrowserList::const_iterator it = BrowserList::begin(); |
| 421 it != BrowserList::end(); | 418 it != BrowserList::end(); |
| 422 ++it) { | 419 ++it) { |
| 423 if ((*it)->is_type_panel() && (*it)->is_app()) { | 420 if ((*it)->is_type_panel() && (*it)->is_app()) { |
| 424 TabContents* tab_contents = (*it)->GetSelectedTabContents(); | 421 TabContents* tab_contents = (*it)->GetSelectedTabContents(); |
| 425 DCHECK(tab_contents); | 422 DCHECK(tab_contents); |
| 426 if (!tab_contents) | 423 if (!tab_contents) |
| 427 continue; | 424 continue; |
| 428 const GURL& url = tab_contents->GetURL(); | 425 const GURL& url = tab_contents->GetURL(); |
| 429 | 426 |
| 430 if (url.SchemeIs(chrome::kChromeUIScheme) && | 427 if (url.SchemeIs(chrome::kChromeUIScheme) && |
| 431 url.host() == chrome::kChromeUIActiveDownloadsHost && | 428 url.host() == chrome::kChromeUIActiveDownloadsHost && |
| 432 (*it)->profile() == profile) { | 429 (*it)->profile() == profile) { |
| 433 return (*it); | 430 return (*it); |
| 434 } | 431 } |
| 435 } | 432 } |
| 436 } | 433 } |
| 437 return NULL; | 434 return NULL; |
| 438 } | 435 } |
| 439 | 436 |
| OLD | NEW |