void MainPage::linkActivated(const QString &link) { mDebug(__func__) << "link=" << link; ContentAction::Action uriAction = ContentAction::Action::defaultActionForScheme(link); if (uriAction.isValid()) { mDebug(__func__) << "Triggering..."; uriAction.trigger(); } else { mDebug(__func__) << "Invalid action. "; } }
NS_IMETHODIMP nsMIMEInfoUnix::GetHasDefaultHandler(bool *_retval) { // if mDefaultApplication is set, it means the application has been set from // either /etc/mailcap or ${HOME}/.mailcap, in which case we don't want to // give the GNOME answer. if (mDefaultApplication) return nsMIMEInfoImpl::GetHasDefaultHandler(_retval); *_retval = false; if (mClass == eProtocolInfo) { *_retval = nsGNOMERegistry::HandlerExists(mSchemeOrType.get()); } else { nsRefPtr<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromType(mSchemeOrType); if (!mimeInfo) { nsAutoCString ext; nsresult rv = GetPrimaryExtension(ext); if (NS_SUCCEEDED(rv)) { mimeInfo = nsGNOMERegistry::GetFromExtension(ext); } } if (mimeInfo) *_retval = true; } if (*_retval) return NS_OK; #if defined(MOZ_ENABLE_CONTENTACTION) ContentAction::Action action = ContentAction::Action::defaultActionForFile(QUrl(), QString(mSchemeOrType.get())); if (action.isValid()) { *_retval = true; return NS_OK; } #endif return NS_OK; }
nsresult nsMIMEInfoUnix::LaunchDefaultWithFile(nsIFile *aFile) { // if mDefaultApplication is set, it means the application has been set from // either /etc/mailcap or ${HOME}/.mailcap, in which case we don't want to // give the GNOME answer. if (mDefaultApplication) return nsMIMEInfoImpl::LaunchDefaultWithFile(aFile); nsAutoCString nativePath; aFile->GetNativePath(nativePath); #if (MOZ_PLATFORM_MAEMO == 5) && defined (MOZ_ENABLE_GNOMEVFS) if(NS_SUCCEEDED(LaunchDefaultWithDBus(PromiseFlatCString(nativePath).get()))) return NS_OK; #endif #if defined(MOZ_ENABLE_CONTENTACTION) QUrl uri = QUrl::fromLocalFile(QString::fromUtf8(nativePath.get())); ContentAction::Action action = ContentAction::Action::defaultActionForFile(uri, QString(mSchemeOrType.get())); if (action.isValid()) { action.trigger(); return NS_OK; } return NS_ERROR_FAILURE; #endif nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); nsAutoCString uriSpec; if (giovfs) { // nsGIOMimeApp->Launch wants a URI string instead of local file nsresult rv; nsCOMPtr<nsIIOService> ioservice = do_GetService(NS_IOSERVICE_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIURI> uri; rv = ioservice->NewFileURI(aFile, getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); uri->GetSpec(uriSpec); } nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID); if (giovfs) { nsCOMPtr<nsIGIOMimeApp> app; if (NS_SUCCEEDED(giovfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app) return app->Launch(uriSpec); } else if (gnomevfs) { /* Fallback to GnomeVFS */ nsCOMPtr<nsIGnomeVFSMimeApp> app; if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app) return app->Launch(nativePath); } // If we haven't got an app we try to get a valid one by searching for the // extension mapped type nsRefPtr<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromExtension(nativePath); if (mimeInfo) { nsAutoCString type; mimeInfo->GetType(type); if (giovfs) { nsCOMPtr<nsIGIOMimeApp> app; if (NS_SUCCEEDED(giovfs->GetAppForMimeType(type, getter_AddRefs(app))) && app) return app->Launch(uriSpec); } else if (gnomevfs) { nsCOMPtr<nsIGnomeVFSMimeApp> app; if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(type, getter_AddRefs(app))) && app) return app->Launch(nativePath); } } if (!mDefaultApplication) return NS_ERROR_FILE_NOT_FOUND; return LaunchWithIProcess(mDefaultApplication, nativePath); }