diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-11-20 14:43:45 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-11-20 14:44:27 +0100 |
commit | 5668e73beb30b95abc6520b7432c54972ca3ab2c (patch) | |
tree | b9772e4ab6a6f92d655c0bacbb364ce3b2a4eb18 /avmedia/source/viewer | |
parent | ba1c6c94fce9fd20e224a265475e0b80576a2dd9 (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.cxx | 16 | ||||
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.cxx | 15 | ||||
-rw-r--r-- | avmedia/source/viewer/mediawindow_impl.hxx | 4 |
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; |