Index: chrome/browser/ui/webui/mediaplayer_ui.cc |
diff --git a/chrome/browser/ui/webui/mediaplayer_ui.cc b/chrome/browser/ui/webui/mediaplayer_ui.cc |
deleted file mode 100644 |
index cb900b002541001893b2a23edc3a4f1d69d6850b..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/mediaplayer_ui.cc |
+++ /dev/null |
@@ -1,624 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/ui/webui/mediaplayer_ui.h" |
- |
-#include "base/command_line.h" |
-#include "base/logging.h" |
-#include "base/memory/singleton.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/string_piece.h" |
-#include "base/string_util.h" |
-#include "base/threading/thread.h" |
-#include "base/time.h" |
-#include "base/values.h" |
-#include "chrome/browser/bookmarks/bookmark_model.h" |
-#include "chrome/browser/download/download_manager.h" |
-#include "chrome/browser/download/download_util.h" |
-#include "chrome/browser/extensions/file_manager_util.h" |
-#include "chrome/browser/history/history_types.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/browser/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/browser.h" |
-#include "chrome/browser/ui/browser_list.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/webui/favicon_source.h" |
-#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/jstemplate_builder.h" |
-#include "chrome/common/net/url_fetcher.h" |
-#include "chrome/common/time_format.h" |
-#include "chrome/common/url_constants.h" |
-#include "content/browser/browser_thread.h" |
-#include "content/browser/tab_contents/tab_contents.h" |
-#include "content/browser/user_metrics.h" |
-#include "grit/browser_resources.h" |
-#include "grit/chromium_strings.h" |
-#include "grit/generated_resources.h" |
-#include "grit/locale_settings.h" |
-#include "net/base/escape.h" |
-#include "net/base/load_flags.h" |
-#include "net/url_request/url_request_job.h" |
-#include "ui/base/resource/resource_bundle.h" |
- |
-#if defined(OS_CHROMEOS) |
-#include "chrome/browser/chromeos/frame/panel_browser_view.h" |
-#endif |
- |
-static const char kPropertyPath[] = "path"; |
-static const char kPropertyForce[] = "force"; |
-static const char kPropertyOffset[] = "currentOffset"; |
-static const char kPropertyError[] = "error"; |
- |
-static const char* kMediaplayerURL = "chrome://mediaplayer"; |
-static const char* kMediaplayerPlaylistURL = "chrome://mediaplayer#playlist"; |
-static const char* kMediaPlayerAppName = "mediaplayer"; |
-static const int kPopupLeft = 0; |
-static const int kPopupTop = 0; |
-static const int kPopupWidth = 350; |
-static const int kPopupHeight = 300; |
- |
-class MediaplayerUIHTMLSource : public ChromeURLDataManager::DataSource { |
- public: |
- explicit MediaplayerUIHTMLSource(bool is_playlist); |
- |
- // Called when the network layer has requested a resource underneath |
- // the path we registered. |
- virtual void StartDataRequest(const std::string& path, |
- bool is_incognito, |
- int request_id); |
- virtual std::string GetMimeType(const std::string&) const { |
- return "text/html"; |
- } |
- |
- private: |
- ~MediaplayerUIHTMLSource() {} |
- bool is_playlist_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MediaplayerUIHTMLSource); |
-}; |
- |
-// The handler for Javascript messages related to the "mediaplayer" view. |
-class MediaplayerHandler : public WebUIMessageHandler, |
- public base::SupportsWeakPtr<MediaplayerHandler> { |
- public: |
- |
- struct MediaUrl { |
- MediaUrl() {} |
- explicit MediaUrl(const GURL& newurl) |
- : url(newurl), |
- haderror(false) {} |
- GURL url; |
- bool haderror; |
- }; |
- typedef std::vector<MediaUrl> UrlVector; |
- |
- explicit MediaplayerHandler(bool is_playlist); |
- |
- virtual ~MediaplayerHandler(); |
- |
- // Init work after Attach. |
- void Init(bool is_playlist, TabContents* contents); |
- |
- // WebUIMessageHandler implementation. |
- virtual WebUIMessageHandler* Attach(WebUI* web_ui); |
- virtual void RegisterMessages(); |
- |
- // Callback for the "currentOffsetChanged" message. |
- void HandleCurrentOffsetChanged(const ListValue* args); |
- |
- void FirePlaylistChanged(const std::string& path, |
- bool force, |
- int offset); |
- |
- void PlaybackMediaFile(const GURL& url); |
- |
- void EnqueueMediaFileUrl(const GURL& url); |
- |
- void GetPlaylistValue(ListValue& args); |
- |
- // Callback for the "playbackError" message. |
- void HandlePlaybackError(const ListValue* args); |
- |
- // Callback for the "getCurrentPlaylist" message. |
- void HandleGetCurrentPlaylist(const ListValue* args); |
- |
- void HandleTogglePlaylist(const ListValue* args); |
- void HandleShowPlaylist(const ListValue* args); |
- void HandleSetCurrentPlaylistOffset(const ListValue* args); |
- void HandleToggleFullscreen(const ListValue* args); |
- |
- const UrlVector& GetCurrentPlaylist(); |
- |
- int GetCurrentPlaylistOffset(); |
- void SetCurrentPlaylistOffset(int offset); |
- // Sets the playlist for playlist views, since the playlist is |
- // maintained by the mediaplayer itself. Offset is the item in the |
- // playlist which is either now playing, or should be played. |
- void SetCurrentPlaylist(const UrlVector& playlist, int offset); |
- |
- private: |
- // The current playlist of urls. |
- UrlVector current_playlist_; |
- // The offset into the current_playlist_ of the currently playing item. |
- int current_offset_; |
- // Indicator of if this handler is a playlist or a mediaplayer. |
- bool is_playlist_; |
- DISALLOW_COPY_AND_ASSIGN(MediaplayerHandler); |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// MediaplayerHTMLSource |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-MediaplayerUIHTMLSource::MediaplayerUIHTMLSource(bool is_playlist) |
- : DataSource(chrome::kChromeUIMediaplayerHost, MessageLoop::current()) { |
- is_playlist_ = is_playlist; |
-} |
- |
-void MediaplayerUIHTMLSource::StartDataRequest(const std::string& path, |
- bool is_incognito, |
- int request_id) { |
- DictionaryValue localized_strings; |
- // TODO(dhg): Fix the strings that are currently hardcoded so they |
- // use the localized versions. |
- localized_strings.SetString("errorstring", "Error Playing Back"); |
- |
- SetFontAndTextDirection(&localized_strings); |
- |
- std::string full_html; |
- |
- static const base::StringPiece mediaplayer_html( |
- ResourceBundle::GetSharedInstance().GetRawDataResource( |
- IDR_MEDIAPLAYER_HTML)); |
- |
- static const base::StringPiece playlist_html( |
- ResourceBundle::GetSharedInstance().GetRawDataResource( |
- IDR_MEDIAPLAYERPLAYLIST_HTML)); |
- |
- if (is_playlist_) { |
- full_html = jstemplate_builder::GetI18nTemplateHtml( |
- playlist_html, &localized_strings); |
- } else { |
- full_html = jstemplate_builder::GetI18nTemplateHtml( |
- mediaplayer_html, &localized_strings); |
- } |
- |
- scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes); |
- html_bytes->data.resize(full_html.size()); |
- std::copy(full_html.begin(), full_html.end(), html_bytes->data.begin()); |
- |
- SendResponse(request_id, html_bytes); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// MediaplayerHandler |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
-MediaplayerHandler::MediaplayerHandler(bool is_playlist) |
- : current_offset_(0), |
- is_playlist_(is_playlist) { |
-} |
- |
-MediaplayerHandler::~MediaplayerHandler() { |
-} |
- |
-WebUIMessageHandler* MediaplayerHandler::Attach(WebUI* web_ui) { |
- // Create our favicon data source. |
- Profile* profile = web_ui->GetProfile(); |
- profile->GetChromeURLDataManager()->AddDataSource( |
- new FaviconSource(profile, FaviconSource::FAVICON)); |
- |
- return WebUIMessageHandler::Attach(web_ui); |
-} |
- |
-void MediaplayerHandler::Init(bool is_playlist, TabContents* contents) { |
- MediaPlayer* player = MediaPlayer::GetInstance(); |
- if (!is_playlist) { |
- player->SetNewHandler(this, contents); |
- } else { |
- player->RegisterNewPlaylistHandler(this, contents); |
- } |
-} |
- |
-void MediaplayerHandler::RegisterMessages() { |
- web_ui_->RegisterMessageCallback("currentOffsetChanged", |
- NewCallback(this, &MediaplayerHandler::HandleCurrentOffsetChanged)); |
- web_ui_->RegisterMessageCallback("playbackError", |
- NewCallback(this, &MediaplayerHandler::HandlePlaybackError)); |
- web_ui_->RegisterMessageCallback("getCurrentPlaylist", |
- NewCallback(this, &MediaplayerHandler::HandleGetCurrentPlaylist)); |
- web_ui_->RegisterMessageCallback("togglePlaylist", |
- NewCallback(this, &MediaplayerHandler::HandleTogglePlaylist)); |
- web_ui_->RegisterMessageCallback("setCurrentPlaylistOffset", |
- NewCallback(this, &MediaplayerHandler::HandleSetCurrentPlaylistOffset)); |
- web_ui_->RegisterMessageCallback("toggleFullscreen", |
- NewCallback(this, &MediaplayerHandler::HandleToggleFullscreen)); |
- web_ui_->RegisterMessageCallback("showPlaylist", |
- NewCallback(this, &MediaplayerHandler::HandleShowPlaylist)); |
-} |
- |
-void MediaplayerHandler::GetPlaylistValue(ListValue& urls) { |
- for (size_t x = 0; x < current_playlist_.size(); x++) { |
- DictionaryValue* url_value = new DictionaryValue(); |
- url_value->SetString(kPropertyPath, current_playlist_[x].url.spec()); |
- url_value->SetBoolean(kPropertyError, current_playlist_[x].haderror); |
- urls.Append(url_value); |
- } |
-} |
- |
-void MediaplayerHandler::PlaybackMediaFile(const GURL& url) { |
- current_playlist_.push_back(MediaplayerHandler::MediaUrl(url)); |
- FirePlaylistChanged(url.spec(), true, current_playlist_.size() - 1); |
- MediaPlayer::GetInstance()->NotifyPlaylistChanged(); |
-} |
- |
-const MediaplayerHandler::UrlVector& MediaplayerHandler::GetCurrentPlaylist() { |
- return current_playlist_; |
-} |
- |
-int MediaplayerHandler::GetCurrentPlaylistOffset() { |
- return current_offset_; |
-} |
- |
-void MediaplayerHandler::HandleToggleFullscreen(const ListValue* args) { |
- MediaPlayer::GetInstance()->ToggleFullscreen(); |
-} |
- |
-void MediaplayerHandler::HandleSetCurrentPlaylistOffset(const ListValue* args) { |
- int id; |
- CHECK(ExtractIntegerValue(args, &id)); |
- MediaPlayer::GetInstance()->SetPlaylistOffset(id); |
-} |
- |
-void MediaplayerHandler::FirePlaylistChanged(const std::string& path, |
- bool force, |
- int offset) { |
- DictionaryValue info_value; |
- ListValue urls; |
- GetPlaylistValue(urls); |
- info_value.SetString(kPropertyPath, path); |
- info_value.SetBoolean(kPropertyForce, force); |
- info_value.SetInteger(kPropertyOffset, offset); |
- web_ui_->CallJavascriptFunction("playlistChanged", info_value, urls); |
-} |
- |
-void MediaplayerHandler::SetCurrentPlaylistOffset(int offset) { |
- current_offset_ = offset; |
- FirePlaylistChanged(std::string(), true, current_offset_); |
-} |
- |
-void MediaplayerHandler::SetCurrentPlaylist( |
- const MediaplayerHandler::UrlVector& playlist, int offset) { |
- current_playlist_ = playlist; |
- current_offset_ = offset; |
- FirePlaylistChanged(std::string(), false, current_offset_); |
-} |
- |
-void MediaplayerHandler::EnqueueMediaFileUrl(const GURL& url) { |
- current_playlist_.push_back(MediaplayerHandler::MediaUrl(url)); |
- FirePlaylistChanged(url.spec(), false, current_offset_); |
- MediaPlayer::GetInstance()->NotifyPlaylistChanged(); |
-} |
- |
-void MediaplayerHandler::HandleCurrentOffsetChanged(const ListValue* args) { |
- CHECK(ExtractIntegerValue(args, ¤t_offset_)); |
- MediaPlayer::GetInstance()->NotifyPlaylistChanged(); |
-} |
- |
-void MediaplayerHandler::HandlePlaybackError(const ListValue* args) { |
- std::string error; |
- std::string url; |
- // Get path string. |
- if (args->GetString(0, &error)) |
- LOG(ERROR) << "Playback error" << error; |
- if (args->GetString(1, &url)) { |
- for (size_t x = 0; x < current_playlist_.size(); x++) { |
- if (current_playlist_[x].url == GURL(url)) { |
- current_playlist_[x].haderror = true; |
- } |
- } |
- FirePlaylistChanged(std::string(), false, current_offset_); |
- } |
-} |
- |
-void MediaplayerHandler::HandleGetCurrentPlaylist(const ListValue* args) { |
- FirePlaylistChanged(std::string(), false, current_offset_); |
-} |
- |
-void MediaplayerHandler::HandleTogglePlaylist(const ListValue* args) { |
- MediaPlayer::GetInstance()->TogglePlaylistWindowVisible(); |
-} |
- |
-void MediaplayerHandler::HandleShowPlaylist(const ListValue* args) { |
- MediaPlayer::GetInstance()->ShowPlaylistWindow(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// Mediaplayer |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-// Allows InvokeLater without adding refcounting. This class is a Singleton and |
-// won't be deleted until it's last InvokeLater is run. |
-DISABLE_RUNNABLE_METHOD_REFCOUNT(MediaPlayer); |
- |
-MediaPlayer::~MediaPlayer() { |
-} |
- |
-// static |
-MediaPlayer* MediaPlayer::GetInstance() { |
- return Singleton<MediaPlayer>::get(); |
-} |
- |
-void MediaPlayer::EnqueueMediaFile(Profile* profile, const FilePath& file_path, |
- Browser* creator) { |
- static GURL origin_url(kMediaplayerURL); |
- GURL url; |
- if (!FileManagerUtil::ConvertFileToFileSystemUrl(profile, file_path, |
- origin_url, &url)) { |
- } |
- EnqueueMediaFileUrl(url, creator); |
-} |
- |
-void MediaPlayer::EnqueueMediaFileUrl(const GURL& url, Browser* creator) { |
- if (handler_ == NULL) { |
- unhandled_urls_.push_back(url); |
- PopupMediaPlayer(creator); |
- } else { |
- handler_->EnqueueMediaFileUrl(url); |
- } |
-} |
- |
-void MediaPlayer::ForcePlayMediaFile(Profile* profile, |
- const FilePath& file_path, |
- Browser* creator) { |
- static GURL origin_url(kMediaplayerURL); |
- GURL url; |
- if (!FileManagerUtil::ConvertFileToFileSystemUrl(profile, file_path, |
- origin_url, &url)) { |
- } |
- ForcePlayMediaURL(url, creator); |
-} |
- |
-void MediaPlayer::ForcePlayMediaURL(const GURL& url, Browser* creator) { |
- if (handler_ == NULL) { |
- unhandled_urls_.push_back(url); |
- PopupMediaPlayer(creator); |
- } else { |
- handler_->PlaybackMediaFile(url); |
- } |
-} |
- |
-void MediaPlayer::TogglePlaylistWindowVisible() { |
- if (playlist_browser_) { |
- ClosePlaylistWindow(); |
- } else { |
- ShowPlaylistWindow(); |
- } |
-} |
- |
-void MediaPlayer::ShowPlaylistWindow() { |
- if (playlist_browser_ == NULL) { |
- PopupPlaylist(NULL); |
- } |
-} |
- |
-void MediaPlayer::ClosePlaylistWindow() { |
- if (playlist_browser_ != NULL) { |
- playlist_browser_->window()->Close(); |
- } |
-} |
- |
-void MediaPlayer::SetPlaylistOffset(int offset) { |
- if (handler_) { |
- handler_->SetCurrentPlaylistOffset(offset); |
- } |
- if (playlist_) { |
- playlist_->SetCurrentPlaylistOffset(offset); |
- } |
-} |
- |
-void MediaPlayer::SetNewHandler(MediaplayerHandler* handler, |
- TabContents* contents) { |
- handler_ = handler; |
- mediaplayer_tab_ = contents; |
- RegisterListeners(); |
- for (size_t x = 0; x < unhandled_urls_.size(); x++) { |
- handler_->EnqueueMediaFileUrl(unhandled_urls_[x]); |
- } |
- unhandled_urls_.clear(); |
-} |
- |
-void MediaPlayer::RegisterListeners() { |
- registrar_.RemoveAll(); |
- if (playlist_tab_) { |
- registrar_.Add(this, |
- NotificationType::TAB_CONTENTS_DESTROYED, |
- Source<TabContents>(playlist_tab_)); |
- } |
- if (mediaplayer_tab_) { |
- registrar_.Add(this, |
- NotificationType::TAB_CONTENTS_DESTROYED, |
- Source<TabContents>(mediaplayer_tab_)); |
- } |
-}; |
- |
-void MediaPlayer::Observe(NotificationType type, |
- const NotificationSource& source, |
- const NotificationDetails& details) { |
- DCHECK(type == NotificationType::TAB_CONTENTS_DESTROYED); |
- if (Source<TabContents>(source).ptr() == mediaplayer_tab_) { |
- RemoveHandler(handler_); |
- RegisterListeners(); |
- ClosePlaylistWindow(); |
- } else if (Source<TabContents>(source).ptr() == playlist_tab_) { |
- RemovePlaylistHandler(playlist_); |
- RegisterListeners(); |
- } |
-} |
- |
-void MediaPlayer::RegisterNewPlaylistHandler(MediaplayerHandler* handler, |
- TabContents* contents) { |
- playlist_ = handler; |
- playlist_tab_ = contents; |
- RegisterListeners(); |
- NotifyPlaylistChanged(); |
-} |
- |
-void MediaPlayer::RemovePlaylistHandler(MediaplayerHandler* handler) { |
- if (handler == playlist_) { |
- playlist_ = NULL; |
- playlist_browser_ = NULL; |
- playlist_tab_ = NULL; |
- } |
-} |
- |
-void MediaPlayer::NotifyPlaylistChanged() { |
- if (handler_ && playlist_) { |
- playlist_->SetCurrentPlaylist(handler_->GetCurrentPlaylist(), |
- handler_->GetCurrentPlaylistOffset()); |
- } |
-} |
- |
-void MediaPlayer::ToggleFullscreen() { |
- if (handler_ && mediaplayer_browser_) { |
- mediaplayer_browser_->ToggleFullscreenMode(); |
- } |
-} |
- |
-void MediaPlayer::RemoveHandler(MediaplayerHandler* handler) { |
- if (handler == handler_) { |
- handler_ = NULL; |
- mediaplayer_browser_ = NULL; |
- mediaplayer_tab_ = NULL; |
- } |
-} |
- |
-void MediaPlayer::PopupPlaylist(Browser* creator) { |
- Profile* profile = BrowserList::GetLastActive()->profile(); |
- playlist_browser_ = Browser::CreateForApp(Browser::TYPE_PANEL, |
- kMediaPlayerAppName, |
- gfx::Size(), |
- profile); |
- playlist_browser_->AddSelectedTabWithURL(GURL(kMediaplayerPlaylistURL), |
- PageTransition::LINK); |
- playlist_browser_->window()->SetBounds(gfx::Rect(kPopupLeft, |
- kPopupTop, |
- kPopupWidth, |
- kPopupHeight)); |
- playlist_browser_->window()->Show(); |
-} |
- |
-void MediaPlayer::PopupMediaPlayer(Browser* creator) { |
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
- BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- NewRunnableMethod(this, &MediaPlayer::PopupMediaPlayer, |
- static_cast<Browser*>(NULL))); |
- return; |
- } |
- Profile* profile = BrowserList::GetLastActive()->profile(); |
- mediaplayer_browser_ = Browser::CreateForApp(Browser::TYPE_PANEL, |
- kMediaPlayerAppName, |
- gfx::Size(), |
- profile); |
-#if defined(OS_CHROMEOS) |
- // Since we are on chromeos, popups should be a PanelBrowserView, |
- // so we can just cast it. |
- if (creator) { |
- chromeos::PanelBrowserView* creatorview = |
- static_cast<chromeos::PanelBrowserView*>(creator->window()); |
- chromeos::PanelBrowserView* view = |
- static_cast<chromeos::PanelBrowserView*>( |
- mediaplayer_browser_->window()); |
- view->SetCreatorView(creatorview); |
- } |
-#endif |
- mediaplayer_browser_->AddSelectedTabWithURL(GURL(kMediaplayerURL), |
- PageTransition::LINK); |
- mediaplayer_browser_->window()->SetBounds(gfx::Rect(kPopupLeft, |
- kPopupTop, |
- kPopupWidth, |
- kPopupHeight)); |
- mediaplayer_browser_->window()->Show(); |
-} |
- |
-net::URLRequestJob* MediaPlayer::MaybeIntercept(net::URLRequest* request) { |
- // Don't attempt to intercept here as we want to wait until the mime |
- // type is fully determined. |
- return NULL; |
-} |
- |
-// This is the list of mime types currently supported by the Google |
-// Document Viewer. |
-static const char* const supported_mime_type_list[] = { |
- "audio/mpeg", |
- "video/mp4", |
- "audio/mp3" |
-}; |
- |
-net::URLRequestJob* MediaPlayer::MaybeInterceptResponse( |
- net::URLRequest* request) { |
- // Do not intercept this request if it is a download. |
- if (request->load_flags() & net::LOAD_IS_DOWNLOAD) { |
- return NULL; |
- } |
- |
- std::string mime_type; |
- request->GetMimeType(&mime_type); |
- // If it is in our list of known URLs, enqueue the url then |
- // Cancel the request so the mediaplayer can handle it when |
- // it hits it in the playlist. |
- if (supported_mime_types_.find(mime_type) != supported_mime_types_.end()) { |
- if (request->referrer() != chrome::kChromeUIMediaplayerURL && |
- !request->referrer().empty()) { |
- EnqueueMediaFileUrl(request->url(), NULL); |
- request->Cancel(); |
- } |
- } |
- return NULL; |
-} |
- |
-MediaPlayer::MediaPlayer() |
- : handler_(NULL), |
- playlist_(NULL), |
- playlist_browser_(NULL), |
- mediaplayer_browser_(NULL), |
- mediaplayer_tab_(NULL), |
- playlist_tab_(NULL) { |
- for (size_t i = 0; i < arraysize(supported_mime_type_list); ++i) { |
- supported_mime_types_.insert(supported_mime_type_list[i]); |
- } |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// |
-// MediaplayerUIContents |
-// |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-MediaplayerUI::MediaplayerUI(TabContents* contents) : WebUI(contents) { |
- const GURL& url = contents->GetURL(); |
- bool is_playlist = (url.ref() == "playlist"); |
- MediaplayerHandler* handler = new MediaplayerHandler(is_playlist); |
- AddMessageHandler(handler->Attach(this)); |
- if (is_playlist) { |
- handler->Init(true, contents); |
- } else { |
- handler->Init(false, contents); |
- } |
- |
- MediaplayerUIHTMLSource* html_source = |
- new MediaplayerUIHTMLSource(is_playlist); |
- |
- // Set up the chrome://mediaplayer/ source. |
- contents->profile()->GetChromeURLDataManager()->AddDataSource(html_source); |
-} |