Add Suspicious Site Reporter

This commit is contained in:
toto 2023-03-16 12:58:46 +01:00
parent fd2dd1eda1
commit a2c4a280da
25 changed files with 89458 additions and 0 deletions

View File

@ -0,0 +1 @@
[{"description":"treehash per file","signed_content":{"payload":"eyJjb250ZW50X2hhc2hlcyI6W3siYmxvY2tfc2l6ZSI6NDA5NiwiZGlnZXN0Ijoic2hhMjU2IiwiZmlsZXMiOlt7InBhdGgiOiJhbGVydHNfYmluLWJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6InNxQldYR21hRVhCQnpFQW5sUmg2NVdZRzNSMHhYUzd1aGIyWFVRUG9UZHMifSx7InBhdGgiOiJhbGVydHNfYmluLk1GIiwicm9vdF9oYXNoIjoiam90ckhzcjRKS2xqVGxzZlMzZ0hmN1lmaDFhX3cyc1VzWVFsdmY3a0doQSJ9LHsicGF0aCI6ImFsZXJ0c19iaW4uanMiLCJyb290X2hhc2giOiJ5aWhSZHZhN3VtRkRBUHR2VThaOEVuSFBwS1B0VVpVZnpHMnhIOVcxZDdZIn0seyJwYXRoIjoiYmFja2dyb3VuZF9iaW4tYnVuZGxlLmpzIiwicm9vdF9oYXNoIjoiUmRIZ3ZmUGVndW5rU1ZPcFV2V3lSTEw5ZU9CamlmSDZIVTAtUHR5eGkxUSJ9LHsicGF0aCI6ImJhY2tncm91bmRfYmluLk1GIiwicm9vdF9oYXNoIjoid3hKNk1obl9HcktfLThobHlEcU1OQ1FFeGxGVjlqNkpjQWJpcnNuR2F4RSJ9LHsicGF0aCI6ImJhY2tncm91bmRfYmluLmpzIiwicm9vdF9oYXNoIjoiVF96M2dXMEtvdVJJQktYbjBYbU83dHExUWNVeEpqYk95bVVWMWpuVDhENCJ9LHsicGF0aCI6ImNvbnRlbnRfYmluLWJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6IkxheXRmNkk1Q0l4QVo3aTZsamtUWkh2alVlRmhxU2ZGNjRxMkd6WGdtMVEifSx7InBhdGgiOiJjb250ZW50X2Jpbi5NRiIsInJvb3RfaGFzaCI6InYtelVmQTJFcUdGME1qT0pzT3VKMWhVY21nd2c4VmZ5QmNHdnNFRlFEdkUifSx7InBhdGgiOiJjb250ZW50X2Jpbi5qcyIsInJvb3RfaGFzaCI6ImJCZWFCcXo4MnVEUlc5VUF2TWpIcEhRYTNmYjI3MlFXbmhYbW5wUDdnNFUifSx7InBhdGgiOiJpbWFnZXMvY29uZmlybWF0aW9uLnBuZyIsInJvb3RfaGFzaCI6IjMtNFZuZ21LNGF5VlNNNkw5eXZYR2k1WEFPR2QyV290bDJ1c2EwVlhwX1EifSx7InBhdGgiOiJpbWFnZXMvZ3JheWZsYWcxMjgucG5nIiwicm9vdF9oYXNoIjoiYlFNX3JQa2pXUDRsZjhicG9LMmRzZGNXN3ZIbWlZdThETVZ1M2taRzZhYyJ9LHsicGF0aCI6ImltYWdlcy9ncmF5ZmxhZzE2LnBuZyIsInJvb3RfaGFzaCI6IlJISEhSZllCZGFwcFV4a2tkTVNJaDB5V2JoSmdXR1RjVUxPUFVLOFJzcEkifSx7InBhdGgiOiJpbWFnZXMvZ3JheWZsYWc0OC5wbmciLCJyb290X2hhc2giOiJWaEtwaFluUUZydmtmYXl2clduN05GNEhLVFJ3YkZWcV83Sk9PSXVtc3RRIn0seyJwYXRoIjoiaW1hZ2VzL29yYW5nZWZsYWcxMjgucG5nIiwicm9vdF9oYXNoIjoiQWhkR1dZQ04tMm80Vk13dDQyTzVmejhxSzZ2cWphakk4dTNnUmVVNllVZyJ9LHsicGF0aCI6ImltYWdlcy9vcmFuZ2VmbGFnMTYucG5nIiwicm9vdF9oYXNoIjoia2w5a0p6QW5qNS1RX1NXblUxNXdYaTJjRURlVGNhNXJPQ2luX0VFNmx5MCJ9LHsicGF0aCI6ImltYWdlcy9vcmFuZ2VmbGFnNDgucG5nIiwicm9vdF9oYXNoIjoiM3BFWFRtTHZqR21rTnFHRWcwdFFyN0U2UkhXVE50Y3NRQWJ6emVyYVRtZyJ9LHsicGF0aCI6Im1hbmlmZXN0Lmpzb24iLCJyb290X2hhc2giOiJUZndUeldMSFdmYWs4a0d5NXI0b2dENDlwc3hDOHlMbTFxcEhMQ3BzUjAwIn0seyJwYXRoIjoicG9wdXAuY3NzIiwicm9vdF9oYXNoIjoiU05FQlI2S040MkZjcXZFbWdyX3JSSmZLUFlNUlNUUGpDckRVRnpGR2poVSJ9LHsicGF0aCI6InBvcHVwLmh0bWwiLCJyb290X2hhc2giOiJvak5ILThyZ2JRWm1BSWJZMkx4Y3QtZUo5QmItMy1Oa0w2LXZ4d0t6WndnIn0seyJwYXRoIjoicG9wdXBfYmluLWJ1bmRsZS5qcyIsInJvb3RfaGFzaCI6IlpydERwYjN1RlBCdGt4VUExd2RDX3RGYlhRU1FGQXhqbFU0eHZFdVVmcUEifSx7InBhdGgiOiJwb3B1cF9iaW4uTUYiLCJyb290X2hhc2giOiJ0T2xFUDZlNllhMGRzZmhkekxPZUQycEp3QVZYWlowRExfWHAwcVVIYzN3In0seyJwYXRoIjoicG9wdXBfYmluLmpzIiwicm9vdF9oYXNoIjoiTDJ6bDFNcnBiamwwZUJ6SWVvRTI4a0stVWhVT1RWWTc3bW5xV1hsYi1QayJ9LHsicGF0aCI6InRvcHNpdGVzLmpzb24iLCJyb290X2hhc2giOiJLT2UxOW9HY0ZFa0hqeTFIMWN3Z0hmYWFFV2FUcEhWSy1uS1ladU1nYlJ3In1dLCJmb3JtYXQiOiJ0cmVlaGFzaCIsImhhc2hfYmxvY2tfc2l6ZSI6NDA5Nn1dLCJpdGVtX2lkIjoiamtuZW1ibGtiZGhkY3BsbGZnYmZla2tkY2llZ2Zib2kiLCJpdGVtX3ZlcnNpb24iOiIxLjIzIiwicHJvdG9jb2xfdmVyc2lvbiI6MX0","signatures":[{"header":{"kid":"publisher"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"YMrApBqurisxmXM8yPBxZTDObREByjf6ToMSvm53oFSDRE7FGpebJhNPQCk3SU1PrHfsEPeHWQMbBMysRGoZ9dYN094aSGBZ9gjDl59vLoRu0dDPzm5ydinzeDp4jEK_Q9MmvpAot3aurtpKRav0rY89r8pcaqQERvxZUwIKXLZdwuu7M4eKrbdhWnPGcwY96xW2dJpVZSkoHmoz4qCV9x9ke3fLnO5QKod03mcooH4o61feoxY9gv6Oflc6YKldGqYv_OBuxCionv0hmm5-IK1GClM32VjjMFsk68BAvCwWo-LsM4zkkvxtqcmcLQ3IeLNrOFsrhL8Y5AkLr38Bfg"},{"header":{"kid":"webstore"},"protected":"eyJhbGciOiJSUzI1NiJ9","signature":"ash8p2GqVENGJMYo7Z-xW10pMPwTIDEEKZt6uLVlwyqbBXJzQgLtfGpFYnHRXLwK_8AAO-UdsYr8J4WxAODlExjEpXAc5Wa4wT7PXZ4gpSBEYZoX-8uuamK1kWqwKPjlc2devfyngJVtBJnL0IksENVovws-OybYms9Ou1Zc656sbuvg_os-1VqGORTwFSMax6seuWy1AXYCIBgP3k36mhjPXFmFc5LFeAaEnYve2uUJEGv9UrJ1Go9KQt2IWf_VPharpLqQMqcsLOCwAQXHl_sOrpaRuE3hLSJG0DrxUriBatHgNOz_x6Grt43nrcOdwXDsR5WTW3ldlfdWlfp-Cw"}]}}]

View File

@ -0,0 +1,34 @@
javascript/closure/base.js
javascript/public_suffix/publicsuffixpatterns.js
third_party/javascript/closure/debug/error.js
third_party/javascript/closure/dom/nodetype.js
third_party/javascript/closure/asserts/asserts.js
third_party/javascript/closure/dom/asserts.js
third_party/javascript/closure/functions/functions.js
third_party/javascript/closure/array/array.js
third_party/javascript/closure/dom/htmlelement.js
third_party/javascript/closure/dom/tagname.js
third_party/javascript/closure/object/object.js
third_party/javascript/closure/dom/tags.js
third_party/javascript/closure/html/trustedtypes.js
third_party/javascript/closure/string/typedstring.js
third_party/javascript/closure/string/const.js
third_party/javascript/closure/html/safescript.js
third_party/javascript/closure/fs/url.js
third_party/javascript/closure/fs/blob.js
third_party/javascript/closure/i18n/bidi.js
third_party/javascript/closure/html/trustedresourceurl.js
third_party/javascript/closure/string/internal.js
third_party/javascript/closure/html/safeurl.js
third_party/javascript/closure/html/safestyle.js
third_party/javascript/closure/html/safestylesheet.js
third_party/javascript/closure/labs/useragent/util.js
third_party/javascript/closure/labs/useragent/browser.js
third_party/javascript/closure/html/safehtml.js
third_party/javascript/closure/html/uncheckedconversions.js
third_party/javascript/closure/dom/safe.js
third_party/javascript/closure/string/string.js
third_party/javascript/closure/structs/structs.js
third_party/javascript/closure/structs/trie.js
javascript/public_suffix/tld.js
third_party/javascript/suspicious_site_reporter/extension/alerts.js

View File

@ -0,0 +1,57 @@
javascript/closure/base.js
javascript/apps/jspb/binary/arith.js
javascript/apps/jspb/binary/constants.js
third_party/javascript/closure/debug/error.js
third_party/javascript/closure/dom/nodetype.js
third_party/javascript/closure/asserts/asserts.js
third_party/javascript/closure/array/array.js
third_party/javascript/closure/crypt/crypt.js
third_party/javascript/closure/dom/asserts.js
third_party/javascript/closure/functions/functions.js
third_party/javascript/closure/dom/htmlelement.js
third_party/javascript/closure/dom/tagname.js
third_party/javascript/closure/object/object.js
third_party/javascript/closure/dom/tags.js
third_party/javascript/closure/html/trustedtypes.js
third_party/javascript/closure/string/typedstring.js
third_party/javascript/closure/string/const.js
third_party/javascript/closure/html/safescript.js
third_party/javascript/closure/fs/url.js
third_party/javascript/closure/fs/blob.js
third_party/javascript/closure/i18n/bidi.js
third_party/javascript/closure/html/trustedresourceurl.js
third_party/javascript/closure/string/internal.js
third_party/javascript/closure/html/safeurl.js
third_party/javascript/closure/html/safestyle.js
third_party/javascript/closure/html/safestylesheet.js
third_party/javascript/closure/labs/useragent/util.js
third_party/javascript/closure/labs/useragent/browser.js
third_party/javascript/closure/html/safehtml.js
third_party/javascript/closure/html/uncheckedconversions.js
third_party/javascript/closure/dom/safe.js
third_party/javascript/closure/string/string.js
third_party/javascript/closure/labs/useragent/platform.js
third_party/javascript/closure/labs/useragent/engine.js
third_party/javascript/closure/reflect/reflect.js
third_party/javascript/closure/useragent/useragent.js
third_party/javascript/closure/useragent/product.js
third_party/javascript/closure/crypt/base64.js
javascript/apps/jspb/binary/utils.js
javascript/apps/jspb/binary/decoder.js
javascript/apps/jspb/binary/encoder.js
javascript/apps/jspb/binary/reader.js
javascript/apps/jspb/binary/writer.js
javascript/apps/jspb/extension_field_info.js
javascript/apps/jspb/extension_field_binary_info.js
javascript/apps/jspb/map.js
javascript/apps/jspb/message.js
javascript/public_suffix/publicsuffixpatterns.js
third_party/javascript/closure/structs/structs.js
third_party/javascript/closure/structs/trie.js
javascript/public_suffix/tld.js
third_party/javascript/suspicious_site_reporter/extension/alerts.js
third_party/javascript/suspicious_site_reporter/extension/client_request_proto_lib_jspb/referrerchainentry.jspb.js
third_party/javascript/suspicious_site_reporter/extension/client_request_proto_lib_jspb/chromeextensionclientrequest.jspb.js
third_party/javascript/suspicious_site_reporter/extension/background.js
third_party/javascript/suspicious_site_reporter/extension/background_page.js
javascript/apps/xid/xid.js

View File

@ -0,0 +1,2 @@
javascript/closure/base.js
third_party/javascript/suspicious_site_reporter/extension/content.js

View File

@ -0,0 +1,506 @@
/*
Copyright The Closure Library Authors.
SPDX-License-Identifier: Apache-2.0
*/
var goog = goog || {};
goog.global = this || self;
goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {
var parts = name.split("."), cur = opt_objectToExportTo || goog.global;
parts[0] in cur || "undefined" == typeof cur.execScript || cur.execScript("var " + parts[0]);
for (var part; parts.length && (part = parts.shift());) {
parts.length || void 0 === opt_object ? cur = cur[part] && cur[part] !== Object.prototype[part] ? cur[part] : cur[part] = {} : cur[part] = opt_object;
}
};
goog.define = function(name, defaultValue) {
return defaultValue;
};
goog.FEATURESET_YEAR = 2012;
goog.DEBUG = !0;
goog.LOCALE = "en";
goog.TRUSTED_SITE = !0;
goog.STRICT_MODE_COMPATIBLE = !1;
goog.DISALLOW_TEST_ONLY_CODE = !goog.DEBUG;
goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1;
goog.provide = function(name) {
if (goog.isInModuleLoader_()) {
throw Error("goog.provide cannot be used within a module.");
}
goog.constructNamespace_(name);
};
goog.constructNamespace_ = function(name, opt_obj) {
goog.exportPath_(name, opt_obj);
};
goog.getScriptNonce = function(opt_window) {
if (opt_window && opt_window != goog.global) {
return goog.getScriptNonce_(opt_window.document);
}
null === goog.cspNonce_ && (goog.cspNonce_ = goog.getScriptNonce_(goog.global.document));
return goog.cspNonce_;
};
goog.NONCE_PATTERN_ = /^[\w+/_-]+[=]{0,2}$/;
goog.cspNonce_ = null;
goog.getScriptNonce_ = function(doc) {
var script = doc.querySelector && doc.querySelector("script[nonce]");
if (script) {
var nonce = script.nonce || script.getAttribute("nonce");
if (nonce && goog.NONCE_PATTERN_.test(nonce)) {
return nonce;
}
}
return "";
};
goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
goog.module = function(name) {
if ("string" !== typeof name || !name || -1 == name.search(goog.VALID_MODULE_RE_)) {
throw Error("Invalid module identifier");
}
if (!goog.isInGoogModuleLoader_()) {
throw Error("Module " + name + " has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");
}
if (goog.moduleLoaderState_.moduleName) {
throw Error("goog.module may only be called once per module.");
}
goog.moduleLoaderState_.moduleName = name;
};
goog.module.get = function() {
return null;
};
goog.module.getInternal_ = function() {
return null;
};
goog.ModuleType = {ES6:"es6", GOOG:"goog"};
goog.moduleLoaderState_ = null;
goog.isInModuleLoader_ = function() {
return goog.isInGoogModuleLoader_() || goog.isInEs6ModuleLoader_();
};
goog.isInGoogModuleLoader_ = function() {
return !!goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.GOOG;
};
goog.isInEs6ModuleLoader_ = function() {
if (goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.ES6) {
return !0;
}
var jscomp = goog.global.$jscomp;
return jscomp ? "function" != typeof jscomp.getCurrentModulePath ? !1 : !!jscomp.getCurrentModulePath() : !1;
};
goog.module.declareLegacyNamespace = function() {
goog.moduleLoaderState_.declareLegacyNamespace = !0;
};
goog.declareModuleId = function(namespace) {
if (goog.moduleLoaderState_) {
goog.moduleLoaderState_.moduleName = namespace;
} else {
var jscomp = goog.global.$jscomp;
if (!jscomp || "function" != typeof jscomp.getCurrentModulePath) {
throw Error('Module with namespace "' + namespace + '" has been loaded incorrectly.');
}
var exports = jscomp.require(jscomp.getCurrentModulePath());
goog.loadedModules_[namespace] = {exports:exports, type:goog.ModuleType.ES6, moduleId:namespace};
}
};
goog.setTestOnly = function(opt_message) {
if (goog.DISALLOW_TEST_ONLY_CODE) {
throw opt_message = opt_message || "", Error("Importing test-only code into non-debug environment" + (opt_message ? ": " + opt_message : "."));
}
};
goog.forwardDeclare = function() {
};
goog.getObjectByName = function(name, opt_obj) {
for (var parts = name.split("."), cur = opt_obj || goog.global, i = 0; i < parts.length; i++) {
if (cur = cur[parts[i]], null == cur) {
return null;
}
}
return cur;
};
goog.globalize = function(obj, opt_global) {
var global = opt_global || goog.global, x;
for (x in obj) {
global[x] = obj[x];
}
};
goog.addDependency = function() {
};
goog.useStrictRequires = !1;
goog.ENABLE_DEBUG_LOADER = !0;
goog.logToConsole_ = function(msg) {
goog.global.console && goog.global.console.error(msg);
};
goog.require = function() {
};
goog.requireType = function() {
return {};
};
goog.basePath = "";
goog.nullFunction = function() {
};
goog.abstractMethod = function() {
throw Error("unimplemented abstract method");
};
goog.addSingletonGetter = function() {
};
goog.instantiatedSingletons_ = [];
goog.LOAD_MODULE_USING_EVAL = !0;
goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
goog.loadedModules_ = {};
goog.DEPENDENCIES_ENABLED = !1;
goog.TRANSPILE = "detect";
goog.ASSUME_ES_MODULES_TRANSPILED = !1;
goog.TRANSPILE_TO_LANGUAGE = "";
goog.TRANSPILER = "transpile.js";
goog.hasBadLetScoping = null;
goog.useSafari10Workaround = function() {
if (null == goog.hasBadLetScoping) {
try {
var hasBadLetScoping = !eval('"use strict";let x = 1; function f() { return typeof x; };f() == "number";');
} catch (e) {
hasBadLetScoping = !1;
}
goog.hasBadLetScoping = hasBadLetScoping;
}
return goog.hasBadLetScoping;
};
goog.workaroundSafari10EvalBug = function(moduleDef) {
return "(function(){" + moduleDef + "\n;})();\n";
};
goog.loadModule = function(moduleDef) {
var previousState = goog.moduleLoaderState_;
try {
goog.moduleLoaderState_ = {moduleName:"", declareLegacyNamespace:!1, type:goog.ModuleType.GOOG};
if (goog.isFunction(moduleDef)) {
var exports = moduleDef.call(void 0, {});
} else {
if ("string" === typeof moduleDef) {
goog.useSafari10Workaround() && (moduleDef = goog.workaroundSafari10EvalBug(moduleDef)), exports = goog.loadModuleFromSource_.call(void 0, moduleDef);
} else {
throw Error("Invalid module definition");
}
}
var moduleName = goog.moduleLoaderState_.moduleName;
if ("string" === typeof moduleName && moduleName) {
goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(moduleName, exports) : goog.SEAL_MODULE_EXPORTS && Object.seal && "object" == typeof exports && null != exports && Object.seal(exports), goog.loadedModules_[moduleName] = {exports:exports, type:goog.ModuleType.GOOG, moduleId:goog.moduleLoaderState_.moduleName};
} else {
throw Error('Invalid module name "' + moduleName + '"');
}
} finally {
goog.moduleLoaderState_ = previousState;
}
};
goog.loadModuleFromSource_ = function(JSCompiler_OptimizeArgumentsArray_p0) {
eval(JSCompiler_OptimizeArgumentsArray_p0);
return {};
};
goog.normalizePath_ = function(path) {
for (var components = path.split("/"), i = 0; i < components.length;) {
"." == components[i] ? components.splice(i, 1) : i && ".." == components[i] && components[i - 1] && ".." != components[i - 1] ? components.splice(--i, 2) : i++;
}
return components.join("/");
};
goog.loadFileSync_ = function(src) {
if (goog.global.CLOSURE_LOAD_FILE_SYNC) {
return goog.global.CLOSURE_LOAD_FILE_SYNC(src);
}
try {
var xhr = new goog.global.XMLHttpRequest;
xhr.open("get", src, !1);
xhr.send();
return 0 == xhr.status || 200 == xhr.status ? xhr.responseText : null;
} catch (err) {
return null;
}
};
goog.transpile_ = function(code$jscomp$0, path$jscomp$0, target) {
var jscomp = goog.global.$jscomp;
jscomp || (goog.global.$jscomp = jscomp = {});
var transpile = jscomp.transpile;
if (!transpile) {
var transpilerPath = goog.basePath + goog.TRANSPILER, transpilerCode = goog.loadFileSync_(transpilerPath);
if (transpilerCode) {
(function() {
(0,eval)(transpilerCode + "\n//# sourceURL=" + transpilerPath);
}).call(goog.global);
if (goog.global.$gwtExport && goog.global.$gwtExport.$jscomp && !goog.global.$gwtExport.$jscomp.transpile) {
throw Error('The transpiler did not properly export the "transpile" method. $gwtExport: ' + JSON.stringify(goog.global.$gwtExport));
}
goog.global.$jscomp.transpile = goog.global.$gwtExport.$jscomp.transpile;
jscomp = goog.global.$jscomp;
transpile = jscomp.transpile;
}
}
if (!transpile) {
var suffix = " requires transpilation but no transpiler was found.";
suffix += ' Please add "//javascript/closure:transpiler" as a data dependency to ensure it is included.';
transpile = jscomp.transpile = function(code, path) {
goog.logToConsole_(path + suffix);
return code;
};
}
return transpile(code$jscomp$0, path$jscomp$0, target);
};
goog.typeOf = function(value) {
var s = typeof value;
if ("object" == s) {
if (value) {
if (value instanceof Array) {
return "array";
}
if (value instanceof Object) {
return s;
}
var className = Object.prototype.toString.call(value);
if ("[object Window]" == className) {
return "object";
}
if ("[object Array]" == className || "number" == typeof value.length && "undefined" != typeof value.splice && "undefined" != typeof value.propertyIsEnumerable && !value.propertyIsEnumerable("splice")) {
return "array";
}
if ("[object Function]" == className || "undefined" != typeof value.call && "undefined" != typeof value.propertyIsEnumerable && !value.propertyIsEnumerable("call")) {
return "function";
}
} else {
return "null";
}
} else {
if ("function" == s && "undefined" == typeof value.call) {
return "object";
}
}
return s;
};
goog.isArray = function(val) {
return "array" == goog.typeOf(val);
};
goog.isArrayLike = function(val) {
var type = goog.typeOf(val);
return "array" == type || "object" == type && "number" == typeof val.length;
};
goog.isDateLike = function(val) {
return goog.isObject(val) && "function" == typeof val.getFullYear;
};
goog.isFunction = function(val) {
return "function" == goog.typeOf(val);
};
goog.isObject = function(val) {
var type = typeof val;
return "object" == type && null != val || "function" == type;
};
goog.getUid = function(obj) {
return Object.prototype.hasOwnProperty.call(obj, goog.UID_PROPERTY_) && obj[goog.UID_PROPERTY_] || (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_);
};
goog.hasUid = function(obj) {
return !!obj[goog.UID_PROPERTY_];
};
goog.removeUid = function(obj) {
null !== obj && "removeAttribute" in obj && obj.removeAttribute(goog.UID_PROPERTY_);
try {
delete obj[goog.UID_PROPERTY_];
} catch (ex) {
}
};
goog.UID_PROPERTY_ = "closure_uid_" + (1e9 * Math.random() >>> 0);
goog.uidCounter_ = 0;
goog.getHashCode = goog.getUid;
goog.removeHashCode = goog.removeUid;
goog.cloneObject = function(obj) {
var type = goog.typeOf(obj);
if ("object" == type || "array" == type) {
if ("function" === typeof obj.clone) {
return obj.clone();
}
var clone = "array" == type ? [] : {}, key;
for (key in obj) {
clone[key] = goog.cloneObject(obj[key]);
}
return clone;
}
return obj;
};
goog.bindNative_ = function(fn, selfObj, var_args) {
return fn.call.apply(fn.bind, arguments);
};
goog.bindJs_ = function(fn, selfObj, var_args) {
if (!fn) {
throw Error();
}
if (2 < arguments.length) {
var boundArgs = Array.prototype.slice.call(arguments, 2);
return function() {
var newArgs = Array.prototype.slice.call(arguments);
Array.prototype.unshift.apply(newArgs, boundArgs);
return fn.apply(selfObj, newArgs);
};
}
return function() {
return fn.apply(selfObj, arguments);
};
};
goog.bind = function(fn, selfObj, var_args) {
goog.bind = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bindNative_ : goog.bindJs_;
return goog.bind.apply(null, arguments);
};
goog.partial = function(fn, var_args) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
var newArgs = args.slice();
newArgs.push.apply(newArgs, arguments);
return fn.apply(this, newArgs);
};
};
goog.mixin = function(target, source) {
for (var x in source) {
target[x] = source[x];
}
};
goog.now = goog.TRUSTED_SITE && Date.now || function() {
return +new Date;
};
goog.globalEval = function(script) {
if (goog.global.execScript) {
goog.global.execScript(script, "JavaScript");
} else {
if (goog.global.eval) {
if (null == goog.evalWorks_) {
try {
goog.global.eval(""), goog.evalWorks_ = !0;
} catch (ignore) {
goog.evalWorks_ = !1;
}
}
if (goog.evalWorks_) {
goog.global.eval(script);
} else {
var doc = goog.global.document, scriptElt = doc.createElement("script");
scriptElt.type = "text/javascript";
scriptElt.defer = !1;
scriptElt.appendChild(doc.createTextNode(script));
doc.head.appendChild(scriptElt);
doc.head.removeChild(scriptElt);
}
} else {
throw Error("goog.globalEval not available");
}
}
};
goog.evalWorks_ = null;
goog.getCssName = function(className, opt_modifier) {
if ("." == String(className).charAt(0)) {
throw Error('className passed in goog.getCssName must not start with ".". You passed: ' + className);
}
var getMapping = function(cssName) {
return goog.cssNameMapping_[cssName] || cssName;
}, renameByParts = function(cssName) {
for (var parts = cssName.split("-"), mapped = [], i = 0; i < parts.length; i++) {
mapped.push(getMapping(parts[i]));
}
return mapped.join("-");
};
var rename = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? getMapping : renameByParts : function(a) {
return a;
};
var result = opt_modifier ? className + "-" + rename(opt_modifier) : rename(className);
return goog.global.CLOSURE_CSS_NAME_MAP_FN ? goog.global.CLOSURE_CSS_NAME_MAP_FN(result) : result;
};
goog.setCssNameMapping = function(mapping, opt_style) {
goog.cssNameMapping_ = mapping;
goog.cssNameMappingStyle_ = opt_style;
};
goog.getMsg = function(str, opt_values, opt_options) {
opt_options && opt_options.html && (str = str.replace(/</g, "&lt;"));
opt_values && (str = str.replace(/\{\$([^}]+)}/g, function(match, key) {
return null != opt_values && key in opt_values ? opt_values[key] : match;
}));
return str;
};
goog.getMsgWithFallback = function(a) {
return a;
};
goog.exportSymbol = function(publicPath, object, opt_objectToExportTo) {
goog.exportPath_(publicPath, object, opt_objectToExportTo);
};
goog.exportProperty = function(object, publicName, symbol) {
object[publicName] = symbol;
};
goog.inherits = function(childCtor, parentCtor) {
function tempCtor() {
}
tempCtor.prototype = parentCtor.prototype;
childCtor.prototype = new tempCtor;
childCtor.prototype.constructor = childCtor;
};
goog.scope = function(fn) {
if (goog.isInModuleLoader_()) {
throw Error("goog.scope is not supported within a module.");
}
fn.call(goog.global);
};
goog.defineClass = function(superClass, def) {
var constructor = def.constructor, statics = def.statics;
constructor && constructor != Object.prototype.constructor || (constructor = function() {
throw Error("cannot instantiate an interface (no constructor defined).");
});
var cls = goog.defineClass.createSealingConstructor_(constructor, superClass);
superClass && goog.inherits(cls, superClass);
delete def.constructor;
delete def.statics;
goog.defineClass.applyProperties_(cls.prototype, def);
null != statics && (statics instanceof Function ? statics(cls) : goog.defineClass.applyProperties_(cls, statics));
return cls;
};
goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
goog.defineClass.createSealingConstructor_ = function(ctr) {
return goog.defineClass.SEAL_CLASS_INSTANCES ? function() {
var instance = ctr.apply(this, arguments) || this;
instance[goog.UID_PROPERTY_] = instance[goog.UID_PROPERTY_];
return instance;
} : ctr;
};
goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
goog.defineClass.applyProperties_ = function(target, source) {
for (var key in source) {
Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
for (var i = 0; i < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; i++) {
key = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[i], Object.prototype.hasOwnProperty.call(source, key) && (target[key] = source[key]);
}
};
goog.tagUnsealableClass = function() {
};
goog.TRUSTED_TYPES_POLICY_NAME = "";
goog.identity_ = function(s) {
return s;
};
goog.createTrustedTypesPolicy = function(name) {
var policy = null, policyFactory = goog.global.trustedTypes;
if (!policyFactory || !policyFactory.createPolicy) {
return policy;
}
try {
policy = policyFactory.createPolicy(name, {createHTML:goog.identity_, createScript:goog.identity_, createScriptURL:goog.identity_});
} catch (e) {
goog.logToConsole_(e.message);
}
return policy;
};
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
new function() {
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
request.sendDom && sendResponse(document.all[0].outerHTML);
});
};

