#ifndef COMPONENTS_CRONET_NATIVE_SAMPLE_SAMPLE_URL_REQUEST_CALLBACK_H_
#define COMPONENTS_CRONET_NATIVE_SAMPLE_SAMPLE_URL_REQUEST_CALLBACK_H_
#include <future>
#include <memory>
#include <string>
#include <utility>
#include "cronet_c.h"
class SampleUrlRequestCallback {
public:
SampleUrlRequestCallback();
~SampleUrlRequestCallback();
Cronet_UrlRequestCallbackPtr GetUrlRequestCallback();
void WaitForDone() { is_done_.wait(); }
std::string last_error_message() const { return last_error_message_; }
std::string response_as_string() const { return response_as_string_; }
protected:
void OnRedirectReceived(Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_String newLocationUrl);
void OnResponseStarted(Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info);
void OnReadCompleted(Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_BufferPtr buffer,
uint64_t bytes_read);
void OnSucceeded(Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info);
void OnFailed(Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_ErrorPtr error);
void OnCanceled(Cronet_UrlRequestPtr request, Cronet_UrlResponseInfoPtr info);
void SignalDone(bool success) { done_with_success_.set_value(success); }
static SampleUrlRequestCallback* GetThis(Cronet_UrlRequestCallbackPtr self);
static void OnRedirectReceived(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_String newLocationUrl);
static void OnResponseStarted(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info);
static void OnReadCompleted(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_BufferPtr buffer,
uint64_t bytesRead);
static void OnSucceeded(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info);
static void OnFailed(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info,
Cronet_ErrorPtr error);
static void OnCanceled(Cronet_UrlRequestCallbackPtr self,
Cronet_UrlRequestPtr request,
Cronet_UrlResponseInfoPtr info);
std::string last_error_message_;
std::string response_as_string_;
std::promise<bool> done_with_success_;
std::future<bool> is_done_ = done_with_success_.get_future();
Cronet_UrlRequestCallbackPtr const callback_;
};
#endif