1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_SYNC_ENGINE_HTTP_POST_PROVIDER_INTERFACE_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_SYNC_ENGINE_HTTP_POST_PROVIDER_INTERFACE_H_ 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string> 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace sync_api { 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// An interface the embedding application (e.g. Chromium) implements to provide 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// required HTTP POST functionality to the syncer backend. This interface is 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// designed for one-time use. You create one, use it, and create another if you 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// want to make a subsequent POST. 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass HttpPostProviderInterface { 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~HttpPostProviderInterface() {} 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Use specified user agent string when POSTing. If not called a default UA 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // may be used. 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetUserAgent(const char* user_agent) = 0; 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Add additional headers to the request. 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetExtraRequestHeaders(const char* headers) = 0; 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set the URL to POST to. 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetURL(const char* url, int port) = 0; 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set the type, length and content of the POST payload. 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |content_type| is a null-terminated MIME type specifier. 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |content| is a data buffer; Do not interpret as a null-terminated string. 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // |content_length| is the total number of chars in |content|. It is used to 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // assign/copy |content| data. 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetPostPayload(const char* content_type, 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int content_length, 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* content) = 0; 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if the URL request succeeded. If the request failed, 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // os_error() may be non-zero and hence contain more information. 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool MakeSynchronousPost(int* os_error_code, int* response_code) = 0; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Get the length of the content returned in the HTTP response. 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This does not count the trailing null-terminating character returned 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // by GetResponseContent, so it is analogous to calling string.length. 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual int GetResponseContentLength() const = 0; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Get the content returned in the HTTP response. 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This is a null terminated string of characters. 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Value should be copied. 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const char* GetResponseContent() const = 0; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Get the value of a header returned in the HTTP response. 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // If the header is not present, returns the empty string. 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual const std::string GetResponseHeaderValue( 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& name) const = 0; 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Abandon any pending POST and unblock caller in MakeSynchronousPost. 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // This must be safe to call from any thread. 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Abort() = 0; 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace sync_api 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_SYNC_ENGINE_HTTP_POST_PROVIDER_INTERFACE_H_ 67