зеркало из 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");
|
||||
|
||||
const PREF_BRANCH = "extensions.webcompat.";
|
||||
const PREF_DEFAULTS = {
|
||||
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 PREF_DEFAULTS = {perform_ua_overrides: true};
|
||||
|
||||
const UA_OVERRIDES_INIT_TOPIC = "useragentoverrides-initialized";
|
||||
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");
|
||||
|
||||
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() {
|
||||
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() {
|
||||
|
@ -68,9 +57,6 @@ this.startup = function({webExtension}) {
|
|||
// Intentionally reset the preference on every browser restart to avoid site
|
||||
// breakage by accidentally toggled preferences or by leaving it off after
|
||||
// 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.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
|
||||
// apparent startup proces, since we avoid loading anything before the first
|
||||
// window is visible to the user. See bug 1371442 for details.
|
||||
let uaStartupObserver = {
|
||||
let startupWatcher = {
|
||||
observe(aSubject, aTopic, aData) {
|
||||
if (aTopic !== UA_OVERRIDES_INIT_TOPIC) {
|
||||
return;
|
||||
|
@ -89,29 +75,9 @@ this.startup = function({webExtension}) {
|
|||
overrider.init();
|
||||
}
|
||||
};
|
||||
Services.obs.addObserver(uaStartupObserver, 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);
|
||||
Services.obs.addObserver(startupWatcher, UA_OVERRIDES_INIT_TOPIC);
|
||||
};
|
||||
|
||||
this.shutdown = function() {
|
||||
Services.prefs.removeObserver(INJECTIONS_ENABLE_PREF_NAME, InjectionsEnablePrefObserver);
|
||||
Services.prefs.removeObserver(UA_ENABLE_PREF_NAME, UAEnablePrefObserver);
|
||||
};
|
||||
|
|
|
@ -3,11 +3,41 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/**
|
||||
* For detailed information on our policies, and a documention on this format
|
||||
* and its possibilites, please check the Mozilla-Wiki at
|
||||
* This is an array of objects that specify user agent overrides. Each object
|
||||
* 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 = [
|
||||
|
||||
/*
|
||||
|
@ -19,8 +49,7 @@ const UAOverrides = [
|
|||
*/
|
||||
{
|
||||
baseDomain: "schub.io",
|
||||
applications: ["firefox", "fennec"],
|
||||
uriMatcher: (uri) => uri.includes("webcompat-addon-testcases.schub.io"),
|
||||
uriMatcher: (uri) => uri.includes("webcompat-ua-dummy.schub.io"),
|
||||
uaTransformer: (originalUA) => {
|
||||
let prefix = originalUA.substr(0, originalUA.indexOf(")") + 1);
|
||||
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 {
|
||||
constructor(overrides) {
|
||||
this._overrides = {};
|
||||
this._shouldOverride = true;
|
||||
|
||||
this.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) {
|
||||
// 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]) {
|
||||
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() {
|
||||
UserAgentOverrides.addComplexOverride(this.overrideCallback.bind(this));
|
||||
}
|
||||
|
||||
overrideCallback(channel, defaultUA) {
|
||||
if (!this._shouldOverride) {
|
||||
return false;
|
||||
}
|
||||
|
||||
let uaOverride = this.lookupUAOverride(channel.URI, defaultUA);
|
||||
if (uaOverride) {
|
||||
console.log("The user agent has been overridden for compatibility reasons.");
|
||||
|
|
|
@ -10,13 +10,13 @@
|
|||
|
||||
<Description about="urn:mozilla:install-manifest">
|
||||
<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:bootstrap>true</em:bootstrap>
|
||||
<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>
|
||||
<Description>
|
||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||
|
@ -25,15 +25,6 @@
|
|||
</Description>
|
||||
</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 -->
|
||||
<em:name>Web Compat</em:name>
|
||||
<em:description>Urgent post-release fixes for web compatibility.</em:description>
|
||||
|
|
|
@ -11,19 +11,6 @@ FINAL_TARGET_FILES.features['webcompat@mozilla.org'] += [
|
|||
'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'] += [
|
||||
'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"
|
||||
]
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче