// Copyright 2015 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 "chrome/browser/extensions/api/cast_devices_private/cast_devices_private_api.h" #include "base/lazy_instance.h" #include "base/strings/utf_string_conversions.h" #include "chrome/common/extensions/api/cast_devices_private.h" namespace extensions { namespace { ash::CastConfigDelegate::Receiver ConvertReceiverType( const api::cast_devices_private::Receiver& receiver) { ash::CastConfigDelegate::Receiver result; result.id = receiver.id; result.name = base::UTF8ToUTF16(receiver.name); return result; } ash::CastConfigDelegate::Activity ConvertActivityType( const api::cast_devices_private::Activity& activity) { ash::CastConfigDelegate::Activity result; result.id = activity.id; result.title = base::UTF8ToUTF16(activity.title); if (activity.tab_id) result.tab_id = *activity.tab_id; else result.tab_id = ash::CastConfigDelegate::Activity::TabId::UNKNOWN; return result; } ash::CastConfigDelegate::ReceiverAndActivity ConvertReceiverAndActivityType( const api::cast_devices_private::Receiver& receiver, const api::cast_devices_private::Activity* activity) { ash::CastConfigDelegate::ReceiverAndActivity result; result.receiver = ConvertReceiverType(receiver); if (activity) result.activity = ConvertActivityType(*activity); return result; } } // namespace static base::LazyInstance< BrowserContextKeyedAPIFactory<CastDeviceUpdateListeners>> g_factory = LAZY_INSTANCE_INITIALIZER; // static BrowserContextKeyedAPIFactory<CastDeviceUpdateListeners>* CastDeviceUpdateListeners::GetFactoryInstance() { return g_factory.Pointer(); } // static CastDeviceUpdateListeners* CastDeviceUpdateListeners::Get( content::BrowserContext* context) { return BrowserContextKeyedAPIFactory<CastDeviceUpdateListeners>::Get(context); } CastDeviceUpdateListeners::CastDeviceUpdateListeners( content::BrowserContext* context) {} CastDeviceUpdateListeners::~CastDeviceUpdateListeners() {} void CastDeviceUpdateListeners::AddObserver( ash::CastConfigDelegate::Observer* observer) { observer_list_.AddObserver(observer); } void CastDeviceUpdateListeners::RemoveObserver( ash::CastConfigDelegate::Observer* observer) { observer_list_.RemoveObserver(observer); } void CastDeviceUpdateListeners::NotifyCallbacks( const ReceiverAndActivityList& devices) { FOR_EACH_OBSERVER(ash::CastConfigDelegate::Observer, observer_list_, OnDevicesUpdated(devices)); } CastDevicesPrivateUpdateDevicesFunction:: CastDevicesPrivateUpdateDevicesFunction() {} CastDevicesPrivateUpdateDevicesFunction:: ~CastDevicesPrivateUpdateDevicesFunction() {} ExtensionFunction::ResponseAction CastDevicesPrivateUpdateDevicesFunction::Run() { auto params = api::cast_devices_private::UpdateDevices::Params::Create(*args_); CastDeviceUpdateListeners::ReceiverAndActivityList devices; for (const api::cast_devices_private::ReceiverActivity& device : params->devices) { devices.push_back( ConvertReceiverAndActivityType(device.receiver, device.activity.get())); } auto listeners = CastDeviceUpdateListeners::Get(browser_context()); listeners->NotifyCallbacks(devices); return RespondNow(NoArguments()); } } // namespace extensions