[tor-commits] [tor-browser/tor-browser-68.9.0esr-9.5-1] Revert "Bug 1633568 - Introduce a installation ping. r=Grisha, a=RyanVM"

sysrqb at torproject.org sysrqb at torproject.org
Thu May 28 17:58:03 UTC 2020


commit 7f05e7ab2f1badfd0108d9bf0a6ef34d28a62b87
Author: Matthew Finkel <sysrqb at torproject.org>
Date:   Thu May 28 17:55:04 2020 +0000

    Revert "Bug 1633568 - Introduce a installation ping. r=Grisha, a=RyanVM"
    
    This reverts commit 7163fd7d989bcf114b43cba342f48639024d1141.
---
 .../base/java/org/mozilla/gecko/BrowserApp.java    |   5 +-
 .../TelemetryInstallationPingDelegate.java         | 128 --------------
 .../TelemetryInstallationPingBuilder.java          | 186 ---------------------
 .../stores/TelemetryInstallationPingStore.java     | 102 -----------
 4 files changed, 1 insertion(+), 420 deletions(-)

diff --git a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
index 6ce56bcc7e68..2efae19ca7c5 100644
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -146,7 +146,6 @@ import org.mozilla.gecko.tabs.TabHistoryFragment;
 import org.mozilla.gecko.tabs.TabHistoryPage;
 import org.mozilla.gecko.tabs.TabsPanel;
 import org.mozilla.gecko.telemetry.TelemetryCorePingDelegate;
-import org.mozilla.gecko.telemetry.TelemetryInstallationPingDelegate;
 import org.mozilla.gecko.telemetry.TelemetryUploadService;
 import org.mozilla.gecko.telemetry.measurements.SearchCountMeasurements;
 import org.mozilla.gecko.telemetry.TelemetryActivationPingDelegate;
@@ -336,7 +335,6 @@ public class BrowserApp extends GeckoApp
 
     private final TelemetryCorePingDelegate mTelemetryCorePingDelegate = new TelemetryCorePingDelegate();
     private final TelemetryActivationPingDelegate mTelemetryActivationPingDelegate = new TelemetryActivationPingDelegate();
-    private final TelemetryInstallationPingDelegate mTelemetryInstallationPingDelegate = new TelemetryInstallationPingDelegate();
 
     private final List<BrowserAppDelegate> delegates = Collections.unmodifiableList(Arrays.asList(
             new ScreenshotDelegate(),
@@ -344,9 +342,8 @@ public class BrowserApp extends GeckoApp
             new ReaderViewBookmarkPromotion(),
             mTelemetryCorePingDelegate,
             mTelemetryActivationPingDelegate,
-            mTelemetryInstallationPingDelegate,
             new OfflineTabStatusDelegate(),
-            new AdjustBrowserAppDelegate(mTelemetryCorePingDelegate, mTelemetryInstallationPingDelegate)
+            new AdjustBrowserAppDelegate(mTelemetryCorePingDelegate)
     ));
 
     @NonNull