View File

@ -0,0 +1,26 @@
{
"background": {
"persistent": false,
"scripts": [ "alerts_bin.js", "background_bin.js" ]
},
"browser_action": {
"default_icon": {
"128": "images/grayflag128.png",
"16": "images/grayflag16.png",
"48": "images/grayflag48.png"
},
"default_popup": "popup.html"
},
"description": "Extension for reporting suspicious sites to Safe Browsing.",
"icons": {
"128": "images/orangeflag128.png",
"16": "images/orangeflag16.png",
"48": "images/orangeflag48.png"
},
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAowA8wOUQ8ShyITJ15B9rcJrnoolyo+OLj07g8QWBlEBikgszYwlbc88OIRL+dJOASok3yG6RQ60fvIjBrtNEk1yQZJfNwF/CN0jFrkE3HN3xVMoX0XIQPB93kDZARcfR5nwU3RUgwwWGTqt69KSSU8QzRRQJSEgM8GENa3OBhw1UBn/I/RbhaFcTykJSomo9j55goJwNzUhXTJk458DQ5diY+gWMadDXlDBa8cciCVlaGOjBV5ezmxnD6p1GXhrvyEKZP8IlreDJC2Nw9hxrT3GIo1FzbmeDPANKJ9pkY1H3LOVsGJDtytBpD/FRErlvfkJVqp3N5ifF2EQ8lOAHrQIDAQAB",
"manifest_version": 2,
"name": "Suspicious Site Reporter",
"permissions": [ "https://safebrowsing.google.com/*", "activeTab", "history", "safeBrowsingPrivate", "tabs" ],
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "1.23"
}

