| Index: components/copresence/copresence_client.h
|
| diff --git a/components/copresence/copresence_client.h b/components/copresence/copresence_client.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..76721fef2c73b12cd900e5cbd9a7a013e7763de1
|
| --- /dev/null
|
| +++ b/components/copresence/copresence_client.h
|
| @@ -0,0 +1,90 @@
|
| +// Copyright 2014 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 COMPONENTS_COPRESENCE_COPRESENCE_CLIENT_H_
|
| +#define COMPONENTS_COPRESENCE_COPRESENCE_CLIENT_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "components/copresence/interface/copresence_delegate.h"
|
| +#include "components/copresence/proto/rpcs.pb.h"
|
| +
|
| +namespace net {
|
| +class URLContextGetter;
|
| +}
|
| +
|
| +namespace copresence {
|
| +
|
| +class CopresenceDelegate;
|
| +class RpcHandler;
|
| +class WhispernetClient;
|
| +
|
| +struct PendingRequest {
|
| + PendingRequest(const copresence::ReportRequest& report,
|
| + const std::string app_id,
|
| + const StatusCallback& callback);
|
| + ~PendingRequest();
|
| +
|
| + copresence::ReportRequest report;
|
| + std::string app_id;
|
| + StatusCallback callback;
|
| +};
|
| +
|
| +// The CopresenceClient class is the central interface for Copresence
|
| +// functionality. This class handles all the initialization and delegation of
|
| +// copresence tasks. Any user of copresence only needs to interact with this
|
| +// client.
|
| +class CopresenceClient : public base::SupportsWeakPtr<CopresenceClient> {
|
| + public:
|
| + // We do not take ownership of the delegate but we do take ownership of the
|
| + // whispernet_client. This is because the whispernet_client is tied to this
|
| + // copresence client (and various objects that it owns) while no such
|
| + // restriction exists for the delegate. Theoretically a client could use the
|
| + // same delegate for multiple CopresenceClients, not the case a
|
| + // WhispernetClient.
|
| + CopresenceClient(CopresenceDelegate* delegate,
|
| + scoped_ptr<WhispernetClient> whispernet_client);
|
| + virtual ~CopresenceClient();
|
| +
|
| + WhispernetClient* whispernet_client();
|
| +
|
| + // This method will execute a report request. Each report request can have
|
| + // multiple (un)publishes, (un)subscribes. This will ensure that once the
|
| + // client is initialized, it sends all request to the server and handles
|
| + // the response. If an error is encountered, the status callback is used
|
| + // to relay it to the requester.
|
| + void ExecuteReportRequest(copresence::ReportRequest request,
|
| + const std::string& app_id,
|
| + const StatusCallback& callback);
|
| +
|
| + // Called before the API (and thus the Client) is destructed.
|
| + void Shutdown();
|
| +
|
| + private:
|
| + void CompleteInitialization();
|
| + void InitStepComplete(const std::string& step, bool success);
|
| +
|
| + bool init_failed_;
|
| + std::vector<PendingRequest> pending_requests_queue_;
|
| +
|
| + // TODO(rkc): This code is almost identical to what we use in feedback to
|
| + // perform multiple blocking tasks and then run a post process method. Look
|
| + // into refactoring it all out to a common construct, like maybe a
|
| + // PostMultipleTasksAndReply?
|
| + size_t pending_init_operations_;
|
| +
|
| + scoped_ptr<WhispernetClient> whispernet_client_;
|
| + scoped_ptr<RpcHandler> rpc_handler_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CopresenceClient);
|
| +};
|
| +
|
| +} // namespace copresence
|
| +
|
| +#endif // COMPONENTS_COPRESENCE_COPRESENCE_CLIENT_H_
|
|
|