Chromium Code Reviews| Index: chrome/browser/usb/web_usb_permission_bubble.cc |
| diff --git a/chrome/browser/usb/web_usb_permission_bubble.cc b/chrome/browser/usb/web_usb_permission_bubble.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5b15b7d945cd73e5dc5f1de9a1d1f8b317b5e4ee |
| --- /dev/null |
| +++ b/chrome/browser/usb/web_usb_permission_bubble.cc |
| @@ -0,0 +1,47 @@ |
| +// 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/usb/web_usb_permission_bubble.h" |
| + |
| +#include "chrome/browser/ui/browser_finder.h" |
| +#include "chrome/browser/ui/chrome_bubble_manager.h" |
| +#include "chrome/browser/usb/usb_chooser_bubble_delegate.h" |
| +#include "components/bubble/bubble_controller.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/render_frame_host.h" |
| + |
| +ChromeWebUsbPermissionBubble::ChromeWebUsbPermissionBubble( |
| + content::RenderFrameHost* render_frame_host) |
| + : render_frame_host_(render_frame_host) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + DCHECK(render_frame_host); |
| +} |
| + |
| +ChromeWebUsbPermissionBubble::~ChromeWebUsbPermissionBubble() { |
| + for (const auto& bubble : bubbles_) { |
| + if (bubble) |
| + bubble->CloseBubble(BUBBLE_CLOSE_FORCED); |
| + } |
| +} |
| + |
| +void ChromeWebUsbPermissionBubble::GetPermission( |
| + mojo::Array<device::usb::DeviceFilterPtr> device_filters, |
| + const GetPermissionCallback& callback) { |
| + if (render_frame_host_->IsRenderFrameLive()) { |
|
Reilly Grant (use Gerrit)
2015/11/16 22:45:46
This check is now unnecessary.
juncai
2015/11/17 03:42:15
Done.
|
| + content::WebContents* web_contents = |
| + content::WebContents::FromRenderFrameHost(render_frame_host_); |
| + Browser* browser = chrome::FindBrowserWithWebContents(web_contents); |
| + scoped_ptr<BubbleDelegate> bubble_delegate(new UsbChooserBubbleDelegate( |
| + browser, device_filters.Pass(), render_frame_host_, callback)); |
| + BubbleReference bubble_reference = |
| + browser->GetBubbleManager()->ShowBubble(bubble_delegate.Pass()); |
| + bubbles_.push_back(bubble_reference); |
| + } |
| +} |
| + |
| +void ChromeWebUsbPermissionBubble::Bind( |
| + mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + bindings_.AddBinding(this, request.Pass()); |
| +} |