From f207e836f4705abc665aecd3706322dcb7a0f1e6 Mon Sep 17 00:00:00 2001 From: "martijn.martijn%gmail.com" Date: Fri, 21 Apr 2006 20:16:27 +0000 Subject: [PATCH] Bug 223816 - find function in midas window not working, NS_ERROR_DOM_BAD_URI error. r+sr=bzbarsky --- .../components/find/src/nsWebBrowserFind.cpp | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/embedding/components/find/src/nsWebBrowserFind.cpp b/embedding/components/find/src/nsWebBrowserFind.cpp index ac4f021c4e43..a1e2f721b4d6 100644 --- a/embedding/components/find/src/nsWebBrowserFind.cpp +++ b/embedding/components/find/src/nsWebBrowserFind.cpp @@ -732,14 +732,27 @@ nsresult nsWebBrowserFind::SearchInFrame(nsIDOMWindow* aWindow, nsCOMPtr theDoc = do_QueryInterface(domDoc); if (!theDoc) return NS_ERROR_FAILURE; - nsIURI *docURI = theDoc->GetDocumentURI(); - NS_ENSURE_TRUE(docURI, NS_ERROR_FAILURE); - - // Get the security manager and do the same-origin check - nsCOMPtr secMan = do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); + nsCOMPtr secMan = + do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); - rv = secMan->CheckSameOrigin(nsnull, docURI); - if (NS_FAILED(rv)) return rv; + + PRBool hasCap = PR_FALSE; + secMan->IsCapabilityEnabled("UniversalBrowserWrite", &hasCap); + if (!hasCap) + secMan->IsCapabilityEnabled("UniversalXPConnect", &hasCap); + + if (!hasCap) { + nsIPrincipal *principal = theDoc->GetNodePrincipal(); + if (!principal) + return NS_ERROR_FAILURE; + nsCOMPtr subject; + rv = secMan->GetSubjectPrincipal(getter_AddRefs(subject)); + NS_ENSURE_SUCCESS(rv, rv); + if (subject) { + rv = secMan->CheckSameOriginPrincipal(subject, principal); + NS_ENSURE_SUCCESS(rv, rv); + } + } if (!mFind) { mFind = do_CreateInstance(NS_FIND_CONTRACTID, &rv);