Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/GCDNotificationHandler.java |
diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/GCDNotificationHandler.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/GCDNotificationHandler.java |
index 30197885c0c28bce8f53a2241e7c15f9f64925f8..fdf5de9bda60d48f6d0886e28826801db234b426 100644 |
--- a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/GCDNotificationHandler.java |
+++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/GCDNotificationHandler.java |
@@ -66,6 +66,25 @@ public class GCDNotificationHandler { |
completionHandler.run(); |
} |
+ public void updateCloudMessagesId(final String gcmChannelId, final Runnable completionHandler) { |
+ final InstanceCredential credential = InstanceCredential.get(mServer.getPreferences()); |
+ if (credential == null) return; |
+ |
+ mIOExecutor.submit(new Runnable() { |
+ @Override |
+ public void run() { |
+ try { |
+ mClientFactory.newGCDClient(getAccessToken(credential)) |
+ .patchInstanceGCMChannel(credential.id, gcmChannelId); |
+ } catch (Exception e) { |
+ Log.e(TAG, "Failure when updating GCM channel id", e); |
+ } finally { |
+ completionHandler.run(); |
+ } |
+ } |
+ }); |
+ } |
+ |
private void handle(Notification notification, Runnable completionHandler) { |
if (notification == null) { |
// Unsupported notification type. Ignore. |
@@ -111,6 +130,16 @@ public class GCDNotificationHandler { |
} |
} |
+ private String getAccessToken(InstanceCredential credential) throws IOException { |
+ // Called on IO executor. |
+ // TODO(serya): mOAuthResult should be persistent. |
+ if (mOAuthResult == null) { |
+ mOAuthResult = mClientFactory.newOAuthClient().authenticate( |
+ credential.secret); |
+ } |
+ return mOAuthResult.accessToken; |
+ } |
+ |
private final class Responder implements Runnable { |
private final Command mCommand; |
private final InstanceCredential mCredential; |
@@ -138,13 +167,8 @@ public class GCDNotificationHandler { |
return; |
} |
try { |
- // TODO(serya): mOAuthResult should be persistent. |
- if (mOAuthResult == null) { |
- mOAuthResult = mClientFactory.newOAuthClient().authenticate( |
- mCredential.secret); |
- } |
- mClientFactory.newGCDClient(mOAuthResult.accessToken).patchCommand(mCommand); |
- } catch (IOException e) { |
+ mClientFactory.newGCDClient(getAccessToken(mCredential)).patchCommand(mCommand); |
+ } catch (Exception e) { |
// TODO(serya): Handle authorization exception. |
Log.e(TAG, "Failure when patching command", e); |
} |