summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-26 01:06:06 +0000
committerrsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-26 01:06:06 +0000
commit512d03f78c442cf31bae077d93ecc4882a46b286 (patch)
tree428c50889d8a1ded265b3dd90775cb300f12e2ae /media
parent8c672de7d601eba2b337446bb869f08dece73633 (diff)
downloadchromium_src-512d03f78c442cf31bae077d93ecc4882a46b286.zip
chromium_src-512d03f78c442cf31bae077d93ecc4882a46b286.tar.gz
chromium_src-512d03f78c442cf31bae077d93ecc4882a46b286.tar.bz2
RefCounted types should not have public destructors, delegate cleanup
For Delegate/Observer-type classes that specify an interface but do not have any particular lifetime requirements, make their destructors protected. This is to allow their interfaces to be implemented safely by RefCounted types. With public destructors, it's possible to do "scoped_ptr<Delegate> foo", and then assign a RefCountedDelegateImpl, which would lead to a double free. As none of these Delegates actually need public destructors (ownership of the Delegate* is not transferred during a function call / class constructor), mark the destructors protected so that it becomes a compile warning to try to delete them via the Delegate*. BUG=123295 TEST=it compiles Review URL: https://chromiumcodereview.appspot.com/10383262 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144086 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_input_controller.h4
-rw-r--r--media/audio/audio_io.h10
-rw-r--r--media/audio/audio_output_controller.h4
-rw-r--r--media/base/data_source.h5
-rw-r--r--media/base/demuxer.h5
-rw-r--r--media/filters/ffmpeg_glue.h5
-rw-r--r--media/video/capture/video_capture.h9
-rw-r--r--media/video/video_decode_accelerator.h5
-rw-r--r--media/webm/webm_stream_parser.cc2
9 files changed, 32 insertions, 17 deletions
diff --git a/media/audio/audio_input_controller.h b/media/audio/audio_input_controller.h
index 200e0e4..964d797 100644
--- a/media/audio/audio_input_controller.h
+++ b/media/audio/audio_input_controller.h
@@ -80,12 +80,14 @@ class MEDIA_EXPORT AudioInputController
// following methods are all called on the audio thread.
class MEDIA_EXPORT EventHandler {
public:
- virtual ~EventHandler() {}
virtual void OnCreated(AudioInputController* controller) = 0;
virtual void OnRecording(AudioInputController* controller) = 0;
virtual void OnError(AudioInputController* controller, int error_code) = 0;
virtual void OnData(AudioInputController* controller, const uint8* data,
uint32 size) = 0;
+
+ protected:
+ virtual ~EventHandler() {}
};
// A synchronous writer interface used by AudioInputController for
diff --git a/media/audio/audio_io.h b/media/audio/audio_io.h
index 8487214..50be7cd 100644
--- a/media/audio/audio_io.h
+++ b/media/audio/audio_io.h
@@ -56,8 +56,6 @@ class MEDIA_EXPORT AudioOutputStream {
// itself such as creating Windows or initializing COM.
class MEDIA_EXPORT AudioSourceCallback {
public:
- virtual ~AudioSourceCallback() {}
-
// Provide more data by filling |dest| up to |max_size| bytes. The provided
// buffer size is determined by the |samples_per_packet| specified in
// AudioParameters when the stream is created. The source will return
@@ -85,6 +83,9 @@ class MEDIA_EXPORT AudioOutputStream {
// plugins. In any case, data is usually immediately available,
// so there would be no delay.
virtual void WaitTillDataReady() {}
+
+ protected:
+ virtual ~AudioSourceCallback() {}
};
virtual ~AudioOutputStream() {}
@@ -119,8 +120,6 @@ class MEDIA_EXPORT AudioInputStream {
public:
class MEDIA_EXPORT AudioInputCallback {
public:
- virtual ~AudioInputCallback() {}
-
// Called by the audio recorder when a full packet of audio data is
// available. This is called from a special audio thread and the
// implementation should return as soon as possible.
@@ -138,6 +137,9 @@ class MEDIA_EXPORT AudioInputStream {
// recording will not continue. |code| is an error code that is platform
// specific.
virtual void OnError(AudioInputStream* stream, int code) = 0;
+
+ protected:
+ virtual ~AudioInputCallback() {}
};
virtual ~AudioInputStream() {}
diff --git a/media/audio/audio_output_controller.h b/media/audio/audio_output_controller.h
index 33bf217..a8857a2 100644
--- a/media/audio/audio_output_controller.h
+++ b/media/audio/audio_output_controller.h
@@ -76,11 +76,13 @@ class MEDIA_EXPORT AudioOutputController
// following methods are called on the audio manager thread.
class MEDIA_EXPORT EventHandler {
public:
- virtual ~EventHandler() {}
virtual void OnCreated(AudioOutputController* controller) = 0;
virtual void OnPlaying(AudioOutputController* controller) = 0;
virtual void OnPaused(AudioOutputController* controller) = 0;
virtual void OnError(AudioOutputController* controller, int error_code) = 0;
+
+ protected:
+ virtual ~EventHandler() {}
};
// A synchronous reader interface used by AudioOutputController for
diff --git a/media/base/data_source.h b/media/base/data_source.h
index f2a6a17..78e4cd6 100644
--- a/media/base/data_source.h
+++ b/media/base/data_source.h
@@ -14,8 +14,6 @@ namespace media {
class MEDIA_EXPORT DataSourceHost {
public:
- virtual ~DataSourceHost();
-
// Set the total size of the media file.
virtual void SetTotalBytes(int64 total_bytes) = 0;
@@ -27,6 +25,9 @@ class MEDIA_EXPORT DataSourceHost {
// Notify the host that time range [start,end] has been buffered.
virtual void AddBufferedTimeRange(base::TimeDelta start,
base::TimeDelta end) = 0;
+
+ protected:
+ virtual ~DataSourceHost();
};
class MEDIA_EXPORT DataSource : public base::RefCountedThreadSafe<DataSource> {
diff --git a/media/base/demuxer.h b/media/base/demuxer.h
index 48d0e6a..3fdc37b 100644
--- a/media/base/demuxer.h
+++ b/media/base/demuxer.h
@@ -16,8 +16,6 @@ namespace media {
class MEDIA_EXPORT DemuxerHost : public DataSourceHost {
public:
- virtual ~DemuxerHost();
-
// Sets the duration of the media in microseconds.
// Duration may be kInfiniteDuration() if the duration is not known.
virtual void SetDuration(base::TimeDelta duration) = 0;
@@ -25,6 +23,9 @@ class MEDIA_EXPORT DemuxerHost : public DataSourceHost {
// Stops execution of the pipeline due to a fatal error. Do not call this
// method with PIPELINE_OK.
virtual void OnDemuxerError(PipelineStatus error) = 0;
+
+ protected:
+ virtual ~DemuxerHost();
};
class MEDIA_EXPORT Demuxer : public base::RefCountedThreadSafe<Demuxer> {
diff --git a/media/filters/ffmpeg_glue.h b/media/filters/ffmpeg_glue.h
index 4e122a6..c5aa15c 100644
--- a/media/filters/ffmpeg_glue.h
+++ b/media/filters/ffmpeg_glue.h
@@ -41,8 +41,6 @@ class MEDIA_EXPORT FFmpegURLProtocol {
public:
FFmpegURLProtocol() {}
- virtual ~FFmpegURLProtocol() {}
-
// Read the given amount of bytes into data, returns the number of bytes read
// if successful, kReadError otherwise.
virtual size_t Read(size_t size, uint8* data) = 0;
@@ -61,6 +59,9 @@ class MEDIA_EXPORT FFmpegURLProtocol {
// Returns false if this protocol supports random seeking.
virtual bool IsStreaming() = 0;
+ protected:
+ virtual ~FFmpegURLProtocol() {}
+
private:
DISALLOW_COPY_AND_ASSIGN(FFmpegURLProtocol);
};
diff --git a/media/video/capture/video_capture.h b/media/video/capture/video_capture.h
index b825dff..d0aef98 100644
--- a/media/video/capture/video_capture.h
+++ b/media/video/capture/video_capture.h
@@ -44,7 +44,7 @@ class MEDIA_EXPORT VideoCapture {
// TODO(wjia): add error codes.
// Callbacks provided by client for notification of events.
- class EventHandler {
+ class MEDIA_EXPORT EventHandler {
public:
// Notify client that video capture has been started.
virtual void OnStarted(VideoCapture* capture) = 0;
@@ -70,10 +70,12 @@ class MEDIA_EXPORT VideoCapture {
virtual void OnDeviceInfoReceived(
VideoCapture* capture,
const VideoCaptureParams& device_info) = 0;
+
+ protected:
+ virtual ~EventHandler() {}
};
VideoCapture() {}
- virtual ~VideoCapture() {}
// Request video capture to start capturing with |capability|.
// Also register |handler| with video capture for event handling.
@@ -93,6 +95,9 @@ class MEDIA_EXPORT VideoCapture {
virtual int CaptureHeight() = 0;
virtual int CaptureFrameRate() = 0;
+ protected:
+ virtual ~VideoCapture() {}
+
private:
DISALLOW_COPY_AND_ASSIGN(VideoCapture);
};
diff --git a/media/video/video_decode_accelerator.h b/media/video/video_decode_accelerator.h
index c04d8dc..83d0b95 100644
--- a/media/video/video_decode_accelerator.h
+++ b/media/video/video_decode_accelerator.h
@@ -46,8 +46,6 @@ class MEDIA_EXPORT VideoDecodeAccelerator
// implements.
class MEDIA_EXPORT Client {
public:
- virtual ~Client() {}
-
// Callback to notify client that decoder has been initialized.
virtual void NotifyInitializeDone() = 0;
@@ -74,6 +72,9 @@ class MEDIA_EXPORT VideoDecodeAccelerator
// Callback to notify about decoding errors.
virtual void NotifyError(Error error) = 0;
+
+ protected:
+ virtual ~Client() {}
};
// Video decoder functions.
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc
index 38c5a7e..e1ed947 100644
--- a/media/webm/webm_stream_parser.cc
+++ b/media/webm/webm_stream_parser.cc
@@ -48,7 +48,7 @@ class FFmpegConfigHelper {
scoped_array<uint8> url_protocol_buffer_;
// Protocol used by |format_context_|. It must outlive the context object.
- scoped_ptr<FFmpegURLProtocol> url_protocol_;
+ scoped_ptr<InMemoryUrlProtocol> url_protocol_;
// FFmpeg format context for this demuxer. It is created by
// avformat_open_input() during demuxer initialization and cleaned up with