зеркало из https://github.com/mozilla/gecko-dev.git
Backed out 3 changesets (bug 1386807) for Mochitest failure on accessible/tests/mochitest/events/docload/test_docload_root.html. CLOSED TREE
Backed out changeset 19cd9d4bd25d (bug 1386807) Backed out changeset 8b07ab65a690 (bug 1386807) Backed out changeset aa4d27576edb (bug 1386807)
This commit is contained in:
Родитель
09e4a0289e
Коммит
3647244c64
|
@ -6,14 +6,7 @@ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||||
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||||
|
|
||||||
const PREF_BRANCH = "extensions.webcompat.";
|
const PREF_BRANCH = "extensions.webcompat.";
|
||||||
const PREF_DEFAULTS = {
|
const PREF_DEFAULTS = {perform_ua_overrides: true};
|
||||||
perform_injections: true,
|
|
||||||
perform_ua_overrides: true
|
|
||||||
};
|
|
||||||
|
|
||||||
const INJECTIONS_ENABLE_PREF_NAME = "extensions.webcompat.perform_injections";
|
|
||||||
|
|
||||||
const BROWSER_STARTUP_FINISHED_TOPIC = "browser-delayed-startup-finished";
|
|
||||||
|
|
||||||
const UA_OVERRIDES_INIT_TOPIC = "useragentoverrides-initialized";
|
const UA_OVERRIDES_INIT_TOPIC = "useragentoverrides-initialized";
|
||||||
const UA_ENABLE_PREF_NAME = "extensions.webcompat.perform_ua_overrides";
|
const UA_ENABLE_PREF_NAME = "extensions.webcompat.perform_ua_overrides";
|
||||||
|
@ -22,19 +15,15 @@ ChromeUtils.defineModuleGetter(this, "UAOverrider", "chrome://webcompat/content/
|
||||||
ChromeUtils.defineModuleGetter(this, "UAOverrides", "chrome://webcompat/content/data/ua_overrides.jsm");
|
ChromeUtils.defineModuleGetter(this, "UAOverrides", "chrome://webcompat/content/data/ua_overrides.jsm");
|
||||||
|
|
||||||
let overrider;
|
let overrider;
|
||||||
let webextensionPort;
|
|
||||||
|
|
||||||
function InjectionsEnablePrefObserver() {
|
|
||||||
let isEnabled = Services.prefs.getBoolPref(INJECTIONS_ENABLE_PREF_NAME);
|
|
||||||
webextensionPort.postMessage({
|
|
||||||
type: "injection-pref-changed",
|
|
||||||
prefState: isEnabled
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function UAEnablePrefObserver() {
|
function UAEnablePrefObserver() {
|
||||||
let isEnabled = Services.prefs.getBoolPref(UA_ENABLE_PREF_NAME);
|
let isEnabled = Services.prefs.getBoolPref(UA_ENABLE_PREF_NAME);
|
||||||
overrider.setShouldOverride(isEnabled);
|
if (isEnabled && !overrider) {
|
||||||
|
overrider = new UAOverrider(UAOverrides);
|
||||||
|
overrider.init();
|
||||||
|
} else if (!isEnabled && overrider) {
|
||||||
|
overrider = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setDefaultPrefs() {
|
function setDefaultPrefs() {
|
||||||
|
@ -68,9 +57,6 @@ this.startup = function({webExtension}) {
|
||||||
// Intentionally reset the preference on every browser restart to avoid site
|
// Intentionally reset the preference on every browser restart to avoid site
|
||||||
// breakage by accidentally toggled preferences or by leaving it off after
|
// breakage by accidentally toggled preferences or by leaving it off after
|
||||||
// debugging a site.
|
// debugging a site.
|
||||||
Services.prefs.clearUserPref(INJECTIONS_ENABLE_PREF_NAME);
|
|
||||||
Services.prefs.addObserver(INJECTIONS_ENABLE_PREF_NAME, InjectionsEnablePrefObserver);
|
|
||||||
|
|
||||||
Services.prefs.clearUserPref(UA_ENABLE_PREF_NAME);
|
Services.prefs.clearUserPref(UA_ENABLE_PREF_NAME);
|
||||||
Services.prefs.addObserver(UA_ENABLE_PREF_NAME, UAEnablePrefObserver);
|
Services.prefs.addObserver(UA_ENABLE_PREF_NAME, UAEnablePrefObserver);
|
||||||
|
|
||||||
|
@ -78,7 +64,7 @@ this.startup = function({webExtension}) {
|
||||||
// initialize our overrider there. This is done to avoid slowing down the
|
// initialize our overrider there. This is done to avoid slowing down the
|
||||||
// apparent startup proces, since we avoid loading anything before the first
|
// apparent startup proces, since we avoid loading anything before the first
|
||||||
// window is visible to the user. See bug 1371442 for details.
|
// window is visible to the user. See bug 1371442 for details.
|
||||||
let uaStartupObserver = {
|
let startupWatcher = {
|
||||||
observe(aSubject, aTopic, aData) {
|
observe(aSubject, aTopic, aData) {
|
||||||
if (aTopic !== UA_OVERRIDES_INIT_TOPIC) {
|
if (aTopic !== UA_OVERRIDES_INIT_TOPIC) {
|
||||||
return;
|
return;
|
||||||
|
@ -89,29 +75,9 @@ this.startup = function({webExtension}) {
|
||||||
overrider.init();
|
overrider.init();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Services.obs.addObserver(uaStartupObserver, UA_OVERRIDES_INIT_TOPIC);
|
Services.obs.addObserver(startupWatcher, UA_OVERRIDES_INIT_TOPIC);
|
||||||
|
|
||||||
// Observe browser-delayed-startup-finished and only initialize our embedded
|
|
||||||
// WebExtension after that. Otherwise, we'd try to initialize as soon as the
|
|
||||||
// browser starts up, which adds a heavy startup penalty.
|
|
||||||
let appStartupObserver = {
|
|
||||||
observe(aSubject, aTopic, aData) {
|
|
||||||
webExtension.startup().then((api) => {
|
|
||||||
api.browser.runtime.onConnect.addListener((port) => {
|
|
||||||
webextensionPort = port;
|
|
||||||
});
|
|
||||||
|
|
||||||
return Promise.resolve();
|
|
||||||
}).catch((ex) => {
|
|
||||||
console.error(ex);
|
|
||||||
});
|
|
||||||
Services.obs.removeObserver(this, BROWSER_STARTUP_FINISHED_TOPIC);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Services.obs.addObserver(appStartupObserver, BROWSER_STARTUP_FINISHED_TOPIC);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
this.shutdown = function() {
|
this.shutdown = function() {
|
||||||
Services.prefs.removeObserver(INJECTIONS_ENABLE_PREF_NAME, InjectionsEnablePrefObserver);
|
|
||||||
Services.prefs.removeObserver(UA_ENABLE_PREF_NAME, UAEnablePrefObserver);
|
Services.prefs.removeObserver(UA_ENABLE_PREF_NAME, UAEnablePrefObserver);
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,11 +3,41 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For detailed information on our policies, and a documention on this format
|
* This is an array of objects that specify user agent overrides. Each object
|
||||||
* and its possibilites, please check the Mozilla-Wiki at
|
* can have three attributes:
|
||||||
*
|
*
|
||||||
* https://wiki.mozilla.org/Compatibility/Go_Faster_Addon/Override_Policies_and_Workflows#User_Agent_overrides
|
* * `baseDomain`, required: The base domain that further checks and user
|
||||||
|
* agents override are applied to. This does not include subdomains.
|
||||||
|
* * `uriMatcher`: Function that gets the requested URI passed in the first
|
||||||
|
* argument and needs to return boolean whether or not the override should
|
||||||
|
* be applied. If not provided, the user agent override will be applied
|
||||||
|
* every time.
|
||||||
|
* * `uaTransformer`, required: Function that gets the original Firefox user
|
||||||
|
* agent passed as its first argument and needs to return a string that
|
||||||
|
* will be used as the the user agent for this URI.
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
*
|
||||||
|
* Gets applied for all requests to mozilla.org and subdomains:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* {
|
||||||
|
* baseDomain: "mozilla.org",
|
||||||
|
* uaTransformer: (originalUA) => `Ohai Mozilla, it's me, ${originalUA}`
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Applies to *.example.com/app/*:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* {
|
||||||
|
* baseDomain: "example.com",
|
||||||
|
* uriMatcher: (uri) => uri.includes("/app/"),
|
||||||
|
* uaTransformer: (originalUA) => originalUA.replace("Firefox", "Otherfox")
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const UAOverrides = [
|
const UAOverrides = [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -19,8 +49,7 @@ const UAOverrides = [
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
baseDomain: "schub.io",
|
baseDomain: "schub.io",
|
||||||
applications: ["firefox", "fennec"],
|
uriMatcher: (uri) => uri.includes("webcompat-ua-dummy.schub.io"),
|
||||||
uriMatcher: (uri) => uri.includes("webcompat-addon-testcases.schub.io"),
|
|
||||||
uaTransformer: (originalUA) => {
|
uaTransformer: (originalUA) => {
|
||||||
let prefix = originalUA.substr(0, originalUA.indexOf(")") + 1);
|
let prefix = originalUA.substr(0, originalUA.indexOf(")") + 1);
|
||||||
return `${prefix} AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36`;
|
return `${prefix} AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36`;
|
||||||
|
|
|
@ -11,32 +11,12 @@ XPCOMUtils.defineLazyServiceGetter(this, "eTLDService", "@mozilla.org/network/ef
|
||||||
class UAOverrider {
|
class UAOverrider {
|
||||||
constructor(overrides) {
|
constructor(overrides) {
|
||||||
this._overrides = {};
|
this._overrides = {};
|
||||||
this._shouldOverride = true;
|
|
||||||
|
|
||||||
this.initOverrides(overrides);
|
this.initOverrides(overrides);
|
||||||
}
|
}
|
||||||
|
|
||||||
initOverrides(overrides) {
|
initOverrides(overrides) {
|
||||||
// on xpcshell tests, there is no impleentation for nsIXULAppInfo, so this
|
|
||||||
// might fail there. To have all of our test cases running at all times,
|
|
||||||
// assume they are on Desktop for now.
|
|
||||||
let currentApplication = "firefox";
|
|
||||||
try {
|
|
||||||
currentApplication = Services.appinfo.name.toLowerCase();
|
|
||||||
} catch (_) {}
|
|
||||||
|
|
||||||
for (let override of overrides) {
|
for (let override of overrides) {
|
||||||
// Firefox for Desktop is the default application for all overrides.
|
|
||||||
if (!override.applications) {
|
|
||||||
override.applications = ["firefox"];
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the current application is not targeted by the override in question,
|
|
||||||
// we can skip adding the override to our checks entirely.
|
|
||||||
if (!override.applications.includes(currentApplication)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this._overrides[override.baseDomain]) {
|
if (!this._overrides[override.baseDomain]) {
|
||||||
this._overrides[override.baseDomain] = [];
|
this._overrides[override.baseDomain] = [];
|
||||||
}
|
}
|
||||||
|
@ -49,26 +29,11 @@ class UAOverrider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Used for disabling overrides when the pref has been flipped to false.
|
|
||||||
*
|
|
||||||
* Since we no longer use our own event handlers, we check this bool in our
|
|
||||||
* override callback and simply return early if we are not supposed to do
|
|
||||||
* anything.
|
|
||||||
*/
|
|
||||||
setShouldOverride(newState) {
|
|
||||||
this._shouldOverride = newState;
|
|
||||||
}
|
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
UserAgentOverrides.addComplexOverride(this.overrideCallback.bind(this));
|
UserAgentOverrides.addComplexOverride(this.overrideCallback.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
overrideCallback(channel, defaultUA) {
|
overrideCallback(channel, defaultUA) {
|
||||||
if (!this._shouldOverride) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let uaOverride = this.lookupUAOverride(channel.URI, defaultUA);
|
let uaOverride = this.lookupUAOverride(channel.URI, defaultUA);
|
||||||
if (uaOverride) {
|
if (uaOverride) {
|
||||||
console.log("The user agent has been overridden for compatibility reasons.");
|
console.log("The user agent has been overridden for compatibility reasons.");
|
||||||
|
|
|
@ -10,13 +10,13 @@
|
||||||
|
|
||||||
<Description about="urn:mozilla:install-manifest">
|
<Description about="urn:mozilla:install-manifest">
|
||||||
<em:id>webcompat@mozilla.org</em:id>
|
<em:id>webcompat@mozilla.org</em:id>
|
||||||
<em:version>2.0</em:version>
|
<em:version>1.1</em:version>
|
||||||
<em:type>2</em:type>
|
<em:type>2</em:type>
|
||||||
<em:bootstrap>true</em:bootstrap>
|
<em:bootstrap>true</em:bootstrap>
|
||||||
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
<em:multiprocessCompatible>true</em:multiprocessCompatible>
|
||||||
<em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
|
|
||||||
|
|
||||||
<!-- Firefox Desktop -->
|
<!-- Target Application this extension can install into,
|
||||||
|
with minimum and maximum supported versions. -->
|
||||||
<em:targetApplication>
|
<em:targetApplication>
|
||||||
<Description>
|
<Description>
|
||||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||||
|
@ -25,15 +25,6 @@
|
||||||
</Description>
|
</Description>
|
||||||
</em:targetApplication>
|
</em:targetApplication>
|
||||||
|
|
||||||
<!-- Firefox for Android -->
|
|
||||||
<em:targetApplication>
|
|
||||||
<Description>
|
|
||||||
<em:id>{aa3c5121-dab2-40e2-81ca-7ea25febc110}</em:id>
|
|
||||||
<em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
|
|
||||||
<em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
|
|
||||||
</Description>
|
|
||||||
</em:targetApplication>
|
|
||||||
|
|
||||||
<!-- Front End MetaData -->
|
<!-- Front End MetaData -->
|
||||||
<em:name>Web Compat</em:name>
|
<em:name>Web Compat</em:name>
|
||||||
<em:description>Urgent post-release fixes for web compatibility.</em:description>
|
<em:description>Urgent post-release fixes for web compatibility.</em:description>
|
||||||
|
|
|
@ -11,19 +11,6 @@ FINAL_TARGET_FILES.features['webcompat@mozilla.org'] += [
|
||||||
'bootstrap.js'
|
'bootstrap.js'
|
||||||
]
|
]
|
||||||
|
|
||||||
FINAL_TARGET_FILES.features['webcompat@mozilla.org']['webextension'] += [
|
|
||||||
'webextension/background.js',
|
|
||||||
'webextension/manifest.json'
|
|
||||||
]
|
|
||||||
|
|
||||||
FINAL_TARGET_FILES.features['webcompat@mozilla.org']['webextension']['injections']['css'] += [
|
|
||||||
'webextension/injections/css/bug0000000-dummy-css-injection.css'
|
|
||||||
]
|
|
||||||
|
|
||||||
FINAL_TARGET_FILES.features['webcompat@mozilla.org']['webextension']['injections']['js'] += [
|
|
||||||
'webextension/injections/js/bug0000000-dummy-js-injection.js'
|
|
||||||
]
|
|
||||||
|
|
||||||
FINAL_TARGET_PP_FILES.features['webcompat@mozilla.org'] += [
|
FINAL_TARGET_PP_FILES.features['webcompat@mozilla.org'] += [
|
||||||
'install.rdf.in'
|
'install.rdf.in'
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
/**
|
|
||||||
* For detailed information on our policies, and a documention on this format
|
|
||||||
* and its possibilites, please check the Mozilla-Wiki at
|
|
||||||
*
|
|
||||||
* https://wiki.mozilla.org/Compatibility/Go_Faster_Addon/Override_Policies_and_Workflows#User_Agent_overrides
|
|
||||||
*/
|
|
||||||
const contentScripts = [
|
|
||||||
{
|
|
||||||
matches: ["*://webcompat-addon-testcases.schub.io/*"],
|
|
||||||
css: [{file: "injections/css/bug0000000-dummy-css-injection.css"}],
|
|
||||||
js: [{file: "injections/js/bug0000000-dummy-js-injection.js"}],
|
|
||||||
runAt: "document_start"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
/* globals browser */
|
|
||||||
|
|
||||||
let port = browser.runtime.connect();
|
|
||||||
let registeredContentScripts = [];
|
|
||||||
|
|
||||||
function registerContentScripts() {
|
|
||||||
contentScripts.forEach(async (contentScript) => {
|
|
||||||
try {
|
|
||||||
let handle = await browser.contentScripts.register(contentScript);
|
|
||||||
registeredContentScripts.push(handle);
|
|
||||||
} catch (ex) {
|
|
||||||
console.error("Registering WebCompat GoFaster content scripts failed: ", ex);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function unregisterContentScripts() {
|
|
||||||
registeredContentScripts.forEach((contentScript) => {
|
|
||||||
contentScript.unregister();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
port.onMessage.addListener((message) => {
|
|
||||||
switch (message.type) {
|
|
||||||
case "injection-pref-changed":
|
|
||||||
if (message.prefState) {
|
|
||||||
registerContentScripts();
|
|
||||||
} else {
|
|
||||||
unregisterContentScripts();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Note that we reset all preferences on extension startup, so the injections will
|
|
||||||
* never be disabled when this loads up. Because of that, we can simply register
|
|
||||||
* right away.
|
|
||||||
*/
|
|
||||||
registerContentScripts();
|
|
|
@ -1,3 +0,0 @@
|
||||||
#css-injection.red {
|
|
||||||
background-color: #0f0;
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
"use strict";
|
|
||||||
|
|
||||||
/* globals exportFunction */
|
|
||||||
|
|
||||||
Object.defineProperty(window.wrappedJSObject, "isTestFeatureSupported", {
|
|
||||||
get: exportFunction(function() {
|
|
||||||
return true;
|
|
||||||
}, window),
|
|
||||||
|
|
||||||
set: exportFunction(function() {}, window)
|
|
||||||
});
|
|
|
@ -1,23 +0,0 @@
|
||||||
{
|
|
||||||
"manifest_version": 2,
|
|
||||||
"name": "Web Compat",
|
|
||||||
"description": "Urgent post-release fixes for web compatibility.",
|
|
||||||
"version": "2.0",
|
|
||||||
|
|
||||||
"applications": {
|
|
||||||
"gecko": {
|
|
||||||
"id": "webcompat@mozilla.org",
|
|
||||||
"strict_min_version": "59.0b5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"permissions": [
|
|
||||||
"<all_urls>"
|
|
||||||
],
|
|
||||||
|
|
||||||
"background": {
|
|
||||||
"scripts": [
|
|
||||||
"background.js"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
Загрузка…
Ссылка в новой задаче