diff options
24 files changed, 219 insertions, 238 deletions
| diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index fc75013496..dd79ad5280 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1211,9 +1211,6 @@ bool LLAppViewer::init()  							 << LL_ENDL;  	} -	LLViewerMedia::initClass(); -	LL_INFOS("InitInfo") << "Viewer media initialized." << LL_ENDL ; -  	LLTextUtil::TextHelpers::iconCallbackCreationFunction = create_text_segment_icon_from_url_match;  	//EXT-7013 - On windows for some locale (Japanese) standard @@ -2045,7 +2042,6 @@ bool LLAppViewer::cleanup()  	//Note:  	//SUBSYSTEM_CLEANUP(LLViewerMedia) has to be put before gTextureList.shutdown()  	//because some new image might be generated during cleaning up media. --bao -	SUBSYSTEM_CLEANUP(LLViewerMedia);  	SUBSYSTEM_CLEANUP(LLViewerParcelMedia);  	gTextureList.shutdown(); // shutdown again in case a callback added something  	LLUIImageList::getInstance()->cleanUp(); diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp index 19747757db..0460bff1b4 100644 --- a/indra/newview/llbrowsernotification.cpp +++ b/indra/newview/llbrowsernotification.cpp @@ -50,7 +50,7 @@ bool LLBrowserNotification::processNotification(const LLNotificationPtr& notific  	}  	else if (LLViewerMediaFocus::instance().getControlsMediaID() == media_id)  	{ -		LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id); +		LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(media_id);  		if (impl)  		{  			impl->showNotification(notification); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 64961fc99c..98e4cefebb 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -254,8 +254,8 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response  	if ( option == 0 ) // YES  	{  		// clean web -		LLViewerMedia::clearAllCaches(); -		LLViewerMedia::clearAllCookies(); +		LLViewerMedia::getInstance()->clearAllCaches(); +		LLViewerMedia::getInstance()->clearAllCookies();  		// clean nav bar history  		LLNavigationBar::getInstance()->clearHistoryCache(); @@ -635,14 +635,14 @@ void LLFloaterPreference::apply()  	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");  	setCacheLocation(cache_location); -	LLViewerMedia::setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue()); +	LLViewerMedia::getInstance()->setCookiesEnabled(getChild<LLUICtrl>("cookies_enabled")->getValue());  	if (hasChild("web_proxy_enabled", TRUE) &&hasChild("web_proxy_editor", TRUE) && hasChild("web_proxy_port", TRUE))  	{  		bool proxy_enable = getChild<LLUICtrl>("web_proxy_enabled")->getValue();  		std::string proxy_address = getChild<LLUICtrl>("web_proxy_editor")->getValue();  		int proxy_port = getChild<LLUICtrl>("web_proxy_port")->getValue(); -		LLViewerMedia::setProxyConfig(proxy_enable, proxy_address, proxy_port); +		LLViewerMedia::getInstance()->setProxyConfig(proxy_enable, proxy_address, proxy_port);  	}  	if (mGotPersonalInfo) diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 3b17368445..224e30f7de 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -235,7 +235,7 @@ void LLFloaterWebContent::preCreate(LLFloaterWebContent::Params& p)  void LLFloaterWebContent::open_media(const Params& p)  { -	LLViewerMedia::proxyWindowOpened(p.target(), p.id()); +	LLViewerMedia::getInstance()->proxyWindowOpened(p.target(), p.id());  	mWebBrowser->setHomePageUrl(p.url);  	mWebBrowser->setTarget(p.target);  	mWebBrowser->navigateTo(p.url); @@ -319,7 +319,7 @@ void LLFloaterWebContent::onClose(bool app_quitting)              LLTwitterConnect::instance().setConnectionState(LLTwitterConnect::TWITTER_CONNECTION_FAILED);          }      } -	LLViewerMedia::proxyWindowClosed(mUUID); +	LLViewerMedia::getInstance()->proxyWindowClosed(mUUID);  	destroy();  } diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp index 46019557f8..bde7b1a12e 100644 --- a/indra/newview/llinspectobject.cpp +++ b/indra/newview/llinspectobject.cpp @@ -241,7 +241,7 @@ void LLInspectObject::onOpen(const LLSD& data)  		if(!mMediaEntry)  			return; -		mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID()); +		mMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaEntry->getMediaID());  	}  } @@ -300,7 +300,7 @@ void LLInspectObject::update()  	if(!mMediaEntry)  		return; -	mMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mMediaEntry->getMediaID()); +	mMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaEntry->getMediaID());  	updateMediaCurrentURL();  	updateSecureBrowsing(); diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp index a0e19f2d19..805c25508f 100644 --- a/indra/newview/llmarketplacefunctions.cpp +++ b/indra/newview/llmarketplacefunctions.cpp @@ -219,7 +219,7 @@ namespace LLMarketplaceImport          httpHeaders->append(HTTP_OUT_HEADER_CONNECTION, "Keep-Alive");          httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sMarketplaceCookie);          httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_XML); -        httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getCurrentUserAgent()); +        httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getInstance()->getCurrentUserAgent());          LLSD result = httpAdapter->postAndSuspend(httpRequest, url, LLSD(), httpOpts, httpHeaders); @@ -283,11 +283,11 @@ namespace LLMarketplaceImport              httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");              httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sMarketplaceCookie);              httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_LLSD_XML); -            httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getCurrentUserAgent()); +            httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, LLViewerMedia::getInstance()->getCurrentUserAgent());          }          else          { -            httpHeaders = LLViewerMedia::getHttpHeaders(); +            httpHeaders = LLViewerMedia::getInstance()->getHttpHeaders();          }          LLSD result = httpAdapter->getAndSuspend(httpRequest, url, httpOpts, httpHeaders); diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 7f6955d08c..b399ab9bc4 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -691,7 +691,7 @@ bool LLMediaCtrl::ensureMediaSourceExists()  	if(mMediaSource.isNull())  	{  		// If we don't already have a media source, try to create one. -		mMediaSource = LLViewerMedia::newMediaImpl(mMediaTextureID, mTextureWidth, mTextureHeight); +		mMediaSource = LLViewerMedia::getInstance()->newMediaImpl(mMediaTextureID, mTextureWidth, mTextureHeight);  		if ( mMediaSource )  		{  			mMediaSource->setUsedInUI(true); @@ -1098,7 +1098,7 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)  			auth_request_params.substitutions = args;  			auth_request_params.payload = LLSD().with("media_id", mMediaTextureID); -			auth_request_params.functor.function = boost::bind(&LLViewerMedia::onAuthSubmit, _1, _2); +			auth_request_params.functor.function = boost::bind(&LLViewerMedia::authSubmitCallback, _1, _2);  			LLNotifications::instance().add(auth_request_params);  		};  		break; @@ -1144,7 +1144,7 @@ void LLMediaCtrl::onPopup(const LLSD& notification, const LLSD& response)  	else  	{  		// Make sure the opening instance knows its window open request was denied, so it can clean things up. -		LLViewerMedia::proxyWindowClosed(notification["payload"]["uuid"]); +		LLViewerMedia::getInstance()->proxyWindowClosed(notification["payload"]["uuid"]);  	}  } diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 392bacb8d9..67bac9a597 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -886,7 +886,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)                 break;  				} -			if(LLViewerMedia::textureHasMedia(id)) +			if(LLViewerMedia::getInstance()->textureHasMedia(id))  			{  				getChildView("button align")->setEnabled(editable);  			} @@ -2367,13 +2367,13 @@ struct LLPanelFaceSetMediaFunctor : public LLSelectedTEFunctor  		const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;  		if ( mep )  		{ -			pMediaImpl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +			pMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());  		}  		if ( pMediaImpl.isNull())  		{  			// If we didn't find face media for this face, check whether this face is showing parcel media. -			pMediaImpl = LLViewerMedia::getMediaImplFromTextureID(tep->getID()); +			pMediaImpl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(tep->getID());  		}  		if ( pMediaImpl.notNull()) @@ -2526,7 +2526,7 @@ void LLPanelFace::LLSelectedTE::getTexId(LLUUID& id, bool& identical)  				id = image->getID();  			} -			if (!id.isNull() && LLViewerMedia::textureHasMedia(id)) +			if (!id.isNull() && LLViewerMedia::getInstance()->textureHasMedia(id))  			{  				LLTextureEntry *te = object->getTE(te_index);  				if (te) diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp index 3522189842..9730f0f16d 100644 --- a/indra/newview/llpanelmediasettingsgeneral.cpp +++ b/indra/newview/llpanelmediasettingsgeneral.cpp @@ -457,7 +457,7 @@ bool LLPanelMediaSettingsGeneral::navigateHomeSelectedFace(bool only_if_current_  					if (!only_if_current_is_empty || (media_data->getCurrentURL().empty() && media_data->getAutoPlay()))  					{  						viewer_media_t media_impl = -							LLViewerMedia::getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID()); +							LLViewerMedia::getInstance()->getMediaImplFromTextureID(object->getTE(face)->getMediaData()->getMediaID());  						if(media_impl)  						{  							media_impl->navigateHome(); diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp index f3a2ed9408..a85e9e3882 100644 --- a/indra/newview/llpanelnearbymedia.cpp +++ b/indra/newview/llpanelnearbymedia.cpp @@ -543,9 +543,10 @@ void LLPanelNearByMedia::refreshParcelItems()  	// Only show "special parcel items" if "All" or "Within" filter  	// (and if media is "enabled")  	bool should_include = (choice == MEDIA_CLASS_ALL || choice == MEDIA_CLASS_WITHIN_PARCEL); -	 +	LLViewerMedia* media_inst = LLViewerMedia::getInstance(); +  	// First Parcel Media: add or remove it as necessary -	if (gSavedSettings.getBOOL("AudioStreamingMedia") &&should_include && LLViewerMedia::hasParcelMedia()) +	if (gSavedSettings.getBOOL("AudioStreamingMedia") && should_include && media_inst->hasParcelMedia())  	{  		// Yes, there is parcel media.  		if (NULL == mParcelMediaItem) @@ -588,7 +589,7 @@ void LLPanelNearByMedia::refreshParcelItems()  	}  	// Next Parcel Audio: add or remove it as necessary (don't show if disabled in prefs) -	if (should_include && LLViewerMedia::hasParcelAudio() && gSavedSettings.getBOOL("AudioStreamingMusic")) +	if (should_include && media_inst->hasParcelAudio() && gSavedSettings.getBOOL("AudioStreamingMusic"))  	{  		// Yes, there is parcel audio.  		if (NULL == mParcelAudioItem) @@ -608,10 +609,10 @@ void LLPanelNearByMedia::refreshParcelItems()  	// ... then update it  	if (NULL != mParcelAudioItem)  	{ -		bool is_playing = LLViewerMedia::isParcelAudioPlaying(); +		bool is_playing = media_inst->isParcelAudioPlaying();  		std::string url; -        url = LLViewerMedia::getParcelAudioURL(); +		url = media_inst->getParcelAudioURL();  		updateListItem(mParcelAudioItem,  					   mParcelAudioName, @@ -653,7 +654,8 @@ void LLPanelNearByMedia::refreshList()  	refreshParcelItems();  	// Get the canonical list from LLViewerMedia -	LLViewerMedia::impl_list impls = LLViewerMedia::getPriorityList(); +	LLViewerMedia* media_inst = LLViewerMedia::getInstance(); +	LLViewerMedia::impl_list impls = media_inst->getPriorityList();  	LLViewerMedia::impl_list::iterator priority_iter;  	U32 enabled_count = 0; @@ -706,17 +708,17 @@ void LLPanelNearByMedia::refreshList()  	}	  	mDisableAllCtrl->setEnabled((gSavedSettings.getBOOL("AudioStreamingMusic") ||   		                         gSavedSettings.getBOOL("AudioStreamingMedia")) && -								(LLViewerMedia::isAnyMediaShowing() ||  -								 LLViewerMedia::isParcelMediaPlaying() || -								 LLViewerMedia::isParcelAudioPlaying())); +								(media_inst->isAnyMediaShowing() ||  +								 media_inst->isParcelMediaPlaying() || +								 media_inst->isParcelAudioPlaying()));  	mEnableAllCtrl->setEnabled( (gSavedSettings.getBOOL("AudioStreamingMusic") ||  								gSavedSettings.getBOOL("AudioStreamingMedia")) &&  							   (disabled_count > 0 ||  								// parcel media (if we have it, and it isn't playing, enable "start") -								(LLViewerMedia::hasParcelMedia() && ! LLViewerMedia::isParcelMediaPlaying()) || +								(media_inst->hasParcelMedia() && ! media_inst->isParcelMediaPlaying()) ||  								// parcel audio (if we have it, and it isn't playing, enable "start") -								(LLViewerMedia::hasParcelAudio() && ! LLViewerMedia::isParcelAudioPlaying()))); +								(media_inst->hasParcelAudio() && ! media_inst->isParcelAudioPlaying())));  	// Iterate over the rows in the control, updating ones whose impl exists, and deleting ones whose impl has gone away.  	std::vector<LLScrollListItem*> items = mMediaList->getAllData(); @@ -731,7 +733,7 @@ void LLPanelNearByMedia::refreshList()  		if (row_id != PARCEL_MEDIA_LIST_ITEM_UUID &&  			row_id != PARCEL_AUDIO_LIST_ITEM_UUID)  		{ -			LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(row_id); +			LLViewerMediaImpl* impl = media_inst->getMediaImplFromTextureID(row_id);  			if(impl)  			{  				updateListItem(item, impl); @@ -776,17 +778,17 @@ void LLPanelNearByMedia::updateColumns()  void LLPanelNearByMedia::onClickEnableAll()  { -	LLViewerMedia::setAllMediaEnabled(true); +	LLViewerMedia::getInstance()->setAllMediaEnabled(true);  }  void LLPanelNearByMedia::onClickDisableAll()  { -	LLViewerMedia::setAllMediaEnabled(false); +	LLViewerMedia::getInstance()->setAllMediaEnabled(false);  }  void LLPanelNearByMedia::onClickEnableParcelMedia()  {	 -	if ( ! LLViewerMedia::isParcelMediaPlaying() ) +	if ( ! LLViewerMedia::getInstance()->isParcelMediaPlaying() )  	{  		LLViewerParcelMedia::play(LLViewerParcelMgr::getInstance()->getAgentParcel());  	} @@ -832,7 +834,7 @@ bool LLPanelNearByMedia::setDisabled(const LLUUID &row_id, bool disabled)  		return true;  	}  	else { -		LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(row_id); +		LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(row_id);  		if(impl)  		{  			impl->setDisabled(disabled, true); @@ -889,7 +891,7 @@ void LLPanelNearByMedia::onClickParcelAudioPlay()  	}  	else  	{ -		LLViewerAudio::getInstance()->startInternetStreamWithAutoFade(LLViewerMedia::getParcelAudioURL()); +		LLViewerAudio::getInstance()->startInternetStreamWithAutoFade(LLViewerMedia::getInstance()->getParcelAudioURL());  	}  } @@ -981,16 +983,17 @@ void LLPanelNearByMedia::onMoreLess()  void LLPanelNearByMedia::updateControls()  {  	LLUUID selected_media_id = mMediaList->getValue().asUUID(); +	LLViewerMedia* media_inst = LLViewerMedia::getInstance();  	if (selected_media_id == PARCEL_AUDIO_LIST_ITEM_UUID)  	{ -		if (!LLViewerMedia::hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic")) +		if (!media_inst->getInstance()->hasParcelAudio() || !gSavedSettings.getBOOL("AudioStreamingMusic"))  		{  			// disable controls if audio streaming music is disabled from preference  			showDisabledControls();  		}  		else { -			showTimeBasedControls(LLViewerMedia::isParcelAudioPlaying(), +			showTimeBasedControls(media_inst->isParcelAudioPlaying(),  							  false, // include_zoom  							  false, // is_zoomed  							  gSavedSettings.getBOOL("MuteMusic"),  @@ -999,7 +1002,7 @@ void LLPanelNearByMedia::updateControls()  	}  	else if (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID)  	{ -		if (!LLViewerMedia::hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia")) +		if (!media_inst->hasParcelMedia() || !gSavedSettings.getBOOL("AudioStreamingMedia"))  		{  			// disable controls if audio streaming media is disabled from preference  			showDisabledControls(); @@ -1021,7 +1024,7 @@ void LLPanelNearByMedia::updateControls()  			}  			else {  				// non-time-based parcel media -				showBasicControls(LLViewerMedia::isParcelMediaPlaying(),  +				showBasicControls(media_inst->isParcelMediaPlaying(),   							      false,   								  false,   								  impl->getVolume() == 0.0,  @@ -1030,7 +1033,7 @@ void LLPanelNearByMedia::updateControls()  		}  	}  	else { -		LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id); +		LLViewerMediaImpl* impl = media_inst->getMediaImplFromTextureID(selected_media_id);  		if (NULL == impl || !gSavedSettings.getBOOL("AudioStreamingMedia"))  		{ @@ -1116,7 +1119,7 @@ void LLPanelNearByMedia::onClickSelectedMediaPlay()  	if (selected_media_id != PARCEL_AUDIO_LIST_ITEM_UUID)  	{  		LLViewerMediaImpl *impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ? -			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id); +			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);  		if (NULL != impl)  		{  			if (impl->isMediaTimeBased() && impl->isMediaPaused()) @@ -1145,7 +1148,7 @@ void LLPanelNearByMedia::onClickSelectedMediaPause()  		onClickParcelMediaPause();  	}  	else { -		LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(selected_media_id); +		LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);  		if (NULL != impl && impl->isMediaTimeBased() && impl->isMediaPlaying())  		{  			impl->pause(); @@ -1162,7 +1165,7 @@ void LLPanelNearByMedia::onClickSelectedMediaMute()  	}  	else {  		LLViewerMediaImpl* impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ? -			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id); +			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);  		if (NULL != impl)  		{  			F32 volume = impl->getVolume(); @@ -1193,7 +1196,7 @@ void LLPanelNearByMedia::onCommitSelectedMediaVolume()  	}  	else {  		LLViewerMediaImpl* impl = (selected_media_id == PARCEL_MEDIA_LIST_ITEM_UUID) ? -			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getMediaImplFromTextureID(selected_media_id); +			((LLViewerMediaImpl*)LLViewerParcelMedia::getParcelMedia()) : LLViewerMedia::getInstance()->getMediaImplFromTextureID(selected_media_id);  		if (NULL != impl)  		{  			impl->setVolume(mVolumeSlider->getValueF32()); diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 5f413fc3c0..8105beae1b 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -267,7 +267,7 @@ void LLPanelPrimMediaControls::focusOnTarget()  LLViewerMediaImpl* LLPanelPrimMediaControls::getTargetMediaImpl()  { -	return LLViewerMedia::getMediaImplFromTextureID(mTargetImplID); +	return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mTargetImplID);  }  LLViewerObject* LLPanelPrimMediaControls::getTargetObject() diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp index c17b86783d..083a913ef8 100644 --- a/indra/newview/llprogressview.cpp +++ b/indra/newview/llprogressview.cpp @@ -86,7 +86,7 @@ BOOL LLProgressView::postBuild()  	mMediaCtrl->setVisible( false );		// hidden initially  	mMediaCtrl->addObserver( this );		// watch events -	LLViewerMedia::setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID()); +	LLViewerMedia::getInstance()->setOnlyAudibleMediaTextureID(mMediaCtrl->getTextureID());  	mCancelBtn = getChild<LLButton>("cancel_btn");  	mCancelBtn->setClickedCallback(  LLProgressView::onCancelButtonClicked, NULL ); @@ -263,7 +263,7 @@ void LLProgressView::draw()  		{  			mFadeToWorldTimer.stop(); -			LLViewerMedia::setOnlyAudibleMediaTextureID(LLUUID::null); +			LLViewerMedia::getInstance()->setOnlyAudibleMediaTextureID(LLUUID::null);  			// Fade is complete, release focus  			gFocusMgr.releaseFocusIfNeeded( this ); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 0d99b35aee..d3be7c64f8 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -3543,7 +3543,7 @@ bool process_login_success_response()  	if(!openid_url.empty())  	{  		std::string openid_token = response["openid_token"]; -		LLViewerMedia::openIDSetup(openid_url, openid_token); +		LLViewerMedia::getInstance()->openIDSetup(openid_url, openid_token);  	}  	gMaxAgentGroups = DEFAULT_MAX_AGENT_GROUPS; diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 5e04801d85..8c741085b8 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -310,16 +310,18 @@ void LLStatusBar::refresh()  	// update the master volume button state  	bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();  	mBtnVolume->setToggleState(mute_audio); -	 + +	LLViewerMedia* media_inst = LLViewerMedia::getInstance(); +  	// Disable media toggle if there's no media, parcel media, and no parcel audio  	// (or if media is disabled)  	bool button_enabled = (gSavedSettings.getBOOL("AudioStreamingMusic")||gSavedSettings.getBOOL("AudioStreamingMedia")) &&  -						  (LLViewerMedia::hasInWorldMedia() || LLViewerMedia::hasParcelMedia() || LLViewerMedia::hasParcelAudio()); +						  (media_inst->hasInWorldMedia() || media_inst->hasParcelMedia() || media_inst->hasParcelAudio());  	mMediaToggle->setEnabled(button_enabled);  	// Note the "sense" of the toggle is opposite whether media is playing or not -	bool any_media_playing = (LLViewerMedia::isAnyMediaPlaying() ||  -							  LLViewerMedia::isParcelMediaPlaying() || -							  LLViewerMedia::isParcelAudioPlaying()); +	bool any_media_playing = (media_inst->isAnyMediaPlaying() ||  +							  media_inst->isParcelMediaPlaying() || +							  media_inst->isParcelAudioPlaying());  	mMediaToggle->setValue(!any_media_playing);  } @@ -578,7 +580,7 @@ void LLStatusBar::onClickMediaToggle(void* data)  	LLStatusBar *status_bar = (LLStatusBar*)data;  	// "Selected" means it was showing the "play" icon (so media was playing), and now it shows "pause", so turn off media  	bool pause = status_bar->mMediaToggle->getValue(); -	LLViewerMedia::setAllMediaPaused(pause); +	LLViewerMedia::getInstance()->setAllMediaPaused(pause);  }  BOOL can_afford_transaction(S32 cost) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index f184b22ccb..82111cb78a 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -1130,7 +1130,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l  				const LLMediaEntry* mep = has_media ? tep->getMediaData() : NULL;  				if (mep)  				{ -					viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +					viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());  					LLPluginClassMedia* media_plugin = NULL;  					if (media_impl.notNull() && (media_impl->hasMedia())) @@ -1305,7 +1305,7 @@ void LLToolPie::playCurrentMedia(const LLPickInfo& info)  	LLPluginClassMedia* media_plugin = NULL; -	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());  	if(media_impl.notNull() && media_impl->hasMedia())  	{ @@ -1357,7 +1357,7 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info)  	LLPluginClassMedia* media_plugin = NULL; -	viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +	viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());  	if(media_impl.notNull() && media_impl->hasMedia())  	{ @@ -1500,7 +1500,7 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)      if (!mep)          return false; -    viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +    viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());      if (gSavedSettings.getBOOL("MediaOnAPrimUI"))      { @@ -1554,7 +1554,7 @@ bool LLToolPie::handleMediaDblClick(const LLPickInfo& pick)      if (!mep)          return false; -    viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +    viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());      if (gSavedSettings.getBOOL("MediaOnAPrimUI"))      { @@ -1609,7 +1609,7 @@ bool LLToolPie::handleMediaHover(const LLPickInfo& pick)  	if (mep  		&& gSavedSettings.getBOOL("MediaOnAPrimUI"))  	{		 -		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()); +		viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mep->getMediaID());  		if(media_impl.notNull())  		{ @@ -1647,7 +1647,7 @@ bool LLToolPie::handleMediaMouseUp()  	if(mMediaMouseCaptureID.notNull())  	{  		// Face media needs to know the mouse went up. -		viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mMediaMouseCaptureID); +		viewer_media_t media_impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mMediaMouseCaptureID);  		if(media_impl)  		{  			// This will send a mouseUp event to the plugin using the last known mouse coordinate (from a mouseDown or mouseMove), which is what we want. @@ -1676,7 +1676,7 @@ static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp)  	if( face < 0 || face >= objectp->getNumTEs() ) return;  	// is media playing on this face? -	if (LLViewerMedia::getMediaImplFromTextureID(objectp->getTE(face)->getID()) != NULL) +	if (LLViewerMedia::getInstance()->getMediaImplFromTextureID(objectp->getTE(face)->getID()) != NULL)  	{  		handle_click_action_play();  		return; diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 7ce9d858dd..f81c89f898 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -463,7 +463,7 @@ void audio_update_volume(bool force_update)  	F32 media_volume = gSavedSettings.getF32("AudioLevelMedia");  	BOOL media_muted = gSavedSettings.getBOOL("MuteMedia");  	media_volume = mute_volume * master_volume * media_volume; -	LLViewerMedia::setVolume( media_muted ? 0.0f : media_volume ); +	LLViewerMedia::getInstance()->setVolume( media_muted ? 0.0f : media_volume );  	// Voice  	if (LLVoiceClient::getInstance()) diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index d8745b1eca..1e218eef12 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -77,12 +77,6 @@  #include <boost/bind.hpp>	// for SkinFolder listener  #include <boost/signals2.hpp> -/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable"; -/*static*/ const char* LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING = "MediaShowOnOthers"; -/*static*/ const char* LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING = "MediaShowWithinParcel"; -/*static*/ const char* LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING = "MediaShowOutsideParcel"; - -  class LLMediaFilePicker : public LLFilePickerThread // deletes itself when done  {  public: @@ -191,9 +185,6 @@ LLViewerMediaObserver::~LLViewerMediaObserver()  } -LLURL LLViewerMedia::sOpenIDURL; -std::string LLViewerMedia::sOpenIDCookie; -LLPluginClassMedia* LLViewerMedia::sSpareBrowserMediaSource = NULL;  static LLViewerMedia::impl_list sViewerMediaImplList;  static LLViewerMedia::impl_id_map sViewerMediaTextureIDMap;  static LLTimer sMediaCreateTimer; @@ -203,8 +194,6 @@ static bool sForceUpdate = false;  static LLUUID sOnlyAudibleTextureID = LLUUID::null;  static F64 sLowestLoadableImplInterest = 0.0f;  static bool sAnyMediaShowing = false; -static bool sAnyMediaPlaying = false; -static boost::signals2::connection sTeleportFinishConnection;  //////////////////////////////////////////////////////////////////////////////////////////  static void add_media_impl(LLViewerMediaImpl* media) @@ -230,7 +219,7 @@ static void remove_media_impl(LLViewerMediaImpl* media)  class LLViewerMediaMuteListObserver : public LLMuteListObserver  { -	/* virtual */ void onChange()  { LLViewerMedia::muteListChanged();} +	/* virtual */ void onChange()  { LLViewerMedia::getInstance()->muteListChanged();}  };  static LLViewerMediaMuteListObserver sViewerMediaMuteListObserver; @@ -239,9 +228,40 @@ static bool sViewerMediaMuteListObserverInitialized = false;  //////////////////////////////////////////////////////////////////////////////////////////  // LLViewerMedia -  ////////////////////////////////////////////////////////////////////////////////////////// + +/*static*/ const char* LLViewerMedia::AUTO_PLAY_MEDIA_SETTING = "ParcelMediaAutoPlayEnable"; +/*static*/ const char* LLViewerMedia::SHOW_MEDIA_ON_OTHERS_SETTING = "MediaShowOnOthers"; +/*static*/ const char* LLViewerMedia::SHOW_MEDIA_WITHIN_PARCEL_SETTING = "MediaShowWithinParcel"; +/*static*/ const char* LLViewerMedia::SHOW_MEDIA_OUTSIDE_PARCEL_SETTING = "MediaShowOutsideParcel"; + +LLViewerMedia::LLViewerMedia(): +mAnyMediaShowing(false), +mAnyMediaPlaying(false), +mSpareBrowserMediaSource(NULL) +{ +} + +LLViewerMedia::~LLViewerMedia() +{ +    gIdleCallbacks.deleteFunction(LLViewerMedia::onIdle, NULL); +    mTeleportFinishConnection.disconnect(); +    if (mSpareBrowserMediaSource != NULL) +    { +        delete mSpareBrowserMediaSource; +        mSpareBrowserMediaSource = NULL; +    } +} +  // static +void LLViewerMedia::initSingleton() +{ +    gIdleCallbacks.addFunction(LLViewerMedia::onIdle, NULL); +    mTeleportFinishConnection = LLViewerParcelMgr::getInstance()-> +        setTeleportFinishedCallback(boost::bind(&LLViewerMedia::onTeleportFinished, this)); +} + +//////////////////////////////////////////////////////////////////////////////////////////  viewer_media_t LLViewerMedia::newMediaImpl(  											 const LLUUID& texture_id,  											 S32 media_width, @@ -368,7 +388,6 @@ viewer_media_t LLViewerMedia::updateMediaImpl(LLMediaEntry* media_entry, const s  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  LLViewerMediaImpl* LLViewerMedia::getMediaImplFromTextureID(const LLUUID& texture_id)  {  	LLViewerMediaImpl* result = NULL; @@ -384,7 +403,6 @@ LLViewerMediaImpl* LLViewerMedia::getMediaImplFromTextureID(const LLUUID& textur  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  std::string LLViewerMedia::getCurrentUserAgent()  {  	// Don't use user-visible string to avoid @@ -411,7 +429,6 @@ std::string LLViewerMedia::getCurrentUserAgent()  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::updateBrowserUserAgent()  {  	std::string user_agent = getCurrentUserAgent(); @@ -431,7 +448,6 @@ void LLViewerMedia::updateBrowserUserAgent()  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::handleSkinCurrentChanged(const LLSD& /*newvalue*/)  {  	// gSavedSettings is already updated when this function is called. @@ -440,7 +456,6 @@ bool LLViewerMedia::handleSkinCurrentChanged(const LLSD& /*newvalue*/)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)  {  	impl_list::iterator iter = sViewerMediaImplList.begin(); @@ -458,7 +473,6 @@ bool LLViewerMedia::textureHasMedia(const LLUUID& texture_id)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setVolume(F32 volume)  {  	if(volume != sGlobalVolume || sForceUpdate) @@ -478,14 +492,12 @@ void LLViewerMedia::setVolume(F32 volume)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  F32 LLViewerMedia::getVolume()  {  	return sGlobalVolume;  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::muteListChanged()  {  	// When the mute list changes, we need to check mute status on all impls. @@ -500,7 +512,6 @@ void LLViewerMedia::muteListChanged()  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::isInterestingEnough(const LLVOVolume *object, const F64 &object_interest)  {  	bool result = false; @@ -535,6 +546,7 @@ LLViewerMedia::impl_list &LLViewerMedia::getPriorityList()  	return sViewerMediaImplList;  } +// static  // This is the predicate function used to sort sViewerMediaImplList by priority.  bool LLViewerMedia::priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2)  { @@ -629,7 +641,12 @@ static LLTrace::BlockTimerStatHandle FTM_MEDIA_MISC("Misc");  ////////////////////////////////////////////////////////////////////////////////////////// -// static +void LLViewerMedia::onIdle(void *dummy_arg) +{ +    LLViewerMedia::getInstance()->updateMedia(dummy_arg); +} + +//////////////////////////////////////////////////////////////////////////////////////////  void LLViewerMedia::updateMedia(void *dummy_arg)  {  	LL_RECORD_BLOCK_TIME(FTM_MEDIA_UPDATE); @@ -642,8 +659,8 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  	// removing it for now.  	//createSpareBrowserMediaSource(); -	sAnyMediaShowing = false; -	sAnyMediaPlaying = false; +	mAnyMediaShowing = false; +	mAnyMediaPlaying = false;  	impl_list::iterator iter = sViewerMediaImplList.begin();  	impl_list::iterator end = sViewerMediaImplList.end(); @@ -659,10 +676,10 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  	}  	// Let the spare media source actually launch -	if(sSpareBrowserMediaSource) +	if(mSpareBrowserMediaSource)  	{  		LL_RECORD_BLOCK_TIME(FTM_MEDIA_SPARE_IDLE); -		sSpareBrowserMediaSource->idle(); +		mSpareBrowserMediaSource->idle();  	}  	{ @@ -854,7 +871,7 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  			if (!pimpl->getUsedInUI() && pimpl->hasMedia() && (pimpl->isMediaPlaying() || !pimpl->isMediaTimeBased()))  			{  				// consider visible non-timebased media as playing -				sAnyMediaPlaying = true; +				mAnyMediaPlaying = true;  			}  		} @@ -899,21 +916,18 @@ void LLViewerMedia::updateMedia(void *dummy_arg)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::isAnyMediaShowing()  { -	return sAnyMediaShowing; +	return mAnyMediaShowing;  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::isAnyMediaPlaying()  { -    return sAnyMediaPlaying; +    return mAnyMediaPlaying;  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setAllMediaEnabled(bool val)  {  	// Set "tentative" autoplay first.  We need to do this here or else @@ -969,7 +983,6 @@ void LLViewerMedia::setAllMediaEnabled(bool val)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setAllMediaPaused(bool val)  {      // Set "tentative" autoplay first.  We need to do this here or else @@ -1041,19 +1054,24 @@ void LLViewerMedia::setAllMediaPaused(bool val)  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::isParcelMediaPlaying()  {  	return (LLViewerMedia::hasParcelMedia() && LLViewerParcelMedia::getParcelMedia() && LLViewerParcelMedia::getParcelMedia()->hasMedia());  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::isParcelAudioPlaying()  {  	return (LLViewerMedia::hasParcelAudio() && gAudiop && LLAudioEngine::AUDIO_PLAYING == gAudiop->isInternetStreamPlaying());  } +///////////////////////////////////////////////////////////////////////////////////////// +// static +void LLViewerMedia::authSubmitCallback(const LLSD& notification, const LLSD& response) +{ +    LLViewerMedia::getInstance()->onAuthSubmit(notification, response); +} +  void LLViewerMedia::onAuthSubmit(const LLSD& notification, const LLSD& response)  {  	LLViewerMediaImpl *impl = LLViewerMedia::getMediaImplFromTextureID(notification["payload"]["media_id"]); @@ -1075,7 +1093,6 @@ void LLViewerMedia::onAuthSubmit(const LLSD& notification, const LLSD& response)  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::clearAllCookies()  {  	// Clear all cookies for all plugins @@ -1092,7 +1109,6 @@ void LLViewerMedia::clearAllCookies()  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::clearAllCaches()  {  	// Clear all plugins' caches @@ -1106,7 +1122,6 @@ void LLViewerMedia::clearAllCaches()  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setCookiesEnabled(bool enabled)  {  	// Set the "cookies enabled" flag for all loaded plugins @@ -1123,7 +1138,6 @@ void LLViewerMedia::setCookiesEnabled(bool enabled)  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int port)  {  	// Set the proxy config for all loaded plugins @@ -1140,10 +1154,6 @@ void LLViewerMedia::setProxyConfig(bool enable, const std::string &host, int por  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static -///////////////////////////////////////////////////////////////////////////////////////// -//// static -  LLSD LLViewerMedia::getHeaders()  {  	LLSD headers = LLSD::emptyMap(); @@ -1151,14 +1161,13 @@ LLSD LLViewerMedia::getHeaders()  	// *TODO: Should this be 'application/llsd+xml' ?  	// *TODO: Should this even be set at all?   This header is only not overridden in 'GET' methods.  	headers[HTTP_OUT_HEADER_CONTENT_TYPE] = HTTP_CONTENT_XML; -	headers[HTTP_OUT_HEADER_COOKIE] = sOpenIDCookie; +	headers[HTTP_OUT_HEADER_COOKIE] = mOpenIDCookie;  	headers[HTTP_OUT_HEADER_USER_AGENT] = getCurrentUserAgent();  	return headers;  }   ///////////////////////////////////////////////////////////////////////////////////////// - // static  bool LLViewerMedia::parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure)  {  	std::size_t name_pos = raw_cookie.find_first_of("="); @@ -1181,13 +1190,14 @@ bool LLViewerMedia::parseRawCookie(const std::string raw_cookie, std::string& na  	return false;  } +/////////////////////////////////////////////////////////////////////////////////////////  LLCore::HttpHeaders::ptr_t LLViewerMedia::getHttpHeaders()  {      LLCore::HttpHeaders::ptr_t headers(new LLCore::HttpHeaders);      headers->append(HTTP_OUT_HEADER_ACCEPT, "*/*");      headers->append(HTTP_OUT_HEADER_CONTENT_TYPE, HTTP_CONTENT_XML); -    headers->append(HTTP_OUT_HEADER_COOKIE, sOpenIDCookie); +    headers->append(HTTP_OUT_HEADER_COOKIE, mOpenIDCookie);      headers->append(HTTP_OUT_HEADER_USER_AGENT, getCurrentUserAgent());      return headers; @@ -1195,10 +1205,9 @@ LLCore::HttpHeaders::ptr_t LLViewerMedia::getHttpHeaders()  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setOpenIDCookie(const std::string& url)  { -	if(!sOpenIDCookie.empty()) +	if(!mOpenIDCookie.empty())  	{          std::string profileUrl = getProfileURL(""); @@ -1207,7 +1216,7 @@ void LLViewerMedia::setOpenIDCookie(const std::string& url)  	}  } -/*static*/ +//static  void LLViewerMedia::getOpenIDCookieCoro(std::string url)  {      LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); @@ -1229,7 +1238,7 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)      // The LLURL can give me the 'authority', which is of the form: [username[:password]@]hostname[:port]      // We want just the hostname for the cookie code, but LLURL doesn't seem to have a way to extract that.      // We therefore do it here. -    std::string authority = sOpenIDURL.mAuthority; +    std::string authority = getInstance()->mOpenIDURL.mAuthority;      std::string::size_type hostStart = authority.find('@');      if (hostStart == std::string::npos)      {   // no username/password @@ -1246,7 +1255,8 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)      {   // no port          hostEnd = authority.size();      } - +     +	LLViewerMedia* inst = getInstance();  	if (url.length())  	{  		LLMediaCtrl* media_instance = LLFloaterReg::getInstance("destinations")->getChild<LLMediaCtrl>("destination_guide_contents"); @@ -1258,8 +1268,8 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)  			std::string cookie_path = "";  			bool httponly = true;  			bool secure = true; -			if (parseRawCookie(sOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) && -                media_instance->getMediaPlugin()) +			if (inst->parseRawCookie(inst->mOpenIDCookie, cookie_name, cookie_value, cookie_path, httponly, secure) && +				media_instance->getMediaPlugin())  			{  				// MAINT-5711 - inexplicably, the CEF setCookie function will no longer set the cookie if the   				// url and domain are not the same. This used to be my.sl.com and id.sl.com respectively and worked. @@ -1268,7 +1278,7 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)  				// (Feels like there must be a less dirty way to construct a URL from component LLURL parts)  				// MAINT-6392 - Rider: Do not change, however, the original URI requested, since it is used further  				// down. -                std::string cefUrl(std::string(sOpenIDURL.mURI) + "://" + std::string(sOpenIDURL.mAuthority)); +				std::string cefUrl(std::string(inst->mOpenIDURL.mURI) + "://" + std::string(inst->mOpenIDURL.mAuthority));  				media_instance->getMediaPlugin()->setCookie(cefUrl, cookie_name, cookie_value, cookie_host, cookie_path, httponly, secure);  			} @@ -1281,11 +1291,11 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)  	// Do a web profile get so we can store the cookie       httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*"); -    httpHeaders->append(HTTP_OUT_HEADER_COOKIE, sOpenIDCookie); -    httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, getCurrentUserAgent()); +    httpHeaders->append(HTTP_OUT_HEADER_COOKIE, inst->mOpenIDCookie); +    httpHeaders->append(HTTP_OUT_HEADER_USER_AGENT, inst->getCurrentUserAgent());      LL_DEBUGS("MediaAuth") << "Requesting " << url << LL_ENDL; -    LL_DEBUGS("MediaAuth") << "sOpenIDCookie = [" << sOpenIDCookie << "]" << LL_ENDL; +    LL_DEBUGS("MediaAuth") << "sOpenIDCookie = [" << inst->mOpenIDCookie << "]" << LL_ENDL;      LLSD result = httpAdapter->getRawAndSuspend(httpRequest, url, httpOpts, httpHeaders); @@ -1314,7 +1324,6 @@ void LLViewerMedia::getOpenIDCookieCoro(std::string url)  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::openIDSetup(const std::string &openidUrl, const std::string &openidToken)  {  	LL_DEBUGS("MediaAuth") << "url = \"" << openidUrl << "\", token = \"" << openidToken << "\"" << LL_ENDL; @@ -1323,7 +1332,6 @@ void LLViewerMedia::openIDSetup(const std::string &openidUrl, const std::string          boost::bind(&LLViewerMedia::openIDSetupCoro, openidUrl, openidToken));  } -/*static*/  void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidToken)  {      LLCore::HttpRequest::policy_t httpPolicy(LLCore::HttpRequest::DEFAULT_POLICY_ID); @@ -1338,10 +1346,10 @@ void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidTok  	// post the token to the url       // the responder will need to extract the cookie(s).      // Save the OpenID URL for later -- we may need the host when adding the cookie. -    sOpenIDURL.init(openidUrl.c_str()); +    getInstance()->mOpenIDURL.init(openidUrl.c_str());      // We shouldn't ever do this twice, but just in case this code gets repurposed later, clear existing cookies. -    sOpenIDCookie.clear(); +    getInstance()->mOpenIDCookie.clear();      httpHeaders->append(HTTP_OUT_HEADER_ACCEPT, "*/*");      httpHeaders->append(HTTP_OUT_HEADER_CONTENT_TYPE, "application/x-www-form-urlencoded"); @@ -1373,24 +1381,22 @@ void LLViewerMedia::openIDSetupCoro(std::string openidUrl, std::string openidTok      const std::string& cookie = resultHeaders[HTTP_IN_HEADER_SET_COOKIE].asString();  	// *TODO: What about bad status codes?  Does this destroy previous cookies? -    LLViewerMedia::openIDCookieResponse(openidUrl, cookie); +    LLViewerMedia::getInstance()->openIDCookieResponse(openidUrl, cookie);      LL_DEBUGS("MediaAuth") << "OpenID cookie set." << LL_ENDL;  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::openIDCookieResponse(const std::string& url, const std::string &cookie)  {  	LL_DEBUGS("MediaAuth") << "Cookie received: \"" << cookie << "\"" << LL_ENDL; -	sOpenIDCookie += cookie; +	mOpenIDCookie += cookie;  	setOpenIDCookie(url);  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::string &uuid)  {  	if(uuid.empty()) @@ -1406,7 +1412,6 @@ void LLViewerMedia::proxyWindowOpened(const std::string &target, const std::stri  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::proxyWindowClosed(const std::string &uuid)  {  	if(uuid.empty()) @@ -1422,28 +1427,26 @@ void LLViewerMedia::proxyWindowClosed(const std::string &uuid)  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::createSpareBrowserMediaSource()  {  	// If we don't have a spare browser media source, create one.  	// However, if PluginAttachDebuggerToPlugins is set then don't spawn a spare  	// SLPlugin process in order to not be confused by an unrelated gdb terminal  	// popping up at the moment we start a media plugin. -	if (!sSpareBrowserMediaSource && !gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins")) +	if (!mSpareBrowserMediaSource && !gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins"))  	{  		// The null owner will keep the browser plugin from fully initializing  		// (specifically, it keeps LLPluginClassMedia from negotiating a size change,  		// which keeps MediaPluginWebkit::initBrowserWindow from doing anything until we have some necessary data, like the background color) -		sSpareBrowserMediaSource = LLViewerMediaImpl::newSourceFromMediaType(HTTP_CONTENT_TEXT_HTML, NULL, 0, 0, 1.0); +		mSpareBrowserMediaSource = LLViewerMediaImpl::newSourceFromMediaType(HTTP_CONTENT_TEXT_HTML, NULL, 0, 0, 1.0);  	}  }  ///////////////////////////////////////////////////////////////////////////////////////// -// static  LLPluginClassMedia* LLViewerMedia::getSpareBrowserMediaSource()  { -	LLPluginClassMedia* result = sSpareBrowserMediaSource; -	sSpareBrowserMediaSource = NULL; +	LLPluginClassMedia* result = mSpareBrowserMediaSource; +	mSpareBrowserMediaSource = NULL;  	return result;  }; @@ -1465,50 +1468,24 @@ bool LLViewerMedia::hasInWorldMedia()  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::hasParcelMedia()  {  	return !LLViewerParcelMedia::getURL().empty();  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  bool LLViewerMedia::hasParcelAudio()  {  	return !LLViewerMedia::getParcelAudioURL().empty();  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static  std::string LLViewerMedia::getParcelAudioURL()  {  	return LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL();  }  ////////////////////////////////////////////////////////////////////////////////////////// -// static -void LLViewerMedia::initClass() -{ -	gIdleCallbacks.addFunction(LLViewerMedia::updateMedia, NULL); -	sTeleportFinishConnection = LLViewerParcelMgr::getInstance()-> -		setTeleportFinishedCallback(boost::bind(&LLViewerMedia::onTeleportFinished)); -} - -////////////////////////////////////////////////////////////////////////////////////////// -// static -void LLViewerMedia::cleanupClass() -{ -	gIdleCallbacks.deleteFunction(LLViewerMedia::updateMedia, NULL); -	sTeleportFinishConnection.disconnect(); -	if (sSpareBrowserMediaSource != NULL) -	{ -		delete sSpareBrowserMediaSource; -		sSpareBrowserMediaSource = NULL; -	} -} - -////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::onTeleportFinished()  {  	// On teleport, clear this setting (i.e. set it to true) @@ -1517,9 +1494,7 @@ void LLViewerMedia::onTeleportFinished()  	LLViewerMediaImpl::sMimeTypesFailed.clear();  } -  ////////////////////////////////////////////////////////////////////////////////////////// -// static  void LLViewerMedia::setOnlyAudibleMediaTextureID(const LLUUID& texture_id)  {  	sOnlyAudibleTextureID = texture_id; @@ -1711,7 +1686,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_  	if ((plugin_basename == "media_plugin_cef") &&          !gSavedSettings.getBOOL("PluginAttachDebuggerToPlugins") && !clean_browser)  	{ -		media_source = LLViewerMedia::getSpareBrowserMediaSource(); +		media_source = LLViewerMedia::getInstance()->getSpareBrowserMediaSource();  		if(media_source)  		{  			media_source->setOwner(owner); @@ -1787,7 +1762,7 @@ LLPluginClassMedia* LLViewerMediaImpl::newSourceFromMediaType(std::string media_  			media_source->enableMediaPluginDebugging( media_plugin_debugging_enabled  || clean_browser);  			// need to set agent string here before instance created -			media_source->setBrowserUserAgent(LLViewerMedia::getCurrentUserAgent()); +			media_source->setBrowserUserAgent(LLViewerMedia::getInstance()->getCurrentUserAgent());  			media_source->setTarget(target); @@ -1858,7 +1833,7 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)  		media_source->setDisableTimeout(gSavedSettings.getBOOL("DebugPluginDisableTimeout"));  		media_source->setLoop(mMediaLoop);  		media_source->setAutoScale(mMediaAutoScale); -		media_source->setBrowserUserAgent(LLViewerMedia::getCurrentUserAgent()); +		media_source->setBrowserUserAgent(LLViewerMedia::getInstance()->getCurrentUserAgent());  		media_source->focus(mHasFocus);  		media_source->setBackgroundColor(mBackgroundColor); @@ -2104,7 +2079,7 @@ void LLViewerMediaImpl::updateVolume()  	if(mMediaSource)  	{  		// always scale the volume by the global media volume -		F32 volume = mRequestedVolume * LLViewerMedia::getVolume(); +		F32 volume = mRequestedVolume * LLViewerMedia::getInstance()->getVolume();  		if (mProximityCamera > 0)  		{ @@ -3378,7 +3353,7 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  			auth_request_params.substitutions = args;  			auth_request_params.payload = LLSD().with("media_id", mTextureId); -			auth_request_params.functor.function = boost::bind(&LLViewerMedia::onAuthSubmit, _1, _2); +			auth_request_params.functor.function = boost::bind(&LLViewerMedia::authSubmitCallback, _1, _2);  			LLNotifications::instance().add(auth_request_params);  		};  		break; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index e2e758befb..014f9048f0 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -70,11 +70,14 @@ private:  class LLViewerMediaImpl; -class LLViewerMedia +class LLViewerMedia: public LLSingleton<LLViewerMedia>  { +	LLSINGLETON(LLViewerMedia); +	~LLViewerMedia(); +	void initSingleton();  	LOG_CLASS(LLViewerMedia); +  public: -	  	// String to get/set media autoplay in gSavedSettings  	static const char* AUTO_PLAY_MEDIA_SETTING;  	static const char* SHOW_MEDIA_ON_OTHERS_SETTING; @@ -88,91 +91,93 @@ public:  	// Special case early init for just web browser component  	// so we can show login screen.  See .cpp file for details. JC -	static viewer_media_t newMediaImpl(const LLUUID& texture_id, +	viewer_media_t newMediaImpl(const LLUUID& texture_id,  									   S32 media_width = 0,   									   S32 media_height = 0,   									   U8 media_auto_scale = false,  									   U8 media_loop = false); -	static viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self); -	static LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id); -	static std::string getCurrentUserAgent(); -	static void updateBrowserUserAgent(); -	static bool handleSkinCurrentChanged(const LLSD& /*newvalue*/); -	static bool textureHasMedia(const LLUUID& texture_id); -	static void setVolume(F32 volume); +	viewer_media_t updateMediaImpl(LLMediaEntry* media_entry, const std::string& previous_url, bool update_from_self); +	LLViewerMediaImpl* getMediaImplFromTextureID(const LLUUID& texture_id); +	std::string getCurrentUserAgent(); +	void updateBrowserUserAgent(); +	bool handleSkinCurrentChanged(const LLSD& /*newvalue*/); +	bool textureHasMedia(const LLUUID& texture_id); +	void setVolume(F32 volume);  	// Is any media currently "showing"?  Includes Parcel Media.  Does not include media in the UI. -	static bool isAnyMediaShowing(); +	bool isAnyMediaShowing();  	// Shows if any media is playing, counts visible non time based media as playing. Does not include media in the UI. -	static bool isAnyMediaPlaying(); +	bool isAnyMediaPlaying();  	// Set all media enabled or disabled, depending on val.   Does not include media in the UI. -	static void setAllMediaEnabled(bool val); +	void setAllMediaEnabled(bool val);  	// Set all media paused(stopped for non time based) or playing, depending on val.   Does not include media in the UI. -	static void setAllMediaPaused(bool val); +	void setAllMediaPaused(bool val); -	static void updateMedia(void* dummy_arg = NULL); -	 -	static void initClass(); -	static void cleanupClass(); -	 -	static F32 getVolume();	 -	static void muteListChanged(); -	static bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest); +	static void onIdle(void* dummy_arg = NULL); // updateMedia wrapper +	void updateMedia(void* dummy_arg = NULL); + +	F32 getVolume();	 +	void muteListChanged(); +	bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);  	// Returns the priority-sorted list of all media impls. -	static impl_list &getPriorityList(); +	impl_list &getPriorityList();  	// This is the comparitor used to sort the list.  	static bool priorityComparitor(const LLViewerMediaImpl* i1, const LLViewerMediaImpl* i2);  	// These are just helper functions for the convenience of others working with media -	static bool hasInWorldMedia(); -	static std::string getParcelAudioURL(); -	static bool hasParcelMedia(); -	static bool hasParcelAudio(); -	static bool isParcelMediaPlaying(); -	static bool isParcelAudioPlaying(); -	 -	static void onAuthSubmit(const LLSD& notification, const LLSD& response); +	bool hasInWorldMedia(); +	std::string getParcelAudioURL(); +	bool hasParcelMedia(); +	bool hasParcelAudio(); +	bool isParcelMediaPlaying(); +	bool isParcelAudioPlaying(); + +	static void authSubmitCallback(const LLSD& notification, const LLSD& response);  	// Clear all cookies for all plugins -	static void clearAllCookies(); +	void clearAllCookies();  	// Clear all plugins' caches -	static void clearAllCaches(); +	void clearAllCaches();  	// Set the "cookies enabled" flag for all loaded plugins -	static void setCookiesEnabled(bool enabled); +	void setCookiesEnabled(bool enabled);  	// Set the proxy config for all loaded plugins -	static void setProxyConfig(bool enable, const std::string &host, int port); +	void setProxyConfig(bool enable, const std::string &host, int port); -	static void openIDSetup(const std::string &openid_url, const std::string &openid_token); -	static void openIDCookieResponse(const std::string& url, const std::string &cookie); +	void openIDSetup(const std::string &openid_url, const std::string &openid_token); +	void openIDCookieResponse(const std::string& url, const std::string &cookie); -	static void proxyWindowOpened(const std::string &target, const std::string &uuid); -	static void proxyWindowClosed(const std::string &uuid); +	void proxyWindowOpened(const std::string &target, const std::string &uuid); +	void proxyWindowClosed(const std::string &uuid); -	static void createSpareBrowserMediaSource(); -	static LLPluginClassMedia* getSpareBrowserMediaSource(); +	void createSpareBrowserMediaSource(); +	LLPluginClassMedia* getSpareBrowserMediaSource(); -	static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id); +	void setOnlyAudibleMediaTextureID(const LLUUID& texture_id); -	static LLSD getHeaders(); -    static LLCore::HttpHeaders::ptr_t getHttpHeaders(); +	LLSD getHeaders(); +	LLCore::HttpHeaders::ptr_t getHttpHeaders();  private: -	static bool parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure); -	static void setOpenIDCookie(const std::string& url); -	static void onTeleportFinished(); - -    static void openIDSetupCoro(std::string openidUrl, std::string openidToken); -    static void getOpenIDCookieCoro(std::string url); - -	static LLURL sOpenIDURL; -	static std::string sOpenIDCookie; -	static LLPluginClassMedia* sSpareBrowserMediaSource; +	void onAuthSubmit(const LLSD& notification, const LLSD& response); +	bool parseRawCookie(const std::string raw_cookie, std::string& name, std::string& value, std::string& path, bool& httponly, bool& secure); +	void setOpenIDCookie(const std::string& url); +	void onTeleportFinished(); + +	static void openIDSetupCoro(std::string openidUrl, std::string openidToken); +	static void getOpenIDCookieCoro(std::string url); + +	bool mAnyMediaShowing; +	bool mAnyMediaPlaying; +	LLURL mOpenIDURL; +	std::string mOpenIDCookie; +	LLPluginClassMedia* mSpareBrowserMediaSource; +	boost::signals2::connection mTeleportFinishConnection;  };  // Implementation functions not exported into header file diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp index 59165c1d71..1ac313f955 100644 --- a/indra/newview/llviewermediafocus.cpp +++ b/indra/newview/llviewermediafocus.cpp @@ -537,7 +537,7 @@ bool LLViewerMediaFocus::isHoveringOverFace(LLPointer<LLViewerObject> objectp, S  LLViewerMediaImpl* LLViewerMediaFocus::getFocusedMediaImpl()  { -	return LLViewerMedia::getMediaImplFromTextureID(mFocusedImplID); +	return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mFocusedImplID);  }  LLViewerObject* LLViewerMediaFocus::getFocusedObject() @@ -547,7 +547,7 @@ LLViewerObject* LLViewerMediaFocus::getFocusedObject()  LLViewerMediaImpl* LLViewerMediaFocus::getHoverMediaImpl()  { -	return LLViewerMedia::getMediaImplFromTextureID(mHoverImplID); +	return LLViewerMedia::getInstance()->getMediaImplFromTextureID(mHoverImplID);  }  LLViewerObject* LLViewerMediaFocus::getHoverObject() @@ -557,7 +557,7 @@ LLViewerObject* LLViewerMediaFocus::getHoverObject()  void LLViewerMediaFocus::focusZoomOnMedia(LLUUID media_id)  { -	LLViewerMediaImpl* impl = LLViewerMedia::getMediaImplFromTextureID(media_id); +	LLViewerMediaImpl* impl = LLViewerMedia::getInstance()->getMediaImplFromTextureID(media_id);  	if(impl)  	{	 diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp index d31fc0d606..cbc276b7e2 100644 --- a/indra/newview/llviewerparcelmedia.cpp +++ b/indra/newview/llviewerparcelmedia.cpp @@ -213,7 +213,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)  			LL_DEBUGS("Media") << "new media impl with mime type " << mime_type << ", url " << media_url << LL_ENDL;  			// There is no media impl, make a new one -			sMediaImpl = LLViewerMedia::newMediaImpl( +			sMediaImpl = LLViewerMedia::getInstance()->newMediaImpl(  				placeholder_texture_id,  				media_width,   				media_height,  diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 68a9994bee..f39275af21 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -3454,7 +3454,7 @@ void LLViewerMediaTexture::setMediaImpl()  {  	if(!mMediaImplp)  	{ -		mMediaImplp = LLViewerMedia::getMediaImplFromTextureID(mID); +		mMediaImplp = LLViewerMedia::getInstance()->getMediaImplFromTextureID(mID);  	}  } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 3793d6b9b2..88058c28a6 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -188,7 +188,7 @@ public:  	virtual bool isInterestingEnough() const  		{ -			return LLViewerMedia::isInterestingEnough(mObject, getMediaInterest()); +			return LLViewerMedia::getInstance()->isInterestingEnough(mObject, getMediaInterest());  		}  	virtual std::string getCapabilityUrl(const std::string &name) const @@ -2698,7 +2698,7 @@ void LLVOVolume::syncMediaData(S32 texture_index, const LLSD &media_data, bool m  			LLUUID updating_agent = LLTextureEntry::getAgentIDFromMediaVersionString(getMediaURL());  			update_from_self = (updating_agent == gAgent.getID());  		} -		viewer_media_t media_impl = LLViewerMedia::updateMediaImpl(mep, previous_url, update_from_self); +		viewer_media_t media_impl = LLViewerMedia::getInstance()->updateMediaImpl(mep, previous_url, update_from_self);  		addMediaImpl(media_impl, texture_index) ;  	} diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp index 61ec02957e..0cdc7f0d88 100644 --- a/indra/newview/llweb.cpp +++ b/indra/newview/llweb.cpp @@ -121,7 +121,7 @@ void LLWeb::loadURLExternal(const std::string& url, const std::string& uuid)  void LLWeb::loadURLExternal(const std::string& url, bool async, const std::string& uuid)  {  	// Act like the proxy window was closed, since we won't be able to track targeted windows in the external browser. -	LLViewerMedia::proxyWindowClosed(uuid); +	LLViewerMedia::getInstance()->proxyWindowClosed(uuid);  	if(gSavedSettings.getBOOL("DisableExternalBrowser"))  	{ diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp index 8dcef2c7cd..569f479a16 100644 --- a/indra/newview/llwebprofile.cpp +++ b/indra/newview/llwebprofile.cpp @@ -83,7 +83,7 @@ void LLWebProfile::setAuthCookie(const std::string& cookie)  LLCore::HttpHeaders::ptr_t LLWebProfile::buildDefaultHeaders()  {      LLCore::HttpHeaders::ptr_t httpHeaders(new LLCore::HttpHeaders); -    LLSD headers = LLViewerMedia::getHeaders(); +    LLSD headers = LLViewerMedia::getInstance()->getHeaders();      for (LLSD::map_iterator it = headers.beginMap(); it != headers.endMap(); ++it)      { | 
