Index: chrome/browser/media/media_stream_devices_controller.cc |
diff --git a/chrome/browser/media/media_stream_devices_controller.cc b/chrome/browser/media/media_stream_devices_controller.cc |
index 9ea42f7c146ed110e827bb8efd1ecf431b862d30..5bafcf806f51ab1e19553606133c70dab43286ef 100644 |
--- a/chrome/browser/media/media_stream_devices_controller.cc |
+++ b/chrome/browser/media/media_stream_devices_controller.cc |
@@ -83,7 +83,12 @@ MediaStreamDevicesController::MediaStreamDevicesController( |
} |
} |
-MediaStreamDevicesController::~MediaStreamDevicesController() {} |
+MediaStreamDevicesController::~MediaStreamDevicesController() { |
+ if (!callback_.is_null()) { |
+ callback_.Run(content::MediaStreamDevices(), |
+ scoped_ptr<content::MediaStreamUI>()); |
+ } |
+} |
// static |
void MediaStreamDevicesController::RegisterUserPrefs( |
@@ -195,7 +200,9 @@ void MediaStreamDevicesController::Accept(bool update_content_setting) { |
GetMediaStreamCaptureIndicator()->RegisterMediaStream( |
web_contents_, devices); |
} |
- callback_.Run(devices, ui.Pass()); |
+ content::MediaResponseCallback cb = callback_; |
+ callback_.Reset(); |
+ cb.Run(devices, ui.Pass()); |
} |
void MediaStreamDevicesController::Deny(bool update_content_setting) { |
@@ -210,8 +217,9 @@ void MediaStreamDevicesController::Deny(bool update_content_setting) { |
if (update_content_setting) |
SetPermission(false); |
- callback_.Run(content::MediaStreamDevices(), |
- scoped_ptr<content::MediaStreamUI>()); |
+ content::MediaResponseCallback cb = callback_; |
+ callback_.Reset(); |
+ cb.Run(content::MediaStreamDevices(), scoped_ptr<content::MediaStreamUI>()); |
} |
MediaStreamDevicesController::DevicePolicy |