| 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);
|
| }
|
|
|