diff -r 786160610b4d -r afcd8e6d025b browsercore/core/network/SchemeHandlerBr.cpp --- a/browsercore/core/network/SchemeHandlerBr.cpp Wed Sep 01 13:56:21 2010 -0400 +++ b/browsercore/core/network/SchemeHandlerBr.cpp Fri Sep 17 12:11:40 2010 -0400 @@ -21,36 +21,26 @@ // INCLUDE FILES #include -#include -#include +#ifndef QTHIGHWAY +#include "SchemeHandlerBrDefault_p.h" +#else // QTHIGHWAY defined +#include "SchemeHandlerBrQtHighway_p.h" +#endif -#if defined(Q_OS_SYMBIAN) -#include "WrtTelServiceBr.h" -#include // KUidMsgTypeSMTP -#include // CSendUi -#include // CMessageData -//For Rtsp Scheme -#include -#include -#include -#endif #include "SchemeHandlerBr.h" +#include "SchemeHandlerBr_p.h" #include "bedrockprovisioning.h" -#define MAILTO_SCHEME "mailto" -#define TEL_SCHEME "tel" -#define SIP_SCHEME "sip" -#define WTAI_SCHEME "wtai" -#define WTAI_MC "/mc;" -#define WTAI_AP "/ap;" -#define RTSP_SCHEME "rtsp" -#if defined(Q_OS_SYMBIAN) -_LIT( KRtspFileName, "c:\\system\\temp\\RtspTemp.ram" ); -#endif +#define HTTP_SCHEME "http" +#define HTTPS_SCHEME "https" +#define FILE_SCHEME "file" + namespace WRT { - + +// ================= METHODS ======================= + /*! * \class SchemeHandler * \brief Schemehandler class @@ -59,266 +49,69 @@ // SchemeHandler::SchemeHandler() // --------------------------------------------------------- // -SchemeHandler::SchemeHandler() -#if defined(Q_OS_SYMBIAN) - : - m_telService(NULL) -#endif +SchemeHandler::SchemeHandler() : QObject(), d(new SCHEME_HNDLR_PRIVATE()) { } SchemeHandler::~SchemeHandler() { -#if defined(Q_OS_SYMBIAN) - delete m_telService; -#endif + delete d; } /*! - * @param url : - * @return - */ -bool SchemeHandler::HandleSpecialScheme(const QUrl &url) + Handles specified URL if it is one of the known schemes. If supported, the + url is sent to an external application to be handled. +*/ +SchemeHandler::SchemeHandlerError SchemeHandler::HandleSpecialScheme(const QUrl &url) { - return HandleUrlEmbedded( url, ReadSdConfirmDtmfValue() ); + return d->HandleUrl(url, d->ReadSdConfirmDtmfValue()); } +// ================= SchemeHandlerPrivate METHODS ======================= + /*! - * @return turn/false + * \class SchemeHandlerPrivate + * \brief SchemeHandlerPrivate class */ -bool SchemeHandler::ReadSdConfirmDtmfValue() +// --------------------------------------------------------- +// SchemeHandlerPrivate::SchemeHandlerPrivate() +// --------------------------------------------------------- +// +SchemeHandlerPrivate::SchemeHandlerPrivate() +{ +} + +SchemeHandlerPrivate::~SchemeHandlerPrivate() +{ +} + +/*! + Returns ConfirmDTMF value as a bool. +*/ +bool SchemeHandlerPrivate::ReadSdConfirmDtmfValue() { return BEDROCK_PROVISIONING::BedrockProvisioning::createBedrockProvisioning()->value("ConfirmDTMF",false).toBool(); } /*! - * HandleUrlEmbedded - * @return true/false - */ -bool SchemeHandler::HandleUrlEmbedded( const QUrl &url, bool /*confirmDTMF*/ ) + Handles the specified URL. Calls the handler method corresponding to the + URL scheme. +*/ +SchemeHandler::SchemeHandlerError SchemeHandlerPrivate::HandleUrl(const QUrl &url, bool /*confirmDTMF*/) { - QString path = url.path(); QString scheme = url.scheme().toLower(); - -#if defined(Q_OS_SYMBIAN) - if (!m_telService) - m_telService = new WrtTelService(); -#endif - - if (scheme.startsWith("h") || scheme.startsWith("f")) - // quickly exit if scheme is http, https, or file - return false; - - else if (scheme.startsWith(MAILTO_SCHEME)) - return HandleMailtoScheme(url); - - else if (scheme.startsWith(RTSP_SCHEME)) - return HandleRtspScheme(url); + SchemeHandler::SchemeHandlerError retVal = SchemeHandler::SchemeUnsupported; -#if defined(Q_OS_SYMBIAN) - else if (scheme.startsWith(TEL_SCHEME)) { - //m_telService->MakeCall(path, confirmDTMF); - QDesktopServices::openUrl(url); - return true; - } - else if (scheme.startsWith(SIP_SCHEME)) { - //m_telService->MakeVOIPCall(path, confirmDTMF); - QDesktopServices::openUrl(url); - return true; + if ((scheme == HTTP_SCHEME) || (scheme == HTTPS_SCHEME) || + (scheme == FILE_SCHEME)) { + // exit if scheme is http, https, or file + retVal = SchemeHandler::SchemeNotHandled; + } else { + retVal = HandleScheme(url); } - else if (scheme.startsWith(WTAI_SCHEME)) { - if (path.startsWith(WTAI_MC)) { - QString number = path.mid(path.indexOf(';') + 1); - //m_telService->MakeCall(number, confirmDTMF); - number = "tel:" + number; - QUrl dialUrl(number); - QDesktopServices::openUrl(dialUrl); - return true; - } - } -#endif - return false; + return retVal; } - -#if !defined(Q_OS_SYMBIAN) -/* - * HandleMailtoScheme - * @return true/false - */ -bool SchemeHandler::HandleMailtoScheme(const QUrl &url) -{ -#ifndef QT_NO_DESKTOPSERVICES - return QDesktopServices::openUrl(url); -#else - return false; -#endif -} -#else // Q_OS_SYMBIAN -/* - * HandleMailtoScheme - * @return true/false - */ - -bool SchemeHandler::HandleMailtoScheme(const QUrl &url) -{ - TRAPD(err, HandleMailtoSchemeL(url)); - return err ? false : true; -} -void SchemeHandler::HandleMailtoSchemeL(const QUrl &url) -{ - QString recipient = url.path(); - QString subject = url.queryItemValue("subject"); - QString body = url.queryItemValue("body"); - QString to = url.queryItemValue("to"); - QString cc = url.queryItemValue("cc"); - QString bcc = url.queryItemValue("bcc"); - - // these fields might have comma separated addresses - QStringList recipients = recipient.split(","); - QStringList tos = to.split(","); - QStringList ccs = cc.split(","); - QStringList bccs = bcc.split(","); - - - CSendUi* sendUi = CSendUi::NewLC(); - - // Construct symbian sendUI data holder - CMessageData* messageData = CMessageData::NewLC(); - - // Subject - TPtrC subj( qt_QString2TPtrC(subject) ); - messageData->SetSubjectL( &subj ); - - // Body - CParaFormatLayer* paraFormat = CParaFormatLayer::NewL(); - CleanupStack::PushL( paraFormat ); - CCharFormatLayer* charFormat = CCharFormatLayer::NewL(); - CleanupStack::PushL( charFormat ); - CRichText* bodyRichText = CRichText::NewL( paraFormat, charFormat ); - CleanupStack::PushL( bodyRichText ); - - TPtrC bodyPtr( qt_QString2TPtrC(body) ); - if( bodyPtr.Length() ) - bodyRichText->InsertL( 0, bodyPtr ); - else - bodyRichText->InsertL( 0, KNullDesC ); - - messageData->SetBodyTextL( bodyRichText ); - - // To - foreach(QString item, recipients) - messageData->AppendToAddressL(qt_QString2TPtrC(item)); - - foreach(QString item, tos) - messageData->AppendToAddressL(qt_QString2TPtrC(item)); - - // Cc - foreach(QString item, ccs) - messageData->AppendCcAddressL(qt_QString2TPtrC(item)); - - // Bcc - foreach(QString item, bccs) - messageData->AppendBccAddressL(qt_QString2TPtrC(item)); - - TRAP_IGNORE(sendUi->CreateAndSendMessageL( KUidMsgTypeSMTP, messageData )); - CleanupStack::PopAndDestroy( 5 ); // bodyRichText, charFormat, paraFormat, messageData, sendUi -} -// Returned TPtrC is valid as long as the given parameter is valid and unmodified -TPtrC SchemeHandler::qt_QString2TPtrC( const QString& string ) -{ - return reinterpret_cast(string.utf16()); -} -#endif - -#if !defined(Q_OS_SYMBIAN) -/* - * HandleRtspScheme - * @return true/false - */ -bool SchemeHandler::HandleRtspScheme(const QUrl &url) -{ -#ifndef QT_NO_DESKTOPSERVICES - return QDesktopServices::openUrl(url); -#else - return false; -#endif -} -#else // Q_OS_SYMBIAN -/* - * HandleRtspSchemeL - * @return true/false - */ - -bool SchemeHandler::HandleRtspScheme(const QUrl &url) -{ - TRAPD(err, HandleRtspSchemeL(url)); - return (err ? false : true); -} -void SchemeHandler::HandleRtspSchemeL(const QUrl &url) -{ - //Launch the appropriate application in embedded mode - - RFs rfs; - RFile ramFile; - - HBufC* urlBuf = qt_QString2HBufC(url.toString()); - CleanupStack::PushL(urlBuf); - // 8-bit buffer is required. - HBufC8* urlBuf8 = HBufC8::NewLC( urlBuf->Size() ); - urlBuf8->Des().Copy( *urlBuf ); - - // Open the file. - User::LeaveIfError(rfs.Connect()); - CleanupClosePushL(rfs); - - // Replace file if exists or Create file if not exist yet - User::LeaveIfError( ramFile.Replace( rfs, KRtspFileName, EFileWrite | EFileShareAny ) ); - CleanupClosePushL(ramFile); - // Write to file - User::LeaveIfError( ramFile.Write(*urlBuf8) ); - ramFile.Flush(); - - CleanupStack::PopAndDestroy(/*ramFile*/); - CleanupStack::PopAndDestroy(/*rfs*/); - CleanupStack::PopAndDestroy( /*urlBuf8*/ ); - CleanupStack::PopAndDestroy( /*urlBuf*/ ); - - RFile ramDocTempFile; - CDocumentHandler* docHandler = CDocumentHandler::NewL(); - docHandler->OpenTempFileL( KRtspFileName, ramDocTempFile ); - - CleanupClosePushL( ramDocTempFile ); - - TDataType dataType( _L8("audio/x-pn-realaudio-plugin") ); - CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(); - TAiwVariant filename( _L8("c:\\system\\temp\\RtspTemp.ram") ); - TAiwGenericParam param( EGenericParamFile, filename ); - - paramList->AppendL( param ); - - // Allow save among Options - - TBool allowSave( ETrue ); - TAiwVariant allowSaveVariant( allowSave ); - TAiwGenericParam genericParamAllowSave - ( EGenericParamAllowSave, allowSaveVariant ); - - paramList->AppendL( genericParamAllowSave ); - - // launch RAM file via DocHandler - - docHandler->OpenFileEmbeddedL( ramDocTempFile, dataType, *paramList ); - - CleanupStack::PopAndDestroy( paramList ); - CleanupStack::PopAndDestroy( &ramDocTempFile ); -} - -HBufC* SchemeHandler::qt_QString2HBufC(const QString& string) { - TPtrC16 str(reinterpret_cast(string.utf16())); - return str.Alloc(); -} -#endif -} +} // WRT