From 9d9e08fdbe85ebf71cd2948b34de030dc97f5ca8 Mon Sep 17 00:00:00 2001 From: "edburns%acm.org" Date: Wed, 13 Sep 2000 06:40:57 +0000 Subject: [PATCH] a=brendan,av r=av bug=50811 This bug fix was suggested by Stanley Ho . Stanley proposed we overload the meaning of the nsIPluginStreamListener argument to nsIPluginManager::{GetURL,PostURL}() so that it also may implement an interface for reading headers. Thus, the browser could QI the plugin's nsIPluginStreamListener instance to this headers reading interface and send the plugin the headers from the response. I have implemented Stanley's above proposal. I have defined a new interface, nsIHTTPHeaderListener.idl with one method: /** * Called for each HTTP Response header. * NOTE: You must copy the values of the params. */ void newResponseHeader(in string headerName, in string headerValue); To affect this fix, I have added a new private method nsPluginStreamListenerPeer:: ReadHeadersFromChannelAndPostToListener(nsIHTTPChannel *httpChannel, nsIHTTPHeaderListener *listener) Then, modified nsPluginStreamListenerPeer::OnDataAvailable() to call this method BEFORE reading the content data. However, this fix makes two important assumptions I would like to check out: * Assumption * By the time nsPluginStreamListenerPeer::OnDataAvailable() gets * called, all the headers have been read. * Assumption: * The return value from nsIHTTPHeader->{GetFieldName,GetValue}() * must be freed. The following files are included in this fix: A modules/plugin/public/nsIHTTPHeaderListener.idl A modules/plugin/public/makefile.win A modules/plugin/public/Makefile.in M modules/plugin/nglsrc/nsPluginHostImpl.cpp git-svn-id: svn://10.0.0.236/trunk@78980 18797224-902f-48f8-a5cc-f745e15eee43 --- .../modules/plugin/base/public/Makefile.in | 1 + .../modules/plugin/base/public/makefile.win | 4 +- .../base/public/nsIHTTPHeaderListener.idl | 57 +++++++++++++++++++ mozilla/modules/plugin/public/Makefile.in | 1 + mozilla/modules/plugin/public/makefile.win | 4 +- .../plugin/public/nsIHTTPHeaderListener.idl | 57 +++++++++++++++++++ 6 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 mozilla/modules/plugin/base/public/nsIHTTPHeaderListener.idl create mode 100644 mozilla/modules/plugin/public/nsIHTTPHeaderListener.idl diff --git a/mozilla/modules/plugin/base/public/Makefile.in b/mozilla/modules/plugin/base/public/Makefile.in index 4b52b417335..86b1b035ac1 100644 --- a/mozilla/modules/plugin/base/public/Makefile.in +++ b/mozilla/modules/plugin/base/public/Makefile.in @@ -65,6 +65,7 @@ EXPORTS += \ XPIDLSRCS = \ nsIScriptablePlugin.idl \ + nsIHTTPHeaderListener.idl \ $(NULL) EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS)) diff --git a/mozilla/modules/plugin/base/public/makefile.win b/mozilla/modules/plugin/base/public/makefile.win index 887ed91a3d3..e2bb43b0f22 100644 --- a/mozilla/modules/plugin/base/public/makefile.win +++ b/mozilla/modules/plugin/base/public/makefile.win @@ -54,7 +54,9 @@ EXPORTS = $(EXPORTS) \ nsIPluginInputStream2.h XPIDLSRCS = \ - .\nsIScriptablePlugin.idl + .\nsIScriptablePlugin.idl \ + .\nsIHTTPHeaderListener.idl \ + $(NULL) include <$(DEPTH)/config/rules.mak> diff --git a/mozilla/modules/plugin/base/public/nsIHTTPHeaderListener.idl b/mozilla/modules/plugin/base/public/nsIHTTPHeaderListener.idl new file mode 100644 index 00000000000..bb429605f3b --- /dev/null +++ b/mozilla/modules/plugin/base/public/nsIHTTPHeaderListener.idl @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): Ed Burns + */ + +#include "nsPluginDefs.idl" + +/** + + * The nsIHTTPHeaderListener interface allows plugin authors to + * access HTTP Response headers after issuing an + * nsIPluginManager::{GetURL,PostURL}() call.

