author | Brian Crowder <crowder@fiverocks.com> |
Wed, 25 Aug 2010 18:10:30 -0700 | |
changeset 51566 | bc673993154227191bda73683b814324429671d2 |
parent 51565 | f9a4a332f637a90823089877cda98ef16dae5fed |
child 51567 | 54a5ae891dba6ba156238b42825176deebf78a7f |
push id | unknown |
push user | unknown |
push date | unknown |
reviewers | dwitte, beta5 |
bugs | 589025 |
milestone | 2.0b5pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/ipc/PBrowser.ipdl +++ b/dom/ipc/PBrowser.ipdl @@ -116,17 +116,19 @@ parent: PGeolocationRequest(URI uri); PContentDialog(PRUint32 aType, nsCString aName, nsCString aFeatures, PRInt32[] aIntParams, nsString[] aStringParams); __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); LoadURL(nsCString uri); Move(PRUint32 x, PRUint32 y,
--- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -1241,16 +1241,17 @@ TabChildGlobal::GetPrincipal() if (!mTabChild) return nsnull; return mTabChild->GetPrincipal(); } PExternalHelperAppChild* TabChild::AllocPExternalHelperApp(const IPC::URI& uri, const nsCString& aMimeContentType, + const nsCString& aContentDisposition, const bool& aForceSave, const PRInt64& aContentLength) { ExternalHelperAppChild *child = new ExternalHelperAppChild(); child->AddRef(); return child; }
--- a/dom/ipc/TabChild.h +++ b/dom/ipc/TabChild.h @@ -222,16 +222,17 @@ public: const nsCString&, const nsCString&, const nsTArray<int>&, const nsTArray<nsString>&); virtual bool DeallocPContentDialog(PContentDialogChild* aDialog); virtual PExternalHelperAppChild *AllocPExternalHelperApp( const IPC::URI& uri, const nsCString& aMimeContentType, + const nsCString& aContentDisposition, const bool& aForceSave, const PRInt64& aContentLength); virtual bool DeallocPExternalHelperApp(PExternalHelperAppChild *aService); static void ParamsToArrays(nsIDialogParamBlock* aParams, nsTArray<int>& aIntParams, nsTArray<nsString>& aStringParams); static void ArraysToParams(const nsTArray<int>& aIntParams, const nsTArray<nsString>& aStringParams,
--- a/dom/ipc/TabParent.cpp +++ b/dom/ipc/TabParent.cpp @@ -806,22 +806,23 @@ TabParent::GetFrameLoader() const { nsCOMPtr<nsIFrameLoaderOwner> frameLoaderOwner = do_QueryInterface(mFrameElement); return frameLoaderOwner ? frameLoaderOwner->GetFrameLoader() : nsnull; } 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; } bool TabParent::DeallocPExternalHelperApp(PExternalHelperAppParent* aService) { ExternalHelperAppParent *parent = static_cast<ExternalHelperAppParent *>(aService); parent->Release();
--- a/dom/ipc/TabParent.h +++ b/dom/ipc/TabParent.h @@ -145,16 +145,17 @@ public: { delete aDialog; return true; } virtual PExternalHelperAppParent* AllocPExternalHelperApp( const IPC::URI& uri, const nsCString& aMimeContentType, + const nsCString& aContentDisposition, const bool& aForceSave, const PRInt64& aContentLength); virtual bool DeallocPExternalHelperApp(PExternalHelperAppParent* aService); void LoadURL(nsIURI* aURI); void Move(PRUint32 x, PRUint32 y, PRUint32 width, PRUint32 height); void Activate(); void SendMouseEvent(const nsAString& aType, float aX, float aY,
--- a/uriloader/exthandler/ExternalHelperAppParent.cpp +++ b/uriloader/exthandler/ExternalHelperAppParent.cpp @@ -64,29 +64,31 @@ ExternalHelperAppParent::ExternalHelperA , mStatus(NS_OK) , mContentLength(aContentLength) { } void ExternalHelperAppParent::Init(TabParent *parent, const nsCString& aMimeContentType, + const nsCString& aContentDisposition, const PRBool& aForceSave) { nsHashPropertyBag::Init(); NS_ASSERTION(parent, "must have a non-null TabParent"); nsCOMPtr<nsIContent> frame = do_QueryInterface(parent->GetOwnerElement()); nsCOMPtr<nsISupports> container = frame->GetOwnerDoc()->GetContainer(); nsCOMPtr<nsIInterfaceRequestor> ir = do_QueryInterface(container); nsCOMPtr<nsIExternalHelperAppService> helperAppService = do_GetService(NS_EXTERNALHELPERAPPSERVICE_CONTRACTID); NS_ASSERTION(helperAppService, "No Helper App Service!"); + mContentDisposition = aContentDisposition; helperAppService->DoContent(aMimeContentType, this, ir, aForceSave, getter_AddRefs(mListener)); } bool ExternalHelperAppParent::RecvOnStartRequest(const nsCString& entityID) { mEntityID = entityID; @@ -293,17 +295,17 @@ NS_IMETHODIMP ExternalHelperAppParent::SetContentCharset(const nsACString& aContentCharset) { return NS_ERROR_NOT_IMPLEMENTED; } NS_IMETHODIMP ExternalHelperAppParent::GetContentDisposition(nsACString& aContentDisposition) { - aContentDisposition.Truncate(); + aContentDisposition = mContentDisposition; return NS_OK; } NS_IMETHODIMP ExternalHelperAppParent::GetContentLength(PRInt64 *aContentLength) { *aContentLength = mContentLength; return NS_OK;
--- a/uriloader/exthandler/ExternalHelperAppParent.h +++ b/uriloader/exthandler/ExternalHelperAppParent.h @@ -64,23 +64,25 @@ public: bool RecvOnStartRequest(const nsCString& entityID); bool RecvOnDataAvailable(const nsCString& data, const PRUint32& offset, const PRUint32& count); bool RecvOnStopRequest(const nsresult& code); ExternalHelperAppParent(const IPC::URI& uri, const PRInt64& contentLength); void Init(TabParent *parent, const nsCString& aMimeContentType, + const nsCString& aContentDisposition, const PRBool& aForceSave); virtual ~ExternalHelperAppParent(); private: nsCOMPtr<nsIStreamListener> mListener; nsCOMPtr<nsIURI> mURI; PRBool mPending; nsLoadFlags mLoadFlags; nsresult mStatus; PRInt64 mContentLength; + nsCString mContentDisposition; nsCString mEntityID; }; } // namespace dom } // namespace mozilla
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -648,29 +648,33 @@ NS_IMETHODIMP nsExternalHelperAppService item->GetTreeOwner(getter_AddRefs(owner)); NS_ENSURE_TRUE(owner, NS_ERROR_FAILURE); nsCOMPtr<nsITabChild> tabchild = do_GetInterface(owner); if (!tabchild) return NS_ERROR_FAILURE; PRInt64 contentLength = -1; - if (channel) + nsCString disp; + if (channel) { channel->GetContentLength(&contentLength); + channel->GetContentDisposition(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 // DoContent. using mozilla::dom::TabChild; using mozilla::dom::ExternalHelperAppChild; TabChild *child = static_cast<TabChild*>(tabchild.get()); mozilla::dom::PExternalHelperAppChild *pc; pc = child->SendPExternalHelperAppConstructor(IPC::URI(uri), - nsCString(aMimeContentType), + nsCString(aMimeContentType), disp, aForceSave, contentLength); ExternalHelperAppChild *childListener = static_cast<ExternalHelperAppChild *>(pc); NS_ADDREF(*aStreamListener = childListener); // FIXME: Eventually we'll use this original listener to finish up client-side // work, such as closing a no-longer-needed window. (Bug 588255) // nsExternalAppHandler * handler = new nsExternalAppHandler(nsnull,