Index: google_apis/gcm/engine/gcm_unregistration_request.cc |
diff --git a/google_apis/gcm/engine/gcm_unregistration_request.cc b/google_apis/gcm/engine/gcm_unregistration_request.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1572e998847bb602c90b5b59442bc4759ce616b9 |
--- /dev/null |
+++ b/google_apis/gcm/engine/gcm_unregistration_request.cc |
@@ -0,0 +1,85 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "google_apis/gcm/engine/gcm_unregistration_request.h" |
+ |
+#include "google_apis/gcm/base/gcm_util.h" |
+#include "net/url_request/url_fetcher.h" |
+#include "net/url_request/url_request_context_getter.h" |
+ |
+namespace gcm { |
+ |
+namespace { |
+ |
+// Request constants. |
+const char kUnregistrationCallerKey[] = "gcm_unreg_caller"; |
+// We are going to set the value to "false" in order to forcefully unregister |
+// the application. |
+const char kUnregistrationCallerValue[] = "false"; |
+ |
+// Response constants. |
+const char kDeletedPrefix[] = "deleted="; |
+const char kErrorPrefix[] = "Error="; |
+const char kInvalidParameters[] = "INVALID_PARAMETERS"; |
+ |
+} // namespace |
+ |
+GCMUnregistrationRequest::GCMUnregistrationRequest( |
+ const GURL& registration_url, |
+ const RequestInfo& request_info, |
+ const net::BackoffEntry::Policy& backoff_policy, |
+ const UnregistrationCallback& callback, |
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter, |
+ GCMStatsRecorder* recorder) |
+ : UnregistrationRequest(registration_url, |
+ request_info, |
+ backoff_policy, |
+ callback, |
+ request_context_getter, |
+ recorder) { |
+} |
+ |
+GCMUnregistrationRequest::~GCMUnregistrationRequest() {} |
+ |
+void GCMUnregistrationRequest::BuildRequestBody(std::string* body){ |
+ UnregistrationRequest::BuildRequestBody(body); |
+ |
+ BuildFormEncoding(kUnregistrationCallerKey, kUnregistrationCallerValue, body); |
+} |
+ |
+bool GCMUnregistrationRequest::ParseResponse( |
+ const net::URLFetcher* source, |
+ UnregistrationRequest::Status* status) { |
+ if (UnregistrationRequest::ParseResponse(source, status)) |
+ return true; |
+ |
+ std::string response; |
+ if (!source->GetResponseAsString(&response)) { |
+ DVLOG(1) << "Failed to get response body."; |
+ *status = NO_RESPONSE_BODY; |
+ return true; |
+ } |
+ |
+ DVLOG(1) << "Parsing unregistration response."; |
+ if (response.find(kDeletedPrefix) != std::string::npos) { |
+ std::string deleted_app_id = response.substr( |
+ response.find(kDeletedPrefix) + arraysize(kDeletedPrefix) - 1); |
+ *status = deleted_app_id == app_id() ? SUCCESS : INCORRECT_APP_ID; |
+ return true; |
+ } |
+ |
+ if (response.find(kErrorPrefix) != std::string::npos) { |
+ std::string error = response.substr( |
+ response.find(kErrorPrefix) + arraysize(kErrorPrefix) - 1); |
+ *status = error == kInvalidParameters? INVALID_PARAMETERS : UNKNOWN_ERROR; |
+ return true; |
+ } |
+ |
+ DVLOG(1) << "Not able to parse a meaningful output from response body." |
+ << response; |
+ *status = RESPONSE_PARSING_FAILED; |
+ return true; |
+} |
+ |
+} // namespace gcm |