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