summaryrefslogtreecommitdiff
path: root/indra/test_apps/llplugintest
diff options
context:
space:
mode:
Diffstat (limited to 'indra/test_apps/llplugintest')
-rwxr-xr-x[-rw-r--r--]indra/test_apps/llplugintest/CMakeLists.txt152
-rw-r--r--indra/test_apps/llplugintest/README.Linden21
-rwxr-xr-x[-rw-r--r--]indra/test_apps/llplugintest/bookmarks.txt0
-rwxr-xr-x[-rw-r--r--]indra/test_apps/llplugintest/llmediaplugintest.cpp184
-rwxr-xr-x[-rw-r--r--]indra/test_apps/llplugintest/llmediaplugintest.h49
5 files changed, 304 insertions, 102 deletions
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index b4043b0fd9..0c8bdc464d 100644..100755
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -1,9 +1,8 @@
# -*- cmake -*-
-
project(llplugintest)
include(00-Common)
-include(FindOpenGL)
+include(OpenGL)
include(LLCommon)
include(LLPlugin)
include(Linking)
@@ -26,6 +25,9 @@ include_directories(
${LLRENDER_INCLUDE_DIRS}
${LLWINDOW_INCLUDE_DIRS}
)
+include_directories(SYSTEM
+ ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+ )
if (DARWIN)
include(CMakeFindFrameworks)
@@ -332,56 +334,56 @@ else (DARWIN)
)
endif (DARWIN)
-get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
+set(BUILT_SLPLUGIN $<TARGET_FILE:SLPlugin>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_SLPLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_SLPLUGIN}
)
-get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+set(BUILT_LLCOMMON $<TARGET_FILE:llcommon>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_LLCOMMON}
)
+set(BUILT_WEBKIT_PLUGIN $<TARGET_FILE:media_plugin_webkit>)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_WEBKIT_PLUGIN}
+)
if (DARWIN OR WINDOWS)
- get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_WEBKIT_PLUGIN} ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_WEBKIT_PLUGIN}
- )
-
- get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
+ set(BUILT_QUICKTIME_PLUGIN $<TARGET_FILE:media_plugin_quicktime>)
add_custom_command(TARGET llmediaplugintest POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_QUICKTIME_PLUGIN} ${PLUGINS_DESTINATION_DIR}
DEPENDS ${BUILT_QUICKTIME_PLUGIN}
)
-
- get_target_property(BUILT_EXAMPLE_PLUGIN media_plugin_example LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_EXAMPLE_PLUGIN}
- )
-
- # copy over bookmarks file if llmediaplugintest gets built
- get_target_property(BUILT_LLMEDIAPLUGINTEST llmediaplugintest LOCATION)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
- DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
- )
- # also copy it to the same place as SLPlugin, which is what the mac wants...
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
- )
endif (DARWIN OR WINDOWS)
+set(BUILT_EXAMPLE_PLUGIN $<TARGET_FILE:media_plugin_example>)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_EXAMPLE_PLUGIN} ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_EXAMPLE_PLUGIN}
+)
+
+# copy over bookmarks file if llmediaplugintest gets built
+set(BUILT_LLMEDIAPLUGINTEST $<TARGET_FILE:llmediaplugintest>)
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${CMAKE_CURRENT_BINARY_DIR}/
+ DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
+# also copy it to the same place as SLPlugin, which is what the mac wants...
+add_custom_command(TARGET llmediaplugintest POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/bookmarks.txt ${PLUGINS_DESTINATION_DIR}
+ DEPENDS ${BUILT_LLMEDIAPLUGINTEST}
+)
+
if (DARWIN)
- add_custom_command(TARGET llmediaplugintest POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
- DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
- )
+# add_custom_command(TARGET llmediaplugintest POST_BUILD
+# COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
+# DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
+# )
endif (DARWIN)
if(WINDOWS)
@@ -389,7 +391,7 @@ if(WINDOWS)
# Plugin test library deploy
#
# Debug config runtime files required for the plugin test mule
- set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
+ set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
set(plugintest_debug_files
libeay32.dll
libglib-2.0-0.dll
@@ -412,7 +414,7 @@ if(WINDOWS)
set(plugin_test_targets ${plugin_test_targets} ${out_targets})
# Debug config runtime files required for the plugin test mule (Qt image format plugins)
- set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/imageformats")
+ set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/imageformats")
set(plugintest_debug_files
qgifd4.dll
qicod4.dll
@@ -430,7 +432,7 @@ if(WINDOWS)
set(plugin_test_targets ${plugin_test_targets} ${out_targets})
# Debug config runtime files required for the plugin test mule (Qt codec plugins)
- set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/codecs")
+ set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/codecs")
set(plugintest_debug_files
qcncodecsd4.dll
qjpcodecsd4.dll
@@ -446,7 +448,7 @@ if(WINDOWS)
set(plugin_test_targets ${plugin_test_targets} ${out_targets})
# Release & ReleaseDebInfo config runtime files required for the plugin test mule
- set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
set(plugintest_release_files
libeay32.dll
libglib-2.0-0.dll
@@ -478,7 +480,7 @@ if(WINDOWS)
set(plugin_test_targets ${plugin_test_targets} ${out_targets})
# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins)
- set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/imageformats")
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/imageformats")
set(plugintest_release_files
qgif4.dll
qico4.dll
@@ -504,7 +506,7 @@ if(WINDOWS)
set(plugin_test_targets ${plugin_test_targets} ${out_targets})
# Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt codec plugins)
- set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/codecs")
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/codecs")
set(plugintest_release_files
qcncodecs4.dll
qjpcodecs4.dll
@@ -536,4 +538,76 @@ if(WINDOWS)
endif(WINDOWS)
+if (DARWIN)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
+ set(plugintest_release_files
+ libexception_handler.dylib
+ libaprutil-1.0.dylib
+ libapr-1.0.dylib
+ libexpat.1.5.2.dylib
+ libQtCore.4.7.1.dylib
+ libQtCore.4.dylib
+ libQtGui.4.7.1.dylib
+ libQtGui.4.dylib
+ libQtNetwork.4.7.1.dylib
+ libQtNetwork.4.dylib
+ libQtOpenGL.4.7.1.dylib
+ libQtOpenGL.4.dylib
+ libQtWebKit.4.7.1.dylib
+ libQtWebKit.4.dylib
+ libQtSvg.4.7.1.dylib
+ libQtSvg.4.dylib
+ libQtXml.4.7.1.dylib
+ libQtXml.4.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt image format plugins)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/imageformats")
+ set(plugintest_release_files
+ libqgif.dylib
+ libqico.dylib
+ libqjpeg.dylib
+ libqmng.dylib
+ libqsvg.dylib
+ libqtiff.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/imageformats"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ # Release & ReleaseDebInfo config runtime files required for the FB connect test (Qt codec plugins)
+ set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_PLUGINS}/codecs")
+ set(plugintest_release_files
+ libqcncodecs.dylib
+ libqjpcodecs.dylib
+ libqkrcodecs.dylib
+ libqtwcodecs.dylib
+ )
+ copy_if_different(
+ ${plugintest_release_src_dir}
+ "${PLUGINS_DESTINATION_DIR}/codecs"
+ out_targets
+ ${plugintest_release_files}
+ )
+ set(plugin_test_targets ${plugin_test_targets} ${out_targets})
+
+ add_custom_target(copy_plugintest_libs ALL
+ DEPENDS
+ ${plugin_test_targets}
+ )
+
+ add_dependencies(llmediaplugintest copy_plugintest_libs)
+endif (DARWIN)
+
ll_deploy_sharedlibs_command(llmediaplugintest)
diff --git a/indra/test_apps/llplugintest/README.Linden b/indra/test_apps/llplugintest/README.Linden
new file mode 100644
index 0000000000..4a9f223c21
--- /dev/null
+++ b/indra/test_apps/llplugintest/README.Linden
@@ -0,0 +1,21 @@
+
+1. Description
+
+ Exercises SLPlugin. Demonstrates mediakit plugin reuse and
+ switchover as MIME type changes (web, quicktime, flash).
+
+
+2. Running
+
+ 2.1 Mac
+
+ Make certain '.' is included in PATH. E.g.:
+
+ PATH=.:"$PATH" open build-darwin-i386/test_apps/llmediaplugintest/RelWithDebInfo/llmediaplugintest.app
+
+ Otherwise the program won't find SLPlugin and will timeout and
+ fail after 30 seconds and give you little information as to why.
+
+ Running 'dtruss' on plugin test applications will give you a great
+ deal of insight into why they aren't activating.
+
diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt
index 2ff64f217f..2ff64f217f 100644..100755
--- a/indra/test_apps/llplugintest/bookmarks.txt
+++ b/indra/test_apps/llplugintest/bookmarks.txt
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index 5677308fb0..fa4f5abd28 100644..100755
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -2,30 +2,25 @@
* @file LLMediaPluginTest.cpp
* @brief Primary test application for LLMedia (Separate Process) Plugin system
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Copyright (C) 2011, 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$
*/
@@ -42,6 +37,12 @@
#include "llmediaplugintest.h"
+
+#if LL_WINDOWS
+#pragma warning(disable: 4263)
+#pragma warning(disable: 4264)
+#endif
+
#if __APPLE__
#include <GLUT/glut.h>
#include <CoreFoundation/CoreFoundation.h>
@@ -51,10 +52,6 @@
#define GLUI_FREEGLUT
#endif
-#if LL_WINDOWS
-#pragma warning(disable: 4263)
-#pragma warning(disable: 4264)
-#endif
#include "glui.h"
@@ -241,6 +238,9 @@ LLMediaPluginTest::~LLMediaPluginTest()
{
remMediaPanel( mMediaPanels[ i ] );
};
+
+ // Stop the plugin read thread if it's running.
+ LLPluginProcessParent::setUseReadThread(false);
}
////////////////////////////////////////////////////////////////////////////////
@@ -958,6 +958,23 @@ mediaPanel* LLMediaPluginTest::findMediaPanel( LLPluginClassMedia* source )
////////////////////////////////////////////////////////////////////////////////
//
+mediaPanel* LLMediaPluginTest::findMediaPanel( const std::string &target_name )
+{
+ mediaPanel *result = NULL;
+
+ for( int panel = 0; panel < (int)mMediaPanels.size(); ++panel )
+ {
+ if ( mMediaPanels[ panel ]->mTarget == target_name )
+ {
+ result = mMediaPanels[ panel ];
+ }
+ }
+
+ return result;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//
void LLMediaPluginTest::navigateToNewURI( std::string uri )
{
if ( uri.length() )
@@ -1047,6 +1064,11 @@ void LLMediaPluginTest::gluiCallback( int control_id )
}
}
else
+ if ( control_id == mIdUsePluginReadThread )
+ {
+ LLPluginProcessParent::setUseReadThread(mUsePluginReadThread);
+ }
+ else
if ( control_id == mIdControlCrashPlugin )
{
// send message to plugin and ask it to crash
@@ -1431,6 +1453,12 @@ void LLMediaPluginTest::makeChrome()
glui_window_misc_control->set_main_gfx_window( mAppWindow );
glui_window_misc_control->add_column( true );
+ mIdUsePluginReadThread = start_id++;
+ mUsePluginReadThread = 0;
+ glui_window_misc_control->add_checkbox( "Use plugin read thread", &mUsePluginReadThread, mIdUsePluginReadThread, gluiCallbackWrapper );
+ glui_window_misc_control->set_main_gfx_window( mAppWindow );
+ glui_window_misc_control->add_column( true );
+
mIdLargePanelSpacing = start_id++;
mLargePanelSpacing = 0;
glui_window_misc_control->add_checkbox( "Large Panel Spacing", &mLargePanelSpacing, mIdLargePanelSpacing, gluiCallbackWrapper );
@@ -1557,7 +1585,7 @@ std::string LLMediaPluginTest::pluginNameFromMimeType( std::string& mime_type )
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaPluginTest::addMediaPanel( std::string url )
+mediaPanel* LLMediaPluginTest::addMediaPanel( std::string url )
{
// Get the plugin filename using the URL
std::string mime_type = mimeTypeFromUrl( url );
@@ -1589,12 +1617,12 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
{
std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
- return;
+ return NULL;
}
std::string user_data_path = std::string( cwd ) + "/";
#endif
media_source->setUserDataPath(user_data_path);
- media_source->init( launcher_name, plugin_name, false );
+ media_source->init( launcher_name, user_data_path, plugin_name, false );
media_source->setDisableTimeout(mDisableTimeout);
// make a new panel and save parameters
@@ -1659,6 +1687,8 @@ void LLMediaPluginTest::addMediaPanel( std::string url )
std::cout << "Adding new media panel for " << url << "(" << media_width << "x" << media_height << ") with index " << panel->mId << " - total panels = " << mMediaPanels.size() << std::endl;
}
+
+ return panel;
}
////////////////////////////////////////////////////////////////////////////////
@@ -1764,15 +1794,15 @@ void LLMediaPluginTest::updateMediaPanel( mediaPanel* panel )
////////////////////////////////////////////////////////////////////////////////
//
-void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
+mediaPanel* LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
{
// no media panels so we can't change anything - have to add
if ( mMediaPanels.size() == 0 )
- return;
+ return NULL;
// sanity check
if ( ! panel )
- return;
+ return NULL;
int index;
for(index = 0; index < (int)mMediaPanels.size(); index++)
@@ -1784,7 +1814,7 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
if(index >= (int)mMediaPanels.size())
{
// panel isn't in mMediaPanels
- return;
+ return NULL;
}
std::cout << "Replacing media panel with index " << panel->mId << std::endl;
@@ -1826,13 +1856,13 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
if (NULL == getcwd( cwd, FILENAME_MAX - 1 ))
{
std::cerr << "Couldn't get cwd - probably too long - failing to init." << std::endl;
- return;
+ return NULL;
}
std::string user_data_path = std::string( cwd ) + "/";
#endif
media_source->setUserDataPath(user_data_path);
- media_source->init( launcher_name, plugin_name, false );
+ media_source->init( launcher_name, user_data_path, plugin_name, false );
media_source->setDisableTimeout(mDisableTimeout);
// make a new panel and save parameters
@@ -1866,6 +1896,8 @@ void LLMediaPluginTest::replaceMediaPanel( mediaPanel* panel, std::string url )
// load and start the URL
panel->mMediaSource->loadURI( url );
panel->mMediaSource->start();
+
+ return panel;
}
////////////////////////////////////////////////////////////////////////////////
@@ -1955,7 +1987,7 @@ void LLMediaPluginTest::updateStatusBar()
cached_distance == mDistanceCameraToSelectedGeometry
)
{
- // nothing changed so don't spend time in this shitty function
+ // nothing changed so don't spend time here
return;
};
@@ -2124,8 +2156,44 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
}
break;
+ case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+ std::cerr << "Media event: MEDIA_EVENT_NAVIGATE_ERROR_PAGE, uri is: " << self->getClickURL() << std::endl;
+ break;
+
case MEDIA_EVENT_CLICK_LINK_HREF:
- std::cerr << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << std::endl;
+ {
+ std::cerr << "Media event: MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << ", target is " << self->getClickTarget() << std::endl;
+ // retrieve the event parameters
+ std::string url = self->getClickURL();
+ std::string target = self->getClickTarget();
+
+ if(target == "_external")
+ {
+ // this should open in an external browser, but since this is a test app we don't care.
+ }
+ else if(target == "_blank")
+ {
+ // Create a new panel with the specified URL.
+ addMediaPanel(url);
+ }
+ else // other named target
+ {
+ mediaPanel *target_panel = findMediaPanel(target);
+ if(target_panel)
+ {
+ target_panel = replaceMediaPanel(target_panel, url);
+ }
+ else
+ {
+ target_panel = addMediaPanel(url);
+ }
+
+ if(target_panel)
+ {
+ target_panel->mTarget = target;
+ }
+ }
+ }
break;
case MEDIA_EVENT_CLICK_LINK_NOFOLLOW:
@@ -2139,6 +2207,46 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
case MEDIA_EVENT_PLUGIN_FAILED_LAUNCH:
std::cerr << "Media event: MEDIA_EVENT_PLUGIN_FAILED_LAUNCH" << std::endl;
break;
+
+ case MEDIA_EVENT_CLOSE_REQUEST:
+ std::cerr << "Media event: MEDIA_EVENT_CLOSE_REQUEST" << std::endl;
+ break;
+
+ case MEDIA_EVENT_PICK_FILE_REQUEST:
+ std::cerr << "Media event: MEDIA_EVENT_PICK_FILE_REQUEST" << std::endl;
+ // TODO: display an actual file picker
+ self->sendPickFileResponse("cake");
+ break;
+
+ case MEDIA_EVENT_GEOMETRY_CHANGE:
+ std::cerr << "Media event: MEDIA_EVENT_GEOMETRY_CHANGE, uuid is " << self->getClickUUID()
+ << ", x = " << self->getGeometryX()
+ << ", y = " << self->getGeometryY()
+ << ", width = " << self->getGeometryWidth()
+ << ", height = " << self->getGeometryHeight()
+ << std::endl;
+ break;
+
+ case MEDIA_EVENT_AUTH_REQUEST:
+ {
+ //std::cerr << "Media event: MEDIA_EVENT_AUTH_REQUEST, url " << self->getAuthURL() ", realm " << self->getAuthRealm() << std::endl;
+
+ // TODO: display an auth dialog
+ self->sendAuthResponse(false, "", "");
+ }
+ break;
+
+ case MEDIA_EVENT_LINK_HOVERED:
+ {
+ std::cerr << "Media event: MEDIA_EVENT_LINK_HOVERED, hover text is: " << self->getHoverText() << std::endl;
+ }
+ break;
+
+ default:
+ {
+ std::cerr << "Media event: <unknown>, code is: " << int(event) << std::endl;
+ }
+ break;
}
}
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h
index e7c7699343..1f6f18e43c 100644..100755
--- a/indra/test_apps/llplugintest/llmediaplugintest.h
+++ b/indra/test_apps/llplugintest/llmediaplugintest.h
@@ -2,30 +2,25 @@
* @file LLMediaPluginTest.cpp
* @brief Primary test application for LLMedia (Separate Process) Plugin system
*
- * $LicenseInfo:firstyear=2008&license=viewergpl$
- *
- * Copyright (c) 2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2008&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlife.com/developers/opensource/gplv2
- *
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at http://secondlife.com/developers/opensource/flossexception
- *
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
- *
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * 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$
*/
@@ -56,6 +51,7 @@ struct mediaPanel
int mId;
std::string mStartUrl;
std::string mMimeType;
+ std::string mTarget;
LLPluginClassMedia *mMediaSource;
int mMediaWidth;
int mMediaHeight;
@@ -96,16 +92,17 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
void draw( int draw_type );
void windowPosToTexturePos( int window_x, int window_y, int& media_x, int& media_y, int& id );
- void addMediaPanel( std::string url );
+ mediaPanel* addMediaPanel( std::string url );
void updateMediaPanel( mediaPanel* panel );
void remMediaPanel( mediaPanel* panel );
- void replaceMediaPanel( mediaPanel* panel, std::string url );
+ mediaPanel* replaceMediaPanel( mediaPanel* panel, std::string url );
void getRandomMediaSize( int& width, int& height, std::string mime_type );
void navigateToNewURI( std::string uri );
void initUrlHistory( std::string uri );
void selectPanelById( int id );
void selectPanel( mediaPanel* panel );
mediaPanel* findMediaPanel( LLPluginClassMedia* panel );
+ mediaPanel* findMediaPanel( const std::string &target_name );
void makePickTexture( int id, GLuint* texture_handle, unsigned char** texture_pixels );
void makeChrome();
void resetView();
@@ -164,6 +161,8 @@ class LLMediaPluginTest : public LLPluginClassMediaOwner
int mRandomBookmarks;
int mIdDisableTimeout;
int mDisableTimeout;
+ int mIdUsePluginReadThread;
+ int mUsePluginReadThread;
int mIdLargePanelSpacing;
int mLargePanelSpacing;
int mIdControlCrashPlugin;