Chromium Code Reviews| Index: components/copresence/copresence_state_impl.h |
| diff --git a/components/copresence/copresence_state_impl.h b/components/copresence/copresence_state_impl.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..066997eda3846dcb17f9e8d2849a9bce74c6bd4c |
| --- /dev/null |
| +++ b/components/copresence/copresence_state_impl.h |
| @@ -0,0 +1,72 @@ |
| +// 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_STATE_IMPL_H_ |
| +#define COMPONENTS_COPRESENCE_COPRESENCE_STATE_IMPL_H_ |
| + |
| +#include <map> |
| +#include <set> |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/macros.h" |
| +#include "base/observer_list.h" |
| +#include "components/copresence/proto/enums.pb.h" |
| +#include "components/copresence/public/copresence_state.h" |
| + |
| +namespace copresence { |
| + |
| +class Directive; |
| +struct AudioToken; |
| +struct ReceivedToken; |
| +struct TransmittedToken; |
| + |
| +// This class tracks the internal state of the copresence component |
| +// for debugging purposes. CopresenceState only allows observation, |
| +// but this class accepts updates from elsewhere in the component. |
| +class CopresenceStateImpl final : public CopresenceState { |
| + public: |
| + CopresenceStateImpl(); |
| + ~CopresenceStateImpl() override; |
| + |
| + // CopresenceState overrides. |
| + void AddObserver(CopresenceObserver* observer) override; |
| + void RemoveObserver(CopresenceObserver* observer) override; |
| + const std::vector<Directive>& active_directives() const override; |
| + const std::map<std::string, TransmittedToken>& transmitted_tokens() |
| + const override; |
|
xiyuan
2014/12/19 04:03:01
nit: wrap transimitted_tokens() as well? It feels
Charlie
2014/12/19 05:25:39
No I just made it up. Done.
|
| + const std::map<std::string, ReceivedToken>& received_tokens() const override; |
| + |
| + // Update the current active directives. |
| + void UpdateDirectives(const std::vector<Directive>& directives); |
| + |
| + // Report transmitting a token. |
| + void UpdateTransmittedToken(const TransmittedToken& token); |
| + |
| + // Report receiving a token. |
| + void UpdateReceivedToken(const ReceivedToken& token); |
| + |
| + // Report the token state from the server. |
| + void UpdateTokenStatus(const std::string& token_id, TokenStatus status); |
| + |
| + private: |
| + // Reconcile the |active_directives_| against |transmitted_tokens_|. |
| + void UpdateTransmittingTokens(); |
| + |
| + std::vector<Directive> active_directives_; |
| + |
| + // TODO(ckehoe): When we support more mediums, separate tokens by medium. |
| + // Otherwise tokens from different mediums could overwrite each other. |
| + // TODO(ckehoe): Limit the number of tokens stored. |
| + std::map<std::string, TransmittedToken> transmitted_tokens_; |
| + std::map<std::string, ReceivedToken> received_tokens_; |
| + |
| + ObserverList<CopresenceObserver> observers_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(CopresenceStateImpl); |
| +}; |
| + |
| +} // namespace copresence |
| + |
| +#endif // COMPONENTS_COPRESENCE_COPRESENCE_STATE_IMPL_H_ |