blob: 10ad62bb15e95eb242be6a25818efbe48a1e8911 [file] [log] [blame]
// 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/bluetooth/bluetooth_chooser_bubble_delegate.h"
#include "base/stl_util.h"
#include "chrome/browser/ui/bluetooth/bluetooth_chooser_desktop.h"
#include "chrome/common/url_constants.h"
#include "components/bubble/bubble_controller.h"
#include "url/gurl.h"
BluetoothChooserBubbleDelegate::BluetoothChooserBubbleDelegate(
content::RenderFrameHost* owner)
: ChooserBubbleDelegate(owner), bluetooth_chooser_(nullptr) {}
BluetoothChooserBubbleDelegate::~BluetoothChooserBubbleDelegate() {
if (bluetooth_chooser_)
bluetooth_chooser_->set_bluetooth_chooser_bubble_delegate(nullptr);
}
size_t BluetoothChooserBubbleDelegate::NumOptions() const {
return device_names_and_ids_.size();
}
const base::string16& BluetoothChooserBubbleDelegate::GetOption(
size_t index) const {
DCHECK_LT(index, device_names_and_ids_.size());
return device_names_and_ids_[index].first;
}
void BluetoothChooserBubbleDelegate::Select(size_t index) {
DCHECK_LT(index, device_names_and_ids_.size());
if (bluetooth_chooser_) {
bluetooth_chooser_->CallEventHandler(
content::BluetoothChooser::Event::SELECTED,
device_names_and_ids_[index].second);
}
if (bubble_controller_)
bubble_controller_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
}
void BluetoothChooserBubbleDelegate::Cancel() {
if (bluetooth_chooser_) {
bluetooth_chooser_->CallEventHandler(
content::BluetoothChooser::Event::CANCELLED, std::string());
}
if (bubble_controller_)
bubble_controller_->CloseBubble(BUBBLE_CLOSE_CANCELED);
}
void BluetoothChooserBubbleDelegate::Close() {
if (bluetooth_chooser_) {
bluetooth_chooser_->CallEventHandler(
content::BluetoothChooser::Event::CANCELLED, std::string());
}
}
GURL BluetoothChooserBubbleDelegate::GetHelpCenterUrl() const {
return GURL(chrome::kChooserBluetoothOverviewURL);
}
void BluetoothChooserBubbleDelegate::AddDevice(
const std::string& device_id,
const base::string16& device_name) {
device_names_and_ids_.push_back(std::make_pair(device_name, device_id));
if (observer())
observer()->OnOptionAdded(device_names_and_ids_.size() - 1);
}
void BluetoothChooserBubbleDelegate::RemoveDevice(
const std::string& device_id) {
for (auto it = device_names_and_ids_.begin();
it != device_names_and_ids_.end(); ++it) {
if (it->second == device_id) {
size_t index = it - device_names_and_ids_.begin();
device_names_and_ids_.erase(it);
if (observer())
observer()->OnOptionRemoved(index);
return;
}
}
}