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..84200eee834838cdb2a00457eb0073f8d0a3cf62 |
| --- /dev/null |
| +++ b/components/copresence/copresence_state_impl.h |
| @@ -0,0 +1,71 @@ |
| +// 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 "components/copresence/proto/enums.pb.h" |
| +#include "components/copresence/public/copresence_state.h" |
| + |
| +// TODO(ckehoe): Write tests. |
|
rkc
2014/12/18 18:12:09
We should put in at least some basic unit tests, e
Charlie
2014/12/19 03:53:33
Done.
|
| + |
| +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() override; |
| + const std::map<std::string, TransmittedToken>& transmitted_tokens() override; |
| + const std::map<std::string, ReceivedToken>& received_tokens() 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. |
| + std::map<std::string, TransmittedToken> transmitted_tokens_; |
| + std::map<std::string, ReceivedToken> received_tokens_; |
| + |
| + std::set<CopresenceObserver*> observers_; |
|
xiyuan
2014/12/18 18:10:52
Why not use ObserverList in base/observer_list.h?
Charlie
2014/12/19 03:53:33
Thanks! Done.
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(CopresenceStateImpl); |
| +}; |
| + |
| +} // namespace copresence |
| + |
| +#endif // COMPONENTS_COPRESENCE_COPRESENCE_STATE_IMPL_H_ |