Chromium Code Reviews| Index: ash/common/cast_config_controller.cc |
| diff --git a/ash/common/cast_config_controller.cc b/ash/common/cast_config_controller.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8fcec049da6864fc5903e999d957466357a86f5e |
| --- /dev/null |
| +++ b/ash/common/cast_config_controller.cc |
| @@ -0,0 +1,75 @@ |
| +// Copyright 2016 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 "ash/common/cast_config_controller.h" |
| + |
| +#include <utility> |
| +#include <vector> |
| + |
| +#include "base/logging.h" |
| +#include "content/public/common/service_names.mojom.h" |
| +#include "services/service_manager/public/cpp/connector.h" |
| + |
| +namespace ash { |
| + |
| +CastConfigController::CastConfigController() {} |
| + |
| +CastConfigController::~CastConfigController() {} |
| + |
| +bool CastConfigController::Connected() { |
| + return client_.is_bound(); |
| +} |
| + |
| +void CastConfigController::AddObserver(CastConfigControllerObserver* observer) { |
| + observers_.AddObserver(observer); |
| +} |
| + |
| +void CastConfigController::RemoveObserver( |
| + CastConfigControllerObserver* observer) { |
| + observers_.RemoveObserver(observer); |
| +} |
| + |
| +void CastConfigController::BindRequest(mojom::CastConfigRequest request) { |
| + bindings_.AddBinding(this, std::move(request)); |
| +} |
| + |
| +void CastConfigController::SetClient( |
| + mojom::CastConfigClientAssociatedPtrInfo client) { |
| + client_.Bind(std::move(client)); |
| + |
| + // If we added observers before we were connected to, run them now. |
| + if (observers_.might_have_observers()) |
| + client_->RequestDeviceRefresh(); |
| +} |
| + |
| +void CastConfigController::OnDevicesUpdated( |
| + std::vector<mojom::SinkAndRoutePtr> devices) { |
| + for (auto& observer : observers_) { |
| + std::vector<mojom::SinkAndRoutePtr> devices_copy; |
| + for (auto& item : devices) |
| + devices_copy.push_back(item.Clone()); |
| + observer.OnDevicesUpdated(std::move(devices_copy)); |
| + } |
| +} |
| + |
| +void CastConfigController::RequestDeviceRefresh() { |
| + if (client_) |
| + client_->RequestDeviceRefresh(); |
| +} |
| + |
| +void CastConfigController::CastToSink(ash::mojom::CastSinkPtr sink) { |
| + if (client_) |
| + client_->CastToSink(std::move(sink)); |
| +} |
| + |
| +void CastConfigController::StopCasting(ash::mojom::CastRoutePtr route) { |
| + if (client_) |
| + client_->StopCasting(std::move(route)); |
| +} |
| + |
| +void CastConfigController::OnClientConnectionError() { |
|
James Cook
2016/12/02 20:35:20
Is this still used?
|
| + client_.reset(); |
| +} |
| + |
| +} // namespace ash |