diff options
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llfloatertos.cpp | 44 | ||||
-rw-r--r-- | indra/newview/llfloatertos.h | 7 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_tos.xml | 5 |
3 files changed, 47 insertions, 9 deletions
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp index 69ee8cd547..3db9587797 100644 --- a/indra/newview/llfloatertos.cpp +++ b/indra/newview/llfloatertos.cpp @@ -57,7 +57,9 @@ LLFloaterTOS::LLFloaterTOS(const LLSD& data) : LLModalDialog( data["message"].asString() ), mMessage(data["message"].asString()), mWebBrowserWindowId( 0 ), - mLoadCompleteCount( 0 ), + mLoadingScreenLoaded(false), + mSiteAlive(false), + mRealNavigateBegun(false), mReplyPumpName(data["reply_pump"].asString()) { } @@ -138,6 +140,11 @@ BOOL LLFloaterTOS::postBuild() if ( web_browser ) { web_browser->addObserver(this); + + // Don't use the start_url parameter for this browser instance -- it may finish loading before we get to add our observer. + // Store the URL separately and navigate here instead. + web_browser->navigateTo( getString( "loading_url" ) ); + gResponsePtr = LLIamHere::build( this ); LLHTTPClient::get( getString( "real_url" ), gResponsePtr ); } @@ -147,15 +154,16 @@ BOOL LLFloaterTOS::postBuild() void LLFloaterTOS::setSiteIsAlive( bool alive ) { + mSiteAlive = alive; + // only do this for TOS pages if (hasChild("tos_html")) { - LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); // if the contents of the site was retrieved if ( alive ) { // navigate to the "real" page - web_browser->navigateTo( getString( "real_url" ) ); + loadIfNeeded(); } else { @@ -167,6 +175,19 @@ void LLFloaterTOS::setSiteIsAlive( bool alive ) } } +void LLFloaterTOS::loadIfNeeded() +{ + if(!mRealNavigateBegun && mSiteAlive) + { + LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("tos_html"); + if(web_browser) + { + mRealNavigateBegun = true; + web_browser->navigateTo( getString( "real_url" ) ); + } + } +} + LLFloaterTOS::~LLFloaterTOS() { @@ -216,8 +237,13 @@ void LLFloaterTOS::onCancel( void* userdata ) LLEventPumps::instance().obtain(self->mReplyPumpName).post(LLSD(false)); } - self->mLoadCompleteCount = 0; // reset counter for next time we come to TOS - self->closeFloater(); // destroys this object + // reset state for next time we come to TOS + self->mLoadingScreenLoaded = false; + self->mSiteAlive = false; + self->mRealNavigateBegun = false; + + // destroys this object + self->closeFloater(); } //virtual @@ -225,8 +251,12 @@ void LLFloaterTOS::handleMediaEvent(LLPluginClassMedia* /*self*/, EMediaEvent ev { if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) { - // skip past the loading screen navigate complete - if ( ++mLoadCompleteCount == 2 ) + if(!mLoadingScreenLoaded) + { + mLoadingScreenLoaded = true; + loadIfNeeded(); + } + else if(mRealNavigateBegun) { llinfos << "NAVIGATE COMPLETE" << llendl; // enable Agree to TOS radio button now that page has loaded diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h index 1d573e8170..6ea56408ee 100644 --- a/indra/newview/llfloatertos.h +++ b/indra/newview/llfloatertos.h @@ -66,9 +66,14 @@ public: /*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); private: + + void loadIfNeeded(); + std::string mMessage; int mWebBrowserWindowId; - int mLoadCompleteCount; + bool mLoadingScreenLoaded; + bool mSiteAlive; + bool mRealNavigateBegun; std::string mReplyPumpName; }; diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index f3665e87ed..cbfaac958b 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -11,6 +11,10 @@ name="real_url"> http://secondlife.com/app/tos/ </floater.string> + <floater.string + name="loading_url"> + data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E + </floater.string> <button enabled="false" height="20" @@ -59,7 +63,6 @@ layout="topleft" left_delta="0" name="tos_html" - start_url="data:text/html,%3Chtml%3E%3Chead%3E%3C/head%3E%3Cbody text=%22000000%22%3E%3Ch2%3E Loading %3Ca%20target%3D%22_external%22%20href%3D%22http%3A//secondlife.com/app/tos/%22%3ETerms%20of%20Service%3C/a%3E...%3C/h2%3E %3C/body%3E %3C/html%3E" top_delta="40" width="568" /> </floater> |