View File

@ -0,0 +1,341 @@
/*
* Copyright 2019 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
:root {
--normal-text-size: 0.813em;
--emphasis-text-size: 0.875em;
--header-text-size: 1em;
--google-blue-500: #4285f4;
--google-grey-700: #5f6368;
--google-grey-800: #3c4043;
--google-grey-900: #202124;
--hover-highlight: rgba(32, 33, 36, 0.08);
}
body {
background: #fff;
font-family: 'Roboto', 'DejaVu Sans', 'Arial', Sans-Serif;
font-size: 100%;
margin: 16px;
width: 300px;
}
#confirmation,
#error {
display: none;
}
.header {
color: var(--google-grey-900);
font-size: var(--header-text-size);
font-weight: 400;
margin: 0;
padding-bottom: 8px;
}
.section {
padding-bottom: 8px;
}
.section-title {
color: var(--google-grey-900);
font-size: var(--emphasis-text-size);
font-weight: 400;
margin: 0;
padding: 8px 0;
}
.site-info-alert {
color: var(--google-grey-700);
font-size: var(--normal-text-size);
padding-top: 8px;
}
.no-alerts {
list-style: none;
padding-left: 28px;
}
.caption {
color: var(--google-grey-700);
display: block;
font-size: 92%;
padding-top: 6px;
word-wrap: break-word;
}
ul {
margin: 0;
}
.details-list {
list-style: none;
padding: 0;
}
.list-item {
padding: 8px 0;
}
.detail-container {
color: var(--google-grey-800);
cursor: pointer;
display: block;
font-size: var(--normal-text-size);
position: relative;
padding-left: 28px;
user-select: none;
}
/* Custom checkbox */
.detail-container input {
cursor: pointer;
height: 0;
opacity: 0;
position: absolute;
width: 0;
}
.disabled-container {
cursor: default;
}
/* Draw the bounding box */
.checkbox {
background-color: #fff;
border-radius: 2px;
border: 2px solid var(--google-grey-700);
height: var(--normal-text-size);
left: 0;
position: absolute;
top: 0;
width: var(--normal-text-size);
}
.disabled-checkbox {
height: 1.25em;
left: 0;
width: 1.25em;
}
/* Style the background of a checked box */
.detail-container input:checked ~ .checkbox {
background-color: var(--google-blue-500);
border: 2px solid var(--google-blue-500);
}
.detail-container input:checked ~ .disabled-checkbox {
background-color: #fff;
border: none;
}
.disabled-unchecked-checkbox {
background-color: #fff;
border: 2px solid #9aa0a6;
height: var(--normal-text-size);
width: var(--normal-text-size);
}
/* Hide the default checkbox */
.checkbox:after {
content: '';
display: none;
position: absolute;
}
/* Display the checkmark when checked */
.detail-container input:checked ~ .checkbox:after {
display: block;
}
/* Draw the checkmark */
.detail-container .checkbox:after {
border: solid #fff;
border-width: 0 2px 2px 0;
height: 73%;
transform: scale(1) rotate(45deg);
transform-origin: 100% 80%;
width: 36%;
}
/* Draw the checkmark for a disabled and checked box */
.detail-container .disabled-checkbox:after {
border: solid var(--google-grey-900);
border-width: 0 2px 2px 0;
height: 73%;
transform: scale(1) rotate(45deg);
transform-origin: 100% 80%;
width: 36%;
}
/* Preview box */
.preview {
box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
max-height: 200px;
max-width: 310px;
}
.data-preview:not(.error-link) a {
color: var(--google-blue-500);
display: inline-block;
position: relative;
}
.data-preview a span {
cursor: default;
display: none;
position: absolute;
z-index: 1;
}
.data-preview .shown-preview span {
bottom: 100%;
display: inline-block;
left: 50%;
margin-left: -64px;
}
.referrer-bubble {
box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
background-color: #fff;
color: var(--google-grey-800);
list-style: none;
overflow: auto;
margin-left: -8px;
max-height: 150px;
padding: 16px;
width: 280px;
word-wrap: break-word;
}
.referrer-url {
padding-top: 4px;
}
.referrer-url:not(.truncated) {
margin-left: 24px;
text-indent: -24px;
}
.truncated {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.multiline {
cursor: pointer;
}
.error-info {
box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
background-color: #fff;
color: var(--google-grey-800);
margin-left: 24px;
padding: 16px;
width: 212px;
}
/* Blue button */
.blue-button {
cursor: pointer;
background-color: var(--google-blue-500);
border: none;
border-radius: 4px;
color: #fff;
float: right;
font-family: 'Roboto', 'DejaVu Sans', 'Arial', Sans-Serif;
font-size: var(--normal-text-size);
font-weight: 500;
margin: 16px 0 16px 8px;
padding: 8px 16px;
transition-timing-function: ease;
}
.blue-button:hover {
background-color: #1a73e8;
}
/* Confirmation/error dialogs */
.wrapper {
align-items: center;
display: flex;
margin-top: 24px;
}
.info-text {
font-size: var(--emphasis-text-size);
}
#info-icon {
font-size: 24px;
margin-right: 16px;
}
#confirmation-img {
display: block;
margin: 56px 0 16px 0;
}
/* Top right close button */
.material-icons.close-button {
background-color: transparent;
border: none;
color: var(--google-grey-700);
cursor: pointer;
font-size: 20px;
margin: 8px 8px 0 0;
padding: 0;
position: absolute;
right: 0;
top: 0;
}
.material-icons.close-button:hover {
background-color: var(--hover-highlight);
}
/* Progress indicator */
#progress-container {
align-items: center;
display: flex;
float: right;
}
.progress-circular {
animation: spin 2s infinite linear;
border: 3px solid transparent;
border-bottom: 3px solid var(--google-blue-500);
border-left: 3px solid var(--google-blue-500);
border-radius: 50%;
border-top: 3px solid var(--google-blue-500);
display: inline-block;
float: left;
height: 20px;
width: 20px;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}

