summaryrefslogtreecommitdiff
path: root/avmedia/source/viewer
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-11-20 14:43:45 +0100
committerStephan Bergmann <sbergman@redhat.com>2013-11-20 14:44:27 +0100
commit5668e73beb30b95abc6520b7432c54972ca3ab2c (patch)
treeb9772e4ab6a6f92d655c0bacbb364ce3b2a4eb18 /avmedia/source/viewer
parentba1c6c94fce9fd20e224a265475e0b80576a2dd9 (diff)
avmedia: Implement "block untrusted referer links" feature
See f0a9ca24fd4bf79cac908bf0d6fdb8905dc504db "rhbz#887420 Implement 'block untrusted referer links' feature" for details. This adds some further /*TODO?*/ comments, and one known problem (marked /*TODO!*/) is that movies/sounds are not blocked during a slideshow presentation. Change-Id: Ib2d0c7e4f7b02c4bdec0d8a90cee5e7e1bee8325
Diffstat (limited to 'avmedia/source/viewer')
-rw-r--r--avmedia/source/viewer/mediawindow.cxx16
-rw-r--r--avmedia/source/viewer/mediawindow_impl.cxx15
-rw-r--r--avmedia/source/viewer/mediawindow_impl.hxx4
3 files changed, 21 insertions, 14 deletions
diff --git a/avmedia/source/viewer/mediawindow.cxx b/avmedia/source/viewer/mediawindow.cxx
index 45c9901035c7..2ef1f9a06ebf 100644
--- a/avmedia/source/viewer/mediawindow.cxx
+++ b/avmedia/source/viewer/mediawindow.cxx
@@ -56,9 +56,9 @@ MediaWindow::~MediaWindow() {}
// -------------------------------------------------------------------------
-void MediaWindow::setURL( const OUString& rURL )
+void MediaWindow::setURL( const OUString& rURL, const OUString& rReferer )
{
- mpImpl->setURL( rURL, OUString() );
+ mpImpl->setURL( rURL, OUString(), rReferer );
}
// -------------------------------------------------------------------------
@@ -328,7 +328,7 @@ void MediaWindow::executeFormatErrorBox( Window* pParent )
// -------------------------------------------------------------------------
-bool MediaWindow::isMediaURL( const OUString& rURL, bool bDeep, Size* pPreferredSizePixel )
+bool MediaWindow::isMediaURL( const OUString& rURL, const OUString& rReferer, bool bDeep, Size* pPreferredSizePixel )
{
const INetURLObject aURL( rURL );
bool bRet = false;
@@ -340,7 +340,8 @@ bool MediaWindow::isMediaURL( const OUString& rURL, bool bDeep, Size* pPreferred
try
{
uno::Reference< media::XPlayer > xPlayer( priv::MediaWindowImpl::createPlayer(
- aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) ) );
+ aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ),
+ rReferer ) );
if( xPlayer.is() )
{
@@ -383,18 +384,19 @@ bool MediaWindow::isMediaURL( const OUString& rURL, bool bDeep, Size* pPreferred
// -------------------------------------------------------------------------
-uno::Reference< media::XPlayer > MediaWindow::createPlayer( const OUString& rURL )
+uno::Reference< media::XPlayer > MediaWindow::createPlayer( const OUString& rURL, const OUString& rReferer )
{
- return priv::MediaWindowImpl::createPlayer( rURL );
+ return priv::MediaWindowImpl::createPlayer( rURL, rReferer );
}
// -------------------------------------------------------------------------
uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const OUString& rURL,
+ const OUString& rReferer,
bool bAllowToCreateReplacementGraphic,
double fMediaTime )
{
- uno::Reference< media::XPlayer > xPlayer( createPlayer( rURL ) );
+ uno::Reference< media::XPlayer > xPlayer( createPlayer( rURL, rReferer ) );
uno::Reference< graphic::XGraphic > xRet;
::std::auto_ptr< Graphic > apGraphic;
diff --git a/avmedia/source/viewer/mediawindow_impl.cxx b/avmedia/source/viewer/mediawindow_impl.cxx
index 4157f7a07610..2c2239691f7d 100644
--- a/avmedia/source/viewer/mediawindow_impl.cxx
+++ b/avmedia/source/viewer/mediawindow_impl.cxx
@@ -29,6 +29,7 @@
#include <comphelper/processfactory.hxx>
#include <osl/mutex.hxx>
#include <tools/urlobj.hxx>
+#include <unotools/securityoptions.hxx>
#include <vcl/svapp.hxx>
#include <com/sun/star/awt/SystemPointer.hpp>
@@ -204,9 +205,13 @@ MediaWindowImpl::~MediaWindowImpl()
delete mpMediaWindowControl;
}
-uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString& rURL )
+uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString& rURL, const OUString& rReferer )
{
uno::Reference< media::XPlayer > xPlayer;
+ if (SvtSecurityOptions().isUntrustedReferer(rReferer)) {
+ return xPlayer;
+ }
+
uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
static const char * aServiceManagers[] = {
@@ -246,7 +251,7 @@ uno::Reference< media::XPlayer > MediaWindowImpl::createPlayer( const OUString&
}
void MediaWindowImpl::setURL( const OUString& rURL,
- OUString const& rTempURL)
+ OUString const& rTempURL, OUString const& rReferer)
{
if( rURL != getURL() )
{
@@ -278,7 +283,7 @@ void MediaWindowImpl::setURL( const OUString& rURL,
}
mxPlayer = createPlayer(
- (!mTempFileURL.isEmpty()) ? mTempFileURL : maFileURL );
+ (!mTempFileURL.isEmpty()) ? mTempFileURL : maFileURL, rReferer );
onURLChanged();
}
}
@@ -326,7 +331,7 @@ void MediaWindowImpl::updateMediaItem( MediaItem& rItem ) const
rItem.setMute( isMute() );
rItem.setVolumeDB( getVolumeDB() );
rItem.setZoom( getZoom() );
- rItem.setURL( getURL(), mTempFileURL );
+ rItem.setURL( getURL(), mTempFileURL, ""/*TODO?*/ );
}
void MediaWindowImpl::executeMediaItem( const MediaItem& rItem )
@@ -335,7 +340,7 @@ void MediaWindowImpl::executeMediaItem( const MediaItem& rItem )
// set URL first
if( nMaskSet & AVMEDIA_SETMASK_URL )
- setURL( rItem.getURL(), rItem.getTempURL() );
+ setURL( rItem.getURL(), rItem.getTempURL(), rItem.getReferer() );
// set different states next
if( nMaskSet & AVMEDIA_SETMASK_TIME )
diff --git a/avmedia/source/viewer/mediawindow_impl.hxx b/avmedia/source/viewer/mediawindow_impl.hxx
index 340ab128e944..42d95108b86b 100644
--- a/avmedia/source/viewer/mediawindow_impl.hxx
+++ b/avmedia/source/viewer/mediawindow_impl.hxx
@@ -91,9 +91,9 @@ namespace avmedia
MediaWindowImpl( Window* parent, MediaWindow* pMediaWindow, bool bInternalMediaControl );
virtual ~MediaWindowImpl();
- static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const OUString& rURL );
+ static ::com::sun::star::uno::Reference< ::com::sun::star::media::XPlayer > createPlayer( const OUString& rURL, const OUString& rReferer );
- void setURL( const OUString& rURL, OUString const& rTempURL );
+ void setURL( const OUString& rURL, OUString const& rTempURL, OUString const& rReferer );
const OUString& getURL() const;