summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/media_plugins/webkit/media_plugin_webkit.cpp9
-rw-r--r--indra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/app_settings/settings.xml63
-rw-r--r--indra/newview/llfloatersearch.cpp43
-rw-r--r--indra/newview/lltexturefetch.cpp2
-rw-r--r--indra/newview/llviewerhelp.cpp3
-rw-r--r--indra/newview/llviewerhelputil.cpp43
-rw-r--r--indra/newview/llviewerhelputil.h4
-rw-r--r--indra/newview/llviewerhome.cpp27
-rw-r--r--indra/newview/llviewermedia.cpp15
-rw-r--r--indra/newview/llviewermedia.h2
-rw-r--r--indra/newview/llvovolume.cpp37
-rw-r--r--indra/newview/llweb.cpp32
-rw-r--r--indra/newview/llweb.h5
-rw-r--r--indra/newview/pipeline.cpp8
-rw-r--r--indra/newview/skins/default/xui/en/floater_search.xml4
-rw-r--r--indra/newview/skins/default/xui/en/panel_preferences_setup.xml4
-rw-r--r--indra/newview/tests/llviewerhelputil_test.cpp122
-rwxr-xr-xindra/newview/viewer_manifest.py1
-rw-r--r--indra/test_apps/llplugintest/CMakeLists.txt8
-rw-r--r--install.xml8
21 files changed, 233 insertions, 209 deletions
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index 276ad39dfb..707edaa3d6 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -211,7 +211,7 @@ private:
LLQtWebKit::getInstance()->enablePlugins(true);
#elif LL_DARWIN
// Disable plugins
- LLQtWebKit::getInstance()->enablePlugins(false);
+ LLQtWebKit::getInstance()->enablePlugins(true);
#elif LL_LINUX
// Disable plugins
LLQtWebKit::getInstance()->enablePlugins(false);
@@ -626,7 +626,11 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
}
else if(message_name == "cleanup")
{
- // TODO: clean up here
+ // DTOR most likely won't be called but the recent change to the way this process
+ // is (not) killed means we see this message and can do what we need to here.
+ // Note: this cleanup is ultimately what writes cookies to the disk
+ LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this );
+ LLQtWebKit::getInstance()->reset();
}
else if(message_name == "shm_added")
{
@@ -635,7 +639,6 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
info.mSize = (size_t)message_in.getValueS32("size");
std::string name = message_in.getValue("name");
-
// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory added, name: " << name
// << ", size: " << info.mSize
// << ", address: " << info.mAddress
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 492d70a956..293faa7b70 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1780,6 +1780,7 @@ if (WINDOWS)
qtnetworkd4.dll
qtopengld4.dll
qtwebkitd4.dll
+ qtxmlpatternsd4.dll
ssleay32.dll
)
copy_if_different(
@@ -1799,6 +1800,7 @@ if (WINDOWS)
qtnetwork4.dll
qtopengl4.dll
qtwebkit4.dll
+ qtxmlpatterns4.dll
ssleay32.dll
)
copy_if_different(
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 7ac7a09d56..578f8fd4f0 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -3585,7 +3585,18 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
- <string>http://www.secondlife.com/</string>
+ <string>http://lecs.viewer-sidebar.secondlife.com.s3.amazonaws.com/sidebar.html</string>
+ </map>
+ <key>SearchURL</key>
+ <map>
+ <key>Comment</key>
+ <string>URL for Search website, displayed in the Find floater</string>
+ <key>Persist</key>
+ <integer>0</integer>
+ <key>Type</key>
+ <string>String</string>
+ <key>Value</key>
+ <string>http://int.searchwww-phx0.damballah.lindenlab.com/viewer/[CATEGORY]?q=[QUERY]&amp;p=[AUTH_TOKEN]&amp;r=[MATURITY]&amp;lang=[LANGUAGE]&amp;g=[GODLIKE]</string>
</map>
<key>HighResSnapshot</key>
<map>
@@ -5460,6 +5471,17 @@
<key>Value</key>
<integer>13</integer>
</map>
+ <key>PrimMediaMasterEnabled</key>
+ <map>
+ <key>Comment</key>
+ <string>Whether or not Media on a Prim is enabled.</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>PrimMediaControlsUseHoverControlSet</key>
<map>
<key>Comment</key>
@@ -7539,45 +7561,6 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>SearchURLDefault</key>
- <map>
- <key>Comment</key>
- <string>URL to load for empty searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>HideFromEditor</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://search.secondlife.com/client_search.php?</string>
- </map>
- <key>SearchURLQuery</key>
- <map>
- <key>Comment</key>
- <string>URL to use for searches</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>HideFromEditor</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>http://search.secondlife.com/client_search.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
- </map>
- <key>SearchURLSuffix2</key>
- <map>
- <key>Comment</key>
- <string>Parameters added to end of search queries</string>
- <key>Persist</key>
- <integer>1</integer>
- <key>HideFromEditor</key>
- <integer>1</integer>
- <key>Type</key>
- <string>String</string>
- <key>Value</key>
- <string>lang=[LANG]&amp;mat=[MATURITY]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
- </map>
<key>SelectMovableOnly</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index c658963708..595d84f9f0 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -38,6 +38,8 @@
#include "lluri.h"
#include "llagent.h"
#include "llui.h"
+#include "llviewercontrol.h"
+#include "llweb.h"
LLFloaterSearch::LLFloaterSearch(const LLSD& key) :
LLFloater(key),
@@ -65,7 +67,6 @@ BOOL LLFloaterSearch::postBuild()
{
mBrowser->addObserver(this);
mBrowser->setTrusted(true);
- mBrowser->setHomePageUrl(getString("search_url"));
}
return TRUE;
@@ -113,33 +114,32 @@ void LLFloaterSearch::search(const LLSD &key)
childHide("refresh_search");
mSearchGodLevel = gAgent.getGodLevel();
- // get the URL for the search page
- std::string url = getString("search_url");
- if (! LLStringUtil::endsWith(url, "/"))
- {
- url += "/";
- }
-
// work out the subdir to use based on the requested category
+ LLSD subs;
std::string category = key.has("category") ? key["category"].asString() : "";
if (mCategoryPaths.has(category))
{
- url += mCategoryPaths[category].asString();
+ subs["CATEGORY"] = mCategoryPaths[category].asString();
}
else
{
- url += mCategoryPaths["all"].asString();
+ subs["CATEGORY"] = mCategoryPaths["all"].asString();
}
- // append the search query string
+ // add the search query string
std::string search_text = key.has("id") ? key["id"].asString() : "";
- url += std::string("?q=") + LLURI::escape(search_text);
+ subs["QUERY"] = LLURI::escape(search_text);
- // append the permissions token that login.cgi gave us
+ // add the permissions token that login.cgi gave us
+ // We use "search_token", and fallback to "auth_token" if not present.
LLSD search_token = LLLoginInstance::getInstance()->getResponse("search_token");
- url += "&p=" + search_token.asString();
+ if (search_token.asString().empty())
+ {
+ search_token = LLLoginInstance::getInstance()->getResponse("auth_token");
+ }
+ subs["AUTH_TOKEN"] = search_token.asString();
- // also append the user's preferred maturity (can be changed via prefs)
+ // add the user's preferred maturity (can be changed via prefs)
std::string maturity;
if (gAgent.prefersAdult())
{
@@ -153,14 +153,15 @@ void LLFloaterSearch::search(const LLSD &key)
{
maturity = "13"; // PG
}
- url += "&r=" + maturity;
-
- // add the current localization information
- url += "&lang=" + LLUI::getLanguage();
+ subs["MATURITY"] = maturity;
// add the user's god status
- std::string godlike = gAgent.isGodlike() ? "1" : "0";
- url += "&g=" + godlike;
+ subs["GODLIKE"] = gAgent.isGodlike() ? "1" : "0";
+
+ // get the search URL and expand all of the substitutions
+ // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+ std::string url = gSavedSettings.getString("SearchURL");
+ url = LLWeb::expandURLSubstitutions(url, subs);
// and load the URL in the web view
mBrowser->navigateTo(url);
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 85259fdc1e..9f69ed3964 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -887,6 +887,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
}
else
{
+ // mFormattedImage gauranteed to not be NULL since cur_size != 0
+ mLoadedDiscard = mFormattedImage->getDiscardLevel();
mState = DECODE_IMAGE;
return false; // use what we have
}
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
index b8f91697e5..5af79b4fd3 100644
--- a/indra/newview/llviewerhelp.cpp
+++ b/indra/newview/llviewerhelp.cpp
@@ -81,8 +81,7 @@ void LLViewerHelp::showTopic(const std::string &topic)
// work out the URL for this topic and display it
showHelp();
- const LLOSInfo& osinfo = LLAppViewer::instance()->getOSInfo();
- std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic, gSavedSettings, osinfo );
+ std::string helpURL = LLViewerHelpUtil::buildHelpURL( help_topic );
setRawURL( helpURL );
}
diff --git a/indra/newview/llviewerhelputil.cpp b/indra/newview/llviewerhelputil.cpp
index df08470518..5ba4fc834c 100644
--- a/indra/newview/llviewerhelputil.cpp
+++ b/indra/newview/llviewerhelputil.cpp
@@ -34,12 +34,11 @@
#include "llviewerprecompiledheaders.h"
#include "llviewerhelputil.h"
-#include "llcontrol.h"
+#include "llsd.h"
#include "llstring.h"
-#include "llsys.h"
#include "lluri.h"
-#include "llversioninfo.h"
-
+#include "llweb.h"
+#include "llviewercontrol.h"
//////////////////////////////////////////////
// Build a help URL from a topic and formatter
@@ -59,40 +58,14 @@ std::string LLViewerHelpUtil::helpURLEncode( const std::string &component )
return escaped;
}
-static std::string buildHelpVersion( const U32 ver_int )
-{
- std::ostringstream ver_str;
- ver_str << ver_int;
- return ver_str.str(); // not encoded - numbers are rfc3986-safe
-}
-
//static
-std::string LLViewerHelpUtil::buildHelpURL( const std::string &topic,
- LLControlGroup &savedSettings,
- const LLOSInfo &osinfo )
+std::string LLViewerHelpUtil::buildHelpURL( const std::string &topic)
{
- std::string helpURL = savedSettings.getString("HelpURLFormat");
LLSD substitution;
substitution["TOPIC"] = helpURLEncode(topic);
- substitution["CHANNEL"] = helpURLEncode(savedSettings.getString("VersionChannelName"));
-
- substitution["VERSION"] = helpURLEncode(LLVersionInfo::getVersion());
- substitution["VERSION_MAJOR"] = buildHelpVersion(LLVersionInfo::getMajor());
- substitution["VERSION_MINOR"] = buildHelpVersion(LLVersionInfo::getMinor());
- substitution["VERSION_PATCH"] = buildHelpVersion(LLVersionInfo::getPatch());
- substitution["VERSION_BUILD"] = buildHelpVersion(LLVersionInfo::getBuild());
-
- substitution["OS"] = helpURLEncode(osinfo.getOSStringSimple());
-
- std::string language = savedSettings.getString("Language");
- if( language.empty() || language == "default" )
- {
- language = savedSettings.getString("SystemLanguage");
- }
- substitution["LANGUAGE"] = helpURLEncode(language);
-
- LLStringUtil::format(helpURL, substitution);
-
- return helpURL;
+ // get the help URL and expand all of the substitutions
+ // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
+ std::string helpURL = gSavedSettings.getString("HelpURLFormat");
+ return LLWeb::expandURLSubstitutions(helpURL, substitution);
}
diff --git a/indra/newview/llviewerhelputil.h b/indra/newview/llviewerhelputil.h
index 8ee0d96023..95e6744842 100644
--- a/indra/newview/llviewerhelputil.h
+++ b/indra/newview/llviewerhelputil.h
@@ -41,9 +41,7 @@ class LLViewerHelpUtil
{
public:
static std::string helpURLEncode( const std::string &component );
- static std::string buildHelpURL( const std::string &topic,
- LLControlGroup &savedSettings,
- const LLOSInfo &osinfo);
+ static std::string buildHelpURL( const std::string &topic );
};
#endif // header guard
diff --git a/indra/newview/llviewerhome.cpp b/indra/newview/llviewerhome.cpp
index 58630978c4..6299b4fabd 100644
--- a/indra/newview/llviewerhome.cpp
+++ b/indra/newview/llviewerhome.cpp
@@ -35,12 +35,11 @@
#include "llviewerhome.h"
#include "lllogininstance.h"
+#include "llsd.h"
#include "llui.h"
#include "lluri.h"
-#include "llsd.h"
-#include "llversioninfo.h"
#include "llviewercontrol.h"
-#include "llviewernetwork.h"
+#include "llweb.h"
//static
std::string LLViewerHome::getHomeURL()
@@ -49,16 +48,12 @@ std::string LLViewerHome::getHomeURL()
// this value from settings.xml and support various substitutions
LLSD substitution;
- substitution["VERSION"] = LLVersionInfo::getVersion();
- substitution["CHANNEL"] = LLURI::escape(gSavedSettings.getString("VersionChannelName"));
- substitution["LANGUAGE"] = LLUI::getLanguage();
- substitution["AUTH_KEY"] = LLURI::escape(getAuthKey());
- substitution["GRID"] = LLViewerLogin::getInstance()->getGridLabel();
+ substitution["AUTH_TOKEN"] = LLURI::escape(getAuthKey());
+ // get the home URL and expand all of the substitutions
+ // (also adds things like [LANGUAGE], [VERSION], [OS], etc.)
std::string homeURL = gSavedSettings.getString("HomeSidePanelURL");
- LLStringUtil::format(homeURL, substitution);
-
- return homeURL;
+ return LLWeb::expandURLSubstitutions(homeURL, substitution);
}
//static
@@ -67,7 +62,13 @@ std::string LLViewerHome::getAuthKey()
// return the value of the (optional) auth token returned by login.cgi
// this lets the server provide an authentication token that we can
// blindly pass to the Home web page for it to perform authentication.
- static const std::string authKeyName("home_sidetray_token");
- return LLLoginInstance::getInstance()->getResponse(authKeyName);
+ // We use "home_sidetray_token", and fallback to "auth_token" if not
+ // present.
+ LLSD auth_token = LLLoginInstance::getInstance()->getResponse("home_sidetray_token");
+ if (auth_token.asString().empty())
+ {
+ auth_token = LLLoginInstance::getInstance()->getResponse("auth_token");
+ }
+ return auth_token.asString();
}
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 367c0c8343..103a70e032 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -561,11 +561,22 @@ bool LLViewerMedia::getInWorldMediaDisabled()
//////////////////////////////////////////////////////////////////////////////////////////
// static
-bool LLViewerMedia::isInterestingEnough(const LLUUID &object_id, const F64 &object_interest)
+bool LLViewerMedia::isInterestingEnough(const LLVOVolume *object, const F64 &object_interest)
{
bool result = false;
- if (LLViewerMediaFocus::getInstance()->getFocusedObjectID() == object_id)
+ if (NULL == object)
+ {
+ result = false;
+ }
+ // Focused? Then it is interesting!
+ else if (LLViewerMediaFocus::getInstance()->getFocusedObjectID() == object->getID())
+ {
+ result = true;
+ }
+ // Selected? Then it is interesting!
+ // XXX Sadly, 'contains()' doesn't take a const :(
+ else if (LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(object)))
{
result = true;
}
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 26b822aba6..7151186089 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -112,7 +112,7 @@ class LLViewerMedia
static void setInWorldMediaDisabled(bool disabled);
static bool getInWorldMediaDisabled();
- static bool isInterestingEnough(const LLUUID& object_id, const F64 &object_interest);
+ static bool isInterestingEnough(const LLVOVolume* object, const F64 &object_interest);
// Returns the priority-sorted list of all media impls.
static impl_list &getPriorityList();
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 801bd90423..f98aa361e0 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -139,7 +139,7 @@ public:
}
virtual bool isInterestingEnough() const
{
- return LLViewerMedia::isInterestingEnough(mObject->getID(), getMediaInterest());
+ return LLViewerMedia::isInterestingEnough(mObject, getMediaInterest());
}
virtual std::string getCapabilityUrl(const std::string &name) const
@@ -204,8 +204,8 @@ void LLVOVolume::markDead()
if (!mDead)
{
LLMediaDataClientObject::ptr_t obj = new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false);
- sObjectMediaClient->removeFromQueue(obj);
- sObjectMediaNavigateClient->removeFromQueue(obj);
+ if (sObjectMediaClient) sObjectMediaClient->removeFromQueue(obj);
+ if (sObjectMediaNavigateClient) sObjectMediaNavigateClient->removeFromQueue(obj);
// Detach all media impls from this object
for(U32 i = 0 ; i < mMediaImplList.size() ; i++)
@@ -222,15 +222,18 @@ void LLVOVolume::markDead()
void LLVOVolume::initClass()
{
// gSavedSettings better be around
- const F32 queue_timer_delay = gSavedSettings.getF32("PrimMediaRequestQueueDelay");
- const F32 retry_timer_delay = gSavedSettings.getF32("PrimMediaRetryTimerDelay");
- const U32 max_retries = gSavedSettings.getU32("PrimMediaMaxRetries");
- const U32 max_sorted_queue_size = gSavedSettings.getU32("PrimMediaMaxSortedQueueSize");
- const U32 max_round_robin_queue_size = gSavedSettings.getU32("PrimMediaMaxRoundRobinQueueSize");
- sObjectMediaClient = new LLObjectMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries,
- max_sorted_queue_size, max_round_robin_queue_size);
- sObjectMediaNavigateClient = new LLObjectMediaNavigateClient(queue_timer_delay, retry_timer_delay,
- max_retries, max_sorted_queue_size, max_round_robin_queue_size);
+ if (gSavedSettings.getBOOL("PrimMediaMasterEnabled"))
+ {
+ const F32 queue_timer_delay = gSavedSettings.getF32("PrimMediaRequestQueueDelay");
+ const F32 retry_timer_delay = gSavedSettings.getF32("PrimMediaRetryTimerDelay");
+ const U32 max_retries = gSavedSettings.getU32("PrimMediaMaxRetries");
+ const U32 max_sorted_queue_size = gSavedSettings.getU32("PrimMediaMaxSortedQueueSize");
+ const U32 max_round_robin_queue_size = gSavedSettings.getU32("PrimMediaMaxRoundRobinQueueSize");
+ sObjectMediaClient = new LLObjectMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries,
+ max_sorted_queue_size, max_round_robin_queue_size);
+ sObjectMediaNavigateClient = new LLObjectMediaNavigateClient(queue_timer_delay, retry_timer_delay,
+ max_retries, max_sorted_queue_size, max_round_robin_queue_size);
+ }
}
// static
@@ -1719,14 +1722,15 @@ LLVector3 LLVOVolume::getApproximateFaceNormal(U8 face_id)
void LLVOVolume::requestMediaDataUpdate(bool isNew)
{
- sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this, isNew));
+ if (sObjectMediaClient)
+ sObjectMediaClient->fetchMedia(new LLMediaDataClientObjectImpl(this, isNew));
}
bool LLVOVolume::isMediaDataBeingFetched() const
{
// I know what I'm doing by const_casting this away: this is just
// a wrapper class that is only going to do a lookup.
- return sObjectMediaClient->isInQueue(new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false));
+ return (sObjectMediaClient) ? sObjectMediaClient->isInQueue(new LLMediaDataClientObjectImpl(const_cast<LLVOVolume*>(this), false)) : false;
}
void LLVOVolume::cleanUpMediaImpls()
@@ -1925,7 +1929,7 @@ void LLVOVolume::mediaNavigated(LLViewerMediaImpl *impl, LLPluginClassMedia* plu
// "bounce back" to the current URL from the media entry
mediaNavigateBounceBack(face_index);
}
- else
+ else if (sObjectMediaNavigateClient)
{
llinfos << "broadcasting navigate with URI " << new_location << llendl;
@@ -1994,7 +1998,8 @@ void LLVOVolume::mediaEvent(LLViewerMediaImpl *impl, LLPluginClassMedia* plugin,
void LLVOVolume::sendMediaDataUpdate()
{
- sObjectMediaClient->updateMedia(new LLMediaDataClientObjectImpl(this, false));
+ if (sObjectMediaClient)
+ sObjectMediaClient->updateMedia(new LLMediaDataClientObjectImpl(this, false));
}
void LLVOVolume::removeMediaImpl(S32 texture_index)
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index c056c84e19..f8bb7336db 100644
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -38,11 +38,18 @@
// Library includes
#include "llwindow.h" // spawnWebBrowser()
-#include "llviewerwindow.h"
-#include "llviewercontrol.h"
+#include "llappviewer.h"
#include "llfloatermediabrowser.h"
#include "llfloaterreg.h"
+#include "lllogininstance.h"
+#include "llsd.h"
#include "lltoastalertpanel.h"
+#include "llui.h"
+#include "lluri.h"
+#include "llversioninfo.h"
+#include "llviewercontrol.h"
+#include "llviewernetwork.h"
+#include "llviewerwindow.h"
class URLLoader : public LLToastAlertPanel::URLLoader
{
@@ -122,3 +129,24 @@ std::string LLWeb::escapeURL(const std::string& url)
}
return escaped_url;
}
+
+//static
+std::string LLWeb::expandURLSubstitutions(const std::string &url,
+ const LLSD &default_subs)
+{
+ LLSD substitution = default_subs;
+ substitution["VERSION"] = LLVersionInfo::getVersion();
+ substitution["VERSION_MAJOR"] = LLVersionInfo::getMajor();
+ substitution["VERSION_MINOR"] = LLVersionInfo::getMinor();
+ substitution["VERSION_PATCH"] = LLVersionInfo::getPatch();
+ substitution["VERSION_BUILD"] = LLVersionInfo::getBuild();
+ substitution["CHANNEL"] = LLVersionInfo::getChannel();
+ substitution["LANGUAGE"] = LLUI::getLanguage();
+ substitution["GRID"] = LLViewerLogin::getInstance()->getGridLabel();
+ substitution["OS"] = LLAppViewer::instance()->getOSInfo().getOSStringSimple();
+
+ std::string expanded_url = url;
+ LLStringUtil::format(expanded_url, substitution);
+
+ return LLWeb::escapeURL(expanded_url);
+}
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 96a53db2ca..f4666c9280 100644
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -57,8 +57,11 @@ public:
/// Load the given url in the operating system's web browser
static void loadURLExternal(const std::string& url);
- // Returns escaped url (eg, " " to "%20") - used by all loadURL methods
+ /// Returns escaped url (eg, " " to "%20") - used by all loadURL methods
static std::string escapeURL(const std::string& url);
+ /// Expands various strings like [LANG], [VERSION], etc. in a URL
+ static std::string expandURLSubstitutions(const std::string &url,
+ const LLSD &default_subs);
};
#endif
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 282eddf380..73b5222ee3 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -7268,13 +7268,7 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
updateCull(camera, ref_result, 1);
stateSort(camera, ref_result);
}
- else
- {
- gGL.setColorMask(true, true);
- mWaterRef.clear();
- gGL.setColorMask(true, false);
- }
-
+
ref_mask = mRenderTypeMask;
mRenderTypeMask = mask;
}
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
index e6bdcdf78e..9c1a5499db 100644
--- a/indra/newview/skins/default/xui/en/floater_search.xml
+++ b/indra/newview/skins/default/xui/en/floater_search.xml
@@ -13,10 +13,6 @@
title="FIND"
width="670">
<floater.string
- name="search_url">
- http://int.searchwww-phx0.damballah.lindenlab.com/viewer
- </floater.string>
- <floater.string
name="loading_text">
Loading...
</floater.string>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
index a7def5306e..a65f7d3a54 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -3,7 +3,7 @@
border="true"
follows="left|top|right|bottom"
height="408"
- label="Input &amp; Camera"
+ label="Setup"
layout="topleft"
left="102"
name="Input panel"
@@ -223,7 +223,7 @@
follows="left|top"
height="23"
label="Reset"
- label_selected="Set"
+ label_selected="Reset"
layout="topleft"
left_pad="3"
name="reset_cache"
diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
index 68743357a6..ec612c4606 100644
--- a/indra/newview/tests/llviewerhelputil_test.cpp
+++ b/indra/newview/tests/llviewerhelputil_test.cpp
@@ -36,54 +36,59 @@
#include "../test/lltut.h"
#include "../llviewerhelputil.h"
-#include "../llversioninfo.h"
+#include "../llweb.h"
#include "llcontrol.h"
-#include "llsys.h"
#include <iostream>
-//----------------------------------------------------------------------------
-// Implementation of enough of LLControlGroup to support the tests:
+// values for all of the supported substitutions parameters
+static std::string gHelpURL;
+static std::string gVersion;
+static std::string gChannel;
+static std::string gLanguage;
+static std::string gGrid;
+static std::string gOS;
-static std::map<std::string,std::string> test_stringvec;
+//----------------------------------------------------------------------------
+// Mock objects for the dependencies of the code we're testing
LLControlGroup::LLControlGroup(const std::string& name)
- : LLInstanceTracker<LLControlGroup, std::string>(name)
-{
-}
-
-LLControlGroup::~LLControlGroup()
-{
-}
-
-// Implementation of just the LLControlGroup methods we requre
+ : LLInstanceTracker<LLControlGroup, std::string>(name) {}
+LLControlGroup::~LLControlGroup() {}
BOOL LLControlGroup::declareString(const std::string& name,
const std::string& initial_val,
const std::string& comment,
- BOOL persist)
-{
- test_stringvec[name] = initial_val;
- return true;
-}
-
-void LLControlGroup::setString(const std::string& name, const std::string& val)
+ BOOL persist) {return TRUE;}
+void LLControlGroup::setString(const std::string& name, const std::string& val){}
+std::string LLControlGroup::getString(const std::string& name)
{
- test_stringvec[name] = val;
+ if (name == "HelpURLFormat")
+ return gHelpURL;
+ return "";
}
+LLControlGroup gSavedSettings("test");
-std::string LLControlGroup::getString(const std::string& name)
+static void substitute_string(std::string &input, const std::string &search, const std::string &replace)
{
- return test_stringvec[name];
+ size_t pos = input.find(search);
+ while (pos != std::string::npos)
+ {
+ input = input.replace(pos, search.size(), replace);
+ pos = input.find(search);
+ }
}
-S32 LLVersionInfo::getMajor() { return 2; }
-S32 LLVersionInfo::getMinor() { return 0; }
-S32 LLVersionInfo::getPatch() { return 0; }
-S32 LLVersionInfo::getBuild() { return 200099; }
-const std::string &LLVersionInfo::getVersion()
+std::string LLWeb::expandURLSubstitutions(const std::string &url,
+ const LLSD &default_subs)
{
- static std::string version = "2.0.0.200099";
- return version;
+ std::string new_url = url;
+ substitute_string(new_url, "[TOPIC]", default_subs["TOPIC"].asString());
+ substitute_string(new_url, "[VERSION]", gVersion);
+ substitute_string(new_url, "[CHANNEL]", gChannel);
+ substitute_string(new_url, "[LANGUAGE]", gLanguage);
+ substitute_string(new_url, "[GRID]", gGrid);
+ substitute_string(new_url, "[OS]", gOS);
+ return new_url;
}
//----------------------------------------------------------------------------
@@ -101,41 +106,52 @@ namespace tut
template<> template<>
void viewerhelputil_object_t::test<1>()
{
- LLOSInfo osinfo;
- LLControlGroup cgr("test");
- cgr.declareString("HelpURLFormat", "fooformat", "declared_for_test", FALSE);
- cgr.declareString("VersionChannelName", "foochannelname", "declared_for_test", FALSE);
- cgr.declareString("Language", "foolanguage", "declared_for_test", FALSE);
std::string topic("test_topic");
-
std::string subresult;
- cgr.setString("HelpURLFormat", "fooformat");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "fooformat";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("no substitution tags", subresult, "fooformat");
- cgr.setString("HelpURLFormat", "");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("blank substitution format", subresult, "");
- cgr.setString("HelpURLFormat", "[LANGUAGE]");
- cgr.setString("Language", "");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "[TOPIC]";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
+ ensure_equals("topic name", subresult, "test_topic");
+
+ gHelpURL = "[LANGUAGE]";
+ gLanguage = "";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("simple substitution with blank", subresult, "");
- cgr.setString("HelpURLFormat", "[LANGUAGE]");
- cgr.setString("Language", "Esperanto");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "[LANGUAGE]";
+ gLanguage = "Esperanto";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("simple substitution", subresult, "Esperanto");
- cgr.setString("HelpURLFormat", "[XXX]");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "http://secondlife.com/[LANGUAGE]";
+ gLanguage = "Gaelic";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
+ ensure_equals("simple substitution with url", subresult, "http://secondlife.com/Gaelic");
+
+ gHelpURL = "[XXX]";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("unknown substitution", subresult, "[XXX]");
- cgr.setString("HelpURLFormat", "[LANGUAGE]/[LANGUAGE]");
- cgr.setString("Language", "Esperanto");
- subresult = LLViewerHelpUtil::buildHelpURL(topic, cgr, osinfo);
+ gHelpURL = "[LANGUAGE]/[LANGUAGE]";
+ gLanguage = "Esperanto";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
ensure_equals("multiple substitution", subresult, "Esperanto/Esperanto");
+
+ gHelpURL = "http://[CHANNEL]/[VERSION]/[LANGUAGE]/[OS]/[GRID]/[XXX]";
+ gChannel = "Second Life Test";
+ gVersion = "2.0";
+ gLanguage = "gaelic";
+ gOS = "AmigaOS 2.1";
+ gGrid = "mysim";
+ subresult = LLViewerHelpUtil::buildHelpURL(topic);
+ ensure_equals("complex substitution", subresult, "http://Second Life Test/2.0/gaelic/AmigaOS 2.1/mysim/[XXX]");
}
-
}
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 32fdd41be2..d6d6aa48d1 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -324,6 +324,7 @@ class WindowsManifest(ViewerManifest):
self.path("qtnetwork4.dll")
self.path("qtopengl4.dll")
self.path("qtwebkit4.dll")
+ self.path("qtxmlpatterns4.dll")
self.path("ssleay32.dll")
self.end_prefix()
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index 0011daaec6..89e2d8582d 100644
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -338,6 +338,13 @@ add_custom_command(TARGET llmediaplugintest POST_BUILD
DEPENDS ${BUILT_SLPLUGIN}
)
+get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_LLCOMMON}
+)
+
+
if (DARWIN OR WINDOWS)
get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
add_custom_command(TARGET llmediaplugintest POST_BUILD
@@ -435,6 +442,7 @@ if(WINDOWS)
qtnetwork4.dll
qtopengl4.dll
qtwebkit4.dll
+ qtxmlpatterns4.dll
ssleay32.dll
)
copy_if_different(
diff --git a/install.xml b/install.xml
index 2d60f07c11..2e317755da 100644
--- a/install.xml
+++ b/install.xml
@@ -948,9 +948,9 @@ anguage Infrstructure (CLI) international standard</string>
<key>darwin</key>
<map>
<key>md5sum</key>
- <string>7f818f13faf7c02838fe66f7d27e1913</string>
+ <string>44fe5bca65db2951ce91b5b6c8596ee0</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-darwin-20091124.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-4.6-darwin-20091215.tar.bz2</uri>
</map>
<key>linux</key>
<map>
@@ -962,9 +962,9 @@ anguage Infrstructure (CLI) international standard</string>
<key>windows</key>
<map>
<key>md5sum</key>
- <string>92cff05661b5547caae7cc6c66d09870</string>
+ <string>3846354e2e20a98c0401317eb114ff5e</string>
<key>url</key>
- <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-windows-20091123.tar.bz2</uri>
+ <uri>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-windows-qt4.6-20091215.tar.bz2</uri>
</map>
</map>
</map>