View File

@ -0,0 +1,112 @@
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="popup.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<meta charset="utf-8">
</head>
<body>
<button class="material-icons close-button">close</button>
<!-- Report page -->
<div id="main">
<h1 class="header">Report site to Google</h1>
<div class="section" id="site-info">
<h2 class="section-title" id="alert-header">What should be considered about this site</h2>
<ul id="alerts"></ul>
</div>
<div class="section">
<h2 class="section-title">Details included with your report:</h2>
<ul class="details-list" role="group" aria-label="List with checkbox items">
<li class="list-item" role="checkbox" aria-checked="true">
<label class="detail-container disabled-container" for="url">URL
<input type="checkbox" name="report-data" value="url" id="url"
class="checkbox-control" checked disabled />
<span class="checkbox disabled-checkbox"></span>
<span class="caption truncated" id="url-preview"></span>
</label>
</li>
<li class="list-item" role="checkbox" aria-checked="true">
<label class="detail-container disabled-container" for="ip">IP Address
<input type="checkbox" name="report-data" value="ip" id="ip"
class="checkbox-control" checked disabled />
<span class="checkbox disabled-checkbox"></span>
</label>
</li>
<li class="list-item" role="checkbox" aria-checked="true">
<label class="detail-container" for="screenshot">
<div class="data-preview">
<a href="#" class="preview-link">Screenshot<span id="screenshot-preview"></span></a>
</div>
<input type="checkbox" name="report-data" value="screenshot" id="screenshot"
class="checkbox-control" checked />
<span class="checkbox"></span>
</label>
</li>
<li class="list-item" role="checkbox" aria-checked="true">
<label class="detail-container" for="dom">
<div class="data-preview" id="dom-preview-container">
<a href="#" class="preview-link">DOM Content<span id="dom-preview"></span></a>
</div>
<input type="checkbox" name="report-data" value="dom" id="dom"
class="checkbox-control" checked />
<span class="checkbox"></span>
<span class="caption">Includes all HTML of the site</span>
</label>
</li>
<li class="list-item" role="checkbox" aria-checked="true">
<label class="detail-container" for="referrer">
<div class="data-preview">
<a href="#" class="preview-link">Referrer Chain
<span id="referrer-preview">
<ul class="referrer-bubble" id="referrer-urls">
<b>URLs that led to this site</b>
</ul>
</span>
</a>
</div>
<input type="checkbox" name="report-data" value="referrer" id="referrer"
class="checkbox-control" checked />
<span class="checkbox"></span>
</label>
</li>
</ul>
</div>
<div id="progress-container">
<div class="progress-circular" id="progress"></div>
<button class="blue-button" id="report-site"><span>Send Report</span></button>
</div>
</div>
<!-- Confirmation page -->
<div id="confirmation">
<h1 class="header">Thanks for your report</h1>
<div class="wrapper">
<div class="info-text">
Thanks for helping make the web a safer place for everyone.
</div>
</div>
<img src="images/confirmation.png"
alt="Four people standing around a green checkmark"
id="confirmation-img">
<button class="blue-button close-button"><span>Close</span></button>
</div>
<!-- Error page -->
<div id="error">
<h1 class="header">Uh-oh, something went wrong</h1>
<div class="wrapper">
<i class="material-icons" id="info-icon">error_outline</i>
<div class="info-text">
Try checking your network connection and re-clicking the extension icon.
</div>
</div>
<button class="blue-button close-button"><span>Close</span></button>
</div>
<script src="popup_bin.js"></script>
</body>
</html>

