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:
Dorel Luca 2018-04-21 00:59:49 +03:00
Родитель 09e4a0289e
Коммит 3647244c64
9 изменённых файлов: 46 добавлений и 200 удалений

52
browser/extensions/webcompat/bootstrap.js поставляемый
Просмотреть файл

@ -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"
]
}
}