From 0693fea49cb7840504fc9e2892f97f63d8defa99 Mon Sep 17 00:00:00 2001 From: Phil Ringnalda Date: Wed, 14 Sep 2011 09:10:41 -0700 Subject: [PATCH] Back out 307b5fa030fd (bug 683280) for timeouts in test_ipAddressOrigin.html --- content/base/src/ThirdPartyUtil.cpp | 79 ++++++++++---------- content/base/src/ThirdPartyUtil.h | 1 + dom/workers/WorkerPrivate.cpp | 12 +-- dom/workers/test/Makefile.in | 3 - dom/workers/test/ipAddressOrigin_iframe.html | 23 ------ dom/workers/test/ipAddressOrigin_worker.js | 5 -- dom/workers/test/test_ipAddressOrigin.html | 42 ----------- netwerk/base/public/mozIThirdPartyUtil.idl | 20 +---- 8 files changed, 48 insertions(+), 137 deletions(-) delete mode 100644 dom/workers/test/ipAddressOrigin_iframe.html delete mode 100644 dom/workers/test/ipAddressOrigin_worker.js delete mode 100644 dom/workers/test/test_ipAddressOrigin.html diff --git a/content/base/src/ThirdPartyUtil.cpp b/content/base/src/ThirdPartyUtil.cpp index ebe7ebdc6019..b195af9f48e6 100644 --- a/content/base/src/ThirdPartyUtil.cpp +++ b/content/base/src/ThirdPartyUtil.cpp @@ -57,6 +57,46 @@ ThirdPartyUtil::Init() return rv; } +// Get the base domain for aHostURI; e.g. for "www.bbc.co.uk", this would be +// "bbc.co.uk". Only properly-formed URI's are tolerated, though a trailing +// dot may be present. If aHostURI is an IP address, an alias such as +// 'localhost', an eTLD such as 'co.uk', or the empty string, aBaseDomain will +// be the exact host. The result of this function should only be used in exact +// string comparisons, since substring comparisons will not be valid for the +// special cases elided above. +nsresult +ThirdPartyUtil::GetBaseDomain(nsIURI* aHostURI, + nsCString& aBaseDomain) +{ + // Get the base domain. this will fail if the host contains a leading dot, + // more than one trailing dot, or is otherwise malformed. + nsresult rv = mTLDService->GetBaseDomain(aHostURI, 0, aBaseDomain); + if (rv == NS_ERROR_HOST_IS_IP_ADDRESS || + rv == NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS) { + // aHostURI is either an IP address, an alias such as 'localhost', an eTLD + // such as 'co.uk', or the empty string. Uses the normalized host in such + // cases. + rv = aHostURI->GetAsciiHost(aBaseDomain); + } + NS_ENSURE_SUCCESS(rv, rv); + + // aHostURI (and thus aBaseDomain) may be the string '.'. If so, fail. + if (aBaseDomain.Length() == 1 && aBaseDomain.Last() == '.') + return NS_ERROR_INVALID_ARG; + + // Reject any URIs without a host that aren't file:// URIs. This makes it the + // only way we can get a base domain consisting of the empty string, which + // means we can safely perform foreign tests on such URIs where "not foreign" + // means "the involved URIs are all file://". + if (aBaseDomain.IsEmpty()) { + PRBool isFileURI = PR_FALSE; + aHostURI->SchemeIs("file", &isFileURI); + NS_ENSURE_TRUE(isFileURI, NS_ERROR_INVALID_ARG); + } + + return NS_OK; +} + // Determine if aFirstDomain is a different base domain to aSecondURI; or, if // the concept of base domain does not apply, determine if the two hosts are not // string-identical. @@ -276,42 +316,3 @@ ThirdPartyUtil::IsThirdPartyChannel(nsIChannel* aChannel, return IsThirdPartyWindow(ourWin, channelURI, aResult); } -// Get the base domain for aHostURI; e.g. for "www.bbc.co.uk", this would be -// "bbc.co.uk". Only properly-formed URI's are tolerated, though a trailing -// dot may be present. If aHostURI is an IP address, an alias such as -// 'localhost', an eTLD such as 'co.uk', or the empty string, aBaseDomain will -// be the exact host. The result of this function should only be used in exact -// string comparisons, since substring comparisons will not be valid for the -// special cases elided above. -NS_IMETHODIMP -ThirdPartyUtil::GetBaseDomain(nsIURI* aHostURI, - nsACString& aBaseDomain) -{ - // Get the base domain. this will fail if the host contains a leading dot, - // more than one trailing dot, or is otherwise malformed. - nsresult rv = mTLDService->GetBaseDomain(aHostURI, 0, aBaseDomain); - if (rv == NS_ERROR_HOST_IS_IP_ADDRESS || - rv == NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS) { - // aHostURI is either an IP address, an alias such as 'localhost', an eTLD - // such as 'co.uk', or the empty string. Uses the normalized host in such - // cases. - rv = aHostURI->GetAsciiHost(aBaseDomain); - } - NS_ENSURE_SUCCESS(rv, rv); - - // aHostURI (and thus aBaseDomain) may be the string '.'. If so, fail. - if (aBaseDomain.Length() == 1 && aBaseDomain.Last() == '.') - return NS_ERROR_INVALID_ARG; - - // Reject any URIs without a host that aren't file:// URIs. This makes it the - // only way we can get a base domain consisting of the empty string, which - // means we can safely perform foreign tests on such URIs where "not foreign" - // means "the involved URIs are all file://". - if (aBaseDomain.IsEmpty()) { - PRBool isFileURI = PR_FALSE; - aHostURI->SchemeIs("file", &isFileURI); - NS_ENSURE_TRUE(isFileURI, NS_ERROR_INVALID_ARG); - } - - return NS_OK; -} diff --git a/content/base/src/ThirdPartyUtil.h b/content/base/src/ThirdPartyUtil.h index 164f13e6e696..85cb84902e6f 100644 --- a/content/base/src/ThirdPartyUtil.h +++ b/content/base/src/ThirdPartyUtil.h @@ -56,6 +56,7 @@ public: nsresult Init(); private: + nsresult GetBaseDomain(nsIURI* aHostURI, nsCString& aBaseDomain); nsresult IsThirdPartyInternal(const nsCString& aFirstDomain, nsIURI* aSecondURI, PRBool* aResult); static already_AddRefed GetURIFromWindow(nsIDOMWindow* aWin); diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index db58af4d4306..07d0d0afb724 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -39,11 +39,11 @@ #include "WorkerPrivate.h" -#include "mozIThirdPartyUtil.h" #include "nsIClassInfo.h" #include "nsIConsoleService.h" #include "nsIDOMFile.h" #include "nsIDocument.h" +#include "nsIEffectiveTLDService.h" #include "nsIJSContextStack.h" #include "nsIMemoryReporter.h" #include "nsIScriptError.h" @@ -2329,14 +2329,14 @@ WorkerPrivate::Create(JSContext* aCx, JSObject* aObj, WorkerPrivate* aParent, domain = file; } else { - nsCOMPtr thirdPartyUtil = - do_GetService(THIRDPARTYUTIL_CONTRACTID); - if (!thirdPartyUtil) { - JS_ReportError(aCx, "Could not get third party helper service!"); + nsCOMPtr tldService = + do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID); + if (!tldService) { + JS_ReportError(aCx, "Could not get TLD service!"); return nsnull; } - if (NS_FAILED(thirdPartyUtil->GetBaseDomain(codebase, domain))) { + if (NS_FAILED(tldService->GetBaseDomain(codebase, 0, domain))) { JS_ReportError(aCx, "Could not get domain!"); return nsnull; } diff --git a/dom/workers/test/Makefile.in b/dom/workers/test/Makefile.in index dba82ac982ab..e55f944c9eff 100644 --- a/dom/workers/test/Makefile.in +++ b/dom/workers/test/Makefile.in @@ -58,9 +58,6 @@ _TEST_FILES = \ errorPropagation_worker.js \ test_eventDispatch.html \ eventDispatch_worker.js \ - test_ipAddressOrigin.html \ - ipAddressOrigin_iframe.html \ - ipAddressOrigin_worker.js \ test_importScripts.html \ importScripts_worker.js \ importScripts_worker_imported1.js \ diff --git a/dom/workers/test/ipAddressOrigin_iframe.html b/dom/workers/test/ipAddressOrigin_iframe.html deleted file mode 100644 index 66a9f2c0cc0c..000000000000 --- a/dom/workers/test/ipAddressOrigin_iframe.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - diff --git a/dom/workers/test/ipAddressOrigin_worker.js b/dom/workers/test/ipAddressOrigin_worker.js deleted file mode 100644 index 92ef04503976..000000000000 --- a/dom/workers/test/ipAddressOrigin_worker.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* Any copyright is dedicated to the Public Domain. -* http://creativecommons.org/publicdomain/zero/1.0/ -*/ -postMessage("done"); diff --git a/dom/workers/test/test_ipAddressOrigin.html b/dom/workers/test/test_ipAddressOrigin.html deleted file mode 100644 index 1f48e1b68fdb..000000000000 --- a/dom/workers/test/test_ipAddressOrigin.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Test for Web Workers - - - - -

