// Copyright (c) 2011 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 CHROME_BROWSER_REMOTING_DIRECTORY_ADD_REQUEST_H_
#define CHROME_BROWSER_REMOTING_DIRECTORY_ADD_REQUEST_H_
#include <string>
#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/common/remoting/chromoting_host_info.h"
#include "chrome/common/net/url_fetcher.h"
#include "googleurl/src/gurl.h"
namespace remoting {
// A class implements REST API insert call for the Chromoting directory service.
class DirectoryAddRequest : public URLFetcher::Delegate {
public:
enum Result {
// Host was added successfully.
SUCCESS,
// Invalid authentication token.
ERROR_AUTH,
// Server rejected request because it was invalid (e.g. specified
// public key is invalid).
ERROR_INVALID_REQUEST,
// Host is already registered.
ERROR_EXISTS,
// Internal server error.
ERROR_SERVER,
// Timeout expired.
ERROR_TIMEOUT_EXPIRED,
// Some other error, e.g. network failure.
ERROR_OTHER,
};
// Callback called when request is finished. The second parameter
// contains error message in case of an error. The error message may
// not be localized, and should be used for logging, but not shown
// to the user.
typedef Callback2<Result, const std::string&>::Type DoneCallback;
explicit DirectoryAddRequest(net::URLRequestContextGetter* getter);
~DirectoryAddRequest();
// Add this computer as a host. Use the token for
// authentication. |done_callback| is called when the request is
// finished. Request can be cancelled by destroying this object.
void AddHost(const remoting::ChromotingHostInfo& host_info,
const std::string& auth_token,
DoneCallback* done_callback);
// URLFetcher::Delegate implementation.
virtual void OnURLFetchComplete(const URLFetcher* source,
const GURL& url,
const net::URLRequestStatus& status,
int response_code,
const ResponseCookies& cookies,
const std::string& data);
private:
friend class DirectoryAddRequestTest;
net::URLRequestContextGetter* getter_;
scoped_ptr<DoneCallback> done_callback_;
scoped_ptr<URLFetcher> fetcher_;
DISALLOW_COPY_AND_ASSIGN(DirectoryAddRequest);
};
} // namespace remoting
#endif // CHROME_BROWSER_REMOTING_DIRECTORY_ADD_REQUEST_H_