summaryrefslogtreecommitdiff
path: root/application/basilisk/modules/AttributionCode.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'application/basilisk/modules/AttributionCode.jsm')
-rw-r--r--application/basilisk/modules/AttributionCode.jsm123
1 files changed, 0 insertions, 123 deletions
diff --git a/application/basilisk/modules/AttributionCode.jsm b/application/basilisk/modules/AttributionCode.jsm
deleted file mode 100644
index 243e60dbae..0000000000
--- a/application/basilisk/modules/AttributionCode.jsm
+++ /dev/null
@@ -1,123 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-#filter substitution
-
-this.EXPORTED_SYMBOLS = ["AttributionCode"];
-
-const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "OS",
- "resource://gre/modules/osfile.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
- "resource://gre/modules/Services.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Task",
- "resource://gre/modules/Task.jsm");
-
-const ATTR_CODE_MAX_LENGTH = 200;
-const ATTR_CODE_KEYS_REGEX = /^source|medium|campaign|content$/;
-const ATTR_CODE_VALUE_REGEX = /[a-zA-Z0-9_%\\-\\.\\(\\)]*/;
-const ATTR_CODE_FIELD_SEPARATOR = "%26"; // URL-encoded &
-const ATTR_CODE_KEY_VALUE_SEPARATOR = "%3D"; // URL-encoded =
-
-let gCachedAttrData = null;
-
-/**
- * Returns an nsIFile for the file containing the attribution data.
- */
-function getAttributionFile() {
- let file = Services.dirsvc.get("LocalAppData", Ci.nsIFile);
- // appinfo does not exist in xpcshell, so we need defaults.
- file.append(Services.appinfo.vendor || "mozilla");
- file.append("@MOZ_APP_NAME@");
- file.append("postSigningData");
- return file;
-}
-
-/**
- * Returns an object containing a key-value pair for each piece of attribution
- * data included in the passed-in attribution code string.
- * If the string isn't a valid attribution code, returns an empty object.
- */
-function parseAttributionCode(code) {
- if (code.length > ATTR_CODE_MAX_LENGTH) {
- return {};
- }
-
- let isValid = true;
- let parsed = {};
- for (let param of code.split(ATTR_CODE_FIELD_SEPARATOR)) {
- let [key, value] = param.split(ATTR_CODE_KEY_VALUE_SEPARATOR, 2);
- if (key && ATTR_CODE_KEYS_REGEX.test(key)) {
- if (value && ATTR_CODE_VALUE_REGEX.test(value)) {
- parsed[key] = value;
- }
- } else {
- isValid = false;
- break;
- }
- }
- return isValid ? parsed : {};
-}
-
-var AttributionCode = {
- /**
- * Reads the attribution code, either from disk or a cached version.
- * Returns a promise that fulfills with an object containing the parsed
- * attribution data if the code could be read and is valid,
- * or an empty object otherwise.
- */
- getAttrDataAsync() {
- return Task.spawn(function*() {
- if (gCachedAttrData != null) {
- return gCachedAttrData;
- }
-
- let code = "";
- try {
- let bytes = yield OS.File.read(getAttributionFile().path);
- let decoder = new TextDecoder();
- code = decoder.decode(bytes);
- } catch (ex) {
- // The attribution file may already have been deleted,
- // or it may have never been installed at all;
- // failure to open or read it isn't an error.
- }
-
- gCachedAttrData = parseAttributionCode(code);
- return gCachedAttrData;
- });
- },
-
- /**
- * Deletes the attribution data file.
- * Returns a promise that resolves when the file is deleted,
- * or if the file couldn't be deleted (the promise is never rejected).
- */
- deleteFileAsync() {
- return Task.spawn(function*() {
- try {
- yield OS.File.remove(getAttributionFile().path);
- } catch (ex) {
- // The attribution file may already have been deleted,
- // or it may have never been installed at all;
- // failure to delete it isn't an error.
- }
- });
- },
-
- /**
- * Clears the cached attribution code value, if any.
- * Does nothing if called from outside of an xpcshell test.
- */
- _clearCache() {
- let env = Cc["@mozilla.org/process/environment;1"]
- .getService(Ci.nsIEnvironment);
- if (env.exists("XPCSHELL_TEST_PROFILE_DIR")) {
- gCachedAttrData = null;
- }
- },
-};