// 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/ui/ash/cast_config_delegate_chromeos.h" #include #include #include #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/extensions/api/cast_devices_private/cast_devices_private_api.h" #include "chrome/browser/extensions/api/tab_capture/tab_capture_api.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/common/extensions/api/cast_devices_private.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_view_host.h" #include "extensions/browser/event_router.h" #include "extensions/browser/extension_host.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/process_manager.h" #include "extensions/common/extension.h" namespace chromeos { namespace { Profile* GetProfile() { // TODO(jdufault): Figure out how to correctly handle multiprofile mode. // See crbug.com/488751 return ProfileManager::GetActiveUserProfile(); } // Returns the cast extension if it exists. const extensions::Extension* FindCastExtension() { Profile* profile = GetProfile(); const extensions::ExtensionRegistry* extension_registry = extensions::ExtensionRegistry::Get(profile); const extensions::ExtensionSet& enabled_extensions = extension_registry->enabled_extensions(); for (size_t i = 0; i < arraysize(extensions::kChromecastExtensionIds); ++i) { const std::string extension_id(extensions::kChromecastExtensionIds[i]); if (enabled_extensions.Contains(extension_id)) { return extension_registry->GetExtensionById( extension_id, extensions::ExtensionRegistry::ENABLED); } } return nullptr; } } // namespace CastConfigDelegateChromeos::CastConfigDelegateChromeos() { } CastConfigDelegateChromeos::~CastConfigDelegateChromeos() { } bool CastConfigDelegateChromeos::HasCastExtension() const { return FindCastExtension() != nullptr; } void CastConfigDelegateChromeos::RequestDeviceRefresh() { scoped_ptr args = extensions::api::cast_devices_private::UpdateDevicesRequested::Create(); scoped_ptr event(new extensions::Event( extensions::events::CAST_DEVICES_PRIVATE_ON_UPDATE_DEVICES_REQUESTED, extensions::api::cast_devices_private::UpdateDevicesRequested::kEventName, std::move(args))); extensions::EventRouter::Get(GetProfile()) ->DispatchEventToExtension(FindCastExtension()->id(), std::move(event)); } void CastConfigDelegateChromeos::CastToReceiver( const std::string& receiver_id) { scoped_ptr args = extensions::api::cast_devices_private::StartCast::Create(receiver_id); scoped_ptr event(new extensions::Event( extensions::events::CAST_DEVICES_PRIVATE_ON_START_CAST, extensions::api::cast_devices_private::StartCast::kEventName, std::move(args))); extensions::EventRouter::Get(GetProfile()) ->DispatchEventToExtension(FindCastExtension()->id(), std::move(event)); } void CastConfigDelegateChromeos::StopCasting(const std::string& activity_id) { scoped_ptr args = extensions::api::cast_devices_private::StopCast::Create("user-stop"); scoped_ptr event(new extensions::Event( extensions::events::CAST_DEVICES_PRIVATE_ON_STOP_CAST, extensions::api::cast_devices_private::StopCast::kEventName, std::move(args))); extensions::EventRouter::Get(GetProfile()) ->DispatchEventToExtension(FindCastExtension()->id(), std::move(event)); } bool CastConfigDelegateChromeos::HasOptions() const { return true; } void CastConfigDelegateChromeos::LaunchCastOptions() { chrome::NavigateParams params( ProfileManager::GetActiveUserProfile(), FindCastExtension()->GetResourceURL("options.html"), ui::PAGE_TRANSITION_LINK); params.disposition = NEW_FOREGROUND_TAB; params.window_action = chrome::NavigateParams::SHOW_WINDOW; chrome::Navigate(¶ms); } void CastConfigDelegateChromeos::AddObserver( ash::CastConfigDelegate::Observer* observer) { return extensions::CastDeviceUpdateListeners::Get(GetProfile()) ->AddObserver(observer); } void CastConfigDelegateChromeos::RemoveObserver( ash::CastConfigDelegate::Observer* observer) { return extensions::CastDeviceUpdateListeners::Get(GetProfile()) ->RemoveObserver(observer); } } // namespace chromeos