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..b9e0111b5755cfcef3e9d7e4933855b5e49b9b47 |
| --- /dev/null |
| +++ b/chrome/browser/usb/web_usb_permission_bubble.cc |
| @@ -0,0 +1,42 @@ |
| +// 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, |
| + mojo::InterfaceRequest<WebUsbPermissionBubble> request) |
| + : render_frame_host_(render_frame_host), binding_(this, request.Pass()) { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + DCHECK(render_frame_host); |
| +} |
| + |
| +ChromeWebUsbPermissionBubble::~ChromeWebUsbPermissionBubble() {} |
| + |
| +void ChromeWebUsbPermissionBubble::GetPermission( |
| + mojo::Array<device::usb::DeviceFilterPtr> device_filters, |
| + const GetPermissionCallback& callback) { |
| + if (!render_frame_host_->IsRenderFrameLive()) { |
| + for (const auto& bubble : bubbles_) { |
| + if (bubble) |
| + bubble->CloseBubble(BUBBLE_CLOSE_FORCED); |
|
Reilly Grant (use Gerrit)
2015/11/12 21:44:37
Shouldn't this be in the destructor?
juncai
2015/11/14 01:54:36
Done.
|
| + } |
| + } else { |
| + 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); |
| + } |
| +} |