Index: google_apis/gcm/engine/gcm_unregistration_request_handler.cc |
diff --git a/google_apis/gcm/engine/gcm_unregistration_request_handler.cc b/google_apis/gcm/engine/gcm_unregistration_request_handler.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..86f473b708855b7838b673b3a5f2a99c939f342c |
--- /dev/null |
+++ b/google_apis/gcm/engine/gcm_unregistration_request_handler.cc |
@@ -0,0 +1,68 @@ |
+// 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_handler.h" |
+ |
+#include "google_apis/gcm/base/gcm_util.h" |
+#include "net/url_request/url_fetcher.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 |
+ |
+GCMUnregistrationRequestHandler::GCMUnregistrationRequestHandler( |
+ const std::string& app_id) |
+ : app_id_(app_id) { |
+} |
+ |
+GCMUnregistrationRequestHandler::~GCMUnregistrationRequestHandler() {} |
+ |
+void GCMUnregistrationRequestHandler::BuildRequestBody(std::string* body){ |
+ BuildFormEncoding(kUnregistrationCallerKey, kUnregistrationCallerValue, body); |
+} |
+ |
+UnregistrationRequest::Status GCMUnregistrationRequestHandler::ParseResponse( |
+ const net::URLFetcher* source) { |
+ std::string response; |
+ if (!source->GetResponseAsString(&response)) { |
+ DVLOG(1) << "Failed to get response body."; |
+ return UnregistrationRequest::NO_RESPONSE_BODY; |
+ } |
+ |
+ 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); |
+ return deleted_app_id == app_id_ ? |
+ UnregistrationRequest::SUCCESS : |
+ UnregistrationRequest::INCORRECT_APP_ID; |
+ } |
+ |
+ if (response.find(kErrorPrefix) != std::string::npos) { |
+ std::string error = response.substr( |
+ response.find(kErrorPrefix) + arraysize(kErrorPrefix) - 1); |
+ return error == kInvalidParameters ? |
+ UnregistrationRequest::INVALID_PARAMETERS : |
+ UnregistrationRequest::UNKNOWN_ERROR; |
+ } |
+ |
+ DVLOG(1) << "Not able to parse a meaningful output from response body." |
+ << response; |
+ return UnregistrationRequest::RESPONSE_PARSING_FAILED; |
+} |
+ |
+} // namespace gcm |