Index: extensions/browser/api/cast_channel/cast_channel_service.cc |
diff --git a/extensions/browser/api/cast_channel/cast_channel_service.cc b/extensions/browser/api/cast_channel/cast_channel_service.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2efabb119cd43ea5ec67fbfeb471c21f9c8c7055 |
--- /dev/null |
+++ b/extensions/browser/api/cast_channel/cast_channel_service.cc |
@@ -0,0 +1,51 @@ |
+// Copyright 2017 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. |
+ |
+#include "extensions/browser/api/cast_channel/cast_channel_service.h" |
+ |
+#include "base/memory/ptr_util.h" |
+ |
+namespace extensions { |
+namespace api { |
+namespace cast_channel { |
+ |
+CastSocketData::CastSocketData() = default; |
+ |
+CastSocketData::~CastSocketData() { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
+} |
+ |
+int CastSocketData::AddSocket(CastSocket* socket) { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
+ DCHECK(socket); |
+ int id = sockets_.size() + 1; |
mark a. foltz
2017/05/18 18:02:26
This will assign duplicate ids as the size of sock
zhaobin
2017/05/24 01:51:39
Done.
|
+ sockets_.insert(std::make_pair(id, base::WrapUnique(socket))); |
+ socket->set_id(id); |
+ return id; |
+} |
+ |
+void CastSocketData::RemoveSocket(int channel_id) { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
mark a. foltz
2017/05/18 18:02:26
DCHECK(channel_id > 0)
zhaobin
2017/05/24 01:51:39
Done.
|
+ sockets_.erase(channel_id); |
+} |
+ |
+CastSocket* CastSocketData::GetSocket(int channel_id) const { |
+ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); |
mark a. foltz
2017/05/18 19:12:04
DCHECK(channel_id > 0)
zhaobin
2017/05/24 01:51:39
Done.
|
+ const auto& socket_it = sockets_.find(channel_id); |
+ return socket_it == sockets_.end() ? nullptr : socket_it->second.get(); |
+} |
+ |
+CastChannelService::CastChannelService() = default; |
+CastChannelService::~CastChannelService() = default; |
+ |
+CastSocketData* CastChannelService::GetOrCreateSocketData() { |
+ DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
mark a. foltz
2017/05/18 18:02:26
Since sockets_ is created on the IO thread it foll
zhaobin
2017/05/24 01:51:39
Seems unable to use |thread_checker_| here. CastCh
mark a. foltz
2017/05/24 17:44:10
This should be called out in the comments.
zhaobin
2017/05/24 18:12:57
Done.
|
+ if (!sockets_) |
+ sockets_.reset(new CastSocketData()); |
+ return sockets_.get(); |
+} |
+ |
+} // namespace cast_channel |
+} // namespace api |
+} // namespace extensions |