From 1a3278d4daabdac8b238075a2965dad4dcd7024f Mon Sep 17 00:00:00 2001 From: xsalon00 Date: Aug 31 2021 19:57:41 +0000 Subject: API call counting modified to support more info --- diff --git a/common/code_builders.js b/common/code_builders.js index fd78e59..1d4d749 100644 --- a/common/code_builders.js +++ b/common/code_builders.js @@ -3,6 +3,7 @@ * * \author Copyright (C) 2019 Libor Polcak * \author Copyright (C) 2021 Giorgio Maone + * \author Copyright (C) 2021 Marek Saloň * * \license SPDX-License-Identifier: GPL-3.0-or-later */ @@ -54,16 +55,18 @@ function define_page_context_function(wrapper) { if ("update_count" in wrapper) { if (typeof wrapper.update_count === "string") updateCount = wrapper.update_count; } - let updateCountCall = updateCount ? `updateCount(${JSON.stringify(updateCount)});` : ""; + let updateCountCall = updateCount ? `if (fp_enabled) { + updateCount(${JSON.stringify(updateCount)}, "call", args.map(x => JSON.stringify(x))); + }` : ""; let originalF = original_function || `${parent_object}.${parent_object_property}`; return enclose_wrapping2(`let originalF = ${originalF}; let replacementF = function(${wrapper.wrapping_function_args}) { ${wrapper.wrapping_function_body} - ${updateCountCall}; }; if (WrapHelper.XRAY) { let innerF = replacementF; replacementF = function(...args) { + ${updateCountCall}; let ret = WrapHelper.forPage(innerF.call(this, ...args)); if (ret) { try { @@ -175,6 +178,10 @@ var build_code = function(wrapper, ...args) { }; var code = `try {if (${wrapper.parent_object} === undefined) {return;}} catch (e) {return; /* It seems that the parent object does not exist */ }`; + + // add flag variable that determines whether messages are valid (sended after wrappers injection) + code += `var fp_enabled = false;` + for (let wrapped of wrapper.wrapped_objects || []) { code += ` var ${wrapped.wrapped_name} = window.${wrapped.original_name}; @@ -212,6 +219,10 @@ var build_code = function(wrapper, ...args) { Object.freeze(${wrapper.parent_object}.${wrapper.parent_object_property}); } `; + + // make messages from this wrapper valid + code += `fp_enabled = true;` + return enclose_wrapping(code, ...args); }; @@ -239,8 +250,13 @@ function wrap_code(wrappers) { let xrayWindow = window; // the "privileged" xray window wrapper in Firefox { let {port} = env; - function updateCount(wrapperName, delta = 1) { - port.postMessage({wrapperName, delta}); + function updateCount(wrapperName, wrapperType, wrapperArgs, delta = 1) { + port.postMessage({ + wrapperName, + wrapperType, + wrapperArgs, + delta + }); } } let WrapHelper; // xray boundary helper diff --git a/common/wrapping.js b/common/wrapping.js index f5c601e..963fa56 100644 --- a/common/wrapping.js +++ b/common/wrapping.js @@ -2,6 +2,7 @@ * \brief Main file handling wrappers * * \author Copyright (C) 2019 Libor Polcak + * \author Copyright (C) 2019 Marek Saloň * * \license SPDX-License-Identifier: GPL-3.0-or-later */