mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 04:09:50 +00:00
Backed out 16 changesets (bug 1922506) for causing mochitests failures in CanvasRenderingContext2DBinding.cpp. CLOSED TREE
Backed out changeset 92b3d2b856ee (bug 1922506) Backed out changeset f2cd605cd97c (bug 1922506) Backed out changeset c0cea90ae140 (bug 1922506) Backed out changeset d0845b56ac6a (bug 1922506) Backed out changeset bd50b07c6b5e (bug 1922506) Backed out changeset cdf3f8bbee31 (bug 1922506) Backed out changeset 4e39fe895fce (bug 1922506) Backed out changeset 54c7bbd4ef7b (bug 1922506) Backed out changeset 20022200a9e2 (bug 1922506) Backed out changeset 1cd8a6b38919 (bug 1922506) Backed out changeset f6a010cad98c (bug 1922506) Backed out changeset 8ff25b5fa6b7 (bug 1922506) Backed out changeset 40a9d6da9b92 (bug 1922506) Backed out changeset 1c6bbaf3c6e3 (bug 1922506) Backed out changeset 70c7cf0df998 (bug 1922506) Backed out changeset 4d87de8944a9 (bug 1922506)
This commit is contained in:
parent
9e56e87df8
commit
bff77eff39
@ -1128,30 +1128,6 @@ void CanvasRenderingContext2D::GetContextAttributes(
|
||||
// those just keep their default values.
|
||||
}
|
||||
|
||||
void CanvasRenderingContext2D::GetDebugInfo(
|
||||
bool aEnsureTarget, CanvasRenderingContext2DDebugInfo& aDebugInfo,
|
||||
ErrorResult& aError) {
|
||||
if (aEnsureTarget && !EnsureTarget(aError)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mBufferProvider) {
|
||||
aError.ThrowInvalidStateError("No buffer provider available");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mTarget) {
|
||||
aError.ThrowInvalidStateError("No target available");
|
||||
return;
|
||||
}
|
||||
|
||||
aDebugInfo = CanvasRenderingContext2DDebugInfo();
|
||||
aDebugInfo.mIsAccelerated = mBufferProvider->IsAccelerated();
|
||||
aDebugInfo.mIsShared = mBufferProvider->IsShared();
|
||||
aDebugInfo.mBackendType = static_cast<int8_t>(mTarget->GetBackendType());
|
||||
aDebugInfo.mDrawTargetType = static_cast<int8_t>(mTarget->GetType());
|
||||
}
|
||||
|
||||
CanvasRenderingContext2D::ColorStyleCacheEntry
|
||||
CanvasRenderingContext2D::ParseColorSlow(const nsACString& aString) {
|
||||
ColorStyleCacheEntry result{nsCString(aString)};
|
||||
|
@ -99,10 +99,6 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal,
|
||||
|
||||
void GetContextAttributes(CanvasRenderingContext2DSettings& aSettings) const;
|
||||
|
||||
void GetDebugInfo(bool aEnsureTarget,
|
||||
CanvasRenderingContext2DDebugInfo& aDebugInfo,
|
||||
ErrorResult& aError);
|
||||
|
||||
void OnMemoryPressure() override;
|
||||
void OnBeforePaintTransaction() override;
|
||||
void OnDidPaintTransaction() override;
|
||||
|
@ -2429,7 +2429,6 @@ void ClientWebGLContext::GetParameter(JSContext* cx, GLenum pname,
|
||||
case LOCAL_GL_RENDERER:
|
||||
case LOCAL_GL_VENDOR:
|
||||
case LOCAL_GL_VERSION:
|
||||
case dom::MOZ_debug_Binding::CONTEXT_TYPE:
|
||||
case dom::MOZ_debug_Binding::WSI_INFO:
|
||||
debugOnly = true;
|
||||
asString = true;
|
||||
|
@ -2226,25 +2226,6 @@ Maybe<std::string> WebGLContext::GetString(const GLenum pname) const {
|
||||
return Some(std::string(info.BeginReading()));
|
||||
}
|
||||
|
||||
case dom::MOZ_debug_Binding::CONTEXT_TYPE: {
|
||||
gl::GLContextType ctxType = gl->GetContextType();
|
||||
switch (ctxType) {
|
||||
case gl::GLContextType::Unknown:
|
||||
return Some("unknown"_ns);
|
||||
case gl::GLContextType::WGL:
|
||||
return Some("wgl"_ns);
|
||||
case gl::GLContextType::CGL:
|
||||
return Some("cgl"_ns);
|
||||
case gl::GLContextType::GLX:
|
||||
return Some("glx"_ns);
|
||||
case gl::GLContextType::EGL:
|
||||
return Some("egl"_ns);
|
||||
case gl::GLContextType::EAGL:
|
||||
return Some("eagl"_ns);
|
||||
}
|
||||
return Some("unknown"_ns);
|
||||
}
|
||||
|
||||
default:
|
||||
ErrorInvalidEnumArg("pname", pname);
|
||||
return {};
|
||||
|
@ -35,21 +35,10 @@ dictionary CanvasRenderingContext2DSettings {
|
||||
// whether or not we're planning to do a lot of readback operations
|
||||
boolean willReadFrequently = false;
|
||||
|
||||
[Func="nsRFPService::IsSystemPrincipalOrAboutFingerprintingProtection"]
|
||||
[Func="nsRFPService::IsSoftwareRenderingOptionExposed"]
|
||||
boolean forceSoftwareRendering = false;
|
||||
};
|
||||
|
||||
[GenerateInit]
|
||||
dictionary CanvasRenderingContext2DDebugInfo {
|
||||
required boolean isAccelerated;
|
||||
|
||||
required boolean isShared;
|
||||
|
||||
required byte backendType;
|
||||
|
||||
required byte drawTargetType;
|
||||
};
|
||||
|
||||
dictionary HitRegionOptions {
|
||||
Path2D? path = null;
|
||||
DOMString id = "";
|
||||
@ -75,9 +64,6 @@ interface CanvasRenderingContext2D {
|
||||
|
||||
CanvasRenderingContext2DSettings getContextAttributes();
|
||||
|
||||
[Throws, Func="nsRFPService::IsSystemPrincipalOrAboutFingerprintingProtection"]
|
||||
CanvasRenderingContext2DDebugInfo getDebugInfo(optional boolean ensureTarget = false);
|
||||
|
||||
// Show the caret if appropriate when drawing
|
||||
[Func="CanvasUtils::HasDrawWindowPrivilege"]
|
||||
const unsigned long DRAWWINDOW_DRAW_CARET = 0x01;
|
||||
|
@ -53,7 +53,7 @@ dictionary WebGLContextAttributes {
|
||||
GLboolean failIfMajorPerformanceCaveat = false;
|
||||
WebGLPowerPreference powerPreference = "default";
|
||||
|
||||
[Func="nsRFPService::IsSystemPrincipalOrAboutFingerprintingProtection"]
|
||||
[Func="nsRFPService::IsSoftwareRenderingOptionExposed"]
|
||||
GLboolean forceSoftwareRendering = false;
|
||||
};
|
||||
|
||||
@ -1165,7 +1165,6 @@ interface MOZ_debug {
|
||||
const GLenum WSI_INFO = 0x10000;
|
||||
const GLenum UNPACK_REQUIRE_FASTPATH = 0x10001;
|
||||
const GLenum DOES_INDEX_VALIDATION = 0x10002;
|
||||
const GLenum CONTEXT_TYPE = 0x10003;
|
||||
|
||||
[Throws]
|
||||
any getParameter(GLenum pname);
|
||||
|
@ -30,15 +30,6 @@ inline std::shared_ptr<EglDisplay> DefaultEglDisplay(
|
||||
return lib->DefaultDisplay(out_failureId);
|
||||
}
|
||||
|
||||
inline std::shared_ptr<EglDisplay> CreateSoftwareEglDisplay(
|
||||
nsACString* const out_failureId) {
|
||||
const auto lib = GLLibraryEGL::Get(out_failureId);
|
||||
if (!lib) {
|
||||
return nullptr;
|
||||
}
|
||||
return lib->CreateDisplay(false, true, out_failureId);
|
||||
}
|
||||
|
||||
// -
|
||||
|
||||
class GLContextEGL final : public GLContext {
|
||||
|
@ -1242,11 +1242,7 @@ void GLContextEGL::DestroySurface(EglDisplay& aEgl, const EGLSurface aSurface) {
|
||||
/*static*/
|
||||
already_AddRefed<GLContext> GLContextProviderEGL::CreateHeadless(
|
||||
const GLContextCreateDesc& desc, nsACString* const out_failureId) {
|
||||
bool useSoftwareDisplay =
|
||||
static_cast<bool>(desc.flags & CreateContextFlags::FORBID_HARDWARE);
|
||||
const auto display = useSoftwareDisplay
|
||||
? CreateSoftwareEglDisplay(out_failureId)
|
||||
: DefaultEglDisplay(out_failureId);
|
||||
const auto display = DefaultEglDisplay(out_failureId);
|
||||
if (!display) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -888,6 +888,10 @@ static already_AddRefed<GLContextGLX> CreateOffscreenPixmapContext(
|
||||
auto fullDesc = GLContextDesc{desc};
|
||||
fullDesc.isOffscreen = true;
|
||||
|
||||
if (fullDesc.flags & CreateContextFlags::FORBID_HARDWARE) {
|
||||
fullDesc.flags |= CreateContextFlags::REQUIRE_COMPAT_PROFILE;
|
||||
}
|
||||
|
||||
return GLContextGLX::CreateGLContext(fullDesc, display, pixmap, config,
|
||||
drawable);
|
||||
}
|
||||
|
@ -35,10 +35,7 @@ already_AddRefed<GLContext> GLContextProviderLinux::CreateForCompositorWidget(
|
||||
/*static*/
|
||||
already_AddRefed<GLContext> GLContextProviderLinux::CreateHeadless(
|
||||
const GLContextCreateDesc& desc, nsACString* const out_failureId) {
|
||||
if (gfxVars::UseEGL() ||
|
||||
bool(desc.flags & CreateContextFlags::FORBID_HARDWARE)) {
|
||||
// We request EGL if software is required, because we don't know
|
||||
// what X11 is using. It could be software or hardware.
|
||||
if (gfxVars::UseEGL()) {
|
||||
return sGLContextProviderEGL.CreateHeadless(desc, out_failureId);
|
||||
#ifdef MOZ_X11
|
||||
} else {
|
||||
|
@ -475,21 +475,6 @@ already_AddRefed<GLContext> GLContextProviderWGL::CreateHeadless(
|
||||
bool forbidHardware =
|
||||
static_cast<bool>(desc.flags & CreateContextFlags::FORBID_HARDWARE);
|
||||
if (!foundFormats && forbidHardware) {
|
||||
const int kAttribs[] = {LOCAL_WGL_DRAW_TO_PBUFFER_ARB,
|
||||
true,
|
||||
LOCAL_WGL_SUPPORT_OPENGL_ARB,
|
||||
true,
|
||||
LOCAL_WGL_ACCELERATION_ARB,
|
||||
LOCAL_WGL_NO_ACCELERATION_ARB,
|
||||
0};
|
||||
if (!wgl.mSymbols.fChoosePixelFormat(wgl.RootDc(), kAttribs, nullptr, 1,
|
||||
&chosenFormat, &foundFormats)) {
|
||||
foundFormats = 0;
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (!foundFormats && !forbidHardware) {
|
||||
const int kAttribs[] = {LOCAL_WGL_DRAW_TO_PBUFFER_ARB,
|
||||
true,
|
||||
LOCAL_WGL_SUPPORT_OPENGL_ARB,
|
||||
|
@ -938,14 +938,14 @@ std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplayLocked(
|
||||
ret = GetAndInitSoftwareDisplay(*this, aProofOfLock);
|
||||
}
|
||||
// Initialize the display the normal way
|
||||
if (!ret && !gdk_display_get_default() && !forceSoftware) {
|
||||
if (!ret && !gdk_display_get_default()) {
|
||||
ret = GetAndInitDeviceDisplay(*this, aProofOfLock);
|
||||
if (!ret) {
|
||||
ret = GetAndInitSurfacelessDisplay(*this, aProofOfLock);
|
||||
}
|
||||
}
|
||||
# ifdef MOZ_WAYLAND
|
||||
else if (!ret && widget::GdkIsWaylandDisplay() && !forceSoftware) {
|
||||
else if (!ret && widget::GdkIsWaylandDisplay()) {
|
||||
// Wayland does not support EGL_DEFAULT_DISPLAY
|
||||
nativeDisplay = widget::WaylandDisplayGetWLDisplay();
|
||||
if (!nativeDisplay) {
|
||||
@ -955,7 +955,7 @@ std::shared_ptr<EglDisplay> GLLibraryEGL::CreateDisplayLocked(
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
if (!ret && !forceSoftware) {
|
||||
if (!ret) {
|
||||
ret = GetAndInitDisplay(*this, nativeDisplay, aProofOfLock);
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -59,5 +59,4 @@ class UserCharacteristicsParent extends JSWindowActorParent {
|
||||
export {
|
||||
UserCharacteristicsParent,
|
||||
UserCharacteristicsParent as UserCharacteristicsWindowInfoParent,
|
||||
UserCharacteristicsParent as UserCharacteristicsCanvasRenderingParent,
|
||||
};
|
||||
|
@ -133,7 +133,7 @@ export class UserCharacteristicsWindowInfoChild extends JSWindowActorChild {
|
||||
didDestroy() {
|
||||
this.destroyed = true;
|
||||
for (const [type, handler] of Object.entries(this.handlers)) {
|
||||
this.contentWindow?.windowRoot?.removeEventListener(type, handler);
|
||||
this.contentWindow.windowRoot.removeEventListener(type, handler);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -75,7 +75,6 @@ FINAL_TARGET_FILES.actors += [
|
||||
"UAWidgetsChild.sys.mjs",
|
||||
"UnselectedTabHoverChild.sys.mjs",
|
||||
"UnselectedTabHoverParent.sys.mjs",
|
||||
"UserCharacteristicsCanvasRenderingChild.sys.mjs",
|
||||
"UserCharacteristicsChild.sys.mjs",
|
||||
"UserCharacteristicsParent.sys.mjs",
|
||||
"UserCharacteristicsWindowInfoChild.sys.mjs",
|
||||
|
@ -61,7 +61,6 @@ export class UserCharacteristicsPageService {
|
||||
return;
|
||||
}
|
||||
this._initialized = true;
|
||||
this.handledErrors = [];
|
||||
}
|
||||
|
||||
shutdown() {}
|
||||
@ -121,25 +120,13 @@ export class UserCharacteristicsPageService {
|
||||
"user-characteristics-populating-data-done"
|
||||
);
|
||||
} finally {
|
||||
lazy.console.debug("Unregistering actors");
|
||||
this.cleanUp();
|
||||
lazy.console.debug("Cleanup done");
|
||||
lazy.console.debug("Unregistering actor");
|
||||
ChromeUtils.unregisterWindowActor("UserCharacteristics");
|
||||
this._backgroundBrowsers.delete(browser);
|
||||
lazy.console.debug("Background browser removed");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
cleanUp() {
|
||||
ChromeUtils.unregisterWindowActor("UserCharacteristics");
|
||||
// unregisterWindowActor doesn't throw if the actor is not registered.
|
||||
// (Do note it console.error's but doesn't throw)
|
||||
// We can safely double unregister. We do this to handle the case where
|
||||
// the actor was registered but the function it was registered timed out.
|
||||
ChromeUtils.unregisterWindowActor("UserCharacteristicsWindowInfo");
|
||||
ChromeUtils.unregisterWindowActor("UserCharacteristicsCanvasRendering");
|
||||
}
|
||||
|
||||
async populateAndCollectErrors(browser, data) {
|
||||
// List of functions to populate Glean metrics
|
||||
const populateFuncs = [
|
||||
@ -153,15 +140,7 @@ export class UserCharacteristicsPageService {
|
||||
[this.populateClientInfo, []],
|
||||
[this.populateCPUInfo, []],
|
||||
[this.populateWindowInfo, []],
|
||||
[
|
||||
this.populateWebGlInfo,
|
||||
[browser.ownerGlobal, browser.ownerDocument, false],
|
||||
],
|
||||
[
|
||||
this.populateWebGlInfo,
|
||||
[browser.ownerGlobal, browser.ownerDocument, true],
|
||||
],
|
||||
[this.populateCanvasData, []],
|
||||
[this.populateWebGlInfo, [browser.ownerGlobal, browser.ownerDocument]],
|
||||
];
|
||||
// Bind them to the class and run them in parallel.
|
||||
// Timeout if any of them takes too long (5 minutes).
|
||||
@ -183,17 +162,12 @@ export class UserCharacteristicsPageService {
|
||||
}
|
||||
}
|
||||
|
||||
errors.push(...this.handledErrors);
|
||||
|
||||
Glean.characteristics.jsErrors.set(JSON.stringify(errors));
|
||||
}
|
||||
|
||||
async collectGleanMetricsFromMap(
|
||||
data,
|
||||
{ prefix = "", suffix = "", operation = "set" } = {}
|
||||
) {
|
||||
async collectGleanMetricsFromMap(data, operation = "set") {
|
||||
for (const [key, value] of Object.entries(data)) {
|
||||
Glean.characteristics[prefix + key + suffix][operation](value);
|
||||
Glean.characteristics[key][operation](value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,14 +231,10 @@ export class UserCharacteristicsPageService {
|
||||
for (const win of Services.wm.getEnumerator("navigator:browser")) {
|
||||
if (!win.closed) {
|
||||
for (const tab of win.gBrowser.tabs) {
|
||||
const actor = await promiseTry(() =>
|
||||
const actor =
|
||||
tab.linkedBrowser.browsingContext?.currentWindowGlobal.getActor(
|
||||
"UserCharacteristicsWindowInfo"
|
||||
)
|
||||
).catch(async e => {
|
||||
lazy.console.error("Error getting actor", e);
|
||||
this.handledErrors.push(await stringifyError(e));
|
||||
});
|
||||
);
|
||||
|
||||
if (!actor) {
|
||||
continue;
|
||||
@ -282,137 +252,6 @@ export class UserCharacteristicsPageService {
|
||||
this.collectGleanMetricsFromMap(pointerResult);
|
||||
}
|
||||
|
||||
async populateCanvasData() {
|
||||
const actorName = "UserCharacteristicsCanvasRendering";
|
||||
ChromeUtils.registerWindowActor(actorName, {
|
||||
parent: {
|
||||
esModuleURI: "resource://gre/actors/UserCharacteristicsParent.sys.mjs",
|
||||
},
|
||||
child: {
|
||||
esModuleURI:
|
||||
"resource://gre/actors/UserCharacteristicsCanvasRenderingChild.sys.mjs",
|
||||
},
|
||||
});
|
||||
|
||||
let data = {};
|
||||
// Returns true if we need to try again
|
||||
const attemptRender = async () => {
|
||||
const diagnostics = {
|
||||
count: 0,
|
||||
closed: 0,
|
||||
noActor: 0,
|
||||
noDebugInfo: 0,
|
||||
notHW: 0,
|
||||
};
|
||||
// Try to find a window that supports hardware rendering
|
||||
let foundActor = null;
|
||||
let fallbackActor = null;
|
||||
for (const win of Services.wm.getEnumerator("navigator:browser")) {
|
||||
diagnostics.count++;
|
||||
if (win.closed) {
|
||||
diagnostics.closed++;
|
||||
continue;
|
||||
}
|
||||
|
||||
const actor =
|
||||
win.gBrowser.selectedBrowser.browsingContext?.currentWindowGlobal.getActor(
|
||||
actorName
|
||||
);
|
||||
|
||||
if (!actor) {
|
||||
diagnostics.noActor++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Example data: {"backendType":3,"drawTargetType":0,"isAccelerated":false,"isShared":true}
|
||||
const debugInfo = await timeoutPromise(
|
||||
actor.sendQuery("CanvasRendering:GetDebugInfo"),
|
||||
5000
|
||||
).catch(async e => {
|
||||
lazy.console.error("Canvas rendering debug info failed", e);
|
||||
this.handledErrors.push(await stringifyError(e));
|
||||
});
|
||||
if (!debugInfo) {
|
||||
diagnostics.noDebugInfo++;
|
||||
continue;
|
||||
}
|
||||
|
||||
lazy.console.debug("Canvas rendering debug info", debugInfo);
|
||||
|
||||
fallbackActor = actor;
|
||||
if (debugInfo.isAccelerated) {
|
||||
foundActor = actor;
|
||||
break;
|
||||
}
|
||||
diagnostics.notHW++;
|
||||
}
|
||||
|
||||
// If we didn't find a hardware accelerated window, we use the last one
|
||||
const actor = foundActor || fallbackActor;
|
||||
|
||||
if (!actor) {
|
||||
lazy.console.error("No actor found for canvas rendering");
|
||||
// There's no actor/window to render canvases
|
||||
return { error: { message: "NO_ACTOR", diagnostics }, retry: false };
|
||||
}
|
||||
|
||||
// We have an actor, hw accelerated or not
|
||||
// Ask it to render the canvases.
|
||||
// Timeout after 1 minute to give multiple
|
||||
// chances to render canvases.
|
||||
try {
|
||||
data = await timeoutPromise(
|
||||
actor.sendQuery("CanvasRendering:Render", {
|
||||
hwRenderingExpected: !!foundActor,
|
||||
}),
|
||||
1 * 60 * 1000
|
||||
);
|
||||
} catch (e) {
|
||||
lazy.console.error(
|
||||
"Canvas rendering timed out or actor was destroyed (tab closed etc.)",
|
||||
e
|
||||
);
|
||||
return {
|
||||
error: { message: await stringifyError(e), diagnostics },
|
||||
retry: true,
|
||||
};
|
||||
}
|
||||
|
||||
// Successfully rendered at least some canvases, maybe all of them
|
||||
return {
|
||||
error:
|
||||
!foundActor && fallbackActor
|
||||
? { message: "NO_HW_ACTOR", diagnostics }
|
||||
: null,
|
||||
retry: false,
|
||||
};
|
||||
};
|
||||
|
||||
// Try to render canvases
|
||||
let result = null;
|
||||
while ((result = await attemptRender()).retry) {
|
||||
this.handledErrors.push(result.error);
|
||||
// If we failed to render canvases, try again.
|
||||
// This can happen if the user closes the tab before we render the canvases.
|
||||
// Wait for a bit before trying again
|
||||
await new Promise(resolve => lazy.setTimeout(resolve, 5 * 1000));
|
||||
}
|
||||
|
||||
if (!result.retry && result.error) {
|
||||
this.handledErrors.push(result.error);
|
||||
}
|
||||
|
||||
// We may have HW + SW, or only SW rendered canvases - populate the metrics with what we have
|
||||
this.collectGleanMetricsFromMap(data.renderings);
|
||||
|
||||
ChromeUtils.unregisterWindowActor(actorName);
|
||||
|
||||
// Record the errors
|
||||
if (data.errors?.length) {
|
||||
this.handledErrors.push(...data.errors);
|
||||
}
|
||||
}
|
||||
|
||||
async populateZoomPrefs() {
|
||||
const zoomPrefsCount = await new Promise(resolve => {
|
||||
lazy.contentPrefs.getByName("browser.content.full-zoom", null, {
|
||||
@ -457,8 +296,32 @@ export class UserCharacteristicsPageService {
|
||||
// usercharacteristics.js and the metric defined
|
||||
const metrics = {
|
||||
set: [
|
||||
"canvasdata1",
|
||||
"canvasdata2",
|
||||
"canvasdata3",
|
||||
"canvasdata4",
|
||||
"canvasdata5",
|
||||
"canvasdata6",
|
||||
"canvasdata7",
|
||||
"canvasdata8",
|
||||
"canvasdata9",
|
||||
"canvasdata10",
|
||||
"canvasdata11Webgl",
|
||||
"canvasdata12Fingerprintjs1",
|
||||
"canvasdata13Fingerprintjs2",
|
||||
"canvasdata1software",
|
||||
"canvasdata2software",
|
||||
"canvasdata3software",
|
||||
"canvasdata4software",
|
||||
"canvasdata5software",
|
||||
"canvasdata6software",
|
||||
"canvasdata7software",
|
||||
"canvasdata8software",
|
||||
"canvasdata9software",
|
||||
"canvasdata10software",
|
||||
"canvasdata11Webglsoftware",
|
||||
"canvasdata12Fingerprintjs1software",
|
||||
"canvasdata13Fingerprintjs2software",
|
||||
"voicesCount",
|
||||
"voicesLocalCount",
|
||||
"voicesDefault",
|
||||
@ -574,7 +437,7 @@ export class UserCharacteristicsPageService {
|
||||
);
|
||||
}
|
||||
|
||||
async populateWebGlInfo(window, document, forceSoftwareRendering) {
|
||||
async populateWebGlInfo(window, document) {
|
||||
const results = {
|
||||
glVersion: 2,
|
||||
parameters: {
|
||||
@ -591,16 +454,17 @@ export class UserCharacteristicsPageService {
|
||||
};
|
||||
|
||||
const canvas = document.createElement("canvas");
|
||||
let gl = canvas.getContext("webgl2", { forceSoftwareRendering });
|
||||
let gl = canvas.getContext("webgl2");
|
||||
if (!gl) {
|
||||
gl = canvas.getContext("webgl", { forceSoftwareRendering });
|
||||
gl = canvas.getContext("webgl");
|
||||
results.glVersion = 1;
|
||||
}
|
||||
if (!gl) {
|
||||
lazy.console.error(
|
||||
"Unable to initialize WebGL. Your browser or machine may not support it."
|
||||
);
|
||||
Glean.characteristics.glVersion.set(results.glVersion);
|
||||
results.glVersion = 0;
|
||||
Glean.characteristics.webglinfo.set(JSON.stringify(results));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -736,7 +600,6 @@ export class UserCharacteristicsPageService {
|
||||
extensionsRaw: mozDebugExt.getParameter(mozDebugExt.EXTENSIONS),
|
||||
vendorDebugInfo: gl.getParameter(debugExt.UNMASKED_VENDOR_WEBGL),
|
||||
rendererDebugInfo: gl.getParameter(debugExt.UNMASKED_RENDERER_WEBGL),
|
||||
contextType: mozDebugExt.getParameter(mozDebugExt.CONTEXT_TYPE),
|
||||
};
|
||||
|
||||
if (gl.getExtension("WEBGL_debug_shaders")) {
|
||||
@ -801,36 +664,35 @@ export class UserCharacteristicsPageService {
|
||||
};
|
||||
}
|
||||
|
||||
const map = {
|
||||
// General
|
||||
glVersion: results.glVersion,
|
||||
// Debug Params
|
||||
glExtensions: results.debugParams.extensions,
|
||||
glExtensionsRaw: results.debugParams.extensionsRaw,
|
||||
glRenderer: results.debugParams.rendererDebugInfo,
|
||||
glRendererRaw: results.debugParams.rendererRaw,
|
||||
glVendor: results.debugParams.vendorDebugInfo,
|
||||
glVendorRaw: results.debugParams.vendorRaw,
|
||||
glVersionRaw: results.debugParams.versionRaw,
|
||||
glContextType: results.debugParams.contextType,
|
||||
// Debug Shaders
|
||||
glFragmentShader: results.debugShaders.fs,
|
||||
glVertexShader: results.debugShaders.vs,
|
||||
glMinimalSource: results.debugShaders.ms,
|
||||
// Parameters
|
||||
glParamsExtensions: JSON.stringify(results.parameters.extensions),
|
||||
glParamsV1: JSON.stringify(results.parameters.v1),
|
||||
glParamsV2: JSON.stringify(results.parameters.v2),
|
||||
// Shader Precision
|
||||
glPrecisionFragment: JSON.stringify(
|
||||
results.shaderPrecision.FRAGMENT_SHADER
|
||||
),
|
||||
glPrecisionVertex: JSON.stringify(results.shaderPrecision.VERTEX_SHADER),
|
||||
};
|
||||
|
||||
this.collectGleanMetricsFromMap(map, {
|
||||
suffix: forceSoftwareRendering ? "Software" : "",
|
||||
});
|
||||
// General
|
||||
Glean.characteristics.glVersion.set(results.glVersion);
|
||||
// Debug Params
|
||||
Glean.characteristics.glExtensions.set(results.debugParams.extensions);
|
||||
Glean.characteristics.glExtensionsRaw.set(
|
||||
results.debugParams.extensionsRaw
|
||||
);
|
||||
Glean.characteristics.glRenderer.set(results.debugParams.rendererDebugInfo);
|
||||
Glean.characteristics.glRendererRaw.set(results.debugParams.rendererRaw);
|
||||
Glean.characteristics.glVendor.set(results.debugParams.vendorDebugInfo);
|
||||
Glean.characteristics.glVendorRaw.set(results.debugParams.vendorRaw);
|
||||
Glean.characteristics.glVersionRaw.set(results.debugParams.versionRaw);
|
||||
// Debug Shaders
|
||||
Glean.characteristics.glFragmentShader.set(results.debugShaders.fs);
|
||||
Glean.characteristics.glVertexShader.set(results.debugShaders.vs);
|
||||
Glean.characteristics.glMinimalSource.set(results.debugShaders.ms);
|
||||
// Parameters
|
||||
Glean.characteristics.glParamsExtensions.set(
|
||||
JSON.stringify(results.parameters.extensions)
|
||||
);
|
||||
Glean.characteristics.glParamsV1.set(JSON.stringify(results.parameters.v1));
|
||||
Glean.characteristics.glParamsV2.set(JSON.stringify(results.parameters.v2));
|
||||
// Shader Precision
|
||||
Glean.characteristics.glPrecisionFragment.set(
|
||||
JSON.stringify(results.shaderPrecision.FRAGMENT_SHADER)
|
||||
);
|
||||
Glean.characteristics.glPrecisionVertex.set(
|
||||
JSON.stringify(results.shaderPrecision.VERTEX_SHADER)
|
||||
);
|
||||
}
|
||||
|
||||
async pageLoaded(browsingContext, data) {
|
||||
@ -915,13 +777,3 @@ function timeoutPromise(promise, ms) {
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function promiseTry(func) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
resolve(func());
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -21,6 +21,181 @@
|
||||
<body>
|
||||
<div id="test_canvases">
|
||||
<h2>Test Canvases</h2>
|
||||
<div>
|
||||
<h3>Canvas 1</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas1"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas1data" id="canvas1data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 2</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas2"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas2data" id="canvas2data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 3</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas3"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas3data" id="canvas3data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 4</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas4"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas4data" id="canvas4data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 5</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas5"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas5data" id="canvas5data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 6</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas6"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas6data" id="canvas6data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 7</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas7"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas7data" id="canvas7data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 8</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas8"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas8data" id="canvas8data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 9</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas9"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas9data" id="canvas9data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 10</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas10"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="canvas10data"
|
||||
id="canvas10data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>WebGL Canvas</h3>
|
||||
<canvas
|
||||
@ -43,9 +218,228 @@
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>FingerprintJS Canvas 1 (Text)</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="240"
|
||||
height="60"
|
||||
id="fingerprintjscanvas1"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="fingerprintjscanvas1data"
|
||||
id="fingerprintjscanvas1data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>FingerprintJS Canvas 2 (Geometry)</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="122"
|
||||
height="110"
|
||||
id="fingerprintjscanvas2"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="fingerprintjscanvas2data"
|
||||
id="fingerprintjscanvas2data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="test_canvases">
|
||||
<h2>Test Canvases Software</h2>
|
||||
<div>
|
||||
<h3>Canvas 1</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas1software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas1data" id="canvas1data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 2</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas2software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas2data" id="canvas2data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 3</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas3software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas3data" id="canvas3data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 4</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas4software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas4data" id="canvas4data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 5</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas5software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas5data" id="canvas5data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 6</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas6software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas6data" id="canvas6data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 7</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas7software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas7data" id="canvas7data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 8</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas8software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas8data" id="canvas8data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 9</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas9software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input type="text" name="canvas9data" id="canvas9data" readonly />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Canvas 10</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="250"
|
||||
height="250"
|
||||
id="canvas10software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="canvas10data"
|
||||
id="canvas10data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>WebGL Canvas</h3>
|
||||
<canvas
|
||||
@ -68,6 +462,50 @@
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>FingerprintJS Canvas 1 (Text)</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="240"
|
||||
height="60"
|
||||
id="fingerprintjscanvas1software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="fingerprintjscanvas1data"
|
||||
id="fingerprintjscanvas1data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div>
|
||||
<h3>FingerprintJS Canvas 2 (Geometry)</h3>
|
||||
<canvas
|
||||
class="testcanvas"
|
||||
width="122"
|
||||
height="110"
|
||||
id="fingerprintjscanvas2software"
|
||||
></canvas>
|
||||
<table>
|
||||
<tr>
|
||||
<td>ImageData:</td>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
name="fingerprintjscanvas2data"
|
||||
id="fingerprintjscanvas2data"
|
||||
readonly
|
||||
/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
|
File diff suppressed because one or more lines are too long
@ -2018,329 +2018,6 @@ characteristics:
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_context_type:
|
||||
type: string
|
||||
description: >
|
||||
The type of the GL context (EGL, GLX, WGL, etc).
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c17
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_version_software:
|
||||
type: quantity
|
||||
unit: int
|
||||
description: >
|
||||
The version of OpenGL supported by the user's system.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_extensions_software:
|
||||
type: text
|
||||
description: >
|
||||
The list of OpenGL extensions supported by the user's system.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_extensions_raw_software:
|
||||
type: text
|
||||
description: >
|
||||
The raw list of OpenGL extensions supported by the user's system.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_renderer_software:
|
||||
type: string
|
||||
description: >
|
||||
The OpenGL renderer string.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_renderer_raw_software:
|
||||
type: string
|
||||
description: >
|
||||
The raw OpenGL renderer string.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_vendor_software:
|
||||
type: string
|
||||
description: >
|
||||
The OpenGL vendor string.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_vendor_raw_software:
|
||||
type: string
|
||||
description: >
|
||||
The raw OpenGL vendor string.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_version_raw_software:
|
||||
type: string
|
||||
description: >
|
||||
The raw OpenGL version string.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_fragment_shader_software:
|
||||
type: string
|
||||
description: >
|
||||
Hash of the transformed source of the fragment shader.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_vertex_shader_software:
|
||||
type: string
|
||||
description: >
|
||||
Hash of the transformed source of the vertex shader.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
gl_minimal_source_software:
|
||||
type: text
|
||||
description: >
|
||||
Transformed source of the minimal shader.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_params_extensions_software:
|
||||
type: text
|
||||
description: >
|
||||
The list of GL parameters of the extensions.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_params_v1_software:
|
||||
type: text
|
||||
description: >
|
||||
The list of GL parameters of GL1.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_params_v2_software:
|
||||
type: text
|
||||
description: >
|
||||
The list of GL parameters of GL2.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_precision_fragment_software:
|
||||
type: text
|
||||
description: >
|
||||
Precisions of the fragment shader.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_precision_vertex_software:
|
||||
type: text
|
||||
description: >
|
||||
Precisions of the vertex shader.
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c15
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
# Text metrics are _required_ to be web_activity or highly_sensitive, so even though this
|
||||
# is more like 'technical' (per the Data Review), I'm marking highly sensitive.
|
||||
- highly_sensitive
|
||||
|
||||
gl_context_type_software:
|
||||
type: string
|
||||
description: >
|
||||
The type of the GL context (EGL, GLX, WGL, etc).
|
||||
lifetime: application
|
||||
send_in_pings:
|
||||
- user-characteristics
|
||||
notification_emails:
|
||||
- tom@mozilla.com
|
||||
bugs:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506
|
||||
data_reviews:
|
||||
- https://bugzilla.mozilla.org/show_bug.cgi?id=1922506#c17
|
||||
expires: never
|
||||
data_sensitivity:
|
||||
- technical
|
||||
|
||||
prefs_network_cookie_cookiebehavior: # network.cookie.cookieBehavior
|
||||
type: quantity
|
||||
unit: int
|
||||
|
@ -1919,8 +1919,8 @@ bool nsRFPService::CheckSuspiciousFingerprintingActivity(
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool nsRFPService::IsSystemPrincipalOrAboutFingerprintingProtection(
|
||||
JSContext* aCx, JSObject* aObj) {
|
||||
bool nsRFPService::IsSoftwareRenderingOptionExposed(JSContext* aCx,
|
||||
JSObject* aObj) {
|
||||
if (!NS_IsMainThread()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -223,8 +223,7 @@ class nsRFPService final : public nsIObserver, public nsIRFPService {
|
||||
bool aIsPrivateMode, RFPTarget aTarget,
|
||||
const Maybe<RFPTarget>& aOverriddenFingerprintingSettings);
|
||||
|
||||
static bool IsSystemPrincipalOrAboutFingerprintingProtection(JSContext*,
|
||||
JSObject*);
|
||||
static bool IsSoftwareRenderingOptionExposed(JSContext*, JSObject*);
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
static double TimerResolution(RTPCallerType aRTPCallerType);
|
||||
|
@ -667,7 +667,7 @@ const RefPtr<PopulatePromise>& TimoutPromise(
|
||||
// metric is set, this variable should be incremented. It'll be a lot. It's
|
||||
// okay. We're going to need it to know (including during development) what is
|
||||
// the source of the data we are looking at.
|
||||
const int kSubmissionSchema = 8;
|
||||
const int kSubmissionSchema = 7;
|
||||
|
||||
const auto* const kUUIDPref =
|
||||
"toolkit.telemetry.user_characteristics_ping.uuid";
|
||||
|
Loading…
x
Reference in New Issue
Block a user