From 144cb573f0adc269d8378dedf9401e80f0c064e7 Mon Sep 17 00:00:00 2001 From: "vishy%netscape.com" Date: Fri, 22 Sep 2000 05:04:58 +0000 Subject: [PATCH] bugzilla 52182. r=a=mscott. Modify the logic to launch external browser (only for target=_content and target=_blank links). Also add something to DocShellLoadInfo so that a user of nsDocShell::LoadURI can specify the target desired. git-svn-id: svn://10.0.0.236/trunk@79840 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/docshell/base/nsDocShell.cpp | 10 ++++++---- mozilla/docshell/base/nsDocShellLoadInfo.cpp | 19 ++++++++++++++++++- mozilla/docshell/base/nsDocShellLoadInfo.h | 1 + mozilla/docshell/base/nsIDocShellLoadInfo.idl | 3 +++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/mozilla/docshell/base/nsDocShell.cpp b/mozilla/docshell/base/nsDocShell.cpp index d1054c36881..0c830f70c71 100644 --- a/mozilla/docshell/base/nsDocShell.cpp +++ b/mozilla/docshell/base/nsDocShell.cpp @@ -263,7 +263,6 @@ NS_IMETHODIMP nsDocShell::GetInterface(const nsIID& aIID, void** aSink) //***************************************************************************** // nsDocShell::nsIDocShell //***************************************************************************** - NS_IMETHODIMP nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo, PRUint32 aLoadFlags) { @@ -273,7 +272,7 @@ nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo, PRUint32 aLoad PRBool inheritOwner = PR_FALSE; PRBool stopActiveDoc = PR_FALSE; nsCOMPtr shEntry; - + nsXPIDLCString target; PRUint32 loadType = MAKE_LOAD_TYPE(LOAD_NORMAL, aLoadFlags); NS_ENSURE_ARG(aURI); @@ -319,6 +318,7 @@ nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo, PRUint32 aLoad aLoadInfo->GetInheritOwner(&inheritOwner); aLoadInfo->GetStopActiveDocument(&stopActiveDoc); aLoadInfo->GetSHEntry(getter_AddRefs(shEntry)); + aLoadInfo->GetTarget(getter_Copies(target)); } if (!shEntry && loadType != LOAD_NORMAL_REPLACE) { @@ -347,7 +347,7 @@ nsDocShell::LoadURI(nsIURI* aURI, nsIDocShellLoadInfo* aLoadInfo, PRUint32 aLoad if (shEntry) { rv = LoadHistoryEntry(shEntry, loadType); } else { - rv = InternalLoad(aURI, referrer, owner, inheritOwner, stopActiveDoc, nsnull, nsnull, + rv = InternalLoad(aURI, referrer, owner, inheritOwner, stopActiveDoc, (const char*) target, nsnull, nsnull, loadType, nsnull); } @@ -3186,7 +3186,9 @@ NS_IMETHODIMP nsDocShell::DoURILoad(nsIURI* aURI, nsIURI* aReferrerURI, nsXPIDLCString urlScheme; aURI->GetScheme(getter_Copies(urlScheme)); // don't do it for javascript urls! - if (urlScheme && nsCRT::strcasecmp(jsSchemeName, urlScheme)) + if (urlScheme && nsCRT::strcasecmp(jsSchemeName, urlScheme) + && (!nsCRT::strcasecmp(aWindowTarget,"_content") || + !nsCRT::strcasecmp(aWindowTarget,"_blank"))) { nsCOMPtr extProtService (do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); PRBool haveHandler = PR_FALSE; diff --git a/mozilla/docshell/base/nsDocShellLoadInfo.cpp b/mozilla/docshell/base/nsDocShellLoadInfo.cpp index 585ced99e93..7ba32df32a4 100644 --- a/mozilla/docshell/base/nsDocShellLoadInfo.cpp +++ b/mozilla/docshell/base/nsDocShellLoadInfo.cpp @@ -18,6 +18,7 @@ * * Contributor(s): * Travis Bogard + * Viswanath Ramachandran */ // Local Includes @@ -32,6 +33,7 @@ nsDocShellLoadInfo::nsDocShellLoadInfo() NS_INIT_REFCNT(); mLoadType = nsIDocShellLoadInfo::loadNormal; mInheritOwner = PR_FALSE; + mTarget.Assign(""); mStopActiveDocument = PR_FALSE; } @@ -135,13 +137,28 @@ NS_IMETHODIMP nsDocShellLoadInfo::GetSHEntry(nsISHEntry** aSHEntry) NS_IF_ADDREF(*aSHEntry); return NS_OK; } - + NS_IMETHODIMP nsDocShellLoadInfo::SetSHEntry(nsISHEntry* aSHEntry) { mSHEntry = aSHEntry; return NS_OK; } +NS_IMETHODIMP nsDocShellLoadInfo::GetTarget(char** aTarget) +{ + NS_ENSURE_ARG_POINTER(aTarget); + + *aTarget = mTarget.ToNewCString(); + + return NS_OK; +} + +NS_IMETHODIMP nsDocShellLoadInfo::SetTarget(const char* aTarget) +{ + mTarget.Assign(aTarget); + return NS_OK; +} + //***************************************************************************** // nsDocShellLoadInfo: Helpers //***************************************************************************** diff --git a/mozilla/docshell/base/nsDocShellLoadInfo.h b/mozilla/docshell/base/nsDocShellLoadInfo.h index 9525db77907..f7e28587c62 100644 --- a/mozilla/docshell/base/nsDocShellLoadInfo.h +++ b/mozilla/docshell/base/nsDocShellLoadInfo.h @@ -51,6 +51,7 @@ protected: PRBool mStopActiveDocument; nsDocShellInfoLoadType mLoadType; nsCOMPtr mSHEntry; + nsCString mTarget; }; #endif /* nsDocShellLoadInfo_h__ */ diff --git a/mozilla/docshell/base/nsIDocShellLoadInfo.idl b/mozilla/docshell/base/nsIDocShellLoadInfo.idl index f73f5cb9a97..ccb131baf5d 100644 --- a/mozilla/docshell/base/nsIDocShellLoadInfo.idl +++ b/mozilla/docshell/base/nsIDocShellLoadInfo.idl @@ -18,6 +18,7 @@ * * Contributor(s): * Travis Bogard + * Viswanath Ramachandran */ #include "nsISupports.idl" @@ -72,4 +73,6 @@ interface nsIDocShellLoadInfo : nsISupports SHEntry for this page */ attribute nsISHEntry SHEntry; + + attribute string target; // like _content, _blank etc };