diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llmodaldialog.cpp | 14 | ||||
| -rw-r--r-- | indra/media_plugins/cef/media_plugin_cef.cpp | 17 | 
2 files changed, 24 insertions, 7 deletions
| diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp index 5cfa8ea973..3e5978eb59 100644 --- a/indra/llui/llmodaldialog.cpp +++ b/indra/llui/llmodaldialog.cpp @@ -100,7 +100,10 @@ void LLModalDialog::onOpen(const LLSD& key)  		if (!sModalStack.empty())  		{  			LLModalDialog* front = sModalStack.front(); -			front->setVisible(FALSE); +            if (front != this) +            { +                front->setVisible(FALSE); +            }  		}  		// This is a modal dialog.  It sucks up all mouse and keyboard operations. @@ -108,7 +111,14 @@ void LLModalDialog::onOpen(const LLSD& key)  		LLUI::getInstance()->addPopup(this);  		setFocus(TRUE); -		sModalStack.push_front( this ); +        std::list<LLModalDialog*>::iterator iter = std::find(sModalStack.begin(), sModalStack.end(), this); +        if (iter != sModalStack.end()) +        { +            // if already present, we want to move it to front. +            sModalStack.erase(iter); +        } + +        sModalStack.push_front(this);  	}  } diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp index 042abcf80e..43d3a32e64 100644 --- a/indra/media_plugins/cef/media_plugin_cef.cpp +++ b/indra/media_plugins/cef/media_plugin_cef.cpp @@ -56,7 +56,7 @@ private:  	bool init();  	void onPageChangedCallback(const unsigned char* pixels, int x, int y, const int width, const int height); -	void onCustomSchemeURLCallback(std::string url); +	void onCustomSchemeURLCallback(std::string url, bool user_gesture, bool is_redirect);  	void onConsoleMessageCallback(std::string message, std::string source, int line);  	void onStatusMessageCallback(std::string value);  	void onTitleChangeCallback(std::string title); @@ -300,11 +300,18 @@ void MediaPluginCEF::onOpenPopupCallback(std::string url, std::string target)  ////////////////////////////////////////////////////////////////////////////////  // -void MediaPluginCEF::onCustomSchemeURLCallback(std::string url) +void MediaPluginCEF::onCustomSchemeURLCallback(std::string url, bool user_gesture, bool is_redirect)  {  	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow"); -	message.setValue("uri", url); -	message.setValue("nav_type", "clicked");	// TODO: differentiate between click and navigate to +    message.setValue("uri", url); + +    // indicate if this interaction was from a user click (okay on a SLAPP) or  +    // via a navigation (e.g. a data URL - see SL-18151) (not okay on a SLAPP) +    const std::string nav_type = user_gesture ? "clicked" : "navigated"; + +	message.setValue("nav_type", nav_type); +    message.setValueBoolean("is_redirect", is_redirect); +  	sendMessage(message);  } @@ -593,7 +600,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string)              {                  // event callbacks from Dullahan                  mCEFLib->setOnPageChangedCallback(std::bind(&MediaPluginCEF::onPageChangedCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); -                mCEFLib->setOnCustomSchemeURLCallback(std::bind(&MediaPluginCEF::onCustomSchemeURLCallback, this, std::placeholders::_1)); +                mCEFLib->setOnCustomSchemeURLCallback(std::bind(&MediaPluginCEF::onCustomSchemeURLCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));                  mCEFLib->setOnConsoleMessageCallback(std::bind(&MediaPluginCEF::onConsoleMessageCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));                  mCEFLib->setOnStatusMessageCallback(std::bind(&MediaPluginCEF::onStatusMessageCallback, this, std::placeholders::_1));                  mCEFLib->setOnTitleChangeCallback(std::bind(&MediaPluginCEF::onTitleChangeCallback, this, std::placeholders::_1)); | 
