|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 package org.mozilla.gecko.sync.config; |
|
6 |
|
7 import java.net.URI; |
|
8 |
|
9 import org.mozilla.gecko.background.common.log.Logger; |
|
10 import org.mozilla.gecko.sync.SyncConfiguration; |
|
11 import org.mozilla.gecko.sync.net.AuthHeaderProvider; |
|
12 import org.mozilla.gecko.sync.net.BaseResource; |
|
13 import org.mozilla.gecko.sync.net.SyncStorageRecordRequest; |
|
14 import org.mozilla.gecko.sync.net.SyncStorageRequestDelegate; |
|
15 import org.mozilla.gecko.sync.net.SyncStorageResponse; |
|
16 |
|
17 /** |
|
18 * Bug 770785: when an Android Account is deleted, we need to (try to) delete |
|
19 * the associated client GUID from the server's clients table. |
|
20 * <p> |
|
21 * This class provides a static method to do that. |
|
22 */ |
|
23 public class ClientRecordTerminator { |
|
24 public static final String LOG_TAG = "ClientRecTerminator"; |
|
25 |
|
26 protected ClientRecordTerminator() { |
|
27 super(); // Stop this class from being instantiated. |
|
28 } |
|
29 |
|
30 public static void deleteClientRecord(final SyncConfiguration config, final String clientGUID) |
|
31 throws Exception { |
|
32 |
|
33 final String collection = "clients"; |
|
34 final URI wboURI = config.wboURI(collection, clientGUID); |
|
35 |
|
36 // Would prefer to break this out into a self-contained client library. |
|
37 final SyncStorageRecordRequest r = new SyncStorageRecordRequest(wboURI); |
|
38 r.delegate = new SyncStorageRequestDelegate() { |
|
39 @Override |
|
40 public AuthHeaderProvider getAuthHeaderProvider() { |
|
41 return config.getAuthHeaderProvider(); |
|
42 } |
|
43 |
|
44 @Override |
|
45 public String ifUnmodifiedSince() { |
|
46 return null; |
|
47 } |
|
48 |
|
49 @Override |
|
50 public void handleRequestSuccess(SyncStorageResponse response) { |
|
51 Logger.info(LOG_TAG, "Deleted client record with GUID " + clientGUID + " from server."); |
|
52 BaseResource.consumeEntity(response); |
|
53 } |
|
54 |
|
55 @Override |
|
56 public void handleRequestFailure(SyncStorageResponse response) { |
|
57 Logger.warn(LOG_TAG, "Failed to delete client record with GUID " + clientGUID + " from server."); |
|
58 try { |
|
59 Logger.warn(LOG_TAG, "Server error message was: " + response.getErrorMessage()); |
|
60 } catch (Exception e) { |
|
61 // Do nothing. |
|
62 } |
|
63 BaseResource.consumeEntity(response); |
|
64 } |
|
65 |
|
66 @Override |
|
67 public void handleRequestError(Exception ex) { |
|
68 // It could be that we don't have network access when trying |
|
69 // to remove an Account; not much to be done in this situation. |
|
70 Logger.error(LOG_TAG, "Got exception trying to delete client record with GUID " + clientGUID + " from server; ignoring.", ex); |
|
71 } |
|
72 }; |
|
73 |
|
74 r.delete(); |
|
75 } |
|
76 } |