40 using namespace KParts;
42 class BrowserRun::BrowserRunPrivate
45 bool m_bHideErrorDialog;
46 bool m_bRemoveReferrer;
47 bool m_bTrustedSource;
52 QPointer<QWidget> m_window;
60 bool removeReferrer,
bool trustedSource,
bool hideErrorDialog )
61 :
KRun( url, window, 0 , false , false ),
62 d(new BrowserRunPrivate)
65 d->m_bRemoveReferrer = removeReferrer;
66 d->m_bTrustedSource = trustedSource;
68 d->m_browserArgs = browserArgs;
90 if ( d->m_bHideErrorDialog )
96 redirectToError( KIO::ERR_MALFORMED_URL,
KRun::url().
url() );
103 KDE_struct_stat buff;
104 if ( KDE::stat(
KRun::url().toLocalFile(), &buff ) == -1 )
107 redirectToError( KIO::ERR_DOES_NOT_EXIST,
KRun::url().toLocalFile() );
130 if (
KRun::url().query().isEmpty() && !protocol.startsWith(QLatin1String(
"http")))
136 kDebug(1000) <<
"MIME TYPE is" << mime->name();
144 const QString proto = d->m_part->url().protocol().toLower();
146 if (proto ==
"https" || proto ==
"webdavs") {
147 metaData.insert(
"main_frame_request",
"TRUE" );
148 metaData.insert(
"ssl_was_in_use",
"TRUE" );
150 }
else if (proto ==
"http" || proto ==
"webdav") {
152 metaData.insert(
"ssl_was_in_use",
"FALSE" );
156 if (!metaData.contains(
"PropagateHttpHeader"))
157 metaData.insert(
"PropagateHttpHeader",
"TRUE");
161 if ( d->m_browserArgs.doPost() &&
KRun::url().
protocol().startsWith(QLatin1String(
"http"))) {
162 job = KIO::http_post(
KRun::url(), d->m_browserArgs.postData, KIO::HideProgressInfo );
163 job->addMetaData(
"content-type", d->m_browserArgs.contentType() );
166 d->m_args.reload() ? KIO::Reload : KIO::NoReload,
167 KIO::HideProgressInfo);
170 if ( d->m_bRemoveReferrer )
171 metaData.remove(
"referrer");
173 job->addMetaData( metaData );
174 job->ui()->setWindow( d->m_window );
175 connect( job, SIGNAL(result(
KJob*)),
184 kDebug(1000) << job->error();
185 if ( job->error() == KIO::ERR_IS_DIRECTORY )
190 kDebug(1000) <<
"It is in fact a directory!";
208 if ((!mime || mime->isDefault()) && !fileName.isEmpty()) {
209 mime = KMimeType::findByUrl(fileName, 0,
false,
true);
216 Q_ASSERT( _job ==
KRun::job() ); Q_UNUSED(_job)
223 if (job->isErrorPage()) {
224 d->m_mimeType = type;
235 d->m_contentDisposition = job->queryMetaData(
"content-disposition-type");
237 const QString modificationTime = job->queryMetaData(
"content-disposition-modification-date");
238 if (!modificationTime.isEmpty()) {
239 d->m_args.metaData().insert(QLatin1String(
"content-disposition-modification-date"), modificationTime);
242 QMapIterator<QString,QString> it (job->metaData());
243 while (it.hasNext()) {
245 if (it.key().startsWith(QLatin1String(
"ssl_"), Qt::CaseInsensitive))
246 d->m_args.metaData().insert(it.key(), it.value());
257 if (mimePtr && mimePtr->name() != _type) {
258 _type = mimePtr->name();
275 if ( mimeType !=
"inode/directory" &&
279 mimeType = QLatin1String(
"text/plain");
288 kDebug(1000) <<
"Save: returning Handled";
294 kDebug(1000) <<
"Cancel: returning Handled";
302 if ( d->m_browserArgs.doPost() )
304 kDebug(1000) <<
"request comes from a POST, can't pass a URL to another app, need to save";
305 d->m_mimeType = mimeType;
308 int extensionPos = fileName.lastIndexOf(
'.' );
309 if ( extensionPos != -1 )
310 extension = fileName.mid( extensionPos );
313 tempFile.setAutoRemove(
false);
316 destURL.
setPath( tempFile.fileName() );
318 job->ui()->setWindow(d->m_window);
319 connect( job, SIGNAL(result(
KJob*)),
332 if ( !d->m_bTrustedSource &&
353 i18n(
"Do you really want to execute '%1'?", url.
prettyUrl() ),
358 #ifndef KDE_NO_DEPRECATED
372 #ifndef KDE_NO_DEPRECATED
387 saveUrl(url, suggestedFileName, d->m_window, d->m_args);
408 if (!downloadManger.isEmpty())
411 kDebug(1000) <<
"Using: "<<downloadManger <<
" as Download Manager";
415 QString errMsg=
i18n(
"The Download Manager (%1) could not be found in your $PATH ", downloadManger);
416 QString errMsgEx=
i18n(
"Try to reinstall it \n\nThe integration with Konqueror will be disabled.");
427 cmd +=
' ' + KShell::quoteArg(url.
url());
428 if ( !suggestedFileName.isEmpty() )
429 cmd +=
' ' + KShell::quoteArg(suggestedFileName);
431 kDebug(1000) <<
"Calling command" << cmd;
443 dlg->setOperationMode( KFileDialog::Saving );
444 dlg->setCaption(
i18n(
"Save As"));
445 dlg->setConfirmOverwrite(
true);
448 if ( !suggestedFileName.isEmpty() )
449 name = suggestedFileName;
453 dlg->setSelection(name);
456 KUrl destURL( dlg->selectedUrl() );
457 if ( destURL.isValid() )
459 saveUrlUsingKIO(url, destURL, window, args.
metaData());
470 const QString modificationTime = metaData[QLatin1String(
"content-disposition-modification-date")];
471 if (!modificationTime.isEmpty()) {
474 job->setMetaData(metaData);
475 job->addMetaData(
"MaxCacheSize",
"0");
476 job->addMetaData(
"cache",
"cache");
477 job->ui()->setWindow(window);
478 job->ui()->setAutoErrorHandlingEnabled(
true );
484 if ( job->error() ) {
485 kDebug(1000) << job->errorString();
494 kWarning(1000) <<
"handleError called with job=0! hideErrorDialog=" << d->m_bHideErrorDialog;
499 if (tjob && tjob->isErrorPage() && !job->error()) {
504 if (!d->m_mimeType.isEmpty())
509 if (d->m_bHideErrorDialog && job->error() != KIO::ERR_NO_CONTENT)
511 redirectToError( job->error(), job->errorText() );
530 .arg( QString::fromUtf8( QUrl::toPercentEncoding( errorText ) ) ) );
532 QString cleanedOrigUrl = initialUrl;
533 KUrl runURL = cleanedOrigUrl;
534 if (runURL.isValid()) {
536 cleanedOrigUrl = runURL.
url();
539 newURL.setFragment(cleanedOrigUrl);
548 void BrowserRun::redirectToError(
int error,
const QString& errorText )
562 if ( job->error() ) {
563 job->uiDelegate()->showErrorMessage();
566 (void) (
KRun::runUrl( static_cast<KIO::FileCopyJob *>(job)->destUrl(), d->m_mimeType, d->m_window ));
574 return ( mimeType ==
"application/x-desktop" ||
575 mimeType ==
"application/x-shellscript" );
580 return d->m_bHideErrorDialog;
585 return d->m_contentDisposition;
602 return d->m_browserArgs;
605 #include "browserrun.moc"
606 #include "browserrun_p.moc"