diff options
| -rw-r--r-- | indra/newview/llviewermedia.cpp | 33 | ||||
| -rw-r--r-- | indra/newview/llviewermedia.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 16 | 
3 files changed, 42 insertions, 9 deletions
| diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 178d928f57..55f180c0d9 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -2916,14 +2916,23 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  		{  			LL_DEBUGS("Media") << "MEDIA_EVENT_NAVIGATE_COMPLETE, uri is: " << plugin->getNavigateURI() << LL_ENDL; +			std::string url = plugin->getNavigateURI();  			if(getNavState() == MEDIANAVSTATE_BEGUN)  			{ -				mCurrentMediaURL = plugin->getNavigateURI(); -				setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED); +				if(mCurrentMediaURL == url) +				{ +					// This is a navigate that takes us to the same url as the previous navigate. +					setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS); +				} +				else +				{ +					mCurrentMediaURL = url; +					setNavState(MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED); +				}  			}  			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)  			{ -				mCurrentMediaURL = plugin->getNavigateURI(); +				mCurrentMediaURL = url;  				setNavState(MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED);  			}  			else @@ -2937,14 +2946,24 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla  		{  			LL_DEBUGS("Media") << "MEDIA_EVENT_LOCATION_CHANGED, uri is: " << plugin->getLocation() << LL_ENDL; +			std::string url = plugin->getLocation(); +  			if(getNavState() == MEDIANAVSTATE_BEGUN)  			{ -				mCurrentMediaURL = plugin->getLocation(); -				setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED); +				if(mCurrentMediaURL == url) +				{ +					// This is a navigate that takes us to the same url as the previous navigate. +					setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS); +				} +				else +				{ +					mCurrentMediaURL = url; +					setNavState(MEDIANAVSTATE_FIRST_LOCATION_CHANGED); +				}  			}  			else if(getNavState() == MEDIANAVSTATE_SERVER_BEGUN)  			{ -				mCurrentMediaURL = plugin->getLocation(); +				mCurrentMediaURL = url;  				setNavState(MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED);  			}  			else @@ -3223,7 +3242,9 @@ void LLViewerMediaImpl::setNavState(EMediaNavState state)  		case MEDIANAVSTATE_NONE: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_NONE" << llendl; break;  		case MEDIANAVSTATE_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_BEGUN" << llendl; break;  		case MEDIANAVSTATE_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED" << llendl; break; +		case MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS" << llendl; break;  		case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED" << llendl; break; +		case MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS" << llendl; break;  		case MEDIANAVSTATE_SERVER_SENT: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_SENT" << llendl; break;  		case MEDIANAVSTATE_SERVER_BEGUN: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_BEGUN" << llendl; break;  		case MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED: LL_DEBUGS("Media") << "Setting nav state to MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED" << llendl; break; diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index ef9c07c6c7..f75f24fbf5 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -362,7 +362,9 @@ public:  		MEDIANAVSTATE_NONE,										// State is outside what we need to track for navigation.  		MEDIANAVSTATE_BEGUN,									// a MEDIA_EVENT_NAVIGATE_BEGIN has been received which was not server-directed  		MEDIANAVSTATE_FIRST_LOCATION_CHANGED,					// first LOCATION_CHANGED event after a non-server-directed BEGIN +		MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS,			// Same as above, but the new URL is identical to the previously navigated URL.  		MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED,			// we received a NAVIGATE_COMPLETE event before the first LOCATION_CHANGED +		MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS,// Same as above, but the new URL is identical to the previously navigated URL.  		MEDIANAVSTATE_SERVER_SENT,								// server-directed nav has been requested, but MEDIA_EVENT_NAVIGATE_BEGIN hasn't been received yet  		MEDIANAVSTATE_SERVER_BEGUN,								// MEDIA_EVENT_NAVIGATE_BEGIN has been received which was server-directed  		MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED,			// first LOCATION_CHANGED event after a server-directed BEGIN diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 00d67a4ea9..a75ab95622 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2082,14 +2082,19 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin,  				}  				break; +				case LLViewerMediaImpl::MEDIANAVSTATE_FIRST_LOCATION_CHANGED_SPURIOUS: +					// This navigate didn't change the current URL.   +					LL_DEBUGS("MediaOnAPrim") << "	NOT broadcasting navigate (spurious)" << LL_ENDL; +				break; +				  				case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_FIRST_LOCATION_CHANGED:  					// This is the first location changed event after the start of a server-directed nav.  Don't broadcast it. -					llinfos << "	NOT broadcasting navigate (server-directed)" << llendl; +					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (server-directed)" << LL_ENDL;  				break;  				default:  					// This is a subsequent location-changed due to a redirect.	 Don't broadcast. -					llinfos << "	NOT broadcasting navigate (redirect)" << llendl; +					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (redirect)" << LL_ENDL;  				break;  			}  		} @@ -2106,9 +2111,14 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin,  				}  				break; +				case LLViewerMediaImpl::MEDIANAVSTATE_COMPLETE_BEFORE_LOCATION_CHANGED_SPURIOUS: +					// This navigate didn't change the current URL.   +					LL_DEBUGS("MediaOnAPrim") << "	NOT broadcasting navigate (spurious)" << LL_ENDL; +				break; +  				case LLViewerMediaImpl::MEDIANAVSTATE_SERVER_COMPLETE_BEFORE_LOCATION_CHANGED:  					// This is the the navigate complete event from a server-directed nav.  Don't broadcast it. -					llinfos << "	NOT broadcasting navigate (server-directed)" << llendl; +					LL_INFOS("MediaOnAPrim") << "	NOT broadcasting navigate (server-directed)" << LL_ENDL;  				break;  				default: | 
