| Index: chrome/browser/chrome_content_browser_client.cc
|
| diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
|
| index 9cc0a79944806e2daa6dd7185fed86358a6b6f59..7c71c9ea041706e2adc70b6d305db6fd6ce36eaf 100644
|
| --- a/chrome/browser/chrome_content_browser_client.cc
|
| +++ b/chrome/browser/chrome_content_browser_client.cc
|
| @@ -40,6 +40,7 @@
|
| #include "chrome/browser/gpu_util.h"
|
| #include "chrome/browser/infobars/infobar_tab_helper.h"
|
| #include "chrome/browser/media/media_internals.h"
|
| +#include "chrome/browser/media/media_stream_devices_controller.h"
|
| #include "chrome/browser/net/chrome_net_log.h"
|
| #include "chrome/browser/notifications/desktop_notification_service.h"
|
| #include "chrome/browser/notifications/desktop_notification_service_factory.h"
|
| @@ -1118,20 +1119,28 @@ void ChromeContentBrowserClient::RequestMediaAccessPermission(
|
| TabContentsWrapper::GetCurrentWrapperForContents(contents);
|
| DCHECK(tab);
|
|
|
| - InfoBarTabHelper* infobar_helper = tab->infobar_tab_helper();
|
| - InfoBarDelegate* old_infobar = NULL;
|
| - for (size_t i = 0; i < infobar_helper->infobar_count() && !old_infobar; ++i) {
|
| - old_infobar =
|
| - infobar_helper->GetInfoBarDelegateAt(i)->AsMediaStreamInfoBarDelegate();
|
| - }
|
| + scoped_ptr<MediaStreamDevicesController>
|
| + controller(new MediaStreamDevicesController(tab->profile(),
|
| + request,
|
| + callback));
|
| + if (!controller->DismissInfoBarAndTakeActionOnSettings()) {
|
| + InfoBarTabHelper* infobar_helper = tab->infobar_tab_helper();
|
| + InfoBarDelegate* old_infobar = NULL;
|
| + size_t i = 0;
|
| + for (; i < infobar_helper->infobar_count() && !old_infobar; ++i) {
|
| + old_infobar = infobar_helper->GetInfoBarDelegateAt(i)->
|
| + AsMediaStreamInfoBarDelegate();
|
| + }
|
|
|
| - InfoBarDelegate* infobar = new MediaStreamInfoBarDelegate(infobar_helper,
|
| - request,
|
| - callback);
|
| - if (old_infobar)
|
| - infobar_helper->ReplaceInfoBar(old_infobar, infobar);
|
| - else
|
| - infobar_helper->AddInfoBar(infobar);
|
| + // The MediaStreamInfoBarDelegate will take the ownership of the controller;
|
| + MediaStreamInfoBarDelegate* infobar =
|
| + new MediaStreamInfoBarDelegate(infobar_helper,
|
| + controller.release());
|
| + if (old_infobar)
|
| + infobar_helper->ReplaceInfoBar(old_infobar, infobar);
|
| + else
|
| + infobar_helper->AddInfoBar(infobar);
|
| + }
|
| }
|
|
|
| content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() {
|
|
|