Commit fc172d24 authored by achuith@chromium.org's avatar achuith@chromium.org

Support for re-using open tabs

BUG=chromium-os:15368
TEST=Click on 'Show All Download' link in download panel or any downloaded file. Instead of multiple windows, the same window should get selected and become active.
Review URL: http://codereview.chromium.org/6969057

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86658 0039d316-1c4b-4281-b951-d872f2087c98
parent 9d915761
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/browser_window.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/favicon_source.h"
#include "chrome/browser/ui/webui/mediaplayer_ui.h" #include "chrome/browser/ui/webui/mediaplayer_ui.h"
#include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_paths.h"
...@@ -110,7 +111,6 @@ class ActiveDownloadsHandler ...@@ -110,7 +111,6 @@ class ActiveDownloadsHandler
void HandlePauseToggleDownload(const ListValue* args); void HandlePauseToggleDownload(const ListValue* args);
void HandleCancelDownload(const ListValue* args); void HandleCancelDownload(const ListValue* args);
void HandleAllowDownload(const ListValue* args); void HandleAllowDownload(const ListValue* args);
void OpenNewPopupWindow(const ListValue* args);
void OpenNewFullWindow(const ListValue* args); void OpenNewFullWindow(const ListValue* args);
void PlayMediaFile(const ListValue* args); void PlayMediaFile(const ListValue* args);
...@@ -120,8 +120,7 @@ class ActiveDownloadsHandler ...@@ -120,8 +120,7 @@ class ActiveDownloadsHandler
void UpdateDownloadList(); void UpdateDownloadList();
void SendDownloads(); void SendDownloads();
void AddDownload(DownloadItem* item); void AddDownload(DownloadItem* item);
bool SelectTab(const GURL& url);
void OpenNewWindow(const ListValue* args, bool popup);
Profile* profile_; Profile* profile_;
TabContents* tab_contents_; TabContents* tab_contents_;
...@@ -230,8 +229,6 @@ void ActiveDownloadsHandler::RegisterMessages() { ...@@ -230,8 +229,6 @@ void ActiveDownloadsHandler::RegisterMessages() {
NewCallback(this, &ActiveDownloadsHandler::HandleCancelDownload)); NewCallback(this, &ActiveDownloadsHandler::HandleCancelDownload));
web_ui_->RegisterMessageCallback("allowDownload", web_ui_->RegisterMessageCallback("allowDownload",
NewCallback(this, &ActiveDownloadsHandler::HandleAllowDownload)); NewCallback(this, &ActiveDownloadsHandler::HandleAllowDownload));
web_ui_->RegisterMessageCallback("openNewPopupWindow",
NewCallback(this, &ActiveDownloadsHandler::OpenNewPopupWindow));
web_ui_->RegisterMessageCallback("openNewFullWindow", web_ui_->RegisterMessageCallback("openNewFullWindow",
NewCallback(this, &ActiveDownloadsHandler::OpenNewFullWindow)); NewCallback(this, &ActiveDownloadsHandler::OpenNewFullWindow));
web_ui_->RegisterMessageCallback("playMediaFile", web_ui_->RegisterMessageCallback("playMediaFile",
...@@ -277,27 +274,28 @@ void ActiveDownloadsHandler::HandleCancelDownload(const ListValue* args) { ...@@ -277,27 +274,28 @@ void ActiveDownloadsHandler::HandleCancelDownload(const ListValue* args) {
} }
} }
void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) { bool ActiveDownloadsHandler::SelectTab(const GURL& url) {
OpenNewWindow(args, false); for (TabContentsIterator it; !it.done(); ++it) {
} TabContents* tab_contents = it->tab_contents();
if (tab_contents->GetURL() == url) {
void ActiveDownloadsHandler::OpenNewPopupWindow(const ListValue* args) { tab_contents->Activate();
OpenNewWindow(args, true); return true;
}
}
return false;
} }
void ActiveDownloadsHandler::OpenNewWindow(const ListValue* args, bool popup) { void ActiveDownloadsHandler::OpenNewFullWindow(const ListValue* args) {
std::string url = UTF16ToUTF8(ExtractStringValue(args)); std::string url = UTF16ToUTF8(ExtractStringValue(args));
Browser* browser = popup ?
Browser::CreateForApp(Browser::TYPE_PANEL, kActiveDownloadAppName, if (SelectTab(GURL(url)))
gfx::Size(), profile_) : return;
BrowserList::GetLastActive();
Browser* browser = BrowserList::GetLastActive();
browser::NavigateParams params(browser, GURL(url), PageTransition::LINK); browser::NavigateParams params(browser, GURL(url), PageTransition::LINK);
params.disposition = NEW_FOREGROUND_TAB; params.disposition = NEW_FOREGROUND_TAB;
browser::Navigate(&params); browser::Navigate(&params);
// TODO(beng): The following two calls should be automatic by Navigate(). browser->window()->Show();
if (popup)
params.browser->window()->SetBounds(gfx::Rect(0, 0, 400, 300));
params.browser->window()->Show();
} }
void ActiveDownloadsHandler::ModelChanged() { void ActiveDownloadsHandler::ModelChanged() {
...@@ -403,16 +401,15 @@ Browser* ActiveDownloadsUI::OpenPopup(Profile* profile) { ...@@ -403,16 +401,15 @@ Browser* ActiveDownloadsUI::OpenPopup(Profile* profile) {
params.disposition = NEW_FOREGROUND_TAB; params.disposition = NEW_FOREGROUND_TAB;
browser::Navigate(&params); browser::Navigate(&params);
DCHECK_EQ(browser, params.browser);
// TODO(beng): The following two calls should be automatic by Navigate(). // TODO(beng): The following two calls should be automatic by Navigate().
params.browser->window()->SetBounds(gfx::Rect(kPopupLeft, browser->window()->SetBounds(gfx::Rect(kPopupLeft,
kPopupTop, kPopupTop,
kPopupWidth, kPopupWidth,
kPopupHeight)); kPopupHeight));
params.browser->window()->Show();
} else {
browser->window()->Show();
} }
browser->window()->Show();
return browser; return browser;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment