blob: f27ca0149df44205f229bc46d6f730aeca4eb9e8 [file] [log] [blame]
// Copyright 2016 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 REMOTING_CLIENT_PLUGIN_PEPPER_URL_LOADER_H_
#define REMOTING_CLIENT_PLUGIN_PEPPER_URL_LOADER_H_
#include "base/callback.h"
#include "net/traffic_annotation/network_traffic_annotation.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/url_loader.h"
#include "ppapi/cpp/url_request_info.h"
#include "ppapi/utility/completion_callback_factory.h"
#include "remoting/base/url_request.h"
namespace remoting {
// UrlRequest implementation that uses URLLoader provided by Pepper.
class PepperUrlRequest : public UrlRequest {
public:
PepperUrlRequest(pp::InstanceHandle pp_instance,
UrlRequest::Type type,
const std::string& url,
const net::NetworkTrafficAnnotationTag& traffic_annotation);
~PepperUrlRequest() override;
// UrlRequest interface.
void AddHeader(const std::string& value) override;
void SetPostData(const std::string& content_type,
const std::string& data) override;
void Start(const OnResultCallback& on_result_callback) override;
private:
void OnUrlOpened(int32_t result);
void ReadResponseBody();
void OnResponseBodyRead(int32_t result);
pp::URLRequestInfo request_info_;
pp::URLLoader url_loader_;
std::string url_;
std::string headers_;
OnResultCallback on_result_callback_;
std::string response_;
pp::CompletionCallbackFactory<PepperUrlRequest> callback_factory_;
DISALLOW_COPY_AND_ASSIGN(PepperUrlRequest);
};
class PepperUrlRequestFactory : public UrlRequestFactory {
public:
PepperUrlRequestFactory(pp::InstanceHandle pp_instance);
~PepperUrlRequestFactory() override;
// UrlRequestFactory interface.
std::unique_ptr<UrlRequest> CreateUrlRequest(
UrlRequest::Type type,
const std::string& url,
const net::NetworkTrafficAnnotationTag& traffic_annotation) override;
private:
pp::InstanceHandle pp_instance_;
DISALLOW_COPY_AND_ASSIGN(PepperUrlRequestFactory);
};
} // namespace remoting
#endif // REMOTING_CLIENT_PLUGIN_PEPPER_URL_LOADER_H_