browsercore/core/network/SchemeHandlerBr.cpp
changeset 12 afcd8e6d025b
parent 9 b39122337a00
--- 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 <QUrl>
-#include <QDesktopServices>
-#include <QStringList>
+#ifndef QTHIGHWAY
+#include "SchemeHandlerBrDefault_p.h"
+#else // QTHIGHWAY defined
+#include "SchemeHandlerBrQtHighway_p.h"
+#endif
 
-#if defined(Q_OS_SYMBIAN) 
-#include "WrtTelServiceBr.h"
-#include <miutset.h>                // KUidMsgTypeSMTP
-#include <sendui.h>                 // CSendUi
-#include <cmessagedata.h>           // CMessageData
-//For Rtsp Scheme
-#include <aiwgenericparam.h> 
-#include <DocumentHandler.h>
-#include <apparc.h>
-#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<const TUint16*>(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<const TUint16*>(string.utf16()));
-    return str.Alloc();
-}
-#endif
-}
+} // WRT