blob: f835786320db79e4f35cc8bdc8a8f00910b08d4e [file] [log] [blame]
// Copyright (c) 2010 The Chromium OS 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 ENTD_HTTP_H_
#define ENTD_HTTP_H_
#include <string>
#include <base/basictypes.h>
#include <v8.h>
#include "entd/scriptable.h"
namespace entd {
class Entd;
class NativeTimeout;
// Internal class for representing HTTP requests
class HttpRequest;
// Interface Class for sending actual HTTP requests
// The default implementation uses libcurl.
// The interface allows this to be replaced or stubbed out for testing.
class HttpMessengerInterface {
public:
HttpMessengerInterface() {};
virtual ~HttpMessengerInterface() {};
virtual int Update() = 0;
// Send a Request using HTTP to 'url',
// and set up 'request' to receive the results.
virtual bool HttpGet(HttpRequest* request) = 0;
virtual bool HttpPost(HttpRequest* request) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(HttpMessengerInterface);
};
// Defines an interface between V8 and a HttpMessengerInterface
// Example Usage:
// Http::Reference http = Http::New();
// // NULL = use default (Curl) Messenger
// bool rv = http->Initialize(entd, NULL);
// if (rv)
// my_v8_object->Set(String::NewSymbol("http"), jshttp->js_object());
class Http : public Scriptable<Http> {
public:
// 'entd' and 'messenger' are non-const interfaces.
Http();
virtual ~Http();
virtual bool Initialize(Entd* entd, HttpMessengerInterface* messenger);
static const std::string class_name() { return "entd.http"; }
Entd* GetEntd() { return entd_; };
static bool InitializeTemplate(v8::Handle<v8::FunctionTemplate> t);
// Called when the update timer fires.
bool OnNativeTimeout();
// Utility function. TODO(rginda): move this onto the Request class.
bool ComputeRequestUrl(Entd* entd, const HttpRequest& request,
std::string* url);
// Call the corresponding method in the messenger interface
// and set the timer callback to handle the results.
v8::Handle<v8::Value> HttpGet(const v8::Arguments& args);
v8::Handle<v8::Value> HttpPost(const v8::Arguments& args);
// globals
static bool allow_self_signed_certs;
static std::string root_ca_file;
private:
Entd* entd_;
HttpMessengerInterface* messenger_;
uint32_t timeout_;
DISALLOW_COPY_AND_ASSIGN(Http);
};
} // namespace entd
#endif // ENTD_HTTP_H_