diff options
| author | Oz Linden <oz@lindenlab.com> | 2011-01-07 16:45:04 -0500 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2011-01-07 16:45:04 -0500 | 
| commit | 964e981458234aed37252a7b484f6f6765fff50d (patch) | |
| tree | c58b4f05fb0ab38194c4f07f2c55257b79381bde /indra/newview | |
| parent | 8cfea0bab14afc29887de4b61350e6268b793622 (diff) | |
| parent | 8a939212f4afef41c83cc35a14d7f2c2ee3ce6ba (diff) | |
merge changes for vwr-1095
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/llfloaterwebcontent.cpp | 804 | ||||
| -rw-r--r-- | indra/newview/llfloaterwebcontent.h | 162 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 2 | ||||
| -rw-r--r-- | indra/newview/lllogchat.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_web_content.xml | 380 | ||||
| -rw-r--r-- | indra/newview/tests/llremoteparcelrequest_test.cpp | 268 | 
7 files changed, 830 insertions, 830 deletions
| diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 51726112a0..058567492b 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -1,402 +1,402 @@ -/**
 - * @file llfloaterwebcontent.cpp
 - * @brief floater for displaying web content - e.g. profiles and search (eventually)
 - *
 - * $LicenseInfo:firstyear=2006&license=viewerlgpl$
 - * Second Life Viewer Source Code
 - * Copyright (C) 2010, Linden Research, Inc.
 - *
 - * This library is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU Lesser General Public
 - * License as published by the Free Software Foundation;
 - * version 2.1 of the License only.
 - *
 - * This library is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 - * Lesser General Public License for more details.
 - *
 - * You should have received a copy of the GNU Lesser General Public
 - * License along with this library; if not, write to the Free Software
 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 - *
 - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 - * $/LicenseInfo$
 - */
 -
 -#include "llviewerprecompiledheaders.h"
 -
 -#include "llcombobox.h"
 -#include "lliconctrl.h"
 -#include "llfloaterreg.h"
 -#include "lllayoutstack.h"
 -#include "llpluginclassmedia.h"
 -#include "llprogressbar.h"
 -#include "lltextbox.h"
 -#include "llurlhistory.h"
 -#include "llviewercontrol.h"
 -#include "llweb.h"
 -#include "llwindow.h"
 -
 -#include "llfloaterwebcontent.h"
 -
 -LLFloaterWebContent::LLFloaterWebContent( const LLSD& key )
 -	: LLFloater( key )
 -{
 -	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this ));
 -	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this ));
 -	mCommitCallbackRegistrar.add( "WebContent.Reload", boost::bind( &LLFloaterWebContent::onClickReload, this ));
 -	mCommitCallbackRegistrar.add( "WebContent.Stop", boost::bind( &LLFloaterWebContent::onClickStop, this ));
 -	mCommitCallbackRegistrar.add( "WebContent.EnterAddress", boost::bind( &LLFloaterWebContent::onEnterAddress, this ));
 -	mCommitCallbackRegistrar.add( "WebContent.PopExternal", boost::bind( &LLFloaterWebContent::onPopExternal, this ));
 -}
 -
 -BOOL LLFloaterWebContent::postBuild()
 -{
 -	// these are used in a bunch of places so cache them
 -	mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" );
 -	mAddressCombo = getChild< LLComboBox >( "address" );
 -	mStatusBarText = getChild< LLTextBox >( "statusbartext" );
 -	mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress" );
 -
 -	// observe browser events
 -	mWebBrowser->addObserver( this );
 -
 -	// these buttons are always enabled
 -	getChildView("reload")->setEnabled( true );
 -	getChildView("popexternal")->setEnabled( true );
 -
 -	// cache image for secure browsing
 -	mSecureLockIcon = getChild< LLIconCtrl >("media_secure_lock_flag");
 -
 -	// initialize the URL history using the system URL History manager
 -	initializeURLHistory();
 -
 -	return TRUE;
 -}
 -
 -void LLFloaterWebContent::initializeURLHistory()
 -{
 -	// start with an empty list
 -	LLCtrlListInterface* url_list = childGetListInterface("address");
 -	if (url_list)
 -	{
 -		url_list->operateOnAll(LLCtrlListInterface::OP_DELETE);
 -	}
 -
 -	// Get all of the entries in the "browser" collection
 -	LLSD browser_history = LLURLHistory::getURLHistory("browser");
 -	LLSD::array_iterator iter_history =
 -		browser_history.beginArray();
 -	LLSD::array_iterator end_history =
 -		browser_history.endArray();
 -	for(; iter_history != end_history; ++iter_history)
 -	{
 -		std::string url = (*iter_history).asString();
 -		if(! url.empty())
 -			url_list->addSimpleElement(url);
 -	}
 -}
 -
 -//static
 -void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid )
 -{
 -	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl;
 -
 -	std::string tag = target;
 -
 -	if(target.empty() || target == "_blank")
 -	{
 -		if(!uuid.empty())
 -		{
 -			tag = uuid;
 -		}
 -		else
 -		{
 -			// create a unique tag for this instance
 -			LLUUID id;
 -			id.generate();
 -			tag = id.asString();
 -		}
 -	}
 -
 -	S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit");
 -
 -	if(LLFloaterReg::findInstance("web_content", tag) != NULL)
 -	{
 -		// There's already a web browser for this tag, so we won't be opening a new window.
 -	}
 -	else if(browser_window_limit != 0)
 -	{
 -		// showInstance will open a new window.  Figure out how many web browsers are already open,
 -		// and close the least recently opened one if this will put us over the limit.
 -
 -		LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("web_content");
 -		lldebugs << "total instance count is " << instances.size() << llendl;
 -
 -		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++)
 -		{
 -			lldebugs << "    " << (*iter)->getKey() << llendl;
 -		}
 -
 -		if(instances.size() >= (size_t)browser_window_limit)
 -		{
 -			// Destroy the least recently opened instance
 -			(*instances.begin())->closeFloater();
 -		}
 -	}
 -
 -	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::showInstance("web_content", tag));
 -	llassert(browser);
 -	if(browser)
 -	{
 -		browser->mUUID = uuid;
 -
 -		// tell the browser instance to load the specified URL
 -		browser->open_media(url, target);
 -		LLViewerMedia::proxyWindowOpened(target, uuid);
 -	}
 -}
 -
 -//static
 -void LLFloaterWebContent::closeRequest(const std::string &uuid)
 -{
 -	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
 -	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
 -	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
 -	{
 -		LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
 -		lldebugs << "    " << i->mUUID << llendl;
 -		if (i && i->mUUID == uuid)
 -		{
 -			i->closeFloater(false);
 -			return;
 - 		}
 - 	}
 -}
 -
 -//static
 -void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height)
 -{
 -	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content");
 -	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl;
 -	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter)
 -	{
 -		LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter);
 -		lldebugs << "    " << i->mUUID << llendl;
 -		if (i && i->mUUID == uuid)
 -		{
 -			i->geometryChanged(x, y, width, height);
 -			return;
 -		}
 -	}
 -}
 -
 -void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height)
 -{
 -	// Make sure the layout of the browser control is updated, so this calculation is correct.
 -	LLLayoutStack::updateClass();
 -
 -	// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc.
 -	LLCoordWindow window_size;
 -	getWindow()->getSize(&window_size);
 -
 -	// Adjust width and height for the size of the chrome on the web Browser window.
 -	width += getRect().getWidth() - mWebBrowser->getRect().getWidth();
 -	height += getRect().getHeight() - mWebBrowser->getRect().getHeight();
 -
 -	LLRect geom;
 -	geom.setOriginAndSize(x, window_size.mY - (y + height), width, height);
 -
 -	lldebugs << "geometry change: " << geom << llendl;
 -
 -	handleReshape(geom,false);
 -}
 -
 -void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target)
 -{
 -	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin.
 -	mWebBrowser->setHomePageUrl(web_url, "text/html");
 -	mWebBrowser->setTarget(target);
 -	mWebBrowser->navigateTo(web_url, "text/html");
 -	set_current_url(web_url);
 -}
 -
 -//virtual
 -void LLFloaterWebContent::onClose(bool app_quitting)
 -{
 -	LLViewerMedia::proxyWindowClosed(mUUID);
 -	destroy();
 -}
 -
 -// virtual
 -void LLFloaterWebContent::draw()
 -{
 -	// this is asychronous so we need to keep checking
 -	getChildView( "back" )->setEnabled( mWebBrowser->canNavigateBack() );
 -	getChildView( "forward" )->setEnabled( mWebBrowser->canNavigateForward() );
 -
 -	LLFloater::draw();
 -}
 -
 -// virtual
 -void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 -{
 -	if(event == MEDIA_EVENT_LOCATION_CHANGED)
 -	{
 -		const std::string url = self->getLocation();
 -
 -		if ( url.length() )
 -			mStatusBarText->setText( url );
 -
 -		set_current_url( url );
 -	}
 -	else if(event == MEDIA_EVENT_NAVIGATE_BEGIN)
 -	{
 -		// flags are sent with this event
 -		getChildView("back")->setEnabled( self->getHistoryBackAvailable() );
 -		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() );
 -
 -		// toggle visibility of these buttons based on browser state
 -		getChildView("reload")->setVisible( false );
 -		getChildView("stop")->setVisible( true );
 -
 -		// turn "on" progress bar now we're about to start loading
 -		mStatusBarProgress->setVisible( true );
 -	}
 -	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE)
 -	{
 -		// flags are sent with this event
 -		getChildView("back")->setEnabled( self->getHistoryBackAvailable() );
 -		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() );
 -
 -		// toggle visibility of these buttons based on browser state
 -		getChildView("reload")->setVisible( true );
 -		getChildView("stop")->setVisible( false );
 -
 -		// turn "off" progress bar now we're loaded
 -		mStatusBarProgress->setVisible( false );
 -
 -		// we populate the status bar with URLs as they change so clear it now we're done
 -		const std::string end_str = "";
 -		mStatusBarText->setText( end_str );
 -
 -		// decide if secure browsing icon should be displayed
 -		std::string prefix =  std::string("https://");
 -		std::string test_prefix = mCurrentURL.substr(0, prefix.length());
 -		LLStringUtil::toLower(test_prefix);
 -		if(test_prefix == prefix)
 -		{
 -			mSecureLockIcon->setVisible(true);
 -		}
 -		else
 -		{
 -			mSecureLockIcon->setVisible(false);
 -		}
 -	}
 -	else if(event == MEDIA_EVENT_CLOSE_REQUEST)
 -	{
 -		// The browser instance wants its window closed.
 -		closeFloater();
 -	}
 -	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE)
 -	{
 -		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight());
 -	}
 -	else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED )
 -	{
 -		const std::string text = self->getStatusText();
 -		if ( text.length() )
 -			mStatusBarText->setText( text );
 -	}
 -	else if(event == MEDIA_EVENT_PROGRESS_UPDATED )
 -	{
 -		int percent = (int)self->getProgressPercent();
 -		mStatusBarProgress->setValue( percent );
 -	}
 -	else if(event == MEDIA_EVENT_NAME_CHANGED )
 -	{
 -		std::string page_title = self->getMediaName();
 -		// simulate browser behavior - title is empty, use the current URL
 -		if ( page_title.length() > 0 )
 -			setTitle( page_title );
 -		else
 -			setTitle( mCurrentURL );
 -	}
 -	else if(event == MEDIA_EVENT_LINK_HOVERED )
 -	{
 -		const std::string link = self->getHoverLink();
 -		mStatusBarText->setText( link );
 -	}
 -}
 -
 -void LLFloaterWebContent::set_current_url(const std::string& url)
 -{
 -	mCurrentURL = url;
 -
 -	// serialize url history into the system URL History manager
 -	LLURLHistory::removeURL("browser", mCurrentURL);
 -	LLURLHistory::addURL("browser", mCurrentURL);
 -
 -	mAddressCombo->remove( mCurrentURL );
 -	mAddressCombo->add( mCurrentURL );
 -	mAddressCombo->selectByValue( mCurrentURL );
 -}
 -
 -void LLFloaterWebContent::onClickForward()
 -{
 -	mWebBrowser->navigateForward();
 -}
 -
 -void LLFloaterWebContent::onClickBack()
 -{
 -	mWebBrowser->navigateBack();
 -}
 -
 -void LLFloaterWebContent::onClickReload()
 -{
 -
 -	if( mWebBrowser->getMediaPlugin() )
 -	{
 -		bool ignore_cache = true;
 -		mWebBrowser->getMediaPlugin()->browse_reload( ignore_cache );
 -	}
 -	else
 -	{
 -		mWebBrowser->navigateTo(mCurrentURL);
 -	}
 -}
 -
 -void LLFloaterWebContent::onClickStop()
 -{
 -	if( mWebBrowser->getMediaPlugin() )
 -		mWebBrowser->getMediaPlugin()->browse_stop();
 -
 -	// still should happen when we catch the navigate complete event
 -	// but sometimes (don't know why) that event isn't sent from Qt
 -	// and we getto a point where the stop button stays active.
 -	getChildView("reload")->setVisible( true );
 -	getChildView("stop")->setVisible( false );
 -}
 -
 -void LLFloaterWebContent::onEnterAddress()
 -{
 -	// make sure there is at least something there.
 -	// (perhaps this test should be for minimum length of a URL)
 -	std::string url = mAddressCombo->getValue().asString();
 -	if ( url.length() > 0 )
 -	{
 -		mWebBrowser->navigateTo( url, "text/html");
 -	};
 -}
 -
 -void LLFloaterWebContent::onPopExternal()
 -{
 -	// make sure there is at least something there.
 -	// (perhaps this test should be for minimum length of a URL)
 -	std::string url = mAddressCombo->getValue().asString();
 -	if ( url.length() > 0 )
 -	{
 -		LLWeb::loadURLExternal( url );
 -	};
 -}
 +/** + * @file llfloaterwebcontent.cpp + * @brief floater for displaying web content - e.g. profiles and search (eventually) + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llcombobox.h" +#include "lliconctrl.h" +#include "llfloaterreg.h" +#include "lllayoutstack.h" +#include "llpluginclassmedia.h" +#include "llprogressbar.h" +#include "lltextbox.h" +#include "llurlhistory.h" +#include "llviewercontrol.h" +#include "llweb.h" +#include "llwindow.h" + +#include "llfloaterwebcontent.h" + +LLFloaterWebContent::LLFloaterWebContent( const LLSD& key ) +	: LLFloater( key ) +{ +	mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this )); +	mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); +	mCommitCallbackRegistrar.add( "WebContent.Reload", boost::bind( &LLFloaterWebContent::onClickReload, this )); +	mCommitCallbackRegistrar.add( "WebContent.Stop", boost::bind( &LLFloaterWebContent::onClickStop, this )); +	mCommitCallbackRegistrar.add( "WebContent.EnterAddress", boost::bind( &LLFloaterWebContent::onEnterAddress, this )); +	mCommitCallbackRegistrar.add( "WebContent.PopExternal", boost::bind( &LLFloaterWebContent::onPopExternal, this )); +} + +BOOL LLFloaterWebContent::postBuild() +{ +	// these are used in a bunch of places so cache them +	mWebBrowser = getChild< LLMediaCtrl >( "webbrowser" ); +	mAddressCombo = getChild< LLComboBox >( "address" ); +	mStatusBarText = getChild< LLTextBox >( "statusbartext" ); +	mStatusBarProgress = getChild<LLProgressBar>("statusbarprogress" ); + +	// observe browser events +	mWebBrowser->addObserver( this ); + +	// these buttons are always enabled +	getChildView("reload")->setEnabled( true ); +	getChildView("popexternal")->setEnabled( true ); + +	// cache image for secure browsing +	mSecureLockIcon = getChild< LLIconCtrl >("media_secure_lock_flag"); + +	// initialize the URL history using the system URL History manager +	initializeURLHistory(); + +	return TRUE; +} + +void LLFloaterWebContent::initializeURLHistory() +{ +	// start with an empty list +	LLCtrlListInterface* url_list = childGetListInterface("address"); +	if (url_list) +	{ +		url_list->operateOnAll(LLCtrlListInterface::OP_DELETE); +	} + +	// Get all of the entries in the "browser" collection +	LLSD browser_history = LLURLHistory::getURLHistory("browser"); +	LLSD::array_iterator iter_history = +		browser_history.beginArray(); +	LLSD::array_iterator end_history = +		browser_history.endArray(); +	for(; iter_history != end_history; ++iter_history) +	{ +		std::string url = (*iter_history).asString(); +		if(! url.empty()) +			url_list->addSimpleElement(url); +	} +} + +//static +void LLFloaterWebContent::create( const std::string &url, const std::string& target, const std::string& uuid ) +{ +	lldebugs << "url = " << url << ", target = " << target << ", uuid = " << uuid << llendl; + +	std::string tag = target; + +	if(target.empty() || target == "_blank") +	{ +		if(!uuid.empty()) +		{ +			tag = uuid; +		} +		else +		{ +			// create a unique tag for this instance +			LLUUID id; +			id.generate(); +			tag = id.asString(); +		} +	} + +	S32 browser_window_limit = gSavedSettings.getS32("WebContentWindowLimit"); + +	if(LLFloaterReg::findInstance("web_content", tag) != NULL) +	{ +		// There's already a web browser for this tag, so we won't be opening a new window. +	} +	else if(browser_window_limit != 0) +	{ +		// showInstance will open a new window.  Figure out how many web browsers are already open, +		// and close the least recently opened one if this will put us over the limit. + +		LLFloaterReg::const_instance_list_t &instances = LLFloaterReg::getFloaterList("web_content"); +		lldebugs << "total instance count is " << instances.size() << llendl; + +		for(LLFloaterReg::const_instance_list_t::const_iterator iter = instances.begin(); iter != instances.end(); iter++) +		{ +			lldebugs << "    " << (*iter)->getKey() << llendl; +		} + +		if(instances.size() >= (size_t)browser_window_limit) +		{ +			// Destroy the least recently opened instance +			(*instances.begin())->closeFloater(); +		} +	} + +	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::showInstance("web_content", tag)); +	llassert(browser); +	if(browser) +	{ +		browser->mUUID = uuid; + +		// tell the browser instance to load the specified URL +		browser->open_media(url, target); +		LLViewerMedia::proxyWindowOpened(target, uuid); +	} +} + +//static +void LLFloaterWebContent::closeRequest(const std::string &uuid) +{ +	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content"); +	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl; +	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) +	{ +		LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter); +		lldebugs << "    " << i->mUUID << llendl; +		if (i && i->mUUID == uuid) +		{ +			i->closeFloater(false); +			return; + 		} + 	} +} + +//static +void LLFloaterWebContent::geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height) +{ +	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("web_content"); +	lldebugs << "instance list size is " << inst_list.size() << ", incoming uuid is " << uuid << llendl; +	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); iter != inst_list.end(); ++iter) +	{ +		LLFloaterWebContent* i = dynamic_cast<LLFloaterWebContent*>(*iter); +		lldebugs << "    " << i->mUUID << llendl; +		if (i && i->mUUID == uuid) +		{ +			i->geometryChanged(x, y, width, height); +			return; +		} +	} +} + +void LLFloaterWebContent::geometryChanged(S32 x, S32 y, S32 width, S32 height) +{ +	// Make sure the layout of the browser control is updated, so this calculation is correct. +	LLLayoutStack::updateClass(); + +	// TODO: need to adjust size and constrain position to make sure floaters aren't moved outside the window view, etc. +	LLCoordWindow window_size; +	getWindow()->getSize(&window_size); + +	// Adjust width and height for the size of the chrome on the web Browser window. +	width += getRect().getWidth() - mWebBrowser->getRect().getWidth(); +	height += getRect().getHeight() - mWebBrowser->getRect().getHeight(); + +	LLRect geom; +	geom.setOriginAndSize(x, window_size.mY - (y + height), width, height); + +	lldebugs << "geometry change: " << geom << llendl; + +	handleReshape(geom,false); +} + +void LLFloaterWebContent::open_media(const std::string& web_url, const std::string& target) +{ +	// Specifying a mime type of text/html here causes the plugin system to skip the MIME type probe and just open a browser plugin. +	mWebBrowser->setHomePageUrl(web_url, "text/html"); +	mWebBrowser->setTarget(target); +	mWebBrowser->navigateTo(web_url, "text/html"); +	set_current_url(web_url); +} + +//virtual +void LLFloaterWebContent::onClose(bool app_quitting) +{ +	LLViewerMedia::proxyWindowClosed(mUUID); +	destroy(); +} + +// virtual +void LLFloaterWebContent::draw() +{ +	// this is asychronous so we need to keep checking +	getChildView( "back" )->setEnabled( mWebBrowser->canNavigateBack() ); +	getChildView( "forward" )->setEnabled( mWebBrowser->canNavigateForward() ); + +	LLFloater::draw(); +} + +// virtual +void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) +{ +	if(event == MEDIA_EVENT_LOCATION_CHANGED) +	{ +		const std::string url = self->getLocation(); + +		if ( url.length() ) +			mStatusBarText->setText( url ); + +		set_current_url( url ); +	} +	else if(event == MEDIA_EVENT_NAVIGATE_BEGIN) +	{ +		// flags are sent with this event +		getChildView("back")->setEnabled( self->getHistoryBackAvailable() ); +		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() ); + +		// toggle visibility of these buttons based on browser state +		getChildView("reload")->setVisible( false ); +		getChildView("stop")->setVisible( true ); + +		// turn "on" progress bar now we're about to start loading +		mStatusBarProgress->setVisible( true ); +	} +	else if(event == MEDIA_EVENT_NAVIGATE_COMPLETE) +	{ +		// flags are sent with this event +		getChildView("back")->setEnabled( self->getHistoryBackAvailable() ); +		getChildView("forward")->setEnabled( self->getHistoryForwardAvailable() ); + +		// toggle visibility of these buttons based on browser state +		getChildView("reload")->setVisible( true ); +		getChildView("stop")->setVisible( false ); + +		// turn "off" progress bar now we're loaded +		mStatusBarProgress->setVisible( false ); + +		// we populate the status bar with URLs as they change so clear it now we're done +		const std::string end_str = ""; +		mStatusBarText->setText( end_str ); + +		// decide if secure browsing icon should be displayed +		std::string prefix =  std::string("https://"); +		std::string test_prefix = mCurrentURL.substr(0, prefix.length()); +		LLStringUtil::toLower(test_prefix); +		if(test_prefix == prefix) +		{ +			mSecureLockIcon->setVisible(true); +		} +		else +		{ +			mSecureLockIcon->setVisible(false); +		} +	} +	else if(event == MEDIA_EVENT_CLOSE_REQUEST) +	{ +		// The browser instance wants its window closed. +		closeFloater(); +	} +	else if(event == MEDIA_EVENT_GEOMETRY_CHANGE) +	{ +		geometryChanged(self->getGeometryX(), self->getGeometryY(), self->getGeometryWidth(), self->getGeometryHeight()); +	} +	else if(event == MEDIA_EVENT_STATUS_TEXT_CHANGED ) +	{ +		const std::string text = self->getStatusText(); +		if ( text.length() ) +			mStatusBarText->setText( text ); +	} +	else if(event == MEDIA_EVENT_PROGRESS_UPDATED ) +	{ +		int percent = (int)self->getProgressPercent(); +		mStatusBarProgress->setValue( percent ); +	} +	else if(event == MEDIA_EVENT_NAME_CHANGED ) +	{ +		std::string page_title = self->getMediaName(); +		// simulate browser behavior - title is empty, use the current URL +		if ( page_title.length() > 0 ) +			setTitle( page_title ); +		else +			setTitle( mCurrentURL ); +	} +	else if(event == MEDIA_EVENT_LINK_HOVERED ) +	{ +		const std::string link = self->getHoverLink(); +		mStatusBarText->setText( link ); +	} +} + +void LLFloaterWebContent::set_current_url(const std::string& url) +{ +	mCurrentURL = url; + +	// serialize url history into the system URL History manager +	LLURLHistory::removeURL("browser", mCurrentURL); +	LLURLHistory::addURL("browser", mCurrentURL); + +	mAddressCombo->remove( mCurrentURL ); +	mAddressCombo->add( mCurrentURL ); +	mAddressCombo->selectByValue( mCurrentURL ); +} + +void LLFloaterWebContent::onClickForward() +{ +	mWebBrowser->navigateForward(); +} + +void LLFloaterWebContent::onClickBack() +{ +	mWebBrowser->navigateBack(); +} + +void LLFloaterWebContent::onClickReload() +{ + +	if( mWebBrowser->getMediaPlugin() ) +	{ +		bool ignore_cache = true; +		mWebBrowser->getMediaPlugin()->browse_reload( ignore_cache ); +	} +	else +	{ +		mWebBrowser->navigateTo(mCurrentURL); +	} +} + +void LLFloaterWebContent::onClickStop() +{ +	if( mWebBrowser->getMediaPlugin() ) +		mWebBrowser->getMediaPlugin()->browse_stop(); + +	// still should happen when we catch the navigate complete event +	// but sometimes (don't know why) that event isn't sent from Qt +	// and we getto a point where the stop button stays active. +	getChildView("reload")->setVisible( true ); +	getChildView("stop")->setVisible( false ); +} + +void LLFloaterWebContent::onEnterAddress() +{ +	// make sure there is at least something there. +	// (perhaps this test should be for minimum length of a URL) +	std::string url = mAddressCombo->getValue().asString(); +	if ( url.length() > 0 ) +	{ +		mWebBrowser->navigateTo( url, "text/html"); +	}; +} + +void LLFloaterWebContent::onPopExternal() +{ +	// make sure there is at least something there. +	// (perhaps this test should be for minimum length of a URL) +	std::string url = mAddressCombo->getValue().asString(); +	if ( url.length() > 0 ) +	{ +		LLWeb::loadURLExternal( url ); +	}; +} diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index 001d822ada..ecc7e970d8 100644 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -1,82 +1,82 @@ -/**
 - * @file llfloaterwebcontent.h
 - * @brief floater for displaying web content - e.g. profiles and search (eventually)
 - *
 - * $LicenseInfo:firstyear=2006&license=viewerlgpl$
 - * Second Life Viewer Source Code
 - * Copyright (C) 2010, Linden Research, Inc.
 - *
 - * This library is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU Lesser General Public
 - * License as published by the Free Software Foundation;
 - * version 2.1 of the License only.
 - *
 - * This library is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 - * Lesser General Public License for more details.
 - *
 - * You should have received a copy of the GNU Lesser General Public
 - * License along with this library; if not, write to the Free Software
 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 - *
 - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 - * $/LicenseInfo$
 - */
 -
 -#ifndef LL_LLFLOATERWEBCONTENT_H
 -#define LL_LLFLOATERWEBCONTENT_H
 -
 -#include "llfloater.h"
 -#include "llmediactrl.h"
 -
 -class LLMediaCtrl;
 -class LLComboBox;
 -class LLTextBox;
 -class LLProgressBar;
 -class LLIconCtrl;
 -
 -class LLFloaterWebContent :
 -	public LLFloater,
 -	public LLViewerMediaObserver
 -{
 -public:
 -    LOG_CLASS(LLFloaterWebContent);
 -	LLFloaterWebContent(const LLSD& key);
 -
 +/** + * @file llfloaterwebcontent.h + * @brief floater for displaying web content - e.g. profiles and search (eventually) + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERWEBCONTENT_H +#define LL_LLFLOATERWEBCONTENT_H + +#include "llfloater.h" +#include "llmediactrl.h" + +class LLMediaCtrl; +class LLComboBox; +class LLTextBox; +class LLProgressBar; +class LLIconCtrl; + +class LLFloaterWebContent : +	public LLFloater, +	public LLViewerMediaObserver +{ +public: +    LOG_CLASS(LLFloaterWebContent); +	LLFloaterWebContent(const LLSD& key); +  	void initializeURLHistory(); -
 -	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null);
 -
 -	static void closeRequest(const std::string &uuid);
 -	static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height);
 -	void geometryChanged(S32 x, S32 y, S32 width, S32 height);
 -
 -	/* virtual */ BOOL postBuild();
 -	/* virtual */ void onClose(bool app_quitting);
 -	/* virtual */ void draw();
 -
 -	// inherited from LLViewerMediaObserver
 -	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
 -
 -	void onClickBack();
 -	void onClickForward();
 -	void onClickReload();
 -	void onClickStop();
 -	void onEnterAddress();
 -	void onPopExternal();
 -
 -private:
 -	void open_media(const std::string& media_url, const std::string& target);
 -	void set_current_url(const std::string& url);
 -
 -	LLMediaCtrl* mWebBrowser;
 -	LLComboBox* mAddressCombo;
 -	LLIconCtrl *mSecureLockIcon;
 -	LLTextBox* mStatusBarText;
 -	LLProgressBar* mStatusBarProgress;
 -	std::string mCurrentURL;
 -	std::string mUUID;
 -};
 -
 -#endif  // LL_LLFLOATERWEBCONTENT_H
 + +	static void create(const std::string &url, const std::string& target, const std::string& uuid = LLStringUtil::null); + +	static void closeRequest(const std::string &uuid); +	static void geometryChanged(const std::string &uuid, S32 x, S32 y, S32 width, S32 height); +	void geometryChanged(S32 x, S32 y, S32 width, S32 height); + +	/* virtual */ BOOL postBuild(); +	/* virtual */ void onClose(bool app_quitting); +	/* virtual */ void draw(); + +	// inherited from LLViewerMediaObserver +	/*virtual*/ void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event); + +	void onClickBack(); +	void onClickForward(); +	void onClickReload(); +	void onClickStop(); +	void onEnterAddress(); +	void onPopExternal(); + +private: +	void open_media(const std::string& media_url, const std::string& target); +	void set_current_url(const std::string& url); + +	LLMediaCtrl* mWebBrowser; +	LLComboBox* mAddressCombo; +	LLIconCtrl *mSecureLockIcon; +	LLTextBox* mStatusBarText; +	LLProgressBar* mStatusBarProgress; +	std::string mCurrentURL; +	std::string mUUID; +}; + +#endif  // LL_LLFLOATERWEBCONTENT_H diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index ce305dcd89..afd565bb26 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -280,19 +280,19 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  void LLIMModel::LLIMSession::onAdHocNameCache(const LLAvatarName& av_name)  {  	if (av_name.mIsDummy) -	{
 -		S32 separator_index = mName.rfind(" ");
 -		std::string name = mName.substr(0, separator_index);
 -		++separator_index;
 -		std::string conference_word = mName.substr(separator_index, mName.length());
 -
 -		// additional check that session name is what we expected
 -		if ("Conference" == conference_word)
 -		{
 -			LLStringUtil::format_map_t args;
 -			args["[AGENT_NAME]"] = name;
 -			LLTrans::findString(mName, "conference-title-incoming", args);
 -		}
 +	{ +		S32 separator_index = mName.rfind(" "); +		std::string name = mName.substr(0, separator_index); +		++separator_index; +		std::string conference_word = mName.substr(separator_index, mName.length()); + +		// additional check that session name is what we expected +		if ("Conference" == conference_word) +		{ +			LLStringUtil::format_map_t args; +			args["[AGENT_NAME]"] = name; +			LLTrans::findString(mName, "conference-title-incoming", args); +		}  	}  	else  	{ diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index e765a8da2f..a15776c207 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -100,7 +100,7 @@ public:  		void onAvatarNameCache(const LLUUID& avatar_id, const LLAvatarName& av_name); -		void onAdHocNameCache(const LLAvatarName& av_name);
 +		void onAdHocNameCache(const LLAvatarName& av_name);  		//*TODO make private  		static std::string generateHash(const std::set<LLUUID>& sorted_uuids); diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 0121bbb1ed..9adf374c71 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -89,15 +89,15 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+   */  const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)"); -/**
 - * These are recognizers for matching the names of ad-hoc conferences when generating the log file name
 - * On invited side, an ad-hoc is named like "<first name> <last name> Conference 2010/11/19 03:43 f0f4"
 - * On initiating side, an ad-hoc is named like Ad-hoc Conference hash<hash>"
 - * If the naming system for ad-hoc conferences are change in LLIMModel::LLIMSession::buildHistoryFileName()
 - * then these definition need to be adjusted as well.
 - */
 -const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Conference [0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2} [0-9a-f]{4}");
 -const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
 +/** + * These are recognizers for matching the names of ad-hoc conferences when generating the log file name + * On invited side, an ad-hoc is named like "<first name> <last name> Conference 2010/11/19 03:43 f0f4" + * On initiating side, an ad-hoc is named like Ad-hoc Conference hash<hash>" + * If the naming system for ad-hoc conferences are change in LLIMModel::LLIMSession::buildHistoryFileName() + * then these definition need to be adjusted as well. + */ +const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Conference [0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2} [0-9a-f]{4}"); +const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");  //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"  const static std::string NAME_TEXT_DIVIDER(": "); diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml index 2ad46824c2..d90d0feda9 100644 --- a/indra/newview/skins/default/xui/en/floater_web_content.xml +++ b/indra/newview/skins/default/xui/en/floater_web_content.xml @@ -1,190 +1,190 @@ -<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 -<floater
 -  legacy_header_height="18"
 -  can_resize="true"
 -  height="440"
 -  layout="topleft"
 -  min_height="140"
 -  min_width="467"
 -  name="floater_web_content"
 -  help_topic="floater_web_content"
 -  save_rect="true"
 -  auto_tile="true"
 -  title=""
 -  initial_mime_type="text/html"
 -  width="820">
 -  <layout_stack
 -    bottom="440"
 -    follows="left|right|top|bottom"
 -    layout="topleft"
 -    left="5"
 -    name="stack1"
 -    orientation="vertical"
 -    top="20"
 -    width="810">
 -    <layout_panel
 -      auto_resize="false"
 -      default_tab_group="1"
 -      height="22"
 -      layout="topleft"
 -      left="0"
 -      min_height="20"
 -      name="nav_controls"
 -      top="400"
 -      user_resize="false"
 -      width="800">
 -      <button
 -        image_overlay="Arrow_Left_Off"
 -		    image_disabled="PushButton_Disabled"
 -		    image_disabled_selected="PushButton_Disabled"
 -		    image_selected="PushButton_Selected"
 -		    image_unselected="PushButton_Off"
 -		    hover_glow_amount="0.15"
 -        tool_tip="Navigate back"
 -        follows="left|top"
 -        height="22"
 -        layout="topleft"
 -        left="1"
 -        name="back"
 -        top="0"
 -        width="22">
 -        <button.commit_callback
 -          function="WebContent.Back" />
 -      </button>
 -      <button
 -        image_overlay="Arrow_Right_Off"
 -		    image_disabled="PushButton_Disabled"
 -		    image_disabled_selected="PushButton_Disabled"
 -		    image_selected="PushButton_Selected"
 -		    image_unselected="PushButton_Off"
 -        tool_tip="Navigate forward"
 -        follows="left|top"
 -        height="22"
 -        layout="topleft"
 -        left="27"
 -        name="forward"
 -        top_delta="0"
 -        width="22">
 -        <button.commit_callback
 -          function="WebContent.Forward" />
 -      </button>
 -      <button
 -        image_overlay="Stop_Off"
 -		    image_disabled="PushButton_Disabled"
 -		    image_disabled_selected="PushButton_Disabled"
 -		    image_selected="PushButton_Selected"
 -		    image_unselected="PushButton_Off"
 -        tool_tip="Stop navigation"
 -        enabled="true"
 -        follows="left|top"
 -        height="22"
 -        layout="topleft"
 -        left="51"
 -        name="stop"
 -        top_delta="0"
 -        width="22">
 -        <button.commit_callback
 -          function="WebContent.Stop" />
 -      </button>
 -      <button
 -        image_overlay="Refresh_Off"
 -		    image_disabled="PushButton_Disabled"
 -		    image_disabled_selected="PushButton_Disabled"
 -		    image_selected="PushButton_Selected"
 -		    image_unselected="PushButton_Off"
 -        tool_tip="Reload page"
 -        follows="left|top"
 -        height="22"
 -        layout="topleft"
 -        left="51"
 -        name="reload"
 -        top_delta="0"
 -        width="22">
 -        <button.commit_callback
 -          function="WebContent.Reload" />
 -      </button>
 -      <combo_box
 -        allow_text_entry="true"
 -        follows="left|top|right"
 -        tab_group="1"
 -        height="22"
 -        layout="topleft"
 -        left_pad="4"
 -        max_chars="1024"
 -        name="address"
 -        combo_editor.select_on_focus="true"
 -        tool_tip="Enter URL here"
 -        top_delta="0"
 -        width="702">
 -        <combo_box.commit_callback
 -          function="WebContent.EnterAddress" />
 -      </combo_box>
 -      <icon
 -        name="media_secure_lock_flag"
 -        height="16"
 -        follows="top|right"
 -        image_name="Lock2"
 -        layout="topleft"
 -        left_delta="656"
 -        top_delta="2"
 -        visible="false" 
 -        tool_tip="Secured Browsing"
 -        width="16" />
 -      <button
 -        image_overlay="ExternalBrowser_Off"
 -		    image_disabled="PushButton_Disabled"
 -		    image_disabled_selected="PushButton_Disabled"
 -		    image_selected="PushButton_Selected"
 -		    image_unselected="PushButton_Off"
 -        tool_tip="Open current URL in your desktop browser"
 -        follows="right|top"
 -        enabled="true" 
 -        height="22"
 -        layout="topleft"
 -        name="popexternal"
 -        right="800"
 -        top_delta="-2"
 -        width="22">
 -        <button.commit_callback
 -          function="WebContent.PopExternal" />
 -      </button>
 -    </layout_panel>
 -    <layout_panel
 -      height="40"
 -      layout="topleft"
 -      left_delta="0"
 -      name="external_controls"
 -      top_delta="0"
 -      user_resize="false"
 -      width="540">
 -      <web_browser
 -        bottom="-22"
 -        follows="all"
 -        layout="topleft"
 -        left="0"
 -        name="webbrowser"
 -        top="0"/>
 -      <text
 -        type="string"
 -        length="100"
 -        follows="bottom|left"
 -        height="20"
 -        layout="topleft"
 -        left_delta="0"
 -        name="statusbartext"
 -        parse_urls="false"
 -        text_color="0.4 0.4 0.4 1" 
 -        top_pad="5"
 -        width="452"/>
 -      <progress_bar
 -        color_bar="0.3 1.0 0.3 1"
 -        follows="bottom|right"
 -        height="16"
 -        top_delta="-1"
 -        left_pad="24"
 -        layout="topleft"
 -        name="statusbarprogress"
 -        width="64"/>
 -    </layout_panel>
 -  </layout_stack>
 -</floater>
 +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<floater +  legacy_header_height="18" +  can_resize="true" +  height="440" +  layout="topleft" +  min_height="140" +  min_width="467" +  name="floater_web_content" +  help_topic="floater_web_content" +  save_rect="true" +  auto_tile="true" +  title="" +  initial_mime_type="text/html" +  width="820"> +  <layout_stack +    bottom="440" +    follows="left|right|top|bottom" +    layout="topleft" +    left="5" +    name="stack1" +    orientation="vertical" +    top="20" +    width="810"> +    <layout_panel +      auto_resize="false" +      default_tab_group="1" +      height="22" +      layout="topleft" +      left="0" +      min_height="20" +      name="nav_controls" +      top="400" +      user_resize="false" +      width="800"> +      <button +        image_overlay="Arrow_Left_Off" +        image_disabled="PushButton_Disabled" +        image_disabled_selected="PushButton_Disabled" +        image_selected="PushButton_Selected" +        image_unselected="PushButton_Off" +        hover_glow_amount="0.15" +        tool_tip="Navigate back" +        follows="left|top" +        height="22" +        layout="topleft" +        left="1" +        name="back" +        top="0" +        width="22"> +        <button.commit_callback +          function="WebContent.Back" /> +      </button> +      <button +        image_overlay="Arrow_Right_Off" +        image_disabled="PushButton_Disabled" +        image_disabled_selected="PushButton_Disabled" +        image_selected="PushButton_Selected" +        image_unselected="PushButton_Off" +        tool_tip="Navigate forward" +        follows="left|top" +        height="22" +        layout="topleft" +        left="27" +        name="forward" +        top_delta="0" +        width="22"> +        <button.commit_callback +          function="WebContent.Forward" /> +      </button> +      <button +        image_overlay="Stop_Off" +        image_disabled="PushButton_Disabled" +        image_disabled_selected="PushButton_Disabled" +        image_selected="PushButton_Selected" +        image_unselected="PushButton_Off" +        tool_tip="Stop navigation" +        enabled="true" +        follows="left|top" +        height="22" +        layout="topleft" +        left="51" +        name="stop" +        top_delta="0" +        width="22"> +        <button.commit_callback +          function="WebContent.Stop" /> +      </button> +      <button +        image_overlay="Refresh_Off" +        image_disabled="PushButton_Disabled" +        image_disabled_selected="PushButton_Disabled" +        image_selected="PushButton_Selected" +        image_unselected="PushButton_Off" +        tool_tip="Reload page" +        follows="left|top" +        height="22" +        layout="topleft" +        left="51" +        name="reload" +        top_delta="0" +        width="22"> +        <button.commit_callback +          function="WebContent.Reload" /> +      </button> +      <combo_box +        allow_text_entry="true" +        follows="left|top|right" +        tab_group="1" +        height="22" +        layout="topleft" +        left_pad="4" +        max_chars="1024" +        name="address" +        combo_editor.select_on_focus="true" +        tool_tip="Enter URL here" +        top_delta="0" +        width="702"> +        <combo_box.commit_callback +          function="WebContent.EnterAddress" /> +      </combo_box> +      <icon +        name="media_secure_lock_flag" +        height="16" +        follows="top|right" +        image_name="Lock2" +        layout="topleft" +        left_delta="656" +        top_delta="2" +        visible="false"  +        tool_tip="Secured Browsing" +        width="16" /> +      <button +        image_overlay="ExternalBrowser_Off" +        image_disabled="PushButton_Disabled" +        image_disabled_selected="PushButton_Disabled" +        image_selected="PushButton_Selected" +        image_unselected="PushButton_Off" +        tool_tip="Open current URL in your desktop browser" +        follows="right|top" +        enabled="true"  +        height="22" +        layout="topleft" +        name="popexternal" +        right="800" +        top_delta="-2" +        width="22"> +        <button.commit_callback +          function="WebContent.PopExternal" /> +      </button> +    </layout_panel> +    <layout_panel +      height="40" +      layout="topleft" +      left_delta="0" +      name="external_controls" +      top_delta="0" +      user_resize="false" +      width="540"> +      <web_browser +        bottom="-22" +        follows="all" +        layout="topleft" +        left="0" +        name="webbrowser" +        top="0"/> +      <text +        type="string" +        length="100" +        follows="bottom|left" +        height="20" +        layout="topleft" +        left_delta="0" +        name="statusbartext" +        parse_urls="false" +        text_color="0.4 0.4 0.4 1"  +        top_pad="5" +        width="452"/> +      <progress_bar +        color_bar="0.3 1.0 0.3 1" +        follows="bottom|right" +        height="16" +        top_delta="-1" +        left_pad="24" +        layout="topleft" +        name="statusbarprogress" +        width="64"/> +    </layout_panel> +  </layout_stack> +</floater> diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp index a6c1f69c82..dae22521bb 100644 --- a/indra/newview/tests/llremoteparcelrequest_test.cpp +++ b/indra/newview/tests/llremoteparcelrequest_test.cpp @@ -1,134 +1,134 @@ -/** 
 - * @file llremoteparcelrequest_test.cpp
 - * @author Brad Kittenbrink <brad@lindenlab.com>
 - *
 - * $LicenseInfo:firstyear=2010&license=viewerlgpl$
 - * Second Life Viewer Source Code
 - * Copyright (C) 2010, Linden Research, Inc.
 - * 
 - * This library is free software; you can redistribute it and/or
 - * modify it under the terms of the GNU Lesser General Public
 - * License as published by the Free Software Foundation;
 - * version 2.1 of the License only.
 - * 
 - * This library is distributed in the hope that it will be useful,
 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 - * Lesser General Public License for more details.
 - * 
 - * You should have received a copy of the GNU Lesser General Public
 - * License along with this library; if not, write to the Free Software
 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 - * 
 - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 - * $/LicenseInfo$
 - */
 -
 -#include "linden_common.h"
 -
 -#include "../test/lltut.h"
 -
 -#include "../llremoteparcelrequest.h"
 -
 -#include "../llagent.h"
 -#include "message.h"
 -
 -namespace {
 -	LLControlGroup s_saved_settings("dummy_settings");
 -	const LLUUID TEST_PARCEL_ID("11111111-1111-1111-1111-111111111111");
 -}
 -
 -LLCurl::Responder::Responder() { }
 -LLCurl::Responder::~Responder() { }
 -void LLCurl::Responder::error(U32,std::string const &) { }
 -void LLCurl::Responder::result(LLSD const &) { }
 -void LLCurl::Responder::errorWithContent(U32 status,std::string const &,LLSD const &) { }
 -void LLCurl::Responder::completedRaw(U32 status, std::string const &, LLChannelDescriptors const &,boost::shared_ptr<LLBufferArray> const &) { }
 -void LLCurl::Responder::completed(U32 status, std::string const &, LLSD const &) { }
 -void LLCurl::Responder::completedHeader(U32 status, std::string const &, LLSD const &) { }
 -void LLMessageSystem::getF32(char const *,char const *,F32 &,S32) { }
 -void LLMessageSystem::getU8(char const *,char const *,U8 &,S32) { }
 -void LLMessageSystem::getS32(char const *,char const *,S32 &,S32) { }
 -void LLMessageSystem::getString(char const *,char const *, std::string &,S32) { }
 -void LLMessageSystem::getUUID(char const *,char const *, LLUUID & out_id,S32)
 -{
 -	out_id = TEST_PARCEL_ID;
 -}
 -void LLMessageSystem::nextBlock(char const *) { }
 -void LLMessageSystem::addUUID(char const *,LLUUID const &) { }
 -void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { }
 -void LLMessageSystem::nextBlockFast(char const *) { }
 -void LLMessageSystem::newMessage(char const *) { }
 -LLMessageSystem * gMessageSystem;
 -char * _PREHASH_AgentID;
 -char * _PREHASH_AgentData;
 -LLAgent gAgent;
 -LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { }
 -LLAgent::~LLAgent() { }
 -void LLAgent::sendReliableMessage(void) { }
 -LLUUID gAgentSessionID;
 -LLUUID gAgentID;
 -LLUIColor::LLUIColor(void) { }
 -LLAgentAccess::LLAgentAccess(LLControlGroup & settings) : mSavedSettings(settings) { }
 -LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { }
 -LLControlGroup::~LLControlGroup(void) { }
 -
 -namespace tut
 -{
 -	struct TestObserver : public LLRemoteParcelInfoObserver {
 -		TestObserver() : mProcessed(false) { }
 -
 -		virtual void processParcelInfo(const LLParcelData& parcel_data)
 -		{
 -			mProcessed = true;
 -		}
 -
 -		virtual void setParcelID(const LLUUID& parcel_id) { }
 -
 -		virtual void setErrorStatus(U32 status, const std::string& reason) { }
 -
 -		bool mProcessed;
 -	};
 -
 -    struct RemoteParcelRequestData
 -    {
 -		RemoteParcelRequestData()
 -		{
 -		}
 -    };
 -    
 -	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t;
 -	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t;
 -	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest");
 -
 -	template<> template<>
 -	void remoteparcelrequest_object_t::test<1>()
 -	{
 -		set_test_name("observer pointer");
 -
 -		boost::scoped_ptr<TestObserver> observer(new TestObserver());
 -
 -		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
 -		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer.get());
 -
 -		processor.processParcelInfoReply(gMessageSystem, NULL);
 -
 -		ensure(observer->mProcessed);
 -	}
 -
 -	template<> template<>
 -	void remoteparcelrequest_object_t::test<2>()
 -	{
 -		set_test_name("CHOP-220: dangling observer pointer");
 -
 -		LLRemoteParcelInfoObserver * observer = new TestObserver();
 -
 -		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
 -		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer);
 -
 -		delete observer;
 -		observer = NULL;
 -
 -		processor.processParcelInfoReply(gMessageSystem, NULL);
 -	}
 -}
 +/**  + * @file llremoteparcelrequest_test.cpp + * @author Brad Kittenbrink <brad@lindenlab.com> + * + * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +#include "../test/lltut.h" + +#include "../llremoteparcelrequest.h" + +#include "../llagent.h" +#include "message.h" + +namespace { +	LLControlGroup s_saved_settings("dummy_settings"); +	const LLUUID TEST_PARCEL_ID("11111111-1111-1111-1111-111111111111"); +} + +LLCurl::Responder::Responder() { } +LLCurl::Responder::~Responder() { } +void LLCurl::Responder::error(U32,std::string const &) { } +void LLCurl::Responder::result(LLSD const &) { } +void LLCurl::Responder::errorWithContent(U32 status,std::string const &,LLSD const &) { } +void LLCurl::Responder::completedRaw(U32 status, std::string const &, LLChannelDescriptors const &,boost::shared_ptr<LLBufferArray> const &) { } +void LLCurl::Responder::completed(U32 status, std::string const &, LLSD const &) { } +void LLCurl::Responder::completedHeader(U32 status, std::string const &, LLSD const &) { } +void LLMessageSystem::getF32(char const *,char const *,F32 &,S32) { } +void LLMessageSystem::getU8(char const *,char const *,U8 &,S32) { } +void LLMessageSystem::getS32(char const *,char const *,S32 &,S32) { } +void LLMessageSystem::getString(char const *,char const *, std::string &,S32) { } +void LLMessageSystem::getUUID(char const *,char const *, LLUUID & out_id,S32) +{ +	out_id = TEST_PARCEL_ID; +} +void LLMessageSystem::nextBlock(char const *) { } +void LLMessageSystem::addUUID(char const *,LLUUID const &) { } +void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { } +void LLMessageSystem::nextBlockFast(char const *) { } +void LLMessageSystem::newMessage(char const *) { } +LLMessageSystem * gMessageSystem; +char * _PREHASH_AgentID; +char * _PREHASH_AgentData; +LLAgent gAgent; +LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { } +LLAgent::~LLAgent() { } +void LLAgent::sendReliableMessage(void) { } +LLUUID gAgentSessionID; +LLUUID gAgentID; +LLUIColor::LLUIColor(void) { } +LLAgentAccess::LLAgentAccess(LLControlGroup & settings) : mSavedSettings(settings) { } +LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { } +LLControlGroup::~LLControlGroup(void) { } + +namespace tut +{ +	struct TestObserver : public LLRemoteParcelInfoObserver { +		TestObserver() : mProcessed(false) { } + +		virtual void processParcelInfo(const LLParcelData& parcel_data) +		{ +			mProcessed = true; +		} + +		virtual void setParcelID(const LLUUID& parcel_id) { } + +		virtual void setErrorStatus(U32 status, const std::string& reason) { } + +		bool mProcessed; +	}; + +    struct RemoteParcelRequestData +    { +		RemoteParcelRequestData() +		{ +		} +    }; +     +	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t; +	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t; +	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest"); + +	template<> template<> +	void remoteparcelrequest_object_t::test<1>() +	{ +		set_test_name("observer pointer"); + +		boost::scoped_ptr<TestObserver> observer(new TestObserver()); + +		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance(); +		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer.get()); + +		processor.processParcelInfoReply(gMessageSystem, NULL); + +		ensure(observer->mProcessed); +	} + +	template<> template<> +	void remoteparcelrequest_object_t::test<2>() +	{ +		set_test_name("CHOP-220: dangling observer pointer"); + +		LLRemoteParcelInfoObserver * observer = new TestObserver(); + +		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance(); +		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer); + +		delete observer; +		observer = NULL; + +		processor.processParcelInfoReply(gMessageSystem, NULL); +	} +} | 
