| Index: chrome/browser/ui/content_settings/content_setting_media_menu_model.cc
|
| diff --git a/chrome/browser/ui/content_settings/content_setting_media_menu_model.cc b/chrome/browser/ui/content_settings/content_setting_media_menu_model.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2cd398517a9e9f517e17d50f6fe4f9f688932215
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/content_settings/content_setting_media_menu_model.cc
|
| @@ -0,0 +1,73 @@
|
| +// Copyright 2013 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/content_settings/content_setting_media_menu_model.h"
|
| +
|
| +#include "base/prefs/pref_service.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/media/media_capture_devices_dispatcher.h"
|
| +#include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
|
| +#include "chrome/common/pref_names.h"
|
| +
|
| +ContentSettingMediaMenuModel::ContentSettingMediaMenuModel(
|
| + PrefService* prefs,
|
| + content::MediaStreamType type,
|
| + ContentSettingBubbleModel* bubble_model,
|
| + const MenuLabelChangedCallback& callback)
|
| + : ALLOW_THIS_IN_INITIALIZER_LIST(ui::SimpleMenuModel(this)),
|
| + prefs_(prefs),
|
| + type_(type),
|
| + media_bubble_model_(bubble_model),
|
| + callback_(callback) {
|
| + DCHECK(type_ == content::MEDIA_DEVICE_AUDIO_CAPTURE ||
|
| + type_ == content::MEDIA_DEVICE_VIDEO_CAPTURE);
|
| + DCHECK_EQ(CONTENT_SETTINGS_TYPE_MEDIASTREAM,
|
| + media_bubble_model_->content_type());
|
| + BuildMenu();
|
| +}
|
| +
|
| +ContentSettingMediaMenuModel::~ContentSettingMediaMenuModel() {
|
| +}
|
| +
|
| +bool ContentSettingMediaMenuModel::IsCommandIdChecked(int command_id) const {
|
| + return false;
|
| +}
|
| +
|
| +bool ContentSettingMediaMenuModel::IsCommandIdEnabled(int command_id) const {
|
| + return true;
|
| +}
|
| +
|
| +bool ContentSettingMediaMenuModel::GetAcceleratorForCommandId(
|
| + int command_id,
|
| + ui::Accelerator* accelerator) {
|
| + return false;
|
| +}
|
| +
|
| +void ContentSettingMediaMenuModel::ExecuteCommand(int command_id) {
|
| + CommandMap::const_iterator it = commands_.find(command_id);
|
| + DCHECK(it != commands_.end());
|
| + media_bubble_model_->OnMediaMenuClicked(type_, it->second.id);
|
| +
|
| + if (!callback_.is_null())
|
| + callback_.Run(type_, it->second.name);
|
| +}
|
| +
|
| +void ContentSettingMediaMenuModel::BuildMenu() {
|
| + MediaCaptureDevicesDispatcher* dispatcher =
|
| + MediaCaptureDevicesDispatcher::GetInstance();
|
| + content::MediaStreamDevices devices;
|
| + std::string default_device;
|
| + if (type_ == content::MEDIA_DEVICE_AUDIO_CAPTURE) {
|
| + devices = dispatcher->GetAudioCaptureDevices();
|
| + default_device = prefs_->GetString(prefs::kDefaultAudioCaptureDevice);
|
| + } else {
|
| + devices = dispatcher->GetVideoCaptureDevices();
|
| + default_device = prefs_->GetString(prefs::kDefaultVideoCaptureDevice);
|
| + }
|
| +
|
| + for (size_t i = 0; i < devices.size(); ++i) {
|
| + commands_.insert(std::make_pair(commands_.size(), devices[i]));
|
| + AddItem(i, UTF8ToUTF16(devices[i].name));
|
| + }
|
| +}
|
|
|