12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_media_menu_model.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_bubble_model.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaMenuModel::ContentSettingMediaMenuModel( 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::MediaStreamType type, 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel* bubble_model, 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const MenuLabelChangedCallback& callback) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : ui::SimpleMenuModel(this), 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_(type), 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_bubble_model_(bubble_model), 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback_(callback) { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(type_ == content::MEDIA_DEVICE_AUDIO_CAPTURE || 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type_ == content::MEDIA_DEVICE_VIDEO_CAPTURE); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_MEDIASTREAM, 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_bubble_model_->content_type()); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher* dispatcher = 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance(); 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& devices = 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (type_ == content::MEDIA_DEVICE_AUDIO_CAPTURE) ? 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetAudioCaptureDevices() : 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetVideoCaptureDevices(); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < devices.size(); ++i) { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) commands_.insert(std::make_pair(commands_.size(), devices[i])); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddItem(i, base::UTF8ToUTF16(devices[i].name)); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaMenuModel::~ContentSettingMediaMenuModel() { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ContentSettingMediaMenuModel::IsCommandIdChecked(int command_id) const { 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ContentSettingMediaMenuModel::IsCommandIdEnabled(int command_id) const { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ContentSettingMediaMenuModel::GetAcceleratorForCommandId( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int command_id, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator* accelerator) { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaMenuModel::ExecuteCommand(int command_id, 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int event_flags) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandMap::const_iterator it = commands_.find(command_id); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(it != commands_.end()); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_bubble_model_->OnMediaMenuClicked(type_, it->second.id); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!callback_.is_null()) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback_.Run(type_, it->second.name); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 62