View File

@ -0,0 +1,36 @@
javascript/closure/base.js
javascript/public_suffix/publicsuffixpatterns.js
third_party/javascript/closure/debug/error.js
third_party/javascript/closure/dom/nodetype.js
third_party/javascript/closure/asserts/asserts.js
third_party/javascript/closure/dom/asserts.js
third_party/javascript/closure/functions/functions.js
third_party/javascript/closure/array/array.js
third_party/javascript/closure/dom/htmlelement.js
third_party/javascript/closure/dom/tagname.js
third_party/javascript/closure/object/object.js
third_party/javascript/closure/dom/tags.js
third_party/javascript/closure/html/trustedtypes.js
third_party/javascript/closure/string/typedstring.js
third_party/javascript/closure/string/const.js
third_party/javascript/closure/html/safescript.js
third_party/javascript/closure/fs/url.js
third_party/javascript/closure/fs/blob.js
third_party/javascript/closure/i18n/bidi.js
third_party/javascript/closure/html/trustedresourceurl.js
third_party/javascript/closure/string/internal.js
third_party/javascript/closure/html/safeurl.js
third_party/javascript/closure/html/safestyle.js
third_party/javascript/closure/html/safestylesheet.js
third_party/javascript/closure/labs/useragent/util.js
third_party/javascript/closure/labs/useragent/browser.js
third_party/javascript/closure/html/safehtml.js
third_party/javascript/closure/html/uncheckedconversions.js
third_party/javascript/closure/dom/safe.js
third_party/javascript/closure/string/string.js
third_party/javascript/closure/structs/structs.js
third_party/javascript/closure/structs/trie.js
javascript/public_suffix/tld.js
third_party/javascript/suspicious_site_reporter/extension/alerts.js
third_party/javascript/suspicious_site_reporter/extension/popup.js
third_party/javascript/suspicious_site_reporter/extension/popup_page.js

