| // Copyright 2018 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/usb/web_usb_chooser_desktop.h" |
| |
| #include <utility> |
| |
| #include "chrome/browser/ui/browser_finder.h" |
| #include "chrome/browser/ui/chrome_bubble_manager.h" |
| #include "chrome/browser/ui/permission_bubble/chooser_bubble_delegate.h" |
| #include "chrome/browser/usb/usb_chooser_controller.h" |
| #include "components/bubble/bubble_controller.h" |
| #include "content/public/browser/web_contents.h" |
| |
| WebUsbChooserDesktop::WebUsbChooserDesktop( |
| content::RenderFrameHost* render_frame_host) |
| : WebUsbChooser(render_frame_host), weak_factory_(this) {} |
| |
| WebUsbChooserDesktop::~WebUsbChooserDesktop() { |
| if (bubble_) |
| bubble_->CloseBubble(BUBBLE_CLOSE_FORCED); |
| } |
| |
| void WebUsbChooserDesktop::ShowChooser( |
| std::unique_ptr<UsbChooserController> controller) { |
| // Only one chooser bubble may be shown at a time. |
| if (bubble_) |
| bubble_->CloseBubble(BUBBLE_CLOSE_FORCED); |
| |
| auto delegate = std::make_unique<ChooserBubbleDelegate>( |
| render_frame_host(), std::move(controller)); |
| auto* web_contents = |
| content::WebContents::FromRenderFrameHost(render_frame_host()); |
| Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
| if (browser) |
| bubble_ = browser->GetBubbleManager()->ShowBubble(std::move(delegate)); |
| } |
| |
| base::WeakPtr<WebUsbChooser> WebUsbChooserDesktop::GetWeakPtr() { |
| return weak_factory_.GetWeakPtr(); |
| } |