summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llbuycurrencyhtml.cpp5
-rw-r--r--indra/newview/llfloaterbuycurrencyhtml.cpp44
-rw-r--r--indra/newview/llfloaterbuycurrencyhtml.h6
3 files changed, 52 insertions, 3 deletions
diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp
index 81d9a261af..9ad068cf7f 100644
--- a/indra/newview/llbuycurrencyhtml.cpp
+++ b/indra/newview/llbuycurrencyhtml.cpp
@@ -145,6 +145,11 @@ void LLBuyCurrencyHTML::openCurrencyFloater( const std::string& message, S32 sum
if (gSavedSettings.getBOOL("BuyCurrencyHTML") && sWebFloaterEnabled)
{
LLBuyCurrencyHTML::showDialog(sum - gStatusBar->getBalance());
+ LLFloaterBuyCurrencyHTML* floater = dynamic_cast<LLFloaterBuyCurrencyHTML*>(LLFloaterReg::getInstance("buy_currency_html"));
+ if (floater)
+ {
+ floater->setFallbackContext(message, sum);
+ }
}
else
{
diff --git a/indra/newview/llfloaterbuycurrencyhtml.cpp b/indra/newview/llfloaterbuycurrencyhtml.cpp
index cd8e33a04b..55b7c32169 100644
--- a/indra/newview/llfloaterbuycurrencyhtml.cpp
+++ b/indra/newview/llfloaterbuycurrencyhtml.cpp
@@ -27,6 +27,7 @@
#include "llviewerprecompiledheaders.h"
#include "llfloaterbuycurrencyhtml.h"
+#include "llfloaterbuycurrency.h"
#include "llmediactrl.h"
#include "llstatusbar.h"
#include "llviewercontrol.h"
@@ -83,11 +84,48 @@ void LLFloaterBuyCurrencyHTML::navigateToFinalURL()
mBrowser->navigateTo(buildURL(mShortfall), HTTP_CONTENT_TEXT_HTML);
}
+void LLFloaterBuyCurrencyHTML::setFallbackContext(const std::string& message, S32 sum)
+{
+ mFallbackMessage = message;
+ mFallbackSum = sum;
+ mHasFallbackTarget = true;
+}
+
+void LLFloaterBuyCurrencyHTML::fallbackToLegacy()
+{
+ LL_WARNS() << "Buy Currency HTML page failed to load, falling back to legacy floater" << LL_ENDL;
+ closeFloater();
+ if (mHasFallbackTarget)
+ {
+ LLFloaterBuyCurrency::buyCurrency(mFallbackMessage, mFallbackSum);
+ }
+ else
+ {
+ LLFloaterBuyCurrency::buyCurrency();
+ }
+}
+
void LLFloaterBuyCurrencyHTML::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
{
- if ((LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE == event) &&
- (self->getNavigateURI().find("done=success") != std::string::npos))
+ if (LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE == event)
{
- LLStatusBar::sendMoneyBalanceRequest();
+ if (self->getNavigateURI().find("done=success") != std::string::npos)
+ {
+ LLStatusBar::sendMoneyBalanceRequest();
+ }
+ else
+ {
+ // HTTP 4xx/5xx: fall back to legacy floater
+ if (self->getNavigateResultCode() >= 400)
+ {
+ fallbackToLegacy();
+ }
+ }
+ }
+ else if (event == LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE ||
+ event == LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH ||
+ event == LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED)
+ {
+ fallbackToLegacy();
}
}
diff --git a/indra/newview/llfloaterbuycurrencyhtml.h b/indra/newview/llfloaterbuycurrencyhtml.h
index 76c54c5f3b..4b28cf6967 100644
--- a/indra/newview/llfloaterbuycurrencyhtml.h
+++ b/indra/newview/llfloaterbuycurrencyhtml.h
@@ -44,10 +44,16 @@ public:
void navigateToFinalURL();
void setShortfall(S32 shortfall) { mShortfall = shortfall; }
+ void setFallbackContext(const std::string& message, S32 sum);
static std::string buildURL(S32 shortfall = 0);
private:
+ void fallbackToLegacy();
+
LLMediaCtrl* mBrowser;
S32 mShortfall{0};
+ bool mHasFallbackTarget{false};
+ std::string mFallbackMessage;
+ S32 mFallbackSum{0};
};