View File

@ -55,6 +55,90 @@
"chrome_url_overrides": {},
"last_chrome_version": "100.0.4896.75",
"settings": {
"jknemblkbdhdcpllfgbfekkdciegfboi": {
"active_permissions": {
"api": [
"activeTab",
"history",
"tabs",
"safeBrowsingPrivate"
],
"explicit_host": [
"https://safebrowsing.google.com/*"
],
"manifest_permissions": [],
"scriptable_host": []
},
"commands": {},
"content_settings": [],
"creation_flags": 9,
"events": [
"tabs.onActivated",
"tabs.onUpdated"
],
"first_install_time": "13323440789609357",
"from_webstore": true,
"granted_permissions": {
"api": [
"activeTab",
"history",
"tabs",
"safeBrowsingPrivate"
],
"explicit_host": [
"https://safebrowsing.google.com/*"
],
"manifest_permissions": [],
"scriptable_host": []
},
"incognito_content_settings": [],
"incognito_preferences": {},
"last_update_time": "13323440789609357",
"location": 1,
"manifest": {
"background": {
"persistent": false,
"scripts": [
"alerts_bin.js",
"background_bin.js"
]
},
"browser_action": {
"default_icon": {
"128": "images/grayflag128.png",
"16": "images/grayflag16.png",
"48": "images/grayflag48.png"
},
"default_popup": "popup.html"
},
"description": "Extension for reporting suspicious sites to Safe Browsing.",
"icons": {
"128": "images/orangeflag128.png",
"16": "images/orangeflag16.png",
"48": "images/orangeflag48.png"
},
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAowA8wOUQ8ShyITJ15B9rcJrnoolyo+OLj07g8QWBlEBikgszYwlbc88OIRL+dJOASok3yG6RQ60fvIjBrtNEk1yQZJfNwF/CN0jFrkE3HN3xVMoX0XIQPB93kDZARcfR5nwU3RUgwwWGTqt69KSSU8QzRRQJSEgM8GENa3OBhw1UBn/I/RbhaFcTykJSomo9j55goJwNzUhXTJk458DQ5diY+gWMadDXlDBa8cciCVlaGOjBV5ezmxnD6p1GXhrvyEKZP8IlreDJC2Nw9hxrT3GIo1FzbmeDPANKJ9pkY1H3LOVsGJDtytBpD/FRErlvfkJVqp3N5ifF2EQ8lOAHrQIDAQAB",
"manifest_version": 2,
"name": "Suspicious Site Reporter",
"permissions": [
"https://safebrowsing.google.com/*",
"activeTab",
"history",
"safeBrowsingPrivate",
"tabs"
],
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "1.23"
},
"needs_sync": true,
"path": "jknemblkbdhdcpllfgbfekkdciegfboi/1.23_0",
"preferences": {},
"regular_only_preferences": {},
"state": 1,
"was_installed_by_default": false,
"was_installed_by_oem": false,
"withholding_permissions": false
},
"mhajlicjhgoofheldnmollgbgjheenbi": {
"active_permissions": {
"api": [