Bug 589025 - Support content-disposition attribute in e10s external app handling, r=dwitte, blocking-fennec2.0b1=blassey

Bug 589025 - Support content-disposition attribute in e10s external app handling, r=dwitte, blocking-fennec2.0b1=blassey
This commit is contained in:
Brian Crowder 2010-09-13 11:17:00 -07:00
Родитель cbd5e1317d
Коммит b1bd94e39a
8 изменённых файлов: 58 добавлений и 4 удалений

Просмотреть файл

@ -121,7 +121,9 @@ parent:
__delete__();
PExternalHelperApp(URI uri, nsCString aMimeContentType, bool aForceSave, PRInt64 aContentLength);
PExternalHelperApp(URI uri, nsCString aMimeContentType,
nsCString aContentDisposition, bool aForceSave,
PRInt64 aContentLength);
child:
CreateWidget(MagicWindowHandle parentWidget);

Просмотреть файл

@ -1241,6 +1241,7 @@ TabChildGlobal::GetPrincipal()
PExternalHelperAppChild*
TabChild::AllocPExternalHelperApp(const IPC::URI& uri,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const bool& aForceSave,
const PRInt64& aContentLength)
{

Просмотреть файл

@ -227,6 +227,7 @@ public:
virtual PExternalHelperAppChild *AllocPExternalHelperApp(
const IPC::URI& uri,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const bool& aForceSave,
const PRInt64& aContentLength);
virtual bool DeallocPExternalHelperApp(PExternalHelperAppChild *aService);

Просмотреть файл

@ -815,12 +815,13 @@ TabParent::GetFrameLoader() const
PExternalHelperAppParent*
TabParent::AllocPExternalHelperApp(const IPC::URI& uri,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const bool& aForceSave,
const PRInt64& aContentLength)
{
ExternalHelperAppParent *parent = new ExternalHelperAppParent(uri, aContentLength);
parent->AddRef();
parent->Init(this, aMimeContentType, aForceSave);
parent->Init(this, aMimeContentType, aContentDisposition, aForceSave);
return parent;
}

Просмотреть файл

@ -150,6 +150,7 @@ public:
virtual PExternalHelperAppParent* AllocPExternalHelperApp(
const IPC::URI& uri,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const bool& aForceSave,
const PRInt64& aContentLength);
virtual bool DeallocPExternalHelperApp(PExternalHelperAppParent* aService);

Просмотреть файл

@ -50,10 +50,11 @@
namespace mozilla {
namespace dom {
NS_IMPL_ISUPPORTS_INHERITED3(ExternalHelperAppParent,
NS_IMPL_ISUPPORTS_INHERITED4(ExternalHelperAppParent,
nsHashPropertyBag,
nsIRequest,
nsIChannel,
nsIMultiPartChannel,
nsIResumableChannel)
ExternalHelperAppParent::ExternalHelperAppParent(
@ -70,6 +71,7 @@ ExternalHelperAppParent::ExternalHelperAppParent(
void
ExternalHelperAppParent::Init(TabParent *parent,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const PRBool& aForceSave)
{
nsHashPropertyBag::Init();
@ -84,6 +86,7 @@ ExternalHelperAppParent::Init(TabParent *parent,
NS_ASSERTION(helperAppService, "No Helper App Service!");
SetPropertyAsInt64(NS_CHANNEL_PROP_CONTENT_LENGTH, mContentLength);
SetContentDisposition(aContentDisposition);
helperAppService->DoContent(aMimeContentType, this, ir,
aForceSave, getter_AddRefs(mListener));
}
@ -331,5 +334,41 @@ ExternalHelperAppParent::GetEntityID(nsACString& aEntityID)
return NS_OK;
}
//
// nsIMultiPartChannel implementation
//
NS_IMETHODIMP
ExternalHelperAppParent::GetBaseChannel(nsIChannel* *aChannel)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
ExternalHelperAppParent::GetContentDisposition(nsACString& aContentDisposition)
{
aContentDisposition = mContentDisposition;
return NS_OK;
}
NS_IMETHODIMP
ExternalHelperAppParent::SetContentDisposition(const nsACString& aDisposition)
{
mContentDisposition = aDisposition;
return NS_OK;
}
NS_IMETHODIMP
ExternalHelperAppParent::GetPartID(PRUint32* aPartID)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
ExternalHelperAppParent::GetIsLastPart(PRBool* aIsLastPart)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
} // namespace dom
} // namespace mozilla

Просмотреть файл

@ -38,7 +38,7 @@
#include "mozilla/dom/PExternalHelperAppParent.h"
#include "nsIChannel.h"
#include "nsICancelable.h"
#include "nsIMultiPartChannel.h"
#include "nsIResumableChannel.h"
#include "nsHashPropertyBag.h"
@ -54,12 +54,14 @@ class TabParent;
class ExternalHelperAppParent : public PExternalHelperAppParent
, public nsHashPropertyBag
, public nsIChannel
, public nsIMultiPartChannel
, public nsIResumableChannel
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIREQUEST
NS_DECL_NSICHANNEL
NS_DECL_NSIMULTIPARTCHANNEL
NS_DECL_NSIRESUMABLECHANNEL
bool RecvOnStartRequest(const nsCString& entityID);
@ -69,6 +71,7 @@ public:
ExternalHelperAppParent(const IPC::URI& uri, const PRInt64& contentLength);
void Init(TabParent *parent,
const nsCString& aMimeContentType,
const nsCString& aContentDisposition,
const PRBool& aForceSave);
virtual ~ExternalHelperAppParent();
@ -79,6 +82,7 @@ private:
nsLoadFlags mLoadFlags;
nsresult mStatus;
PRInt64 mContentLength;
nsCString mContentDisposition;
nsCString mEntityID;
};

Просмотреть файл

@ -699,6 +699,10 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte
if (!tabchild)
return NS_ERROR_FAILURE;
nsCString disp;
if (channel)
ExtractDisposition(channel, disp);
// Now we build a protocol for forwarding our data to the parent. The
// protocol will act as a listener on the child-side and create a "real"
// helperAppService listener on the parent-side, via another call to
@ -709,6 +713,7 @@ NS_IMETHODIMP nsExternalHelperAppService::DoContent(const nsACString& aMimeConte
mozilla::dom::PExternalHelperAppChild *pc;
pc = child->SendPExternalHelperAppConstructor(IPC::URI(uri),
nsCString(aMimeContentType),
disp,
aForceSave, contentLength);
ExternalHelperAppChild *childListener = static_cast<ExternalHelperAppChild *>(pc);