diff --git a/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryInstallationPingDelegate.java b/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryInstallationPingDelegate.java
deleted file mode 100644
index 55657a0d0efa..000000000000
--- a/mobile/android/base/java/org/mozilla/gecko/telemetry/TelemetryInstallationPingDelegate.java
+++ /dev/null
@@ -1,128 +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/.
- */
-
-package org.mozilla.gecko.telemetry;
-
-import android.support.annotation.NonNull;
-import android.util.Log;
-
-import com.adjust.sdk.AdjustAttribution;
-
-import org.mozilla.gecko.BrowserApp;
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.adjust.AttributionHelperListener;
-import org.mozilla.gecko.delegates.BrowserAppDelegate;
-import org.mozilla.gecko.telemetry.pingbuilders.TelemetryInstallationPingBuilder;
-import org.mozilla.gecko.telemetry.pingbuilders.TelemetryInstallationPingBuilder.PingReason;
-import org.mozilla.gecko.telemetry.schedulers.TelemetryUploadAllPingsImmediatelyScheduler;
-import org.mozilla.gecko.telemetry.stores.TelemetryInstallationPingStore;
-import org.mozilla.gecko.util.ThreadUtils;
-
-import java.io.IOException;
-
-public class TelemetryInstallationPingDelegate
-        extends BrowserAppDelegate
-        implements AttributionHelperListener {
-
-    private static final String LOGTAG = "InstallPingDelegate";
-
-    @Override
-    public void onStart(BrowserApp browserApp) {
-        if (!TelemetryUploadService.isUploadEnabledByAppConfig(browserApp)) {
-            return;
-        }
-
-        // Keep everything off of main thread. Don't need to burden it with telemetry.
-        ThreadUtils.postToBackgroundThread(() -> {
-            TelemetryInstallationPingStore store;
-            try {
-                store = new TelemetryInstallationPingStore();
-            } catch (IllegalStateException e) {
-                // The store constructor might throw an IllegalStateException if it cannot access
-                // the store directory.
-                // This has been observed on CI mochitests, not sure about if this would also reproduce
-                // in the real world.
-                // We'll retry at the next app start.
-                Log.w(LOGTAG, "Cannot access ping's storage directory. Will retry later");
-                return;
-            }
-
-            // First allow for stored pings to be re-uploaded if the previous upload did not succeed.
-            // (A successful upload would delete the pings persisted to disk)
-            if (store.getCount() != 0) {
-                store.queuePingsForUpload(new TelemetryUploadAllPingsImmediatelyScheduler());
-            }
-
-            // Only need one of each pings. Check if we should create a new one.
-            if (!TelemetryInstallationPingStore.hasLightPingBeenQueuedForUpload()) {
-                TelemetryOutgoingPing ping = new TelemetryInstallationPingBuilder()
-                        .setReason(PingReason.APP_STARTED)
-                        .build();
-
-                try {
-                    store.storePing(ping);
-                    store.queuePingsForUpload(new TelemetryUploadAllPingsImmediatelyScheduler());
-                    store.setLightPingQueuedForUpload();
-                } catch (IOException e) {
-                    // #storePing() might throw in the process of persisting to disk.
-                    // Nothing to do. At the next app start we'll try again to create a new ping,
-                    // store and upload that.
-                    Log.w(LOGTAG, "Could not store ping. Will try again later");
-                }
-            }
-        });
-    }
-
-    @Override
-    public void onAttributionChanged(@NonNull final AdjustAttribution attribution) {
-        if (!TelemetryUploadService.isUploadEnabledByAppConfig(GeckoAppShell.getApplicationContext())) {
-            return;
-        }
-
-        // Keep everything off of main thread. Don't need to burden it with telemetry.
-        ThreadUtils.postToBackgroundThread(() -> {
-            TelemetryInstallationPingStore store;
-            try {
-                store = new TelemetryInstallationPingStore();
-            } catch (IllegalStateException e) {
-                // The store constructor might throw an IllegalStateException if it cannot access
-                // the store directory.
-                // This has been observed on CI mochitests, not sure about if this would also reproduce
-                // in the real world.
-                // Since the attributionChanged callback only fire once IRL this would mean we won't
-                // be sending the "adjust-available" ping.
-                Log.w(LOGTAG, "Cannot access ping's storage directory. " +
-                        "Cannot send the \"adjust-available\" ping");
-                return;
-            }
-
-            // First allow for stored pings to be re-uploaded if the previous upload did not succeed.
-            // (A successful upload would delete the pings persisted to disk)
-            if (store.getCount() != 0) {
-                store.queuePingsForUpload(new TelemetryUploadAllPingsImmediatelyScheduler());
-            }
-
-            // It may be possible that in the app's lifetime Adjust campaigns are changed.
-            // Sanity check that the "adjust-available" ping has not yet been send.
-            if (!TelemetryInstallationPingStore.hasFullPingBeenQueuedForUpload()) {
-                TelemetryOutgoingPing ping = new TelemetryInstallationPingBuilder()
-                        .setReason(PingReason.ADJUST_AVAILABLE)
-                        .setAdjustProperties(attribution)
-                        .build();
-
-                try {
-                    store.storePing(ping);
-                    store.queuePingsForUpload(new TelemetryUploadAllPingsImmediatelyScheduler());
-                    store.setFullPingQueuedForUpload();
-                } catch (IOException e) {
-                    // #storePing() might throw in the process of persisting to disk.
-                    // Nothing we can do. The "adjust-available" ping is lost.
-                    Log.w(LOGTAG, "Could not store the \"adjust-available\" ping");
-                }
-            }
-        });
-    }
-}
diff --git a/mobile/android/base/java/org/mozilla/gecko/telemetry/pingbuilders/TelemetryInstallationPingBuilder.java b/mobile/android/base/java/org/mozilla/gecko/telemetry/pingbuilders/TelemetryInstallationPingBuilder.java
deleted file mode 100644
index 24f94c1d06a3..000000000000
--- a/mobile/android/base/java/org/mozilla/gecko/telemetry/pingbuilders/TelemetryInstallationPingBuilder.java
+++ /dev/null
@@ -1,186 +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/.
- */
-
-package org.mozilla.gecko.telemetry.pingbuilders;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.util.Log;
-
-import com.adjust.sdk.AdjustAttribution;
-
-import org.mozilla.gecko.AppConstants;
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.GeckoSharedPrefs;
-import org.mozilla.gecko.GeckoThread;
-import org.mozilla.gecko.Locales;
-import org.mozilla.gecko.util.DateUtil;
-import org.mozilla.gecko.util.HardwareUtils;
-
-import java.lang.reflect.Method;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.Locale;
-
-public class TelemetryInstallationPingBuilder extends TelemetryPingBuilder {
-    private static final String LOGTAG = "InstallPingBuilder";
-
-    public enum PingReason {
-        APP_STARTED("app-started"),
-        ADJUST_AVAILABLE("adjust-available");
-
-        PingReason(String reason) {
-            this.value = reason;
-        }
-
-        public final String value;
-    }
-
-    private static final String PING_TYPE = "installation";
-    private static final int PING_FORMAT_VERSION = 1;
-
-    private static final String PREF_KEY_SEQ_NUMBER = "installationPingSeqNumber";
-
-    private static final String PING_VERSION = "v";
-    private static final String REASON = "reason";
-    private static final String PING_QUEUED_TIMES = "seq";
-    private static final String CLIENT_ID = "client_id";
-    private static final String DEVICE_ID = "device_id";
-    private static final String LOCALE = "locale";
-    private static final String OS_NAME = "os";
-    private static final String OS_VERSION = "osversion";
-    private static final String DEVICE_MANUFACTURER = "manufacturer";
-    private static final String DEVICE_MODEL = "model";
-    private static final String DEVICE_ABI = "arch";
-    private static final String PROFILE_DATE = "profile_date";
-    private static final String PING_CREATION_TIME = "created";
-    private static final String TIMEZONE_OFFSET = "tz";
-    private static final String APP_NAME = "app_name";
-    private static final String RELEASE_CHANNEL = "channel";
-    private static final String ADJUST_CAMPAIGN = "campaign";
-    private static final String ADJUST_ADGROUP = "adgroup";
-    private static final String ADJUST_CREATIVE = "creative";
-    private static final String ADJUST_NETWORK = "network";
-
-    public TelemetryInstallationPingBuilder() {
-        super(UNIFIED_TELEMETRY_VERSION, false);
-        setPayloadConstants();
-    }
-
-    @Override
-    public String getDocType() {
-        return PING_TYPE;
-    }
-
-    @Override
-    public String[] getMandatoryFields() {
-        return new String[]{
-                PING_VERSION,
-                REASON,
-                PING_QUEUED_TIMES,
-                CLIENT_ID,
-                DEVICE_ID,
-                LOCALE,
-                OS_NAME,
-                OS_VERSION,
-                DEVICE_MANUFACTURER,
-                DEVICE_MODEL,
-                DEVICE_ABI,
-                PROFILE_DATE,
-                PING_CREATION_TIME,
-                TIMEZONE_OFFSET,
-                APP_NAME,
-                RELEASE_CHANNEL,
-        };
-    }
-
-    public @NonNull TelemetryInstallationPingBuilder setReason(@NonNull PingReason reason) {
-        payload.put(REASON, reason.value);
-
-        return this;
-    }
-
-    public @NonNull TelemetryInstallationPingBuilder setAdjustProperties(@NonNull final AdjustAttribution attribution) {
-        payload.put(ADJUST_CAMPAIGN, attribution.campaign);
-        payload.put(ADJUST_ADGROUP, attribution.adgroup);
-        payload.put(ADJUST_CREATIVE, attribution.creative);
-        payload.put(ADJUST_NETWORK, attribution.network);
-
-        return this;
-    }
-
-    private void setPayloadConstants() {
-        payload.put(PING_VERSION, PING_FORMAT_VERSION);
-        payload.put(PING_QUEUED_TIMES, incrementAndGetQueueTimes());
-        payload.put(CLIENT_ID, getGeckoClientID());
-        payload.put(DEVICE_ID, getAdvertisingId());
-        payload.put(LOCALE, Locales.getLanguageTag(Locale.getDefault()));
-        payload.put(OS_NAME, TelemetryPingBuilder.OS_NAME);
-        payload.put(OS_VERSION, Integer.toString(Build.VERSION.SDK_INT));
-        payload.put(DEVICE_MANUFACTURER, Build.MANUFACTURER);
-        payload.put(DEVICE_MODEL, Build.MODEL);
-        payload.put(DEVICE_ABI, HardwareUtils.getRealAbi());
-        payload.put(PROFILE_DATE, getGeckoProfileCreationDate());
-        payload.put(PING_CREATION_TIME, new SimpleDateFormat("yyyy-MM-dd", Locale.US).format(new Date()));
-        payload.put(TIMEZONE_OFFSET, DateUtil.getTimezoneOffsetInMinutesForGivenDate(Calendar.getInstance()));
-        payload.put(APP_NAME, AppConstants.MOZ_APP_BASENAME);
-        payload.put(RELEASE_CHANNEL, AppConstants.MOZ_UPDATE_CHANNEL);
-    }
-
-    private @Nullable String getGeckoClientID() {
-        // zero-ed Gecko profile that respects the expected format "8-4-4-4-12" chars
-        String clientID = "00000000-0000-0000-0000-000000000000";
-        try {
-            clientID = GeckoThread.getActiveProfile().getClientId();
-        } catch (Exception e) {
-            Log.w(LOGTAG, "Could not get Gecko Client ID", e);
-        }
-
-        return clientID;
-    }
-
-    private @Nullable String getAdvertisingId() {
-        String advertisingId = null;
-        try {
-            final Class<?> clazz = Class.forName("org.mozilla.gecko.advertising.AdvertisingUtil");
-            final Method getAdvertisingId = clazz.getMethod("getAdvertisingId", Context.class);
-            advertisingId = (String) getAdvertisingId.invoke(clazz, GeckoAppShell.getApplicationContext());
-        } catch (Exception e) {
-            Log.w(LOGTAG, "Could not get advertising ID", e);
-        }
-
-        return advertisingId;
-    }
-
-    // Ensure sequential increment and return in all instances.
-    private static synchronized int incrementAndGetQueueTimes() {
-        final SharedPreferences sharedPrefs = GeckoSharedPrefs.forProfile(GeckoAppShell.getApplicationContext());
-
-        // 1-based, always incremented
-        final int incrementedSeqNumber = sharedPrefs.getInt(PREF_KEY_SEQ_NUMBER, 0) + 1;
-        sharedPrefs.edit().putInt(PREF_KEY_SEQ_NUMBER, incrementedSeqNumber).apply();
-
-        return incrementedSeqNumber;
-    }
-
-    private int getGeckoProfileCreationDate() {
-        // The method returns days since epoch. An int is enough.
-        int date = 0;
-        try {
-            date = TelemetryActivationPingBuilder.getProfileCreationDate(
-                    GeckoAppShell.getApplicationContext(),
-                    GeckoThread.getActiveProfile()).intValue();
-        } catch (NullPointerException e) {
-            Log.w(LOGTAG, "Could not get Gecko profile creation date", e);
-        }
-
-        return date;
-    }
-}
diff --git a/mobile/android/base/java/org/mozilla/gecko/telemetry/stores/TelemetryInstallationPingStore.java b/mobile/android/base/java/org/mozilla/gecko/telemetry/stores/TelemetryInstallationPingStore.java
deleted file mode 100644
index c6aacab25e73..000000000000
--- a/mobile/android/base/java/org/mozilla/gecko/telemetry/stores/TelemetryInstallationPingStore.java
+++ /dev/null
@@ -1,102 +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/.
- */
-
-package org.mozilla.gecko.telemetry.stores;
-
-import android.content.SharedPreferences;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.support.annotation.NonNull;
-
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.GeckoSharedPrefs;
-import org.mozilla.gecko.GeckoThread;
-import org.mozilla.gecko.telemetry.schedulers.TelemetryUploadAllPingsImmediatelyScheduler;
-
-import java.io.File;
-
-public class TelemetryInstallationPingStore extends TelemetryJSONFilePingStore {
-    private static final String PREF_KEY_WAS_LIGHT_PING_STORED = "wasLightInstallationPingStored";
-    private static final String PREF_KEY_WAS_FULL_PING_STORED = "wasFullInstallationPingStored";
-    private static final String INSTALLATION_PING_STORE_DIR = "installation_ping";
-    private static final String DEFAULT_PROFILE = "default";
-
-    public TelemetryInstallationPingStore() {
-        super(getInstallationPingStoreDir(), getCurrentProfileName());
-    }
-
-    public TelemetryInstallationPingStore(@NonNull final File storeDir, @NonNull final String profileName) {
-        super(storeDir, profileName);
-    }
-
-    @Override
-    public void maybePrunePings() {
-        // no-op
-        // Successfully uploaded pings will be deleted in onUploadAttemptComplete(..).
-    }
-
-    public void queuePingsForUpload(@NonNull final TelemetryUploadAllPingsImmediatelyScheduler scheduler) {
-        scheduler.scheduleUpload(GeckoAppShell.getApplicationContext(), this);
-    }
-
-    public static boolean hasLightPingBeenQueuedForUpload() {
-        return getSharedPrefs().getBoolean(PREF_KEY_WAS_LIGHT_PING_STORED, false);
-    }
-
-    public static boolean hasFullPingBeenQueuedForUpload() {
-        return getSharedPrefs().getBoolean(PREF_KEY_WAS_FULL_PING_STORED, false);
-    }
-
-    public void setLightPingQueuedForUpload() {
-        getSharedPrefs().edit().putBoolean(PREF_KEY_WAS_LIGHT_PING_STORED, true).apply();
-    }
-
-    public void setFullPingQueuedForUpload() {
-        getSharedPrefs().edit().putBoolean(PREF_KEY_WAS_FULL_PING_STORED, true).apply();
-    }
-
-    private static @NonNull SharedPreferences getSharedPrefs() {
-        return GeckoSharedPrefs.forProfile(GeckoAppShell.getApplicationContext());
-    }
-
-    private static @NonNull File getInstallationPingStoreDir() {
-        return GeckoAppShell.getApplicationContext().getFileStreamPath(INSTALLATION_PING_STORE_DIR);
-    }
-
-    private static @NonNull String getCurrentProfileName() {
-        return GeckoThread.getActiveProfile() != null ?
-                GeckoThread.getActiveProfile().getName() :
-                DEFAULT_PROFILE;
-    }
-
-
-    // Class needs to be Parcelable as it will be passed through Intents
-    public static final Parcelable.Creator<TelemetryInstallationPingStore> CREATOR =
-            new Parcelable.Creator<TelemetryInstallationPingStore>() {
-
-        @Override
-        public TelemetryInstallationPingStore createFromParcel(final Parcel source) {
-            final String storeDirPath = source.readString();
-            final String profileName = source.readString();
-            return new TelemetryInstallationPingStore(new File(storeDirPath), profileName);
-        }
-
-        @Override
-        public TelemetryInstallationPingStore[] newArray(final int size) {
-            return new TelemetryInstallationPingStore[size];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(final Parcel dest, final int flags) {
-        super.writeToParcel(dest, flags);
-    }
-}





More information about the tor-commits mailing list