- -
-
-
-
- - diff --git a/netwerk/base/public/mozIThirdPartyUtil.idl b/netwerk/base/public/mozIThirdPartyUtil.idl index ad419857692e..e0b40ef29c30 100644 --- a/netwerk/base/public/mozIThirdPartyUtil.idl +++ b/netwerk/base/public/mozIThirdPartyUtil.idl @@ -45,7 +45,7 @@ interface nsIChannel; * Utility functions for determining whether a given URI, channel, or window * hierarchy is third party with respect to a known URI. */ -[scriptable, uuid(d994fd1d-d2fe-4372-9ae7-88b08b7d9d90)] +[scriptable, uuid(55385caa-1b94-4376-a34c-b47c51ef0837)] interface mozIThirdPartyUtil : nsISupports { /** @@ -155,24 +155,6 @@ interface mozIThirdPartyUtil : nsISupports * @see isThirdPartyWindow */ boolean isThirdPartyChannel(in nsIChannel aChannel, [optional] in nsIURI aURI); - - /** - * getBaseDomain - * - * Get the base domain for aHostURI; e.g. for "www.bbc.co.uk", this would be - * "bbc.co.uk". Only properly-formed URI's are tolerated, though a trailing - * dot may be present. If aHostURI is an IP address, an alias such as - * 'localhost', an eTLD such as 'co.uk', or the empty string, aBaseDomain will - * be the exact host. The result of this function should only be used in exact - * string comparisons, since substring comparisons will not be valid for the - * special cases elided above. - * - * @param aHostURI - * The URI to analyze. - * - * @return the base domain. - */ - AUTF8String getBaseDomain(in nsIURI aHostURI); }; %{ C++