diff -r 6aeb7a756187 -r 3c88a81ff781 browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp --- a/browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp Thu Sep 23 15:32:11 2010 -0400 +++ b/browsercore/core/network/SchemeHandlerBrQtHighway_p.cpp Fri Oct 15 17:30:59 2010 -0400 @@ -23,19 +23,23 @@ #include #include #include - #include "SchemeHandlerBrQtHighway_p.h" namespace WRT { -QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate() +QtHighwaySchemeHandlerPrivate::QtHighwaySchemeHandlerPrivate() : + mRequestPtr(NULL) { } QtHighwaySchemeHandlerPrivate::~QtHighwaySchemeHandlerPrivate() { + if (mRequestPtr) { + delete mRequestPtr; + mRequestPtr = NULL; + } } SchemeHandler::SchemeHandlerError QtHighwaySchemeHandlerPrivate::HandleScheme(const QUrl &url) @@ -55,29 +59,35 @@ QtHighwaySchemeHandlerPrivate::SendStandardUriViewRequest(const QUrl& url) { SchemeHandler::SchemeHandlerError retVal = SchemeHandler::NoError; - XQAiwRequest *request = NULL; // Application Interworking request bool embedded = false; // window groups not chained // Create request - Apply first implementation of url, "com.nokia.symbian.IUriView" // interface name and "view(QString)" operation. - request = mAiwMgr.create(url, embedded); + if (mRequestPtr) + delete mRequestPtr; // ensure previous requests deleted + mRequestPtr = mAiwMgr.create(url, embedded); - if (request) { + if (mRequestPtr) { // Debug - what service and interface are we using? - //XQAiwInterfaceDescriptor const &desc = request->descriptor(); - //qDebug() << "HandleTelScheme: sn=" << desc.serviceName() << "if=" << desc.interfaceName(); + //XQAiwInterfaceDescriptor const &desc = mRequestPtr->descriptor(); + //qDebug() << "SendStandardUriViewRequest: sn=" << desc.serviceName() << "if=" << desc.interfaceName(); // Set function parameters QList args; args << url.toString(); - request->setArguments(args); - request->setEmbedded(embedded); - request->setSynchronous(false); // asynchronous request + mRequestPtr->setArguments(args); + mRequestPtr->setEmbedded(embedded); + mRequestPtr->setSynchronous(false); // asynchronous request // Send the request - if (!request->send()) { - // to debug get error code from request->lastError() - // or connect to requestError() signal + if (mRequestPtr->send()) { + // connect request signals to slots + connect(mRequestPtr, SIGNAL(requestOk(const QVariant&)), + this, SLOT(handleOk(const QVariant&))); + connect(mRequestPtr, SIGNAL(requestError(int,const QString&)), + this, SLOT(handleError(int, const QString&))); + } else { + // requestError() signal will be sent with error code retVal = SchemeHandler::LaunchFailed; } } else { @@ -85,13 +95,30 @@ retVal = SchemeHandler::SchemeUnsupported; } - // if need to get service result connect to requestOk() signal - - // currently not interested in requestOk() or requestError() signals so - // OK to delete request now - delete request; - return retVal; } +// Aiw request responses +void QtHighwaySchemeHandlerPrivate::handleOk(const QVariant& result) +{ + // service application launched ok, result is application return value + // service app should handle UI for errors, this is just for cleanup + if (mRequestPtr) { + delete mRequestPtr; + mRequestPtr = NULL; + } +} + +// handles errors in interworking request handling +void QtHighwaySchemeHandlerPrivate::handleError(int errorCode, + const QString& errorMessage) +{ + // UI relies on return error from XQAiwRequest::send() to alert user of problem + // add debug code here to find out cause of error + if (mRequestPtr) { + delete mRequestPtr; + mRequestPtr = NULL; + } +} + } // WRT