summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorDave Michael <dmichael@chromium.org>2014-10-23 10:19:22 -0600
committerDave Michael <dmichael@chromium.org>2014-10-23 16:20:08 +0000
commit14ea095e585e23aa073c1434bd75d6a3e055836b (patch)
treeb80611efcc223834efa5776bcc0041fe00a43481 /content
parente9f04fc9f920f9ee61c6a503704925c564ef5da5 (diff)
downloadchromium_src-14ea095e585e23aa073c1434bd75d6a3e055836b.zip
chromium_src-14ea095e585e23aa073c1434bd75d6a3e055836b.tar.gz
chromium_src-14ea095e585e23aa073c1434bd75d6a3e055836b.tar.bz2
Pepper: Access PepperMediaDeviceManager through a WeakPtr
Its lifetime is scoped to the RenderFrame, and it might go away before the hosts that refer to it. BUG=423030 Committed: https://crrev.com/3a2cf7d1376ae33054b878232fb38b8fbed29e31 Cr-Commit-Position: refs/heads/master@{#299897} R=teravest@chromium.org Review URL: https://codereview.chromium.org/653243003 Cr-Commit-Position: refs/branch-heads/2171@{#245} Cr-Branched-From: 267aeeb8d85c8503a7fd12bd14654b8ea78d3974-refs/heads/master@{#297060}
Diffstat (limited to 'content')
-rw-r--r--content/renderer/pepper/pepper_device_enumeration_host_helper.cc5
-rw-r--r--content/renderer/pepper/pepper_device_enumeration_host_helper.h5
-rw-r--r--content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc6
-rw-r--r--content/renderer/pepper/pepper_media_device_manager.cc5
-rw-r--r--content/renderer/pepper/pepper_media_device_manager.h3
-rw-r--r--content/renderer/pepper/pepper_platform_audio_input.cc2
-rw-r--r--content/renderer/pepper/pepper_platform_video_capture.cc2
7 files changed, 17 insertions, 11 deletions
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
index d983f4a..edc0840 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.cc
@@ -46,6 +46,7 @@ class PepperDeviceEnumerationHostHelper::ScopedRequest
// EnumerateDevicesCallbackBody() to ensure that we always call |callback|
// asynchronously.
sync_call_ = true;
+ DCHECK(owner_->delegate_);
request_id_ = owner_->delegate_->EnumerateDevices(
owner_->device_type_,
owner_->document_url_,
@@ -54,7 +55,7 @@ class PepperDeviceEnumerationHostHelper::ScopedRequest
}
~ScopedRequest() {
- if (requested_) {
+ if (requested_ && owner_->delegate_) {
owner_->delegate_->StopEnumerateDevices(request_id_);
}
}
@@ -91,7 +92,7 @@ class PepperDeviceEnumerationHostHelper::ScopedRequest
PepperDeviceEnumerationHostHelper::PepperDeviceEnumerationHostHelper(
ppapi::host::ResourceHost* resource_host,
- Delegate* delegate,
+ base::WeakPtr<Delegate> delegate,
PP_DeviceType_Dev device_type,
const GURL& document_url)
: resource_host_(resource_host),
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper.h b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
index 088d466..ea1a7fc 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper.h
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper.h
@@ -10,6 +10,7 @@
#include "base/basictypes.h"
#include "base/callback_forward.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "ppapi/c/dev/ppb_device_ref_dev.h"
#include "ppapi/host/host_message_context.h"
@@ -58,7 +59,7 @@ class CONTENT_EXPORT PepperDeviceEnumerationHostHelper {
// |resource_host| and |delegate| must outlive this object.
PepperDeviceEnumerationHostHelper(ppapi::host::ResourceHost* resource_host,
- Delegate* delegate,
+ base::WeakPtr<Delegate> delegate,
PP_DeviceType_Dev device_type,
const GURL& document_url);
~PepperDeviceEnumerationHostHelper();
@@ -93,7 +94,7 @@ class CONTENT_EXPORT PepperDeviceEnumerationHostHelper {
// Non-owning pointers.
ppapi::host::ResourceHost* resource_host_;
- Delegate* delegate_;
+ base::WeakPtr<Delegate> delegate_;
PP_DeviceType_Dev device_type_;
GURL document_url_;
diff --git a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
index a9b2579..6d9f325 100644
--- a/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
+++ b/content/renderer/pepper/pepper_device_enumeration_host_helper_unittest.cc
@@ -7,6 +7,7 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/logging.h"
+#include "base/memory/weak_ptr.h"
#include "content/renderer/pepper/pepper_device_enumeration_host_helper.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/host/host_message_context.h"
@@ -24,7 +25,8 @@ namespace content {
namespace {
-class TestDelegate : public PepperDeviceEnumerationHostHelper::Delegate {
+class TestDelegate : public PepperDeviceEnumerationHostHelper::Delegate,
+ public base::SupportsWeakPtr<TestDelegate> {
public:
TestDelegate() : last_used_id_(0) {}
@@ -76,7 +78,7 @@ class PepperDeviceEnumerationHostHelperTest : public testing::Test {
: ppapi_host_(&sink_, ppapi::PpapiPermissions()),
resource_host_(&ppapi_host_, 12345, 67890),
device_enumeration_(&resource_host_,
- &delegate_,
+ delegate_.AsWeakPtr(),
PP_DEVICETYPE_DEV_AUDIOCAPTURE,
GURL("http://example.com")) {}
diff --git a/content/renderer/pepper/pepper_media_device_manager.cc b/content/renderer/pepper/pepper_media_device_manager.cc
index 0d54964..676b2fb 100644
--- a/content/renderer/pepper/pepper_media_device_manager.cc
+++ b/content/renderer/pepper/pepper_media_device_manager.cc
@@ -25,13 +25,14 @@ ppapi::DeviceRefData FromStreamDeviceInfo(const StreamDeviceInfo& info) {
} // namespace
-PepperMediaDeviceManager* PepperMediaDeviceManager::GetForRenderFrame(
+base::WeakPtr<PepperMediaDeviceManager>
+PepperMediaDeviceManager::GetForRenderFrame(
RenderFrame* render_frame) {
PepperMediaDeviceManager* handler =
PepperMediaDeviceManager::Get(render_frame);
if (!handler)
handler = new PepperMediaDeviceManager(render_frame);
- return handler;
+ return handler->AsWeakPtr();
}
PepperMediaDeviceManager::PepperMediaDeviceManager(RenderFrame* render_frame)
diff --git a/content/renderer/pepper/pepper_media_device_manager.h b/content/renderer/pepper/pepper_media_device_manager.h
index b3d94e0..c9a9440 100644
--- a/content/renderer/pepper/pepper_media_device_manager.h
+++ b/content/renderer/pepper/pepper_media_device_manager.h
@@ -23,7 +23,8 @@ class PepperMediaDeviceManager
public RenderFrameObserverTracker<PepperMediaDeviceManager>,
public base::SupportsWeakPtr<PepperMediaDeviceManager> {
public:
- static PepperMediaDeviceManager* GetForRenderFrame(RenderFrame* render_frame);
+ static base::WeakPtr<PepperMediaDeviceManager> GetForRenderFrame(
+ RenderFrame* render_frame);
virtual ~PepperMediaDeviceManager();
// PepperDeviceEnumerationHostHelper::Delegate implementation:
diff --git a/content/renderer/pepper/pepper_platform_audio_input.cc b/content/renderer/pepper/pepper_platform_audio_input.cc
index b1d62f0..9b46120 100644
--- a/content/renderer/pepper/pepper_platform_audio_input.cc
+++ b/content/renderer/pepper/pepper_platform_audio_input.cc
@@ -289,7 +289,7 @@ PepperMediaDeviceManager* PepperPlatformAudioInput::GetMediaDeviceManager() {
RenderFrameImpl* const render_frame =
RenderFrameImpl::FromRoutingID(render_frame_id_);
return render_frame ?
- PepperMediaDeviceManager::GetForRenderFrame(render_frame) : NULL;
+ PepperMediaDeviceManager::GetForRenderFrame(render_frame).get() : NULL;
}
} // namespace content
diff --git a/content/renderer/pepper/pepper_platform_video_capture.cc b/content/renderer/pepper/pepper_platform_video_capture.cc
index f883d1b..0d011f3 100644
--- a/content/renderer/pepper/pepper_platform_video_capture.cc
+++ b/content/renderer/pepper/pepper_platform_video_capture.cc
@@ -152,7 +152,7 @@ PepperMediaDeviceManager* PepperPlatformVideoCapture::GetMediaDeviceManager() {
RenderFrameImpl* const render_frame =
RenderFrameImpl::FromRoutingID(render_frame_id_);
return render_frame ?
- PepperMediaDeviceManager::GetForRenderFrame(render_frame) : NULL;
+ PepperMediaDeviceManager::GetForRenderFrame(render_frame).get() : NULL;
}
} // namespace content