browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp
changeset 16 3c88a81ff781
parent 12 afcd8e6d025b
equal deleted inserted replaced
14:6aeb7a756187 16:3c88a81ff781
    21 
    21 
    22 // INCLUDE FILES
    22 // INCLUDE FILES
    23 #include <QUrl>
    23 #include <QUrl>
    24 #include <QList>
    24 #include <QList>
    25 #include <xqaiwdecl.h>
    25 #include <xqaiwdecl.h>
    26 
       
    27 #include "SchemeHandlerBrQtHighway_p.h"
    26 #include "SchemeHandlerBrQtHighway_p.h"
    28 
    27 
    29 
    28 
    30 namespace WRT {
    29 namespace WRT {
    31 
    30 
    32 
    31 
    33 QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate()
    32 QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate() : 
       
    33     mRequestPtr(NULL)
    34 {
    34 {
    35 }
    35 }
    36 
    36 
    37 QtHighwaySchemeHandlerPrivate::~QtHighwaySchemeHandlerPrivate()
    37 QtHighwaySchemeHandlerPrivate::~QtHighwaySchemeHandlerPrivate()
    38 {
    38 {
       
    39     if (mRequestPtr) {
       
    40         delete mRequestPtr;
       
    41         mRequestPtr = NULL;
       
    42     }
    39 }
    43 }
    40 
    44 
    41 SchemeHandler::SchemeHandlerError QtHighwaySchemeHandlerPrivate::HandleScheme(const QUrl &url)
    45 SchemeHandler::SchemeHandlerError QtHighwaySchemeHandlerPrivate::HandleScheme(const QUrl &url)
    42 {
    46 {
    43     return SendStandardUriViewRequest(url);
    47     return SendStandardUriViewRequest(url);
    53 */
    57 */
    54 SchemeHandler::SchemeHandlerError 
    58 SchemeHandler::SchemeHandlerError 
    55     QtHighwaySchemeHandlerPrivate::SendStandardUriViewRequest(const QUrl& url)
    59     QtHighwaySchemeHandlerPrivate::SendStandardUriViewRequest(const QUrl& url)
    56 {
    60 {
    57     SchemeHandler::SchemeHandlerError retVal = SchemeHandler::NoError;
    61     SchemeHandler::SchemeHandlerError retVal = SchemeHandler::NoError;
    58     XQAiwRequest *request = NULL; // Application Interworking request
       
    59     bool embedded = false;  // window groups not chained
    62     bool embedded = false;  // window groups not chained
    60 
    63 
    61     // Create request - Apply first implementation of url, "com.nokia.symbian.IUriView"
    64     // Create request - Apply first implementation of url, "com.nokia.symbian.IUriView"
    62     // interface name and "view(QString)" operation.
    65     // interface name and "view(QString)" operation.
    63     request = mAiwMgr.create(url, embedded);
    66     if (mRequestPtr)
       
    67         delete mRequestPtr; // ensure previous requests deleted
       
    68     mRequestPtr = mAiwMgr.create(url, embedded);
    64     
    69     
    65     if (request) {
    70     if (mRequestPtr) {
    66         // Debug - what service and interface are we using?
    71         // Debug - what service and interface are we using?
    67         //XQAiwInterfaceDescriptor const &desc = request->descriptor();
    72         //XQAiwInterfaceDescriptor const &desc = mRequestPtr->descriptor();
    68         //qDebug() << "HandleTelScheme: sn=" << desc.serviceName() << "if=" << desc.interfaceName();
    73         //qDebug() << "SendStandardUriViewRequest: sn=" << desc.serviceName() << "if=" << desc.interfaceName();
    69     
    74     
    70         // Set function parameters
    75         // Set function parameters
    71         QList<QVariant> args;
    76         QList<QVariant> args;
    72         args << url.toString();
    77         args << url.toString();
    73         request->setArguments(args);
    78         mRequestPtr->setArguments(args);
    74         request->setEmbedded(embedded);
    79         mRequestPtr->setEmbedded(embedded);
    75         request->setSynchronous(false); // asynchronous request
    80         mRequestPtr->setSynchronous(false); // asynchronous request
    76 
    81 
    77         // Send the request
    82         // Send the request
    78         if (!request->send()) {
    83         if (mRequestPtr->send()) {
    79             // to debug get error code from request->lastError()
    84             // connect request signals to slots
    80             // or connect to requestError() signal
    85             connect(mRequestPtr, SIGNAL(requestOk(const QVariant&)), 
       
    86                 this, SLOT(handleOk(const QVariant&)));
       
    87             connect(mRequestPtr, SIGNAL(requestError(int,const QString&)), 
       
    88                 this, SLOT(handleError(int, const QString&)));
       
    89         } else {
       
    90             // requestError() signal will be sent with error code
    81             retVal = SchemeHandler::LaunchFailed;
    91             retVal = SchemeHandler::LaunchFailed;
    82         }
    92         }
    83     } else {
    93     } else {
    84         // failed to create request - maybe scheme is unsupported
    94         // failed to create request - maybe scheme is unsupported
    85         retVal = SchemeHandler::SchemeUnsupported;
    95         retVal = SchemeHandler::SchemeUnsupported;
    86     }
    96     }
    87     
    97     
    88     // if need to get service result connect to requestOk() signal
       
    89     
       
    90     // currently not interested in requestOk() or requestError() signals so
       
    91     // OK to delete request now
       
    92     delete request;
       
    93     
       
    94     return retVal;
    98     return retVal;
    95 }
    99 }
    96 
   100 
       
   101 // Aiw request responses
       
   102 void QtHighwaySchemeHandlerPrivate::handleOk(const QVariant& result)
       
   103 {
       
   104     // service application launched ok, result is application return value
       
   105     // service app should handle UI for errors, this is just for cleanup
       
   106     if (mRequestPtr) {
       
   107         delete mRequestPtr;
       
   108         mRequestPtr = NULL;
       
   109     }
       
   110 }
       
   111 
       
   112 // handles errors in interworking request handling
       
   113 void QtHighwaySchemeHandlerPrivate::handleError(int errorCode, 
       
   114     const QString& errorMessage)
       
   115 {
       
   116     // UI relies on return error from XQAiwRequest::send() to alert user of problem
       
   117     // add debug code here to find out cause of error
       
   118     if (mRequestPtr) {
       
   119         delete mRequestPtr;
       
   120         mRequestPtr = NULL;
       
   121     }
       
   122 }
       
   123 
    97 } // WRT
   124 } // WRT