diff options
Diffstat (limited to 'chrome/browser/chromeos/media/media_player.h')
-rw-r--r-- | chrome/browser/chromeos/media/media_player.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/media/media_player.h b/chrome/browser/chromeos/media/media_player.h new file mode 100644 index 0000000..e916ea2 --- /dev/null +++ b/chrome/browser/chromeos/media/media_player.h @@ -0,0 +1,161 @@ +// Copyright (c) 2011 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. + +#ifndef CHROME_BROWSER_CHROMEOS_MEDIA_MEDIA_PLAYER_H_ +#define CHROME_BROWSER_CHROMEOS_MEDIA_MEDIA_PLAYER_H_ +#pragma once + +#include <set> +#include <vector> + +#include "base/memory/singleton.h" +#include "content/common/notification_observer.h" +#include "content/common/notification_registrar.h" +#include "content/common/notification_source.h" +#include "content/common/notification_type.h" + +#include "net/url_request/url_request.h" + +template <typename T> struct DefaultSingletonTraits; + +class Browser; +class GURL; +class Profile; + +class MediaPlayer : public NotificationObserver, + public net::URLRequest::Interceptor { + public: + struct MediaUrl; + typedef std::vector<MediaUrl> UrlVector; + + virtual ~MediaPlayer(); + + // Enqueues this file into the current playlist. If the mediaplayer is + // not currently visible, show it, and play the given url. + void EnqueueMediaFile(Profile* profile, const FilePath& file_path, + Browser* creator); + + // Enqueues this fileschema url into the current playlist. If the mediaplayer + // is not currently visible, show it, and play the given url. + void EnqueueMediaFileUrl(const GURL& url, Browser* creator); + + // Clears out the current playlist, and start playback of the given + // |file_path|. If there is no mediaplayer currently, show it, and play the + // given |file_path|. + void ForcePlayMediaFile(Profile* profile, const FilePath& file_path, + Browser* creator); + + // Clears out the current playlist, and start playback of the given url. + // If there is no mediaplayer currently, show it, and play the given url. + void ForcePlayMediaURL(const GURL& url, Browser* creator); + + // Toggle the visibility of the playlist window. + void TogglePlaylistWindowVisible(); + + // Force the playlist window to be shown. + void ShowPlaylistWindow(); + + // Toggle the mediaplayer between fullscreen and windowed. + void ToggleFullscreen(); + + // Force the playlist window to be closed. + void ClosePlaylistWindow(); + + // Sets the currently playing element to the given positions. + void SetPlaylistPosition(int position); + + // Returns current playlist. + const UrlVector& GetPlaylist() const; + + // Returns current playlist position. + int GetPlaylistPosition() const; + + // Set flag that error occuires while playing the url. + void SetPlaybackError(GURL const& url); + + // Notfies the mediaplayer that the playlist changed. This could be + // called from the mediaplayer itself for example. + void NotifyPlaylistChanged(); + + // Retuen true if playback requested. Resets this flag. + bool GetPendingPlayRequestAndReset(); + + // Requests starting playback of the current playlist item when the + // mediaplayer get the playlist updated. + void SetPlaybackRequest(); + + // Always returns NULL because we don't want to attempt a redirect + // before seeing the detected mime type of the request. + // Implementation of net::URLRequest::Interceptor. + virtual net::URLRequestJob* MaybeIntercept(net::URLRequest* request); + + // Determines if the requested document can be viewed by the + // MediaPlayer. If it can, returns a net::URLRequestJob that + // redirects the browser to the view URL. + // Implementation of net::URLRequest::Interceptor. + virtual net::URLRequestJob* MaybeInterceptResponse(net::URLRequest* request); + + // Used to detect when the mediaplayer is closed. + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details); + + // Getter for the singleton. + static MediaPlayer* GetInstance(); + + private: + friend struct DefaultSingletonTraits<MediaPlayer>; + + // The current playlist of urls. + UrlVector current_playlist_; + // The position into the current_playlist_ of the currently playing item. + int current_position_; + + bool pending_playback_request_; + + MediaPlayer(); + + GURL GetOriginUrl() const; + GURL GetMediaplayerPlaylistUrl() const; + GURL GetMediaPlayerUrl() const; + + // Popup the mediaplayer, this shows the browser, and sets up its + // locations correctly. + void PopupMediaPlayer(Browser* creator); + + // Popup the playlist. Shows the browser, sets it up to point at + // chrome://mediaplayer#playlist + void PopupPlaylist(Browser* creator); + + void EnqueueMediaFileUrl(const GURL& url); + + // Browser containing the playlist. Used to force closes. This is created + // By the PopupPlaylist call, and is NULLed out when the window is closed. + Browser* playlist_browser_; + + // Browser containing the Mediaplayer. Used to force closes. This is + // created by the PopupMediaplayer call, and is NULLed out when the window + // is closed. + Browser* mediaplayer_browser_; + + // Used to register for events on the windows, like to listen for closes. + NotificationRegistrar registrar_; + + // List of mimetypes that the mediaplayer should listen to. Used for + // interceptions of url GETs. + std::set<std::string> supported_mime_types_; + friend class MediaPlayerBrowserTest; + DISALLOW_COPY_AND_ASSIGN(MediaPlayer); +}; + +struct MediaPlayer::MediaUrl { + MediaUrl() {} + explicit MediaUrl(const GURL& newurl) + : url(newurl), + haderror(false) {} + GURL url; + bool haderror; +}; + +#endif // CHROME_BROWSER_CHROMEOS_MEDIA_MEDIA_PLAYER_H_ |