From 830032294517ab286b424639fcf65435826d42c3 Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 26 Sep 2011 18:42:45 +0000 Subject: [PATCH] Implement NSAPI RESPONSE_HEADERS in nsplugin. Cherry picked from KDE4, acknowledgements to Maksim Orlovich for the fix, and to Nick Leverton for the TDE backport. git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1255714 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- nsplugins/sdk/npapi.h | 25 +++++++++++++++++++++++++ nsplugins/viewer/nsplugin.cpp | 11 +++++++---- nsplugins/viewer/nsplugin.h | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/nsplugins/sdk/npapi.h b/nsplugins/sdk/npapi.h index 67b91b680..16c71b97a 100644 --- a/nsplugins/sdk/npapi.h +++ b/nsplugins/sdk/npapi.h @@ -256,6 +256,16 @@ typedef struct _NPStream uint32 end; uint32 lastmodified; void* notifyData; + const char* headers; /* Response headers from host. + * Exists only for >= NPVERS_HAS_RESPONSE_HEADERS. + * Used for HTTP only; NULL for non-HTTP. + * Available from NPP_NewStream onwards. + * Plugin should copy this data before storing it. + * Includes HTTP status line and all headers, + * preferably verbatim as received from server, + * headers formatted as in HTTP ("Header: Value"), + * and newlines (\n, NOT \r\n) separating lines. + * Terminated by \n\0 (NOT \n\n\0). */ } NPStream; @@ -602,6 +612,21 @@ enum NPEventType { #define NPVERS_68K_HAS_LIVECONNECT 11 #define NPVERS_HAS_WINDOWLESS 11 #define NPVERS_HAS_XPCONNECT_SCRIPTING 13 +// Trinity note: we claim 13 right now, though we do +// have response_headers. +#define NPVERS_HAS_NPRUNTIME_SCRIPTING 14 +#define NPVERS_HAS_FORM_VALUES 15 +#define NPVERS_HAS_POPUPS_ENABLED_STATE 16 +#define NPVERS_HAS_RESPONSE_HEADERS 17 +#define NPVERS_HAS_NPOBJECT_ENUM 18 +#define NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL 19 +#define NPVERS_HAS_ALL_NETWORK_STREAMS 20 +#define NPVERS_HAS_URL_AND_AUTH_INFO 21 +#define NPVERS_HAS_PRIVATE_MODE 22 +#define NPVERS_MACOSX_HAS_COCOA_EVENTS 23 +#define NPVERS_HAS_ADVANCED_KEY_HANDLING 25 +#define NPVERS_HAS_URL_REDIRECT_HANDLING 26 +#define NPVERS_HAS_CLEAR_SITE_DATA 27 /*----------------------------------------------------------------------*/ /* Function Prototypes */ diff --git a/nsplugins/viewer/nsplugin.cpp b/nsplugins/viewer/nsplugin.cpp index fe2dabfbf..0f56f055f 100644 --- a/nsplugins/viewer/nsplugin.cpp +++ b/nsplugins/viewer/nsplugin.cpp @@ -1674,6 +1674,7 @@ bool NSPluginStreamBase::create( const TQString& url, const TQString& mimeType, _stream->pdata = 0; _stream->lastmodified = 0; _stream->notifyData = _notifyData; + _stream->headers = 0; _mimeType = mimeType; @@ -1898,6 +1899,7 @@ bool NSPluginStream::get( const TQString& url, const TQString& mimeType, _job = KIO::get(KURL( url ), false, false); _job->addMetaData("errorPage", "false"); _job->addMetaData("AllowCompressedPage", "false"); + _job->addMetaData("PropagateHttpHeader", "true"); if (reload) { _job->addMetaData("cache", "reload"); } @@ -1925,6 +1927,7 @@ bool NSPluginStream::post( const TQString& url, const TQByteArray& data, _job = KIO::http_post(KURL( url ), data, false); _job->addMetaData("content-type", args.contentType()); _job->addMetaData("errorPage", "false"); + _job->addMetaData("PropagateHttpHeader", "true"); _job->addMetaData("AllowCompressedPage", "false"); connect(_job, TQT_SIGNAL(data(KIO::Job *, const TQByteArray &)), TQT_SLOT(data(KIO::Job *, const TQByteArray &))); @@ -1964,13 +1967,13 @@ void NSPluginStream::totalSize(KIO::Job * job, KIO::filesize_t size) void NSPluginStream::mimetype(KIO::Job * job, const TQString &mimeType) { - kdDebug(1431) << "NSPluginStream::TQByteArray - job=" << (void*)job << " mimeType=" << mimeType << endl; + kdDebug(1431) << "NSPluginStream::mimetype - job=" << (void*)job << " mimeType=" << mimeType << endl; _mimeType = mimeType; + TQString tmp_headers = job->metaData()["HTTP-Headers"]; + _headers.duplicate(tmp_headers.latin1(), tmp_headers.length()); + _stream->headers = _headers.data(); } - - - void NSPluginStream::resume() { if ( error() || tries()>8 ) { diff --git a/nsplugins/viewer/nsplugin.h b/nsplugins/viewer/nsplugin.h index 1c241cc8e..2a2af35d5 100644 --- a/nsplugins/viewer/nsplugin.h +++ b/nsplugins/viewer/nsplugin.h @@ -95,6 +95,7 @@ protected: KURL _url; TQString _fileURL; TQString _mimeType; + TQByteArray _headers; TQByteArray _data; class KTempFile *_tempFile;