Index: chrome/browser/chromeos/media/media_player.cc |
diff --git a/chrome/browser/chromeos/media/media_player.cc b/chrome/browser/chromeos/media/media_player.cc |
index fc6ff1ac645a8439f99c7ed15abd962841240804..94576fa20ef9d270ac7948dc2299307bad44df5e 100644 |
--- a/chrome/browser/chromeos/media/media_player.cc |
+++ b/chrome/browser/chromeos/media/media_player.cc |
@@ -12,12 +12,16 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/browser_finder.h" |
#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/browser_tabstrip.h" |
#include "chrome/browser/ui/browser_window.h" |
+#include "chrome/browser/ui/tab_contents/tab_contents.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/common/chrome_notification_types.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/user_metrics.h" |
+#include "content/public/browser/web_contents.h" |
#include "net/url_request/url_request_job.h" |
#include "ui/gfx/screen.h" |
@@ -26,7 +30,7 @@ using content::UserMetricsAction; |
static const char* kMediaPlayerAppName = "mediaplayer"; |
static const int kPopupRight = 20; |
-static const int kPopupBottom = 50; |
+static const int kPopupBottom = 80; |
static const int kPopupWidth = 280; |
// Set the initial height to the minimum possible height. Keep the constants |
@@ -62,10 +66,11 @@ MediaPlayer* MediaPlayer::GetInstance() { |
} |
void MediaPlayer::SetWindowHeight(int content_height) { |
- if (mediaplayer_browser_ != NULL) { |
+ Browser* browser = GetBrowser(); |
+ if (browser != NULL) { |
int window_height = content_height + kTitleHeight; |
- gfx::Rect bounds = mediaplayer_browser_->window()->GetBounds(); |
- mediaplayer_browser_->window()->SetBounds(gfx::Rect( |
+ gfx::Rect bounds = browser->window()->GetBounds(); |
+ browser->window()->SetBounds(gfx::Rect( |
bounds.x(), |
std::max(0, bounds.bottom() - window_height), |
bounds.width(), |
@@ -74,8 +79,9 @@ void MediaPlayer::SetWindowHeight(int content_height) { |
} |
void MediaPlayer::CloseWindow() { |
- if (mediaplayer_browser_ != NULL) { |
- mediaplayer_browser_->window()->Close(); |
+ Browser* browser = GetBrowser(); |
+ if (browser != NULL) { |
+ browser->window()->Close(); |
} |
} |
@@ -98,16 +104,6 @@ void MediaPlayer::SetPlaylistPosition(int position) { |
current_position_ = position; |
} |
-void MediaPlayer::Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- DCHECK(type == chrome::NOTIFICATION_BROWSER_CLOSED); |
- registrar_.Remove(this, chrome::NOTIFICATION_BROWSER_CLOSED, source); |
- |
- if (content::Source<Browser>(source).ptr() == mediaplayer_browser_) |
- mediaplayer_browser_ = NULL; |
-} |
- |
void MediaPlayer::NotifyPlaylistChanged() { |
ExtensionMediaPlayerEventRouter::GetInstance()->NotifyPlaylistChanged(); |
} |
@@ -120,37 +116,49 @@ void MediaPlayer::PopupMediaPlayer() { |
base::Unretained(this) /*this class is a singleton*/)); |
return; |
} |
- if (mediaplayer_browser_) { // Already opened. |
- mediaplayer_browser_->window()->Show(); |
- return; |
- } |
- const gfx::Size screen = gfx::Screen::GetPrimaryDisplay().size(); |
- const gfx::Rect bounds(screen.width() - kPopupRight - kPopupWidth, |
- screen.height() - kPopupBottom - kPopupHeight, |
- kPopupWidth, |
- kPopupHeight); |
- |
- Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); |
- mediaplayer_browser_ = new Browser( |
- Browser::CreateParams::CreateForApp(Browser::TYPE_PANEL, |
- kMediaPlayerAppName, |
- bounds, |
- profile)); |
- registrar_.Add(this, |
- chrome::NOTIFICATION_BROWSER_CLOSED, |
- content::Source<Browser>(mediaplayer_browser_)); |
- |
- chrome::AddSelectedTabWithURL(mediaplayer_browser_, GetMediaPlayerUrl(), |
- content::PAGE_TRANSITION_LINK); |
- mediaplayer_browser_->window()->Show(); |
+ Browser* browser = GetBrowser(); |
+ if (!browser) { |
+ const gfx::Size screen = gfx::Screen::GetPrimaryDisplay().size(); |
+ const gfx::Rect bounds(screen.width() - kPopupRight - kPopupWidth, |
+ screen.height() - kPopupBottom - kPopupHeight, |
+ kPopupWidth, |
+ kPopupHeight); |
+ |
+ Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); |
+ browser = new Browser( |
+ Browser::CreateParams::CreateForApp(Browser::TYPE_PANEL, |
+ kMediaPlayerAppName, |
+ bounds, |
+ profile)); |
+ |
+ chrome::AddSelectedTabWithURL(browser, GetMediaPlayerUrl(), |
+ content::PAGE_TRANSITION_LINK); |
+ } |
+ browser->window()->Show(); |
} |
-GURL MediaPlayer::GetMediaPlayerUrl() const { |
+GURL MediaPlayer::GetMediaPlayerUrl() { |
return file_manager_util::GetMediaPlayerUrl(); |
} |
+Browser* MediaPlayer::GetBrowser() { |
+ for (BrowserList::const_iterator browser_iterator = BrowserList::begin(); |
+ browser_iterator != BrowserList::end(); ++browser_iterator) { |
+ Browser* browser = *browser_iterator; |
+ TabStripModel* tab_strip = browser->tab_strip_model(); |
+ for (int idx = 0; idx < tab_strip->count(); idx++) { |
+ content::WebContents* web_contents = |
+ tab_strip->GetTabContentsAt(idx)->web_contents(); |
+ const GURL& url = web_contents->GetURL(); |
+ GURL base_url(url.GetOrigin().spec() + url.path().substr(1)); |
+ if (base_url == GetMediaPlayerUrl()) |
+ return browser; |
+ } |
+ } |
+ return NULL; |
+} |
+ |
MediaPlayer::MediaPlayer() |
- : current_position_(0), |
- mediaplayer_browser_(NULL) { |
+ : current_position_(0) { |
}; |