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_ |