From ed841044321504e48f012cdd54b3f59e5378c924 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Tue, 21 Jul 2015 13:26:34 -0700 Subject: [PATCH] Bug 1130066 - Be careful about environment changes during early or failed BrowserHealthRecorder init. r=mcomella --HG-- extra : commitid : 8adUOMlVMj4 --- .../base/health/BrowserHealthRecorder.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/mobile/android/base/health/BrowserHealthRecorder.java b/mobile/android/base/health/BrowserHealthRecorder.java index 39b1bfe3add1..7b4e2cd560bd 100644 --- a/mobile/android/base/health/BrowserHealthRecorder.java +++ b/mobile/android/base/health/BrowserHealthRecorder.java @@ -263,6 +263,12 @@ public class BrowserHealthRecorder implements HealthRecorder, GeckoEventListener */ @Override public synchronized void onEnvironmentChanged(final boolean startNewSession, final String sessionEndReason) { + if (!(state == State.INITIALIZING || + state == State.INITIALIZED)) { + Log.w(LOG_TAG, "Not initialized. Ignoring environment change. State is " + state); + return; + } + final int previousEnv = this.env; this.env = -1; try { @@ -295,7 +301,7 @@ public class BrowserHealthRecorder implements HealthRecorder, GeckoEventListener protected synchronized int ensureEnvironment() { if (!(state == State.INITIALIZING || state == State.INITIALIZED)) { - throw new IllegalStateException("Not initialized."); + throw new IllegalStateException("Not initialized. State is " + state); } if (this.env != -1) { @@ -566,10 +572,18 @@ public class BrowserHealthRecorder implements HealthRecorder, GeckoEventListener try { profileCache.completeInitialization(); - if (state == State.INITIALIZING) { - initializeStorage(); - } else { - onEnvironmentChanged(); + synchronized (BrowserHealthRecorder.this) { + switch (state) { + case State.INITIALIZING: + initializeStorage(); + break; + case State.INITIALIZED: + onEnvironmentChanged(); + break; + default: + Log.e(LOG_TAG, "Unexpected state " + state + " when handling late distribution."); + return; + } } } catch (Exception e) { // Well, we tried.