| 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
|
|
|