mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
60e2150359
- Bug 1200445 - Expose android native apps trough the navigator.mozApps api r=snorp,ferjm (5f2e5df93a)
- Bug 1199844 - limit webapp debug logging to webapp tests; r=fabrice (59bf73deb2)
- Bug 1199295 - Pass right loadingPrincipal to uriloader/prefetch - dom/apps (r=fabrice) (8bdab29703)
- Bug 1213170 - followup r=bustage on a CLOSED TREE (9ac5f0a677)
- Bug 1194243 - Keep the message manager alive in doUninstall() to be able to signal the result back; r=myk (3093189372)
- Bug 1154864 - Fix getScopeByLocalId use in PushService.jsm r=nsm (0f67e9de60)
- Bug 1196963 - Make extensions work without being in developer mode r=jduell (e120108628)
- Bug 1200851 - DataStoreService should update its permission map when the homescreen changes, r=fabrice (1582ac0320)
- Bug 1200851 - DataStoreService should update its permission map when the homescreen changes, r=fabrice (7949555b43)
- Bug 1186805 - Replace nsBaseHashtable::EnumerateRead() calls in dom/datastore/ with iterators, r=njn (0c6f234576)
- Bug 1208355 - Fix -Wshadow warnings in dom/datastore. r=baku (8b617685d4)
- Bug 1181329 - Make DataStore available to privileged homescreen app, r=fabrice (d7173d0df4)
- Bug 1223054 - Fix add-on registration r=ferjm (2d1fe7a2c0)
- Bug 1209091 - Disable add-on signature workaround. r=fabrice (98e0afe21b)
- Bug 1214092 - Part 1 of 1: Exposed WebSpeech API SpeechRecognition Interface to privileged apps. r=smaug (e33c92d4e8)
- Bug 1218337 - Part 1 of 1: Introduced permission 'speech-recognition' and used it in place of the app-check. r=smaug (1cdf67a55f)
- Bug 1051604 - Adapt VAD strategy on SpeechRecognition to be less strict on some devices with poor mics. r=smaug (911258b56e)
- Bug 1111135 - Part 1: Add audio-capture:3gpp perimission. r=fabrice (c98bee92a6)
- bit of 1196988 (a334242521)
- Bug 1193183 - Correctly implement SpeechRecognitionAlternative::confidence using ps_get_prob(). r=anatal (14a881b44f)
- Bug 1197455 - Call ps_set_search() only after successful grammar compilation. r=anatal (55d37ea0fb)
- Bug 1156560 - Prefer old CDMs on update if they are in use - r=cpearce (b763f1044a)
- Bug 1228215 - Add helper to do dir enumeration in GMPServiceParent. r=jwwang (1d3bc1eef0)
- Bug 1228215 - Store each GMP's storage and nodeId salt in separate directories. r=jwwang (20fb2b7a18)
- Bug 1172396 - Update GMP trial creation pref from chrome process - r=cpearce (123d97d03a)
- Bug 1228215 - Add a 'gmpName' parameter to GMPService::GetNodeId(), so each GMP can see a different nodeId for the same origin. r=jwwang (fceaef0c11)
- fixes for no EME (b70879a799)
- Bug 1228215 - Migrate existing GMP storage from post-42 pre-45 location to 45 location. r=jwwang (9da581744d)
- missing crash stuff (b537d416b3)
- Bug 1187193 - Use UserData() instead of Data() in ConstIter loops that used to be EnumerateRead's. r=njn (2a4c297f36)
- Bug 1211337 - Added crash report annotations tracking sync shutdown (60b3004394)
- Bug 1173195 - Don't assert success until successful in GMPSharedMemManager. r=edwin (3844ba6e20)
- Bug 1208289 - Log outstanding frames in GMP DrainComplete() and detect dropped ResetComplete. r=jwwang (eccf4dbecc)
- Bug 1224442: null-check GMP Parent Shmem messages from the Child to handle messages after shutdown r=cpearce (d12b9c57c2)
- add some defines (3c4fc2d5b9)
- Bug 1174132 - When obtaining page metadata, always prefer the page title over the opengraph title. r=mixedpuppy (9db64d5f87)
- fix misspatch (b26824550e)
- Bug 1220929 - RemotePageManager should let us get all ports for a browser. r=Mossop (402fc2a536)
- Bug 1220929 - RemotePageManager should use documentURI and allow special URLs with query params. r=Mossop (9fc73b228e)
- Bug 1144422 - fix lightweight theme code to deal with invalid CSS so we don't mistakenly keep text colors, r=jaws (8b47394d6c)
- Bug 1229519: Fix download managers to pass eslint checks. r=mak (e4a684db58)
- Bug 1213973 - ensure Sync UI state is correctly reflected even when Sync is not configured. r=adw (df4f387b21)
- bit of Bug 993584 (2beffd7f6c)
- Bug 1180113 - Introducing g2p algorithm inside pocketsphinx to allow out of dictionary words to be added to grammars. r=smaug (b3a23daf56)
- Bug 1202989 - Added check for 0 length phones string in addition to NULL. r=andrenatal (387faeb88c)
- Bug 1171082 - Now _WIN32_WINNT is defined to 0x0400 only if it is not defined, 0x0400 is the minimal version. Also modified update.sh to do this. r=smaug (bb7dd37c00)
- bits of Bug 1165518 - Part 2: Replace prlog.h with Logging.h. (fc0ca3ca20)
- Bug 1188970: Fix usage of forward slash in constructing webrtc trace file path. r=rjesup (8518b84be1)
- Bug 1218454 - part 3 - move nsILoadContext::GetOriginAttributes out-of-line; r=bz (cd508d3e0b)
- Bug 1225682 - Don't use nsAuto{,C}String as class member variables in docshell/. r=bz (839a57580e)
- Bug 1220916 - Remove "WARNING: TimelineConsumers could not be initialized" when running gtests, r=fitzgen (c89330afcc)
- Bug 1217836 - Add a readme file to our timeline backend, r=jsantell (df0ea6b198)
- enable shadow (dcad5bdb7a)
187 lines
6.5 KiB
JavaScript
187 lines
6.5 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
this.EXPORTED_SYMBOLS = ["LightweightThemeConsumer"];
|
|
|
|
const {utils: Cu} = Components;
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
Cu.import("resource://gre/modules/AppConstants.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeImageOptimizer",
|
|
"resource://gre/modules/addons/LightweightThemeImageOptimizer.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
|
|
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
|
|
|
this.LightweightThemeConsumer =
|
|
function LightweightThemeConsumer(aDocument) {
|
|
this._doc = aDocument;
|
|
this._win = aDocument.defaultView;
|
|
this._footerId = aDocument.documentElement.getAttribute("lightweightthemesfooter");
|
|
|
|
/* XXX: If we want to disable LWTs for PB mode, this would be needed.
|
|
* Perhaps make this pref-controlled in the future if people want it?
|
|
if (PrivateBrowsingUtils.isWindowPrivate(this._win) &&
|
|
!PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
|
return;
|
|
} */
|
|
|
|
let screen = this._win.screen;
|
|
this._lastScreenWidth = screen.width;
|
|
this._lastScreenHeight = screen.height;
|
|
|
|
Services.obs.addObserver(this, "lightweight-theme-styling-update", false);
|
|
|
|
var temp = {};
|
|
Cu.import("resource://gre/modules/LightweightThemeManager.jsm", temp);
|
|
this._update(temp.LightweightThemeManager.currentThemeForDisplay);
|
|
this._win.addEventListener("resize", this);
|
|
}
|
|
|
|
LightweightThemeConsumer.prototype = {
|
|
_lastData: null,
|
|
_lastScreenWidth: null,
|
|
_lastScreenHeight: null,
|
|
// Whether the active lightweight theme should be shown on the window.
|
|
_enabled: true,
|
|
// Whether a lightweight theme is enabled.
|
|
_active: false,
|
|
|
|
enable: function() {
|
|
this._enabled = true;
|
|
this._update(this._lastData);
|
|
},
|
|
|
|
disable: function() {
|
|
// Dance to keep the data, but reset the applied styles:
|
|
let lastData = this._lastData
|
|
this._update(null);
|
|
this._enabled = false;
|
|
this._lastData = lastData;
|
|
},
|
|
|
|
getData: function() {
|
|
return this._enabled ? Cu.cloneInto(this._lastData, this._win) : null;
|
|
},
|
|
|
|
observe: function (aSubject, aTopic, aData) {
|
|
if (aTopic != "lightweight-theme-styling-update")
|
|
return;
|
|
|
|
this._update(JSON.parse(aData));
|
|
},
|
|
|
|
handleEvent: function (aEvent) {
|
|
let {width, height} = this._win.screen;
|
|
|
|
if (this._lastScreenWidth != width || this._lastScreenHeight != height) {
|
|
this._lastScreenWidth = width;
|
|
this._lastScreenHeight = height;
|
|
if (!this._active)
|
|
return;
|
|
this._update(this._lastData);
|
|
Services.obs.notifyObservers(this._win, "lightweight-theme-optimized",
|
|
JSON.stringify(this._lastData));
|
|
}
|
|
},
|
|
|
|
destroy: function () {
|
|
/* XXX: If we want to disable LWTs for PB mode, this would be needed.
|
|
if (!PrivateBrowsingUtils.isWindowPrivate(this._win) ||
|
|
PrivateBrowsingUtils.permanentPrivateBrowsing) {
|
|
Services.obs.removeObserver(this, "lightweight-theme-styling-update");
|
|
|
|
this._win.removeEventListener("resize", this);
|
|
} */
|
|
|
|
Services.obs.removeObserver(this, "lightweight-theme-styling-update");
|
|
this._win.removeEventListener("resize", this);
|
|
|
|
this._win = this._doc = null;
|
|
},
|
|
|
|
_update: function (aData) {
|
|
if (!aData) {
|
|
aData = { headerURL: "", footerURL: "", textcolor: "", accentcolor: "" };
|
|
this._lastData = aData;
|
|
} else {
|
|
this._lastData = aData;
|
|
aData = LightweightThemeImageOptimizer.optimize(aData, this._win.screen);
|
|
}
|
|
if (!this._enabled)
|
|
return;
|
|
|
|
let root = this._doc.documentElement;
|
|
let active = !!aData.headerURL;
|
|
let stateChanging = (active != this._active);
|
|
|
|
// We need to clear these either way: either because the theme is being removed,
|
|
// or because we are applying a new theme and the data might be bogus CSS,
|
|
// so if we don't reset first, it'll keep the old value.
|
|
root.style.removeProperty("color");
|
|
root.style.removeProperty("background-color");
|
|
if (active) {
|
|
root.style.color = aData.textcolor || "black";
|
|
root.style.backgroundColor = aData.accentcolor || "white";
|
|
let [r, g, b] = _parseRGB(this._doc.defaultView.getComputedStyle(root, "").color);
|
|
let luminance = 0.2125 * r + 0.7154 * g + 0.0721 * b;
|
|
root.setAttribute("lwthemetextcolor", luminance <= 110 ? "dark" : "bright");
|
|
root.setAttribute("lwtheme", "true");
|
|
} else {
|
|
root.removeAttribute("lwthemetextcolor");
|
|
root.removeAttribute("lwtheme");
|
|
}
|
|
|
|
this._active = active;
|
|
|
|
_setImage(root, active, aData.headerURL);
|
|
if (this._footerId) {
|
|
let footer = this._doc.getElementById(this._footerId);
|
|
footer.style.backgroundColor = active ? aData.accentcolor || "white" : "";
|
|
_setImage(footer, active, aData.footerURL);
|
|
if (active && aData.footerURL)
|
|
footer.setAttribute("lwthemefooter", "true");
|
|
else
|
|
footer.removeAttribute("lwthemefooter");
|
|
}
|
|
|
|
// On OS X, we extend the lightweight theme into the titlebar, which means setting
|
|
// the chromemargin attribute. Some XUL applications already draw in the titlebar,
|
|
// so we need to save the chromemargin value before we overwrite it with the value
|
|
// that lets us draw in the titlebar. We stash this value on the root attribute so
|
|
// that XUL applications have the ability to invalidate the saved value.
|
|
if (AppConstants.platform == "macosx" && stateChanging) {
|
|
if (!root.hasAttribute("chromemargin-nonlwtheme")) {
|
|
root.setAttribute("chromemargin-nonlwtheme", root.getAttribute("chromemargin"));
|
|
}
|
|
|
|
if (active) {
|
|
root.setAttribute("chromemargin", "0,-1,-1,-1");
|
|
} else {
|
|
let defaultChromemargin = root.getAttribute("chromemargin-nonlwtheme");
|
|
if (defaultChromemargin) {
|
|
root.setAttribute("chromemargin", defaultChromemargin);
|
|
} else {
|
|
root.removeAttribute("chromemargin");
|
|
}
|
|
}
|
|
}
|
|
Services.obs.notifyObservers(this._win, "lightweight-theme-window-updated",
|
|
JSON.stringify(aData));
|
|
}
|
|
}
|
|
|
|
function _setImage(aElement, aActive, aURL) {
|
|
aElement.style.backgroundImage =
|
|
(aActive && aURL) ? 'url("' + aURL.replace(/"/g, '\\"') + '")' : "";
|
|
}
|
|
|
|
function _parseRGB(aColorString) {
|
|
var rgb = aColorString.match(/^rgba?\((\d+), (\d+), (\d+)/);
|
|
rgb.shift();
|
|
return rgb.map(x => parseInt(x));
|
|
}
|