blob: 53a3d1c37f4a519d7fead60751742c8eeaff58e3 [file] [log] [blame]
// Copyright 2014 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.
#ifndef COMPONENTS_COPRESENCE_RPC_HTTP_POST_H_
#define COMPONENTS_COPRESENCE_RPC_HTTP_POST_H_
#include <string>
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "net/url_request/url_fetcher_delegate.h"
namespace google {
namespace protobuf {
class MessageLite;
}
}
namespace net {
class URLRequestContextGetter;
}
namespace copresence {
// This class handles all Apiary calls to the Copresence server.
// It configures the HTTP request appropriately and reports any errors.
// If deleted, the HTTP request is cancelled.
//
// TODO(ckehoe): Add retry logic.
class HttpPost : public net::URLFetcherDelegate {
public:
// Callback to receive the HTTP status code and body of the response
// (if any). A pointer to this HttpPost object is also passed along.
typedef base::Callback<void(int, const std::string&)>
ResponseCallback;
// Create a request to the Copresence server.
// |url_context_getter| is owned by the caller,
// and the context it provides must be available until the request completes.
HttpPost(net::URLRequestContextGetter* url_context_getter,
const std::string& server_host,
const std::string& rpc_name,
const std::string& tracing_token,
std::string api_key, // If blank, we overwrite with a default.
const google::protobuf::MessageLite& request_proto);
// HTTP requests are cancelled on delete.
virtual ~HttpPost();
// Send an HttpPost request.
void Start(const ResponseCallback& response_callback);
private:
static const int kUrlFetcherId = 1;
static const char kApiKeyField[];
static const char kTracingTokenField[];
friend class HttpPostTest;
// Overridden from net::URLFetcherDelegate.
virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
ResponseCallback response_callback_;
scoped_ptr<net::URLFetcher> url_fetcher_;
DISALLOW_COPY_AND_ASSIGN(HttpPost);
};
} // namespace copresence
#endif // COMPONENTS_COPRESENCE_RPC_HTTP_POST_H_