зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1547301 - Add openViewOnFocus API. r=mak,mixedpuppy
Differential Revision: https://phabricator.services.mozilla.com/D34509 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
624887abc5
Коммит
b0f92762cd
|
@ -331,6 +331,8 @@ pref("browser.urlbar.usepreloadedtopurls.expire_days", 14);
|
|||
// Enable the new Address Bar code.
|
||||
pref("browser.urlbar.quantumbar", true);
|
||||
|
||||
pref("browser.urlbar.openViewOnFocus", false);
|
||||
|
||||
pref("browser.altClickSave", false);
|
||||
|
||||
// Enable logging downloads operations to the Console.
|
||||
|
|
|
@ -1,9 +1,22 @@
|
|||
"use strict";
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm",
|
||||
UrlbarProvidersManager: "resource:///modules/UrlbarProvidersManager.jsm",
|
||||
});
|
||||
|
||||
var {ExtensionPreferencesManager} = ChromeUtils.import("resource://gre/modules/ExtensionPreferencesManager.jsm");
|
||||
var {getSettingsAPI} = ExtensionPreferencesManager;
|
||||
|
||||
ExtensionPreferencesManager.addSetting("openViewOnFocus", {
|
||||
prefNames: [
|
||||
"browser.urlbar.openViewOnFocus",
|
||||
],
|
||||
setCallback(value) {
|
||||
return {[this.prefNames[0]]: value};
|
||||
},
|
||||
});
|
||||
|
||||
this.urlbar = class extends ExtensionAPI {
|
||||
getAPI(context) {
|
||||
return {
|
||||
|
@ -23,6 +36,12 @@ this.urlbar = class extends ExtensionAPI {
|
|||
UrlbarProvidersManager.removeExtensionListener(name, "queryready");
|
||||
};
|
||||
}).api(),
|
||||
|
||||
openViewOnFocus: getSettingsAPI(
|
||||
context.extension.id, "openViewOnFocus",
|
||||
() => {
|
||||
return UrlbarPrefs.get("openViewOnFocus");
|
||||
}),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
|
@ -55,6 +55,12 @@
|
|||
}
|
||||
}
|
||||
],
|
||||
"properties": {
|
||||
"openViewOnFocus": {
|
||||
"$ref": "types.Setting",
|
||||
"description": "Enables or disables the open-view-on-focus mode."
|
||||
}
|
||||
},
|
||||
"events": [
|
||||
{
|
||||
"name": "onQueryReady",
|
||||
|
|
|
@ -1,11 +1,22 @@
|
|||
"use strict";
|
||||
|
||||
const {AddonTestUtils} = ChromeUtils.import("resource://testing-common/AddonTestUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
UrlbarController: "resource:///modules/UrlbarController.jsm",
|
||||
UrlbarPrefs: "resource:///modules/UrlbarPrefs.jsm",
|
||||
UrlbarProvidersManager: "resource:///modules/UrlbarProvidersManager.jsm",
|
||||
UrlbarQueryContext: "resource:///modules/UrlbarUtils.jsm",
|
||||
});
|
||||
|
||||
AddonTestUtils.init(this);
|
||||
AddonTestUtils.overrideCertDB();
|
||||
AddonTestUtils.createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
|
||||
|
||||
add_task(async function startup() {
|
||||
await AddonTestUtils.promiseStartupManager();
|
||||
});
|
||||
|
||||
add_task(async function test_urlbar_without_urlbar_permission() {
|
||||
let ext = ExtensionTestUtils.loadExtension({
|
||||
isPrivileged: true,
|
||||
|
@ -179,3 +190,31 @@ add_task(async function test_registerProvider() {
|
|||
Assert.deepEqual(UrlbarProvidersManager.providers, providers,
|
||||
"Should return to the default providers");
|
||||
});
|
||||
|
||||
add_task(async function test_setOpenViewOnFocus() {
|
||||
let getPrefValue = () => UrlbarPrefs.get("openViewOnFocus");
|
||||
|
||||
Assert.equal(getPrefValue(), false,
|
||||
"Open-view-on-focus mode should be disabled by default");
|
||||
|
||||
let ext = ExtensionTestUtils.loadExtension({
|
||||
manifest: {
|
||||
permissions: ["urlbar"],
|
||||
},
|
||||
isPrivileged: true,
|
||||
incognitoOverride: "spanning",
|
||||
useAddonManager: "temporary",
|
||||
background() {
|
||||
browser.urlbar.openViewOnFocus.set({value: true});
|
||||
},
|
||||
});
|
||||
await ext.startup();
|
||||
|
||||
Assert.equal(getPrefValue(), true,
|
||||
"Successfully enabled the open-view-on-focus mode");
|
||||
|
||||
await ext.unload();
|
||||
|
||||
Assert.equal(getPrefValue(), false,
|
||||
"Open-view-on-focus mode should be reset after unloading the add-on");
|
||||
});
|
||||
|
|
|
@ -49,6 +49,7 @@ class UrlbarInput {
|
|||
|
||||
this.window = this.textbox.ownerGlobal;
|
||||
this.document = this.window.document;
|
||||
this.window.addEventListener("unload", this);
|
||||
|
||||
// Create the panel to contain results.
|
||||
// In the future this may be moved to the view, so it can customize
|
||||
|
@ -97,7 +98,6 @@ class UrlbarInput {
|
|||
this._resultForCurrentValue = null;
|
||||
this._suppressStartQuery = false;
|
||||
this._untrimmedValue = "";
|
||||
this._openViewOnFocus = false;
|
||||
|
||||
// This exists only for tests.
|
||||
this._enableAutofillPlaceholder = true;
|
||||
|
@ -121,7 +121,7 @@ class UrlbarInput {
|
|||
Object.defineProperty(this, property, {
|
||||
enumerable: true,
|
||||
get() {
|
||||
return this.textbox[property];
|
||||
return this.textbox && this.textbox[property];
|
||||
},
|
||||
});
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ class UrlbarInput {
|
|||
Object.defineProperty(this, property, {
|
||||
enumerable: true,
|
||||
get() {
|
||||
return this.textbox[property];
|
||||
return this.textbox && this.textbox[property];
|
||||
},
|
||||
set(val) {
|
||||
return this.textbox[property] = val;
|
||||
|
@ -179,12 +179,16 @@ class UrlbarInput {
|
|||
|
||||
this.editor.QueryInterface(Ci.nsIPlaintextEditor).newlineHandling =
|
||||
Ci.nsIPlaintextEditor.eNewlinesStripSurroundingWhitespace;
|
||||
|
||||
this._setOpenViewOnFocus();
|
||||
Services.prefs.addObserver("browser.urlbar.openViewOnFocus", this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Uninitializes this input object, detaching it from the inputField.
|
||||
*/
|
||||
uninit() {
|
||||
this.window.removeEventListener("unload", this);
|
||||
for (let name of this._inputFieldEvents) {
|
||||
this.inputField.removeEventListener(name, this);
|
||||
}
|
||||
|
@ -211,6 +215,8 @@ class UrlbarInput {
|
|||
this.valueFormatter.uninit();
|
||||
}
|
||||
|
||||
Services.prefs.removeObserver("browser.urlbar.openViewOnFocus", this);
|
||||
|
||||
delete this.document;
|
||||
delete this.window;
|
||||
delete this.eventBufferer;
|
||||
|
@ -297,6 +303,14 @@ class UrlbarInput {
|
|||
return uri;
|
||||
}
|
||||
|
||||
observe(subject, topic, data) {
|
||||
switch (data) {
|
||||
case "browser.urlbar.openViewOnFocus":
|
||||
this._setOpenViewOnFocus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Passes DOM events for the textbox to the _on_<event type> methods.
|
||||
* @param {Event} event
|
||||
|
@ -721,13 +735,16 @@ class UrlbarInput {
|
|||
return this._openViewOnFocus;
|
||||
}
|
||||
|
||||
set openViewOnFocus(val) {
|
||||
this._openViewOnFocus = val;
|
||||
this.toggleAttribute("hidedropmarker", val);
|
||||
}
|
||||
|
||||
// Private methods below.
|
||||
|
||||
_setOpenViewOnFocus() {
|
||||
// FIXME: Not using UrlbarPrefs because its pref observer may run after
|
||||
// this call, so we'd get the previous openViewOnFocus value here. This
|
||||
// can be cleaned up after bug 1560013.
|
||||
this._openViewOnFocus = Services.prefs.getBoolPref("browser.urlbar.openViewOnFocus");
|
||||
this.toggleAttribute("hidedropmarker", this._openViewOnFocus);
|
||||
}
|
||||
|
||||
_setValue(val, allowTrim) {
|
||||
this._untrimmedValue = val;
|
||||
|
||||
|
@ -1551,6 +1568,12 @@ class UrlbarInput {
|
|||
this.window.URLBarSetURI(null, true);
|
||||
}
|
||||
}
|
||||
|
||||
_on_unload() {
|
||||
// FIXME: This is needed because uninit calls removePrefObserver. We can
|
||||
// remove this once UrlbarPrefs has support for listeners. (bug 1560013)
|
||||
this.uninit();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -100,6 +100,8 @@ const PREF_URLBAR_DEFAULTS = new Map([
|
|||
// should be opened in new tabs by default.
|
||||
["openintab", false],
|
||||
|
||||
["openViewOnFocus", false],
|
||||
|
||||
// Whether the quantum bar is enabled.
|
||||
["quantumbar", false],
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче