mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-27 12:50:09 +00:00
Fixing bug 488162. Disable prefetches on proxy config and pref, r+sr=bzbarsky@mit.edu
This commit is contained in:
parent
ff6ed0009a
commit
d8ac17d88c
@ -183,7 +183,7 @@ nsHTMLDNSPrefetch::Prefetch(nsAString &hostname, PRUint16 flags)
|
|||||||
return NS_ERROR_NOT_AVAILABLE;
|
return NS_ERROR_NOT_AVAILABLE;
|
||||||
|
|
||||||
nsCOMPtr<nsICancelable> tmpOutstanding;
|
nsCOMPtr<nsICancelable> tmpOutstanding;
|
||||||
return sDNSService->AsyncResolve(NS_ConvertUTF16toUTF8(hostname), flags,
|
return sDNSService->AsyncResolve(NS_ConvertUTF16toUTF8(hostname), flags | nsIDNSService::RESOLVE_SPECULATE,
|
||||||
sDNSListener, nsnull, getter_AddRefs(tmpOutstanding));
|
sDNSListener, nsnull, getter_AddRefs(tmpOutstanding));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ nsHTMLDNSPrefetch::nsDeferrals::SubmitQueue()
|
|||||||
nsCOMPtr<nsICancelable> tmpOutstanding;
|
nsCOMPtr<nsICancelable> tmpOutstanding;
|
||||||
|
|
||||||
sDNSService->AsyncResolve(hostName,
|
sDNSService->AsyncResolve(hostName,
|
||||||
mEntries[mTail].mFlags,
|
mEntries[mTail].mFlags | nsIDNSService::RESOLVE_SPECULATE,
|
||||||
sDNSListener, nsnull, getter_AddRefs(tmpOutstanding));
|
sDNSListener, nsnull, getter_AddRefs(tmpOutstanding));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,8 +82,8 @@ nsDNSPrefetch::Prefetch(PRUint16 flags)
|
|||||||
|
|
||||||
nsCOMPtr<nsICancelable> tmpOutstanding;
|
nsCOMPtr<nsICancelable> tmpOutstanding;
|
||||||
|
|
||||||
return sDNSService->AsyncResolve(mHostname, flags, this, nsnull,
|
return sDNSService->AsyncResolve(mHostname, flags | nsIDNSService::RESOLVE_SPECULATE,
|
||||||
getter_AddRefs(tmpOutstanding));
|
this, nsnull, getter_AddRefs(tmpOutstanding));
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -306,8 +306,7 @@ public:
|
|||||||
PRUint32 host_len;
|
PRUint32 host_len;
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
// These values correspond to the integer network.proxy.type preference
|
||||||
|
|
||||||
enum ProxyConfig {
|
enum ProxyConfig {
|
||||||
eProxyConfig_Direct,
|
eProxyConfig_Direct,
|
||||||
eProxyConfig_Manual,
|
eProxyConfig_Manual,
|
||||||
@ -318,6 +317,8 @@ protected:
|
|||||||
eProxyConfig_Last
|
eProxyConfig_Last
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
// simplified array of filters defined by this struct
|
// simplified array of filters defined by this struct
|
||||||
struct HostInfo {
|
struct HostInfo {
|
||||||
PRBool is_ipaddr;
|
PRBool is_ipaddr;
|
||||||
|
@ -46,7 +46,7 @@ interface nsIDNSListener;
|
|||||||
/**
|
/**
|
||||||
* nsIDNSService
|
* nsIDNSService
|
||||||
*/
|
*/
|
||||||
[scriptable, uuid(ee4d9f1d-4f99-4384-b547-29da735f8b6e)]
|
[scriptable, uuid(c1a56a45-8fa3-44e6-9f01-38c91c858cf9)]
|
||||||
interface nsIDNSService : nsISupports
|
interface nsIDNSService : nsISupports
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
@ -114,4 +114,10 @@ interface nsIDNSService : nsISupports
|
|||||||
*/
|
*/
|
||||||
const unsigned long RESOLVE_PRIORITY_MEDIUM = (1 << 2);
|
const unsigned long RESOLVE_PRIORITY_MEDIUM = (1 << 2);
|
||||||
const unsigned long RESOLVE_PRIORITY_LOW = (1 << 3);
|
const unsigned long RESOLVE_PRIORITY_LOW = (1 << 3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* if set, indicates request is speculative. Speculative requests
|
||||||
|
* return errors if prefetching is disabled by configuration.
|
||||||
|
*/
|
||||||
|
const unsigned long RESOLVE_SPECULATE = (1 << 4);
|
||||||
};
|
};
|
||||||
|
@ -51,6 +51,7 @@
|
|||||||
#include "nsNetCID.h"
|
#include "nsNetCID.h"
|
||||||
#include "nsNetError.h"
|
#include "nsNetError.h"
|
||||||
#include "nsDNSPrefetch.h"
|
#include "nsDNSPrefetch.h"
|
||||||
|
#include "nsProtocolProxyService.h"
|
||||||
#include "prsystem.h"
|
#include "prsystem.h"
|
||||||
#include "prnetdb.h"
|
#include "prnetdb.h"
|
||||||
#include "prmon.h"
|
#include "prmon.h"
|
||||||
@ -328,6 +329,7 @@ nsDNSService::Init()
|
|||||||
PRBool enableIDN = PR_TRUE;
|
PRBool enableIDN = PR_TRUE;
|
||||||
PRBool disableIPv6 = PR_FALSE;
|
PRBool disableIPv6 = PR_FALSE;
|
||||||
PRBool disablePrefetch = PR_FALSE;
|
PRBool disablePrefetch = PR_FALSE;
|
||||||
|
int proxyType = nsProtocolProxyService::eProxyConfig_Direct;
|
||||||
|
|
||||||
nsAdoptingCString ipv4OnlyDomains;
|
nsAdoptingCString ipv4OnlyDomains;
|
||||||
|
|
||||||
@ -345,6 +347,9 @@ nsDNSService::Init()
|
|||||||
prefs->GetBoolPref(kPrefDisableIPv6, &disableIPv6);
|
prefs->GetBoolPref(kPrefDisableIPv6, &disableIPv6);
|
||||||
prefs->GetCharPref(kPrefIPv4OnlyDomains, getter_Copies(ipv4OnlyDomains));
|
prefs->GetCharPref(kPrefIPv4OnlyDomains, getter_Copies(ipv4OnlyDomains));
|
||||||
prefs->GetBoolPref(kPrefDisablePrefetch, &disablePrefetch);
|
prefs->GetBoolPref(kPrefDisablePrefetch, &disablePrefetch);
|
||||||
|
|
||||||
|
// If a manual proxy is in use, disable prefetch implicitly
|
||||||
|
prefs->GetIntPref("network.proxy.type", &proxyType);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstTime) {
|
if (firstTime) {
|
||||||
@ -360,6 +365,10 @@ nsDNSService::Init()
|
|||||||
prefs->AddObserver(kPrefIPv4OnlyDomains, this, PR_FALSE);
|
prefs->AddObserver(kPrefIPv4OnlyDomains, this, PR_FALSE);
|
||||||
prefs->AddObserver(kPrefDisableIPv6, this, PR_FALSE);
|
prefs->AddObserver(kPrefDisableIPv6, this, PR_FALSE);
|
||||||
prefs->AddObserver(kPrefDisablePrefetch, this, PR_FALSE);
|
prefs->AddObserver(kPrefDisablePrefetch, this, PR_FALSE);
|
||||||
|
|
||||||
|
// Monitor these to see if there is a change in proxy configuration
|
||||||
|
// If a manual proxy is in use, disable prefetch implicitly
|
||||||
|
prefs->AddObserver("network.proxy.type", this, PR_FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,7 +389,9 @@ nsDNSService::Init()
|
|||||||
mIDN = idn;
|
mIDN = idn;
|
||||||
mIPv4OnlyDomains = ipv4OnlyDomains; // exchanges buffer ownership
|
mIPv4OnlyDomains = ipv4OnlyDomains; // exchanges buffer ownership
|
||||||
mDisableIPv6 = disableIPv6;
|
mDisableIPv6 = disableIPv6;
|
||||||
mDisablePrefetch = disablePrefetch;
|
|
||||||
|
// Disable prefetching either by explicit preference or if a manual proxy is configured
|
||||||
|
mDisablePrefetch = disablePrefetch || (proxyType == nsProtocolProxyService::eProxyConfig_Manual);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsDNSPrefetch::Initialize(this);
|
nsDNSPrefetch::Initialize(this);
|
||||||
@ -415,7 +426,7 @@ nsDNSService::AsyncResolve(const nsACString &hostname,
|
|||||||
{
|
{
|
||||||
nsAutoLock lock(mLock);
|
nsAutoLock lock(mLock);
|
||||||
|
|
||||||
if (mDisablePrefetch && (flags & (RESOLVE_PRIORITY_LOW | RESOLVE_PRIORITY_MEDIUM)))
|
if (mDisablePrefetch && (flags & RESOLVE_SPECULATE))
|
||||||
return NS_ERROR_DNS_LOOKUP_QUEUE_FULL;
|
return NS_ERROR_DNS_LOOKUP_QUEUE_FULL;
|
||||||
|
|
||||||
res = mResolver;
|
res = mResolver;
|
||||||
|
@ -225,7 +225,8 @@ public:
|
|||||||
RES_BYPASS_CACHE = 1 << 0,
|
RES_BYPASS_CACHE = 1 << 0,
|
||||||
RES_CANON_NAME = 1 << 1,
|
RES_CANON_NAME = 1 << 1,
|
||||||
RES_PRIORITY_MEDIUM = 1 << 2,
|
RES_PRIORITY_MEDIUM = 1 << 2,
|
||||||
RES_PRIORITY_LOW = 1 << 3
|
RES_PRIORITY_LOW = 1 << 3,
|
||||||
|
RES_SPECULATE = 1 << 4
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user