// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_NETWORK_NET_POSTER_H_
#define COBALT_NETWORK_NET_POSTER_H_

#include <string>

#include "base/memory/scoped_vector.h"
#include "base/threading/thread_checker.h"
#include "cobalt/network_bridge/net_poster.h"
#include "googleurl/src/gurl.h"
#include "net/url_request/url_fetcher.h"
#include "net/url_request/url_fetcher_delegate.h"

namespace cobalt {
namespace network {
class NetworkModule;

// Simple class to manage some fire-and-forget POST requests.
class NetPoster : public network_bridge::NetPoster, net::URLFetcherDelegate {
 public:
  explicit NetPoster(NetworkModule* network_module);
  ~NetPoster();

  // POST the given data to the URL. No notification will be given if this
  // succeeds or fails.
  // content_type should reflect the mime type of data, e.g. "application/json".
  // data is the data to upload. May be empty.
  void Send(const GURL& url, const std::string& content_type,
            const std::string& data) OVERRIDE;

 private:
  // From net::URLFetcherDelegate
  void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;

  NetworkModule* network_module_;
  ScopedVector<net::URLFetcher> fetchers_;
  base::ThreadChecker thread_checker_;

  DISALLOW_COPY_AND_ASSIGN(NetPoster);
};

}  // namespace network
}  // namespace cobalt

#endif  // COBALT_NETWORK_NET_POSTER_H_
