From 8e19a691d914d763093c4b79bf89336e68e5d597 Mon Sep 17 00:00:00 2001 From: Hiranya Jayathilaka Date: Thu, 27 Apr 2017 17:17:17 -0700 Subject: [PATCH 1/3] Calculating the next refresh interval based on the credential's actual expiry time. --- src/main/java/com/google/firebase/FirebaseApp.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/google/firebase/FirebaseApp.java b/src/main/java/com/google/firebase/FirebaseApp.java index 8de82bc8a..77ab7fd93 100644 --- a/src/main/java/com/google/firebase/FirebaseApp.java +++ b/src/main/java/com/google/firebase/FirebaseApp.java @@ -67,7 +67,6 @@ public class FirebaseApp { private static final Map instances = new HashMap<>(); public static final String DEFAULT_APP_NAME = "[DEFAULT]"; - private static final long TOKEN_REFRESH_INTERVAL_MILLIS = TimeUnit.MINUTES.toMillis(55); static final TokenRefresher.Factory DEFAULT_TOKEN_REFRESHER_FACTORY = new TokenRefresher.Factory(); @@ -339,10 +338,13 @@ Task getToken(boolean forceRefresh) { @Override public GetTokenResult then(@NonNull Task task) throws Exception { - GetTokenResult newToken = new GetTokenResult(task.getResult().getAccessToken()); + GoogleOAuthAccessToken googleOAuthToken = task.getResult(); + GetTokenResult newToken = new GetTokenResult(googleOAuthToken.getAccessToken()); GetTokenResult oldToken = currentToken.get(); List listenersCopy = null; if (!newToken.equals(oldToken)) { + long refreshDelay = googleOAuthToken.getExpiryTime() - clock.now() + - TimeUnit.MINUTES.toMillis(5); synchronized (lock) { if (deleted.get()) { return newToken; @@ -353,7 +355,9 @@ public GetTokenResult then(@NonNull Task task) // access to the token refresher. if (currentToken.compareAndSet(oldToken, newToken)) { listenersCopy = ImmutableList.copyOf(authStateListeners); - tokenRefresher.scheduleRefresh(TOKEN_REFRESH_INTERVAL_MILLIS); + if (refreshDelay > 0) { + tokenRefresher.scheduleRefresh(refreshDelay); + } } } } From 0ca899a99a6a2fbba443013462cd02ce1b43a476 Mon Sep 17 00:00:00 2001 From: Hiranya Jayathilaka Date: Thu, 27 Apr 2017 17:37:35 -0700 Subject: [PATCH 2/3] Added log statement --- src/main/java/com/google/firebase/FirebaseApp.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/firebase/FirebaseApp.java b/src/main/java/com/google/firebase/FirebaseApp.java index 77ab7fd93..e9a681df4 100644 --- a/src/main/java/com/google/firebase/FirebaseApp.java +++ b/src/main/java/com/google/firebase/FirebaseApp.java @@ -33,6 +33,7 @@ import com.google.firebase.internal.FirebaseExecutors; import com.google.firebase.internal.FirebaseService; import com.google.firebase.internal.GetTokenResult; +import com.google.firebase.internal.Log; import com.google.firebase.internal.NonNull; import com.google.firebase.internal.Nullable; import com.google.firebase.tasks.Continuation; @@ -343,8 +344,6 @@ public GetTokenResult then(@NonNull Task task) GetTokenResult oldToken = currentToken.get(); List listenersCopy = null; if (!newToken.equals(oldToken)) { - long refreshDelay = googleOAuthToken.getExpiryTime() - clock.now() - - TimeUnit.MINUTES.toMillis(5); synchronized (lock) { if (deleted.get()) { return newToken; @@ -355,8 +354,13 @@ public GetTokenResult then(@NonNull Task task) // access to the token refresher. if (currentToken.compareAndSet(oldToken, newToken)) { listenersCopy = ImmutableList.copyOf(authStateListeners); + long refreshDelay = googleOAuthToken.getExpiryTime() - clock.now() + - TimeUnit.MINUTES.toMillis(5); if (refreshDelay > 0) { tokenRefresher.scheduleRefresh(refreshDelay); + } else { + Log.w("FirebaseApp", "Token validity period is less than 5 " + + "minutes. Not scheduling a proactive refresh event."); } } } From fc26c797fb76305dce44e5fee720bcbf620ab436 Mon Sep 17 00:00:00 2001 From: Hiranya Jayathilaka Date: Fri, 28 Apr 2017 10:07:44 -0700 Subject: [PATCH 3/3] Updated log statement --- src/main/java/com/google/firebase/FirebaseApp.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/google/firebase/FirebaseApp.java b/src/main/java/com/google/firebase/FirebaseApp.java index e9a681df4..2edb6e1f5 100644 --- a/src/main/java/com/google/firebase/FirebaseApp.java +++ b/src/main/java/com/google/firebase/FirebaseApp.java @@ -359,8 +359,9 @@ public GetTokenResult then(@NonNull Task task) if (refreshDelay > 0) { tokenRefresher.scheduleRefresh(refreshDelay); } else { - Log.w("FirebaseApp", "Token validity period is less than 5 " - + "minutes. Not scheduling a proactive refresh event."); + Log.w("FirebaseApp", "Token expiry (" + + googleOAuthToken.getExpiryTime() + ") is less than 5 minutes in the " + + "future. Not scheduling a proactive refresh."); } } }