+ + * IMPORTANT NOTE: The plugin author must provide an instance to + * {GetURL,PostURL}() that implements both nsIPluginStreamListener and + * nsIHTTPHeaderListener. This instance is passed in through + * {GetURL,PostURL}()'s streamListener parameter. The browser will then + * QI thi streamListener to see if it implements + * nsIHTTPHeaderListener. + + */ + +[scriptable, uuid(8b246748-1dd2-11b2-9512-9dc84a95fc2f)] +interface nsIHTTPHeaderListener : nsISupports +{ + + /** + + * Called for each HTTP Response header. + + * NOTE: You must copy the values of the params. + + */ + + void newResponseHeader(in string headerName, in string headerValue); +}; + +//////////////////////////////////////////////////////////////////////////////// + +#endif /* nsIPluginStreamListener_h___ */ diff --git a/mozilla/modules/plugin/public/Makefile.in b/mozilla/modules/plugin/public/Makefile.in index 4b52b417335..86b1b035ac1 100644 --- a/mozilla/modules/plugin/public/Makefile.in +++ b/mozilla/modules/plugin/public/Makefile.in @@ -65,6 +65,7 @@ EXPORTS += \ XPIDLSRCS = \ nsIScriptablePlugin.idl \ + nsIHTTPHeaderListener.idl \ $(NULL) EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS)) diff --git a/mozilla/modules/plugin/public/makefile.win b/mozilla/modules/plugin/public/makefile.win index 887ed91a3d3..e2bb43b0f22 100644 --- a/mozilla/modules/plugin/public/makefile.win +++ b/mozilla/modules/plugin/public/makefile.win @@ -54,7 +54,9 @@ EXPORTS = $(EXPORTS) \ nsIPluginInputStream2.h XPIDLSRCS = \ - .\nsIScriptablePlugin.idl + .\nsIScriptablePlugin.idl \ + .\nsIHTTPHeaderListener.idl \ + $(NULL) include <$(DEPTH)/config/rules.mak> diff --git a/mozilla/modules/plugin/public/nsIHTTPHeaderListener.idl b/mozilla/modules/plugin/public/nsIHTTPHeaderListener.idl new file mode 100644 index 00000000000..bb429605f3b --- /dev/null +++ b/mozilla/modules/plugin/public/nsIHTTPHeaderListener.idl @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * The contents of this file are subject to the Netscape Public + * License Version 1.1 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.mozilla.org/NPL/ + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing + * rights and limitations under the License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All + * Rights Reserved. + * + * Contributor(s): Ed Burns + */ + +#include "nsPluginDefs.idl" + +/** + + * The nsIHTTPHeaderListener interface allows plugin authors to + * access HTTP Response headers after issuing an + * nsIPluginManager::{GetURL,PostURL}() call.

+ + * IMPORTANT NOTE: The plugin author must provide an instance to + * {GetURL,PostURL}() that implements both nsIPluginStreamListener and + * nsIHTTPHeaderListener. This instance is passed in through + * {GetURL,PostURL}()'s streamListener parameter. The browser will then + * QI thi streamListener to see if it implements + * nsIHTTPHeaderListener. + + */ + +[scriptable, uuid(8b246748-1dd2-11b2-9512-9dc84a95fc2f)] +interface nsIHTTPHeaderListener : nsISupports +{ + + /** + + * Called for each HTTP Response header. + + * NOTE: You must copy the values of the params. + + */ + + void newResponseHeader(in string headerName, in string headerValue); +}; + +//////////////////////////////////////////////////////////////////////////////// + +#endif /* nsIPluginStreamListener_h___ */