Add Suspicious Site Reporter
@ -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"}]}}]
|
@ -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
|
@ -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
|
@ -0,0 +1,2 @@
|
||||
javascript/closure/base.js
|
||||
third_party/javascript/suspicious_site_reporter/extension/content.js
|
@ -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, "<"));
|
||||
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);
|
||||
});
|
||||
};
|
||||
|
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 276 B |
After Width: | Height: | Size: 614 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 276 B |
After Width: | Height: | Size: 578 B |
@ -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"
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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>
|
@ -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
|
@ -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": [
|
||||
|