зеркало из https://github.com/mozilla/gecko-dev.git
Bug 939318 - Introduce the "network.notify.changed" prefs. r=mcmanus
Makes it possible to disable 'changed' events. Disable the events in test_ping_aboutnetworking.js and in test_proxy-failover_passing.js
This commit is contained in:
Родитель
047c33b3d7
Коммит
a34f73bd67
|
@ -990,6 +990,10 @@ pref("security.fileuri.strict_origin_policy", true);
|
||||||
// the results
|
// the results
|
||||||
pref("network.allow-experiments", true);
|
pref("network.allow-experiments", true);
|
||||||
|
|
||||||
|
// Allow the network changed event to get sent when a network topology or
|
||||||
|
// setup change is noticed while running.
|
||||||
|
pref("network.notify.changed", true);
|
||||||
|
|
||||||
// Transmit UDP busy-work to the LAN when anticipating low latency
|
// Transmit UDP busy-work to the LAN when anticipating low latency
|
||||||
// network reads and on wifi to mitigate 802.11 Power Save Polling delays
|
// network reads and on wifi to mitigate 802.11 Power Save Polling delays
|
||||||
pref("network.tickle-wifi.enabled", false);
|
pref("network.tickle-wifi.enabled", false);
|
||||||
|
|
|
@ -55,6 +55,7 @@ using namespace mozilla;
|
||||||
// but the old names are still used to preserve backward compatibility.
|
// but the old names are still used to preserve backward compatibility.
|
||||||
#define NECKO_BUFFER_CACHE_COUNT_PREF "network.buffer.cache.count"
|
#define NECKO_BUFFER_CACHE_COUNT_PREF "network.buffer.cache.count"
|
||||||
#define NECKO_BUFFER_CACHE_SIZE_PREF "network.buffer.cache.size"
|
#define NECKO_BUFFER_CACHE_SIZE_PREF "network.buffer.cache.size"
|
||||||
|
#define NETWORK_NOTIFY_CHANGED_PREF "network.notify.changed"
|
||||||
|
|
||||||
#define MAX_RECURSION_COUNT 50
|
#define MAX_RECURSION_COUNT 50
|
||||||
|
|
||||||
|
@ -149,6 +150,7 @@ nsIOService::nsIOService()
|
||||||
, mNetworkLinkServiceInitialized(false)
|
, mNetworkLinkServiceInitialized(false)
|
||||||
, mChannelEventSinks(NS_CHANNEL_EVENT_SINK_CATEGORY)
|
, mChannelEventSinks(NS_CHANNEL_EVENT_SINK_CATEGORY)
|
||||||
, mAutoDialEnabled(false)
|
, mAutoDialEnabled(false)
|
||||||
|
, mNetworkNotifyChanged(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +190,7 @@ nsIOService::Init()
|
||||||
prefBranch->AddObserver(MANAGE_OFFLINE_STATUS_PREF, this, true);
|
prefBranch->AddObserver(MANAGE_OFFLINE_STATUS_PREF, this, true);
|
||||||
prefBranch->AddObserver(NECKO_BUFFER_CACHE_COUNT_PREF, this, true);
|
prefBranch->AddObserver(NECKO_BUFFER_CACHE_COUNT_PREF, this, true);
|
||||||
prefBranch->AddObserver(NECKO_BUFFER_CACHE_SIZE_PREF, this, true);
|
prefBranch->AddObserver(NECKO_BUFFER_CACHE_SIZE_PREF, this, true);
|
||||||
|
prefBranch->AddObserver(NETWORK_NOTIFY_CHANGED_PREF, this, true);
|
||||||
PrefsChanged(prefBranch);
|
PrefsChanged(prefBranch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -852,6 +855,14 @@ nsIOService::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
|
||||||
gDefaultSegmentSize = size;
|
gDefaultSegmentSize = size;
|
||||||
NS_WARN_IF_FALSE( (!(size & (size - 1))) , "network segment size is not a power of 2!");
|
NS_WARN_IF_FALSE( (!(size & (size - 1))) , "network segment size is not a power of 2!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pref || strcmp(pref, NETWORK_NOTIFY_CHANGED_PREF) == 0) {
|
||||||
|
bool allow;
|
||||||
|
nsresult rv = prefs->GetBoolPref(NETWORK_NOTIFY_CHANGED_PREF, &allow);
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
mNetworkNotifyChanged = allow;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -958,7 +969,7 @@ nsIOService::Observe(nsISupports *subject,
|
||||||
|
|
||||||
NS_ASSERTION(observerService, "The observer service should not be null");
|
NS_ASSERTION(observerService, "The observer service should not be null");
|
||||||
|
|
||||||
if (observerService) {
|
if (observerService && mNetworkNotifyChanged) {
|
||||||
(void)observerService->
|
(void)observerService->
|
||||||
NotifyObservers(nullptr,
|
NotifyObservers(nullptr,
|
||||||
NS_NETWORK_LINK_TOPIC,
|
NS_NETWORK_LINK_TOPIC,
|
||||||
|
|
|
@ -129,6 +129,7 @@ private:
|
||||||
nsTArray<int32_t> mRestrictedPortList;
|
nsTArray<int32_t> mRestrictedPortList;
|
||||||
|
|
||||||
bool mAutoDialEnabled;
|
bool mAutoDialEnabled;
|
||||||
|
bool mNetworkNotifyChanged;
|
||||||
public:
|
public:
|
||||||
// Used for all default buffer sizes that necko allocates.
|
// Used for all default buffer sizes that necko allocates.
|
||||||
static uint32_t gDefaultSegmentSize;
|
static uint32_t gDefaultSegmentSize;
|
||||||
|
|
|
@ -27,10 +27,13 @@
|
||||||
#include "nsAutoPtr.h"
|
#include "nsAutoPtr.h"
|
||||||
#include "mozilla/Services.h"
|
#include "mozilla/Services.h"
|
||||||
#include "nsCRT.h"
|
#include "nsCRT.h"
|
||||||
|
#include "mozilla/Preferences.h"
|
||||||
|
|
||||||
#include <iptypes.h>
|
#include <iptypes.h>
|
||||||
#include <iphlpapi.h>
|
#include <iphlpapi.h>
|
||||||
|
|
||||||
|
using namespace mozilla;
|
||||||
|
|
||||||
static HMODULE sNetshell;
|
static HMODULE sNetshell;
|
||||||
static decltype(NcFreeNetconProperties)* sNcFreeNetconProperties;
|
static decltype(NcFreeNetconProperties)* sNcFreeNetconProperties;
|
||||||
|
|
||||||
|
@ -38,6 +41,8 @@ static HMODULE sIphlpapi;
|
||||||
static decltype(NotifyIpInterfaceChange)* sNotifyIpInterfaceChange;
|
static decltype(NotifyIpInterfaceChange)* sNotifyIpInterfaceChange;
|
||||||
static decltype(CancelMibChangeNotify2)* sCancelMibChangeNotify2;
|
static decltype(CancelMibChangeNotify2)* sCancelMibChangeNotify2;
|
||||||
|
|
||||||
|
#define NETWORK_NOTIFY_CHANGED_PREF "network.notify.changed"
|
||||||
|
|
||||||
static void InitIphlpapi(void)
|
static void InitIphlpapi(void)
|
||||||
{
|
{
|
||||||
if (!sIphlpapi) {
|
if (!sIphlpapi) {
|
||||||
|
@ -90,6 +95,7 @@ nsNotifyAddrListener::nsNotifyAddrListener()
|
||||||
, mStatusKnown(false)
|
, mStatusKnown(false)
|
||||||
, mCheckAttempted(false)
|
, mCheckAttempted(false)
|
||||||
, mShutdownEvent(nullptr)
|
, mShutdownEvent(nullptr)
|
||||||
|
, mAllowChangedEvent(true)
|
||||||
{
|
{
|
||||||
InitIphlpapi();
|
InitIphlpapi();
|
||||||
}
|
}
|
||||||
|
@ -211,6 +217,9 @@ nsNotifyAddrListener::Init(void)
|
||||||
false);
|
false);
|
||||||
NS_ENSURE_SUCCESS(rv, rv);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
|
Preferences::AddBoolVarCache(&mAllowChangedEvent,
|
||||||
|
NETWORK_NOTIFY_CHANGED_PREF, true);
|
||||||
|
|
||||||
mShutdownEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
mShutdownEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
|
||||||
NS_ENSURE_TRUE(mShutdownEvent, NS_ERROR_OUT_OF_MEMORY);
|
NS_ENSURE_TRUE(mShutdownEvent, NS_ERROR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
|
@ -494,8 +503,10 @@ nsNotifyAddrListener::CheckLinkStatus(void)
|
||||||
|
|
||||||
if (mLinkUp && (prevCsum != mIPInterfaceChecksum)) {
|
if (mLinkUp && (prevCsum != mIPInterfaceChecksum)) {
|
||||||
// Network is online. Topology has changed. Always send CHANGED
|
// Network is online. Topology has changed. Always send CHANGED
|
||||||
// before UP.
|
// before UP - if allowed to.
|
||||||
SendEvent(NS_NETWORK_LINK_DATA_CHANGED);
|
if (mAllowChangedEvent) {
|
||||||
|
SendEvent(NS_NETWORK_LINK_DATA_CHANGED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (prevLinkUp != mLinkUp) {
|
if (prevLinkUp != mLinkUp) {
|
||||||
// UP/DOWN status changed, send appropriate UP/DOWN event
|
// UP/DOWN status changed, send appropriate UP/DOWN event
|
||||||
|
|
|
@ -65,6 +65,9 @@ private:
|
||||||
// This is a checksum of various meta data for all network interfaces
|
// This is a checksum of various meta data for all network interfaces
|
||||||
// considered UP at last check.
|
// considered UP at last check.
|
||||||
ULONG mIPInterfaceChecksum;
|
ULONG mIPInterfaceChecksum;
|
||||||
|
|
||||||
|
// Network changed events are enabled
|
||||||
|
bool mAllowChangedEvent;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* NSNOTIFYADDRLISTENER_H_ */
|
#endif /* NSNOTIFYADDRLISTENER_H_ */
|
||||||
|
|
|
@ -42,6 +42,12 @@ function test_sockets(serverSocket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function run_test() {
|
function run_test() {
|
||||||
|
var ps = Cc["@mozilla.org/preferences-service;1"]
|
||||||
|
.getService(Ci.nsIPrefBranch);
|
||||||
|
// disable network changed events to avoid the the risk of having the dns
|
||||||
|
// cache getting flushed behind our back
|
||||||
|
ps.setBoolPref("network.notify.changed", false);
|
||||||
|
|
||||||
let serverSocket = Components.classes["@mozilla.org/network/server-socket;1"]
|
let serverSocket = Components.classes["@mozilla.org/network/server-socket;1"]
|
||||||
.createInstance(Ci.nsIServerSocket);
|
.createInstance(Ci.nsIServerSocket);
|
||||||
serverSocket.init(-1, true, -1);
|
serverSocket.init(-1, true, -1);
|
||||||
|
|
|
@ -36,6 +36,9 @@ function run_test()
|
||||||
"function FindProxyForURL(url, host) {return 'PROXY a_non_existent_domain_x7x6c572v:80; PROXY localhost:" +
|
"function FindProxyForURL(url, host) {return 'PROXY a_non_existent_domain_x7x6c572v:80; PROXY localhost:" +
|
||||||
httpServer.identity.primaryPort + "';}"
|
httpServer.identity.primaryPort + "';}"
|
||||||
);
|
);
|
||||||
|
// disable network changed events to avoid the the risk of having the
|
||||||
|
// proxyservice reset in the middle
|
||||||
|
prefserv.setBoolPref("network.notify.changed", false);
|
||||||
|
|
||||||
var chan = make_channel("http://localhost:" +
|
var chan = make_channel("http://localhost:" +
|
||||||
httpServer.identity.primaryPort + "/content");
|
httpServer.identity.primaryPort + "/content");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче