зеркало из https://github.com/mozilla/gecko-dev.git
Fix for bug 103883. Add weak ref support for prefs observers to help reduce MLK cycles with preferences. r=ccarlen, darin, gordon, hewitt, mstoltz, srilatha, sspitzer. sr=alecf.
This commit is contained in:
Родитель
10388d6226
Коммит
b154c13b46
|
@ -50,8 +50,7 @@ var gLastValidURL = "";
|
|||
var gHaveUpdatedToolbarState = false;
|
||||
var gClickSelectsAll = -1;
|
||||
|
||||
var pref = Components.classes["@mozilla.org/preferences;1"]
|
||||
.getService(Components.interfaces.nsIPref);
|
||||
var pref = null;
|
||||
|
||||
var appCore = null;
|
||||
|
||||
|
@ -133,7 +132,7 @@ function UpdateInternetSearchResults(event)
|
|||
var searchInProgressFlag = search.FindInternetSearchResults(url);
|
||||
|
||||
if (searchInProgressFlag) {
|
||||
var autoOpenSearchPanel = pref.GetBoolPref("browser.search.opensidebarsearchpanel");
|
||||
var autoOpenSearchPanel = pref.getBoolPref("browser.search.opensidebarsearchpanel");
|
||||
|
||||
if (autoOpenSearchPanel)
|
||||
RevealSearchPanel();
|
||||
|
@ -168,7 +167,8 @@ function getHomePage()
|
|||
{
|
||||
var url;
|
||||
try {
|
||||
url = pref.getLocalizedUnicharPref("browser.startup.homepage");
|
||||
url = pref.getComplexValue("browser.startup.homepage",
|
||||
Components.interfaces.nsIPrefLocalizedString);
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,9 @@ function UpdateBackForwardButtons()
|
|||
function nsButtonPrefListener()
|
||||
{
|
||||
try {
|
||||
pref.addObserver(this.domain, this);
|
||||
var pbi = pref.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi)
|
||||
pbi.addObserver(this.domain, this, false);
|
||||
} catch(ex) {
|
||||
dump("Failed to observe prefs: " + ex + "\n");
|
||||
}
|
||||
|
@ -224,7 +226,7 @@ nsButtonPrefListener.prototype =
|
|||
var buttonId = buttonName + "-button";
|
||||
var button = document.getElementById(buttonId);
|
||||
|
||||
var show = pref.GetBoolPref(prefName);
|
||||
var show = pref.getBoolPref(prefName);
|
||||
if (show)
|
||||
button.setAttribute("hidden","false");
|
||||
else
|
||||
|
@ -275,6 +277,13 @@ function Startup()
|
|||
if (!appCore)
|
||||
throw "couldn't create a browser instance";
|
||||
|
||||
// Get the preferences service
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
if (!prefService)
|
||||
throw "couldn't create a preferences service";
|
||||
pref = prefService.getBranch(null);
|
||||
|
||||
webNavigation = getWebNavigation();
|
||||
if (!webNavigation)
|
||||
throw "no XBL binding for browser";
|
||||
|
@ -447,8 +456,10 @@ function Shutdown()
|
|||
BrowserFlushBookmarksAndHistory();
|
||||
|
||||
// unregister us as a pref listener
|
||||
pref.removeObserver(window.buttonPrefListener.domain,
|
||||
window.buttonPrefListener);
|
||||
var pbi = pref.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi)
|
||||
pbi.removeObserver(window.buttonPrefListener.domain,
|
||||
window.buttonPrefListener);
|
||||
|
||||
window.browserContentListener.close();
|
||||
// Close the app core.
|
||||
|
@ -458,8 +469,8 @@ function Shutdown()
|
|||
|
||||
function Translate()
|
||||
{
|
||||
var service = pref.CopyCharPref("browser.translation.service");
|
||||
var serviceDomain = pref.CopyCharPref("browser.translation.serviceDomain");
|
||||
var service = pref.getCharPref("browser.translation.service");
|
||||
var serviceDomain = pref.getCharPref("browser.translation.serviceDomain");
|
||||
|
||||
// XXX This somehow causes a big leak, back to the old way
|
||||
// till we figure out why. See bug 61886.
|
||||
|
@ -685,8 +696,9 @@ function OpenSearch(tabName, forceDialogFlag, searchStr)
|
|||
var forceAsURL = urlmatch.test(searchStr);
|
||||
|
||||
try {
|
||||
autoOpenSearchPanel = pref.GetBoolPref("browser.search.opensidebarsearchpanel");
|
||||
defaultSearchURL = pref.getLocalizedUnicharPref("browser.search.defaulturl");
|
||||
autoOpenSearchPanel = pref.getBoolPref("browser.search.opensidebarsearchpanel");
|
||||
defaultSearchURL = pref.getComplexValue("browser.search.defaulturl",
|
||||
Components.interfaces.nsIPrefLocalizedString);
|
||||
} catch (ex) {
|
||||
}
|
||||
|
||||
|
@ -709,7 +721,7 @@ function OpenSearch(tabName, forceDialogFlag, searchStr)
|
|||
} else {
|
||||
var searchMode = 0;
|
||||
try {
|
||||
searchMode = pref.GetIntPref("browser.search.powermode");
|
||||
searchMode = pref.getIntPref("browser.search.powermode");
|
||||
} catch(ex) {
|
||||
}
|
||||
if (forceDialogFlag || searchMode == 1) {
|
||||
|
@ -736,7 +748,7 @@ function OpenSearch(tabName, forceDialogFlag, searchStr)
|
|||
|
||||
searchDS.RememberLastSearchText(escapedSearchStr);
|
||||
try {
|
||||
var searchEngineURI = pref.CopyCharPref("browser.search.defaultengine");
|
||||
var searchEngineURI = pref.getCharPref("browser.search.defaultengine");
|
||||
if (searchEngineURI) {
|
||||
var searchURL = getSearchUrl("actionButton");
|
||||
if (searchURL) {
|
||||
|
@ -944,7 +956,7 @@ function BrowserLoadURL()
|
|||
if (url.match(/^view-source:/)) {
|
||||
BrowserViewSourceOfURL(url.replace(/^view-source:/, ""), null);
|
||||
} else {
|
||||
if (pref && pref.GetBoolPref("browser.tabs.opentabfor.urlbar") && getBrowser().localName == "tabbrowser") {
|
||||
if (pref && pref.getBoolPref("browser.tabs.opentabfor.urlbar") && getBrowser().localName == "tabbrowser") {
|
||||
var t = getBrowser().addTab(getShortcutOrURI(url)); // open link in new tab
|
||||
getBrowser().selectedTab = t;
|
||||
}
|
||||
|
@ -1362,7 +1374,9 @@ function applyTheme(themeName)
|
|||
|
||||
chromeRegistry.uninstallSkin( themeName.getAttribute("name"), true );
|
||||
// XXX - this sucks and should only be temporary.
|
||||
pref.SetUnicharPref("general.skins.removelist." + themeName.getAttribute("name"), true);
|
||||
pref.setComplexValue("general.skins.removelist." + themeName.getAttribute("name"),
|
||||
Components.interfaces.nsISupportsWString,
|
||||
true);
|
||||
|
||||
if (inUse)
|
||||
chromeRegistry.refreshSkins();
|
||||
|
@ -1374,7 +1388,9 @@ function applyTheme(themeName)
|
|||
// XXX XXX BAD BAD BAD BAD !! XXX XXX
|
||||
// we STILL haven't fixed editor skin switch problems
|
||||
// hacking around it yet again
|
||||
pref.SetUnicharPref("general.skins.selectedSkin", themeName.getAttribute("name"));
|
||||
pref.setComplexValue("general.skins.selectedSkin",
|
||||
Components.interfaces.nsISupportsWString,
|
||||
themeName.getAttribute("name"));
|
||||
|
||||
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
|
||||
observerService.notifyObservers(null, "skin-selected", null);
|
||||
|
@ -1398,7 +1414,7 @@ function URLBarFocusHandler(aEvent)
|
|||
{
|
||||
if (gURLBar) {
|
||||
if (gClickSelectsAll == -1)
|
||||
gClickSelectsAll = pref.GetBoolPref("browser.urlbar.clickSelectsAll");
|
||||
gClickSelectsAll = pref.getBoolPref("browser.urlbar.clickSelectsAll");
|
||||
if (gClickSelectsAll)
|
||||
gURLBar.setSelectionRange(0, gURLBar.textLength);
|
||||
}
|
||||
|
|
|
@ -8,19 +8,25 @@
|
|||
<binding id="urlbar" extends="chrome://global/content/autocomplete.xml#autocomplete">
|
||||
<implementation>
|
||||
<constructor><![CDATA[
|
||||
this.mPrefs.addObserver("browser.urlbar", this.mPrefObserver);
|
||||
var pbi = this.mPrefs.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi)
|
||||
pbi.addObserver("browser.urlbar", this.mPrefObserver, false);
|
||||
|
||||
this.updatePref("browser.urlbar.showPopup");
|
||||
this.updatePref("browser.urlbar.autoFill");
|
||||
]]></constructor>
|
||||
|
||||
<destructor><![CDATA[
|
||||
this.mPrefs.removeObserver("browser.urlbar", this.mPrefObserver);
|
||||
var pbi = this.mPrefs.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi)
|
||||
pbi.removeObserver("browser.urlbar", this.mPrefObserver);
|
||||
]]></destructor>
|
||||
|
||||
<property name="mPrefs">
|
||||
Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
|
||||
</property>
|
||||
<field name="mPrefs">
|
||||
var svc = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
svc.getBranch(null);
|
||||
</field>
|
||||
|
||||
<property name="mPrefObserver"><![CDATA[
|
||||
({
|
||||
|
@ -37,9 +43,9 @@
|
|||
<parameter name="aPref"/>
|
||||
<body><![CDATA[
|
||||
if (!aPref.indexOf("browser.urlbar.showPopup")) {
|
||||
this.showPopup = this.mPrefs.GetBoolPref("browser.urlbar.showPopup");
|
||||
this.showPopup = this.mPrefs.getBoolPref("browser.urlbar.showPopup");
|
||||
} else if (!aPref.indexOf("browser.urlbar.autoFill")) {
|
||||
this.autoFill = this.mPrefs.GetBoolPref("browser.urlbar.autoFill");
|
||||
this.autoFill = this.mPrefs.getBoolPref("browser.urlbar.autoFill");
|
||||
}
|
||||
]]></body>
|
||||
</method>
|
||||
|
@ -60,13 +66,19 @@
|
|||
<implementation>
|
||||
<constructor><![CDATA[
|
||||
// listen for changes to default search engine
|
||||
this.mPrefs.addObserver("browser.search", this.mPrefObserver);
|
||||
this.mPrefs.addObserver("browser.urlbar", this.mPrefObserver);
|
||||
var pbi = this.mPrefs.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi) {
|
||||
pbi.addObserver("browser.search", this.mPrefObserver, false);
|
||||
pbi.addObserver("browser.urlbar", this.mPrefObserver, false);
|
||||
}
|
||||
]]></constructor>
|
||||
|
||||
<destructor><![CDATA[
|
||||
this.mPrefs.removeObserver("browser.search", this.mPrefObserver);
|
||||
this.mPrefs.removeObserver("browser.urlbar", this.mPrefObserver);
|
||||
var pbi = this.mPrefs.QueryInterface(Components.interfaces.nsIPrefBranchInternal);
|
||||
if (pbi) {
|
||||
pbi.removeObserver("browser.search", this.mPrefObserver);
|
||||
pbi.removeObserver("browser.urlbar", this.mPrefObserver);
|
||||
}
|
||||
]]></destructor>
|
||||
|
||||
<property name="selectedIndex"
|
||||
|
@ -108,9 +120,11 @@
|
|||
document.getAnonymousElementByAttribute(this, "role", "search-box");
|
||||
</property>
|
||||
|
||||
<property name="mPrefs">
|
||||
Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);
|
||||
</property>
|
||||
<field name="mPrefs">
|
||||
var svc = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
svc.getBranch(null);
|
||||
</field>
|
||||
|
||||
<property name="mPrefObserver"><![CDATA[
|
||||
({
|
||||
|
@ -155,7 +169,7 @@
|
|||
<parameter name="aPref"/>
|
||||
<body><![CDATA[
|
||||
if (!aPref.indexOf("browser.urlbar.showSearch"))
|
||||
this.showSearch = this.mPrefs.GetBoolPref("browser.urlbar.showSearch");
|
||||
this.showSearch = this.mPrefs.getBoolPref("browser.urlbar.showSearch");
|
||||
]]></body>
|
||||
</method>
|
||||
|
||||
|
@ -196,10 +210,12 @@
|
|||
|
||||
var defaultEngine = null;
|
||||
try {
|
||||
defaultEngine = this.mPrefs.CopyUnicharPref("browser.search.defaultengine");
|
||||
defaultEngine = this.mPrefs.getComplexValue("browser.search.defaultengine",
|
||||
Components.interfaces.nsISupportsWString);
|
||||
} catch(ex) {
|
||||
this.ensureDefaultEnginePrefs(rdf, ds);
|
||||
defaultEngine = this.mPrefs.CopyUnicharPref("browser.search.defaultengine");
|
||||
defaultEngine = this.mPrefs.getComplexValue("browser.search.defaultengine",
|
||||
Components.interfaces.nsISupportsWString);
|
||||
}
|
||||
|
||||
if (defaultEngine) {
|
||||
|
@ -227,7 +243,8 @@
|
|||
<parameter name="aRDF"/>
|
||||
<parameter name="aDS"/>
|
||||
<body><![CDATA[
|
||||
var defaultName = this.mPrefs.getLocalizedUnicharPref("browser.search.defaultenginename");
|
||||
var defaultName = this.mPrefs.getComplexValue("browser.search.defaultenginename",
|
||||
Components.interfaces.nsIPrefLocalizedString);
|
||||
const kNC_Root = aRDF.GetResource("NC:SearchEngineRoot");
|
||||
const kNC_child = aRDF.GetResource("http://home.netscape.com/NC-rdf#child");
|
||||
const kNC_Name = aRDF.GetResource("http://home.netscape.com/NC-rdf#Name");
|
||||
|
@ -237,7 +254,9 @@
|
|||
var engineRes = arcs.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
var name = this.readRDFString(aDS, engineRes, kNC_Name);
|
||||
if (name == defaultName)
|
||||
this.mPrefs.SetUnicharPref("browser.search.defaultengine", engineRes.Value);
|
||||
this.mPrefs.setComplexValue("browser.search.defaultengine",
|
||||
Components.interfaces.nsISupportsWString,
|
||||
engineRes.Value);
|
||||
}
|
||||
]]></body>
|
||||
</method>
|
||||
|
|
Загрузка…
Ссылка в новой задаче