summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscottfr@chromium.org <scottfr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-05 23:26:40 +0000
committerscottfr@chromium.org <scottfr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-05 23:26:40 +0000
commit090f7313473bb61b6b294f1bfbb3b05f9140dec3 (patch)
tree1b576c7618ac4f85a45ab7aa1237a3aff8597276
parentd91b48f15b5e550f5e0ff3550d51ef8aeebdd2b1 (diff)
downloadchromium_src-090f7313473bb61b6b294f1bfbb3b05f9140dec3.zip
chromium_src-090f7313473bb61b6b294f1bfbb3b05f9140dec3.tar.gz
chromium_src-090f7313473bb61b6b294f1bfbb3b05f9140dec3.tar.bz2
Plumb media data from renderers up to MediaInternals in the browser process.
Relanding 95542. Reverted due to issue caused by 95496. BUG=none TEST=manually Review URL: http://codereview.chromium.org/7480032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95685 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/media/DEPS3
-rw-r--r--chrome/browser/media/media_internals.cc8
-rw-r--r--chrome/browser/media/media_internals.h6
-rw-r--r--content/browser/renderer_host/media/media_observer.h8
-rw-r--r--content/browser/renderer_host/media/mock_media_observer.h3
-rw-r--r--content/browser/renderer_host/render_message_filter.cc8
-rw-r--r--content/browser/renderer_host/render_message_filter.h5
-rw-r--r--content/common/DEPS3
-rw-r--r--content/common/view_messages.h12
-rw-r--r--content/content_renderer.gypi2
-rw-r--r--content/renderer/media/render_media_log.cc28
-rw-r--r--content/renderer/media/render_media_log.h32
-rw-r--r--content/renderer/render_view.cc4
-rw-r--r--media/base/media_log.cc60
-rw-r--r--media/base/media_log.h50
-rw-r--r--media/base/media_log_event.h39
-rw-r--r--media/media.gyp3
-rw-r--r--webkit/glue/webmediaplayer_impl.cc15
-rw-r--r--webkit/glue/webmediaplayer_impl.h9
-rw-r--r--webkit/support/webkit_support.cc4
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.cc4
21 files changed, 300 insertions, 6 deletions
diff --git a/chrome/browser/media/DEPS b/chrome/browser/media/DEPS
new file mode 100644
index 0000000..cc5cd70
--- /dev/null
+++ b/chrome/browser/media/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+media/base",
+]
diff --git a/chrome/browser/media/media_internals.cc b/chrome/browser/media/media_internals.cc
index bf63281..a563db3 100644
--- a/chrome/browser/media/media_internals.cc
+++ b/chrome/browser/media/media_internals.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/media/media_internals_observer.h"
#include "content/browser/browser_thread.h"
#include "content/browser/webui/web_ui.h"
+#include "media/base/media_log_event.h"
// The names of the javascript functions to call with updates.
static const char kDeleteItemFunction[] = "media.onItemDeleted";
@@ -46,6 +47,13 @@ void MediaInternals::OnSetAudioStreamVolume(
"volume", Value::CreateDoubleValue(volume));
}
+void MediaInternals::OnMediaEvent(
+ int render_process_id, const media::MediaLogEvent& event) {
+ DCHECK(CalledOnValidThread());
+ // TODO(scottfr): Handle |event|. Record status information in data_ and pass
+ // |event| along to observers.
+}
+
void MediaInternals::AddObserver(MediaInternalsObserver* observer) {
DCHECK(CalledOnValidThread());
observers_.AddObserver(observer);
diff --git a/chrome/browser/media/media_internals.h b/chrome/browser/media/media_internals.h
index c0d276e..a5b62e1 100644
--- a/chrome/browser/media/media_internals.h
+++ b/chrome/browser/media/media_internals.h
@@ -14,6 +14,10 @@
class MediaInternalsObserver;
+namespace media {
+struct MediaLogEvent;
+}
+
// This class stores information about currently active media.
// All of its methods are called on the IO thread.
class MediaInternals : public MediaObserver, public base::NonThreadSafe {
@@ -26,6 +30,8 @@ class MediaInternals : public MediaObserver, public base::NonThreadSafe {
virtual void OnSetAudioStreamStatus(void* host, int stream_id,
const std::string& status);
virtual void OnSetAudioStreamVolume(void* host, int stream_id, double volume);
+ virtual void OnMediaEvent(int render_process_id,
+ const media::MediaLogEvent& event);
// Methods for observers.
// Observers should add themselves on construction and remove themselves
diff --git a/content/browser/renderer_host/media/media_observer.h b/content/browser/renderer_host/media/media_observer.h
index 50e42e0..6c5f056 100644
--- a/content/browser/renderer_host/media/media_observer.h
+++ b/content/browser/renderer_host/media/media_observer.h
@@ -6,6 +6,10 @@
#define CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_OBSERVER_H_
#pragma once
+namespace media {
+struct MediaLogEvent;
+}
+
// A class may implement MediaObserver and register itself with ResourceContext
// to receive callbacks as media events occur.
class MediaObserver {
@@ -27,6 +31,10 @@ class MediaObserver {
// Called when the volume of an audio stream is set.
virtual void OnSetAudioStreamVolume(void* host, int stream_id,
double volume) = 0;
+
+ // Called when a MediaEvent occurs.
+ virtual void OnMediaEvent(int render_process_id,
+ const media::MediaLogEvent& event) = 0;
};
#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MEDIA_OBSERVER_H_
diff --git a/content/browser/renderer_host/media/mock_media_observer.h b/content/browser/renderer_host/media/mock_media_observer.h
index 3260265..b98099d 100644
--- a/content/browser/renderer_host/media/mock_media_observer.h
+++ b/content/browser/renderer_host/media/mock_media_observer.h
@@ -10,6 +10,7 @@
#include "base/basictypes.h"
#include "content/browser/renderer_host/media/media_observer.h"
+#include "media/base/media_log_event.h"
#include "testing/gmock/include/gmock/gmock.h"
class MockMediaObserver : public MediaObserver {
@@ -25,6 +26,8 @@ class MockMediaObserver : public MediaObserver {
void(void* host, int stream_id, const std::string& status));
MOCK_METHOD3(OnSetAudioStreamVolume,
void(void* host, int stream_id, double volume));
+ MOCK_METHOD2(OnMediaEvent,
+ void(int source, const media::MediaLogEvent& event));
};
#endif // CONTENT_BROWSER_RENDERER_HOST_MEDIA_MOCK_MEDIA_OBSERVER_H_
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
index 0e076ca..389f30e 100644
--- a/content/browser/renderer_host/render_message_filter.cc
+++ b/content/browser/renderer_host/render_message_filter.cc
@@ -24,8 +24,10 @@
#include "content/browser/ppapi_plugin_process_host.h"
#include "content/browser/ppapi_broker_process_host.h"
#include "content/browser/renderer_host/browser_render_process_host.h"
+#include "content/browser/renderer_host/media/media_observer.h"
#include "content/browser/renderer_host/render_view_host_delegate.h"
#include "content/browser/renderer_host/render_widget_helper.h"
+#include "content/browser/resource_context.h"
#include "content/browser/user_metrics.h"
#include "content/common/content_switches.h"
#include "content/common/desktop_notification_messages.h"
@@ -35,6 +37,7 @@
#include "ipc/ipc_channel_handle.h"
#include "ipc/ipc_platform_file.h"
#include "media/audio/audio_util.h"
+#include "media/base/media_log_event.h"
#include "net/base/cookie_monster.h"
#include "net/base/host_resolver_impl.h"
#include "net/base/io_buffer.h"
@@ -369,6 +372,7 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(ViewHostMsg_AsyncOpenFile, OnAsyncOpenFile)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetHardwareSampleRate,
OnGetHardwareSampleRate)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_MediaLogEvent, OnMediaLogEvent)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
@@ -867,6 +871,10 @@ void RenderMessageFilter::AsyncOpenFileOnFileThread(const FilePath& path,
this, &RenderMessageFilter::Send, reply));
}
+void RenderMessageFilter::OnMediaLogEvent(const media::MediaLogEvent& event) {
+ resource_context_.media_observer()->OnMediaEvent(render_process_id_, event);
+}
+
void RenderMessageFilter::CheckPolicyForCookies(
const GURL& url,
const GURL& first_party_for_cookies,
diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h
index 8cdd496..81829cc 100644
--- a/content/browser/renderer_host/render_message_filter.h
+++ b/content/browser/renderer_host/render_message_filter.h
@@ -49,6 +49,10 @@ namespace gfx {
class Rect;
}
+namespace media {
+struct MediaLogEvent;
+}
+
namespace net {
class CookieList;
class URLRequestContextGetter;
@@ -212,6 +216,7 @@ class RenderMessageFilter : public BrowserMessageFilter {
int flags,
int message_id,
int routing_id);
+ void OnMediaLogEvent(const media::MediaLogEvent&);
// Check the policy for getting cookies. Gets the cookies if allowed.
void CheckPolicyForCookies(const GURL& url,
diff --git a/content/common/DEPS b/content/common/DEPS
new file mode 100644
index 0000000..bffb29b
--- /dev/null
+++ b/content/common/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+media/base", # For media_log_event.h.
+]
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 0698af6..4022238 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -18,6 +18,7 @@
#include "content/common/window_container_type.h"
#include "ipc/ipc_message_macros.h"
#include "ipc/ipc_platform_file.h"
+#include "media/base/media_log_event.h"
#include "net/base/host_port_pair.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCompositionUnderline.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFindOptions.h"
@@ -172,6 +173,7 @@ IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::IntAttribute)
IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::Role)
IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::State)
IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::StringAttribute)
+IPC_ENUM_TRAITS(media::MediaLogEvent::Type)
IPC_STRUCT_TRAITS_BEGIN(ContextMenuParams)
IPC_STRUCT_TRAITS_MEMBER(media_type)
@@ -408,6 +410,13 @@ IPC_STRUCT_TRAITS_BEGIN(webkit::npapi::WebPluginInfo)
IPC_STRUCT_TRAITS_MEMBER(enabled)
IPC_STRUCT_TRAITS_END()
+IPC_STRUCT_TRAITS_BEGIN(media::MediaLogEvent)
+ IPC_STRUCT_TRAITS_MEMBER(id)
+ IPC_STRUCT_TRAITS_MEMBER(type)
+ IPC_STRUCT_TRAITS_MEMBER(params)
+ IPC_STRUCT_TRAITS_MEMBER(time)
+IPC_STRUCT_TRAITS_END()
+
IPC_STRUCT_BEGIN(ViewHostMsg_CreateWindow_Params)
// Routing ID of the view initiating the open.
IPC_STRUCT_MEMBER(int, opener_id)
@@ -2028,3 +2037,6 @@ IPC_MESSAGE_ROUTED3(ViewHostMsg_SendSerializedHtmlData,
// being sent back.
IPC_MESSAGE_ROUTED0(ViewHostMsg_RequestRemoteAccessClientFirewallTraversal)
+// Notifies the browser of an event occurring in the media pipeline.
+IPC_MESSAGE_CONTROL1(ViewHostMsg_MediaLogEvent,
+ media::MediaLogEvent /* event */)
diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi
index 64c2f8a..ac6034f 100644
--- a/content/content_renderer.gypi
+++ b/content/content_renderer.gypi
@@ -81,6 +81,8 @@
'renderer/media/media_stream_dispatcher_eventhandler.h',
'renderer/media/media_stream_impl.cc',
'renderer/media/media_stream_impl.h',
+ 'renderer/media/render_media_log.cc',
+ 'renderer/media/render_media_log.h',
'renderer/media/rtc_video_decoder.cc',
'renderer/media/rtc_video_decoder.h',
'renderer/media/video_capture_impl.cc',
diff --git a/content/renderer/media/render_media_log.cc b/content/renderer/media/render_media_log.cc
new file mode 100644
index 0000000..988a006
--- /dev/null
+++ b/content/renderer/media/render_media_log.cc
@@ -0,0 +1,28 @@
+// Copyright (c) 2011 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 "content/renderer/media/render_media_log.h"
+
+#include "base/message_loop_proxy.h"
+#include "content/common/view_messages.h"
+#include "content/renderer/render_thread.h"
+
+RenderMediaLog::RenderMediaLog()
+ : render_loop_(base::MessageLoopProxy::CreateForCurrentThread()) {
+ DCHECK(RenderThread::current()) <<
+ "RenderMediaLog must be constructed on the render thread";
+}
+
+void RenderMediaLog::AddEvent(media::MediaLogEvent* event) {
+ scoped_ptr<media::MediaLogEvent> e(event);
+
+ if (RenderThread::current()) {
+ RenderThread::current()->Send(new ViewHostMsg_MediaLogEvent(*e));
+ } else {
+ render_loop_->PostTask(FROM_HERE,
+ NewRunnableMethod(this, &RenderMediaLog::AddEvent, e.release()));
+ }
+}
+
+RenderMediaLog::~RenderMediaLog() {}
diff --git a/content/renderer/media/render_media_log.h b/content/renderer/media/render_media_log.h
new file mode 100644
index 0000000..62866e81
--- /dev/null
+++ b/content/renderer/media/render_media_log.h
@@ -0,0 +1,32 @@
+// Copyright (c) 2011 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.
+
+#ifndef CONTENT_RENDERER_MEDIA_RENDER_MEDIA_LOG_H_
+#define CONTENT_RENDERER_MEDIA_RENDER_MEDIA_LOG_H_
+#pragma once
+
+#include "media/base/media_log.h"
+
+namespace base {
+class MessageLoopProxy;
+}
+
+// RenderMediaLog is an implementation of MediaLog that passes all events to the
+// browser process.
+class RenderMediaLog : public media::MediaLog {
+ public:
+ RenderMediaLog();
+
+ // MediaLog implementation.
+ virtual void AddEvent(media::MediaLogEvent* event);
+
+ private:
+ virtual ~RenderMediaLog();
+
+ scoped_refptr<base::MessageLoopProxy> render_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(RenderMediaLog);
+};
+
+#endif // CONTENT_RENDERER_MEDIA_RENDER_MEDIA_LOG_H_
diff --git a/content/renderer/render_view.cc b/content/renderer/render_view.cc
index 368cc33..a0bea3c 100644
--- a/content/renderer/render_view.cc
+++ b/content/renderer/render_view.cc
@@ -50,6 +50,7 @@
#include "content/renderer/media/audio_message_filter.h"
#include "content/renderer/media/audio_renderer_impl.h"
#include "content/renderer/media/media_stream_impl.h"
+#include "content/renderer/media/render_media_log.h"
#include "content/renderer/navigation_state.h"
#include "content/renderer/notification_provider.h"
#include "content/renderer/p2p/socket_dispatcher.h"
@@ -1968,7 +1969,8 @@ WebMediaPlayer* RenderView::createMediaPlayer(
new webkit_glue::WebMediaPlayerImpl(client,
collection.release(),
message_loop_factory.release(),
- media_stream_impl_.get()));
+ media_stream_impl_.get(),
+ new RenderMediaLog()));
if (!result->Initialize(frame,
cmd_line->HasSwitch(switches::kSimpleDataSource),
video_renderer)) {
diff --git a/media/base/media_log.cc b/media/base/media_log.cc
new file mode 100644
index 0000000..6bcbcd71
--- /dev/null
+++ b/media/base/media_log.cc
@@ -0,0 +1,60 @@
+// Copyright (c) 2011 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 "media/base/media_log.h"
+
+#include "base/atomic_sequence_num.h"
+#include "base/logging.h"
+
+namespace media {
+
+// A count of all MediaLogs created on this render process.
+// Used to generate unique ids.
+static base::AtomicSequenceNumber media_log_count(base::LINKER_INITIALIZED);
+
+const char* MediaLog::EventTypeToString(MediaLogEvent::Type type) {
+ switch (type) {
+ case MediaLogEvent::CREATING:
+ return "CREATING";
+ case MediaLogEvent::DESTROYING:
+ return "DESTROYING";
+ case MediaLogEvent::LOAD:
+ return "LOAD";
+ case MediaLogEvent::PLAY:
+ return "PLAY";
+ case MediaLogEvent::PAUSE:
+ return "PAUSE";
+ }
+ NOTREACHED();
+ return NULL;
+}
+
+MediaLog::MediaLog() {
+ id_ = media_log_count.GetNext();
+}
+
+MediaLog::~MediaLog() {}
+
+void MediaLog::Load(const std::string& url) {
+ MediaLogEvent* event = CreateEvent(MediaLogEvent::LOAD);
+ event->params.SetString("url", url);
+ AddEvent(event);
+}
+
+void MediaLog::AddEventOfType(MediaLogEvent::Type type) {
+ MediaLogEvent* event = CreateEvent(type);
+ AddEvent(event);
+}
+
+MediaLogEvent* MediaLog::CreateEvent(MediaLogEvent::Type type) {
+ MediaLogEvent* event = new MediaLogEvent;
+ event->id = id_;
+ event->type = type;
+ event->time = base::Time::Now();
+ return event;
+}
+
+void MediaLog::AddEvent(MediaLogEvent* event) {}
+
+} //namespace media
diff --git a/media/base/media_log.h b/media/base/media_log.h
new file mode 100644
index 0000000..fcf0c31
--- /dev/null
+++ b/media/base/media_log.h
@@ -0,0 +1,50 @@
+// Copyright (c) 2011 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.
+
+#ifndef MEDIA_BASE_MEDIA_LOG_H_
+#define MEDIA_BASE_MEDIA_LOG_H_
+#pragma once
+
+#include "base/memory/ref_counted.h"
+#include "media/base/media_log_event.h"
+
+namespace media {
+
+class MediaLog : public base::RefCountedThreadSafe<MediaLog> {
+ public:
+
+ // Return a string to represent an EventType.
+ static const char* EventTypeToString(MediaLogEvent::Type type);
+
+ MediaLog();
+
+ // Methods called by loggers when events occur. These generate appropriate
+ // event parameters so the caller need not worry about them.
+ void Load(const std::string& url);
+
+ // Add an event to this log. Overriden by inheritors to actually do something
+ // with it.
+ // Takes ownership of |event|.
+ virtual void AddEvent(MediaLogEvent* event);
+
+ // Convenience method for adding an event with no parameters.
+ void AddEventOfType(MediaLogEvent::Type type);
+
+ // Convenience method for filling in common fields of a new event.
+ MediaLogEvent* CreateEvent(MediaLogEvent::Type type);
+
+ protected:
+ friend class base::RefCountedThreadSafe<MediaLog>;
+ virtual ~MediaLog();
+
+ private:
+ // A unique (to this process) id for this MediaLog.
+ int32 id_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaLog);
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_MEDIA_LOG_H_
diff --git a/media/base/media_log_event.h b/media/base/media_log_event.h
new file mode 100644
index 0000000..dd1735e
--- /dev/null
+++ b/media/base/media_log_event.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2011 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.
+
+#ifndef MEDIA_BASE_MEDIA_LOG_EVENT_H_
+#define MEDIA_BASE_MEDIA_LOG_EVENT_H_
+#pragma once
+
+#include "base/time.h"
+#include "base/values.h"
+
+namespace media {
+
+struct MediaLogEvent {
+ enum Type {
+ // A media player is being created or destroyed.
+ // params: none.
+ CREATING,
+ DESTROYING,
+
+ // A media player is loading a resource.
+ // params: "url": <URL of the resource>.
+ LOAD,
+
+ // A media player has been told to play or pause.
+ // params: none.
+ PLAY,
+ PAUSE,
+ };
+
+ int32 id;
+ Type type;
+ base::DictionaryValue params;
+ base::Time time;
+};
+
+} // namespace media
+
+#endif // MEDIA_BASE_MEDIA_LOG_EVENT_H_
diff --git a/media/media.gyp b/media/media.gyp
index efcb8a6..d93ad41 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -104,6 +104,9 @@
'base/h264_bitstream_converter.cc',
'base/h264_bitstream_converter.h',
'base/media.h',
+ 'base/media_log.cc',
+ 'base/media_log.h',
+ 'base/media_log_event.h',
'base/media_posix.cc',
'base/media_switches.cc',
'base/media_switches.h',
diff --git a/webkit/glue/webmediaplayer_impl.cc b/webkit/glue/webmediaplayer_impl.cc
index ba3eedb..30af6d6 100644
--- a/webkit/glue/webmediaplayer_impl.cc
+++ b/webkit/glue/webmediaplayer_impl.cc
@@ -12,6 +12,7 @@
#include "media/base/composite_data_source_factory.h"
#include "media/base/filter_collection.h"
#include "media/base/limits.h"
+#include "media/base/media_log.h"
#include "media/base/media_switches.h"
#include "media/base/pipeline_impl.h"
#include "media/base/video_frame.h"
@@ -319,7 +320,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
WebKit::WebMediaPlayerClient* client,
media::FilterCollection* collection,
media::MessageLoopFactory* message_loop_factory,
- MediaStreamClient* media_stream_client)
+ MediaStreamClient* media_stream_client,
+ media::MediaLog* media_log)
: network_state_(WebKit::WebMediaPlayer::Empty),
ready_state_(WebKit::WebMediaPlayer::HaveNothing),
main_loop_(NULL),
@@ -331,10 +333,12 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
playback_rate_(0.0f),
client_(client),
proxy_(NULL),
- media_stream_client_(media_stream_client) {
+ media_stream_client_(media_stream_client),
+ media_log_(media_log) {
// Saves the current message loop.
DCHECK(!main_loop_);
main_loop_ = MessageLoop::current();
+ media_log_->AddEventOfType(media::MediaLogEvent::CREATING);
}
bool WebMediaPlayerImpl::Initialize(
@@ -421,6 +425,7 @@ bool WebMediaPlayerImpl::Initialize(
}
WebMediaPlayerImpl::~WebMediaPlayerImpl() {
+ media_log_->AddEventOfType(media::MediaLogEvent::DESTROYING);
Destroy();
// Finally tell the |main_loop_| we don't want to be notified of destruction
@@ -458,6 +463,8 @@ void WebMediaPlayerImpl::load(const WebKit::WebURL& url) {
url.spec(),
NewCallback(proxy_.get(),
&WebMediaPlayerImpl::Proxy::PipelineInitializationCallback));
+
+ media_log_->Load(url.spec());
}
void WebMediaPlayerImpl::cancelLoad() {
@@ -469,6 +476,8 @@ void WebMediaPlayerImpl::play() {
paused_ = false;
pipeline_->SetPlaybackRate(playback_rate_);
+
+ media_log_->AddEventOfType(media::MediaLogEvent::PLAY);
}
void WebMediaPlayerImpl::pause() {
@@ -477,6 +486,8 @@ void WebMediaPlayerImpl::pause() {
paused_ = true;
pipeline_->SetPlaybackRate(0.0f);
paused_time_ = pipeline_->GetCurrentTime();
+
+ media_log_->AddEventOfType(media::MediaLogEvent::PAUSE);
}
bool WebMediaPlayerImpl::supportsFullscreen() const {
diff --git a/webkit/glue/webmediaplayer_impl.h b/webkit/glue/webmediaplayer_impl.h
index 6ab8398..b4858f7 100644
--- a/webkit/glue/webmediaplayer_impl.h
+++ b/webkit/glue/webmediaplayer_impl.h
@@ -77,6 +77,10 @@ namespace WebKit {
class WebFrame;
}
+namespace media {
+class MediaLog;
+}
+
namespace webkit_glue {
class MediaResourceLoaderBridgeFactory;
@@ -208,7 +212,8 @@ class WebMediaPlayerImpl
WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client,
media::FilterCollection* collection,
media::MessageLoopFactory* message_loop_factory,
- MediaStreamClient* media_stream_client);
+ MediaStreamClient* media_stream_client,
+ media::MediaLog* media_log);
virtual ~WebMediaPlayerImpl();
// Finalizes initialization of the object.
@@ -361,6 +366,8 @@ class WebMediaPlayerImpl
scoped_ptr<skia::PlatformCanvas> skia_canvas_;
#endif
+ scoped_refptr<media::MediaLog> media_log_;
+
DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImpl);
};
diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc
index 139c4b4..c0c6766 100644
--- a/webkit/support/webkit_support.cc
+++ b/webkit/support/webkit_support.cc
@@ -27,6 +27,7 @@
#include "googleurl/src/url_util.h"
#include "grit/webkit_chromium_resources.h"
#include "media/base/filter_collection.h"
+#include "media/base/media_log.h"
#include "media/base/message_loop_factory_impl.h"
#include "net/base/escape.h"
#include "net/base/net_errors.h"
@@ -309,7 +310,8 @@ WebKit::WebMediaPlayer* CreateMediaPlayer(WebFrame* frame,
new webkit_glue::WebMediaPlayerImpl(client,
collection.release(),
message_loop_factory.release(),
- NULL));
+ NULL,
+ new media::MediaLog()));
if (!result->Initialize(frame, false, video_renderer)) {
return NULL;
}
diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc
index d327006..5e9af04 100644
--- a/webkit/tools/test_shell/test_webview_delegate.cc
+++ b/webkit/tools/test_shell/test_webview_delegate.cc
@@ -17,6 +17,7 @@
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "media/base/filter_collection.h"
+#include "media/base/media_log.h"
#include "media/base/message_loop_factory_impl.h"
#include "net/base/net_errors.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebAccessibilityObject.h"
@@ -625,7 +626,8 @@ WebMediaPlayer* TestWebViewDelegate::createMediaPlayer(
new webkit_glue::WebMediaPlayerImpl(client,
collection.release(),
message_loop_factory.release(),
- NULL));
+ NULL,
+ new media::MediaLog()));
if (!result->Initialize(frame, false, video_renderer)) {
return NULL;
}