Index: chrome/browser/ui/webui/active_downloads_ui.cc |
=================================================================== |
--- chrome/browser/ui/webui/active_downloads_ui.cc (revision 86295) |
+++ chrome/browser/ui/webui/active_downloads_ui.cc (working copy) |
@@ -31,6 +31,7 @@ |
#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/favicon_source.h" |
#include "chrome/browser/ui/webui/mediaplayer_ui.h" |
#include "chrome/common/chrome_paths.h" |
@@ -110,7 +111,6 @@ |
void HandlePauseToggleDownload(const ListValue* args); |
void HandleCancelDownload(const ListValue* args); |
void HandleAllowDownload(const ListValue* args); |
- void OpenNewPopupWindow(const ListValue* args); |
void OpenNewFullWindow(const ListValue* args); |
void PlayMediaFile(const ListValue* args); |
@@ -120,9 +120,8 @@ |
void UpdateDownloadList(); |
void SendDownloads(); |
void AddDownload(DownloadItem* item); |
+ bool SelectTab(const GURL& url); |
- void OpenNewWindow(const ListValue* args, bool popup); |
- |
Profile* profile_; |
TabContents* tab_contents_; |
DownloadManager* download_manager_; |
@@ -230,8 +229,6 @@ |
NewCallback(this, &ActiveDownloadsHandler::HandleCancelDownload)); |
web_ui_->RegisterMessageCallback("allowDownload", |
NewCallback(this, &ActiveDownloadsHandler::HandleAllowDownload)); |
- web_ui_->RegisterMessageCallback("openNewPopupWindow", |
- NewCallback(this, &ActiveDownloadsHandler::OpenNewPopupWindow)); |
web_ui_->RegisterMessageCallback("openNewFullWindow", |
NewCallback(this, &ActiveDownloadsHandler::OpenNewFullWindow)); |
web_ui_->RegisterMessageCallback("playMediaFile", |
@@ -277,27 +274,28 @@ |
} |
} |
-void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) { |
- OpenNewWindow(args, false); |
+bool ActiveDownloadsHandler::SelectTab(const GURL& url) { |
+ for (TabContentsIterator it; !it.done(); ++it) { |
+ TabContents* tab_contents = it->tab_contents(); |
+ if (tab_contents->GetURL() == url) { |
+ tab_contents->Activate(); |
+ return true; |
+ } |
+ } |
+ return false; |
} |
-void ActiveDownloadsHandler::OpenNewPopupWindow(const ListValue* args) { |
- OpenNewWindow(args, true); |
-} |
- |
-void ActiveDownloadsHandler::OpenNewWindow(const ListValue* args, bool popup) { |
+void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) { |
std::string url = UTF16ToUTF8(ExtractStringValue(args)); |
- Browser* browser = popup ? |
- Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, |
- gfx::Size(), profile_) : |
- BrowserList::GetLastActive(); |
+ |
+ if (SelectTab(GURL(url))) |
+ return; |
+ |
+ Browser* browser = BrowserList::GetLastActive(); |
browser::NavigateParams params(browser, GURL(url), PageTransition::LINK); |
params.disposition = NEW_FOREGROUND_TAB; |
browser::Navigate(¶ms); |
- // TODO(beng): The following two calls should be automatic by Navigate(). |
- if (popup) |
- params.browser->window()->SetBounds(gfx::Rect(0, 0, 400, 300)); |
- params.browser->window()->Show(); |
+ browser->window()->Show(); |
} |
void ActiveDownloadsHandler::ModelChanged() { |
@@ -403,16 +401,15 @@ |
params.disposition = NEW_FOREGROUND_TAB; |
browser::Navigate(¶ms); |
+ DCHECK_EQ(browser, params.browser); |
// TODO(beng): The following two calls should be automatic by Navigate(). |
- params.browser->window()->SetBounds(gfx::Rect(kPopupLeft, |
- kPopupTop, |
- kPopupWidth, |
- kPopupHeight)); |
- params.browser->window()->Show(); |
- } else { |
- browser->window()->Show(); |
+ browser->window()->SetBounds(gfx::Rect(kPopupLeft, |
+ kPopupTop, |
+ kPopupWidth, |
+ kPopupHeight)); |
} |
+ browser->window()->Show(); |
return browser; |
} |