summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/chrome_content_renderer_client.cc12
-rw-r--r--chrome/renderer/chrome_content_renderer_client.h6
-rw-r--r--chrome/renderer/prerender/prerender_webmediaplayer.cc6
-rw-r--r--chrome/renderer/prerender/prerender_webmediaplayer.h3
-rw-r--r--content/public/renderer/content_renderer_client.h13
-rw-r--r--content/renderer/mock_content_renderer_client.cc11
-rw-r--r--content/renderer/mock_content_renderer_client.h8
-rw-r--r--content/renderer/render_view_impl.cc14
-rw-r--r--content/shell/shell_content_renderer_client.cc11
-rw-r--r--content/shell/shell_content_renderer_client.h8
-rw-r--r--webkit/media/webmediaplayer_impl.cc47
-rw-r--r--webkit/media/webmediaplayer_impl.h10
-rw-r--r--webkit/support/webkit_support.cc20
-rw-r--r--webkit/tools/test_shell/test_webview_delegate.cc20
14 files changed, 84 insertions, 105 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
index fea0e85..90516e6 100644
--- a/chrome/renderer/chrome_content_renderer_client.cc
+++ b/chrome/renderer/chrome_content_renderer_client.cc
@@ -299,23 +299,23 @@ bool ChromeContentRendererClient::OverrideCreatePlugin(
return true;
}
-bool ChromeContentRendererClient::OverrideCreateWebMediaPlayer(
+webkit_media::WebMediaPlayerImpl*
+ChromeContentRendererClient::OverrideCreateWebMediaPlayer(
content::RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) {
+ media::MediaLog* media_log) {
if (!prerender::PrerenderHelper::IsPrerendering(render_view))
- return false;
+ return NULL;
- *player = new prerender::PrerenderWebMediaPlayer(render_view, client,
+ return new prerender::PrerenderWebMediaPlayer(render_view, frame, client,
delegate, collection, audio_source_provider, message_loop_factory,
media_stream_client, media_log);
- return true;
}
WebPlugin* ChromeContentRendererClient::CreatePlugin(
diff --git a/chrome/renderer/chrome_content_renderer_client.h b/chrome/renderer/chrome_content_renderer_client.h
index 9caa32d..05cd4bb 100644
--- a/chrome/renderer/chrome_content_renderer_client.h
+++ b/chrome/renderer/chrome_content_renderer_client.h
@@ -61,16 +61,16 @@ class ChromeContentRendererClient : public content::ContentRendererClient {
const WebKit::WebURLError& error,
std::string* error_html,
string16* error_description) OVERRIDE;
- virtual bool OverrideCreateWebMediaPlayer(
+ virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer(
content::RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) OVERRIDE;
+ media::MediaLog* media_log) OVERRIDE;
virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE;
virtual bool AllowPopup(const GURL& creator) OVERRIDE;
virtual bool ShouldFork(WebKit::WebFrame* frame,
diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.cc b/chrome/renderer/prerender/prerender_webmediaplayer.cc
index c63af25..5a35e12 100644
--- a/chrome/renderer/prerender/prerender_webmediaplayer.cc
+++ b/chrome/renderer/prerender/prerender_webmediaplayer.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -16,6 +16,7 @@ namespace prerender {
PrerenderWebMediaPlayer::PrerenderWebMediaPlayer(
content::RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
@@ -24,7 +25,8 @@ PrerenderWebMediaPlayer::PrerenderWebMediaPlayer(
webkit_media::MediaStreamClient* media_stream_client,
media::MediaLog* media_log)
: RenderViewObserver(render_view),
- WebMediaPlayerImpl(client,
+ WebMediaPlayerImpl(frame,
+ client,
delegate,
collection,
audio_source_provider,
diff --git a/chrome/renderer/prerender/prerender_webmediaplayer.h b/chrome/renderer/prerender/prerender_webmediaplayer.h
index 8370367..9b822fd 100644
--- a/chrome/renderer/prerender/prerender_webmediaplayer.h
+++ b/chrome/renderer/prerender/prerender_webmediaplayer.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -26,6 +26,7 @@ class PrerenderWebMediaPlayer
public:
PrerenderWebMediaPlayer(
content::RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
diff --git a/content/public/renderer/content_renderer_client.h b/content/public/renderer/content_renderer_client.h
index 279d65b..7a9d7cd 100644
--- a/content/public/renderer/content_renderer_client.h
+++ b/content/public/renderer/content_renderer_client.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -104,19 +104,18 @@ class ContentRendererClient {
std::string* error_html,
string16* error_description) = 0;
- // Allows embedder to override creating a WebMediaPlayer. If it returns
- // true, then |player| will contain the created player. Else the content
- // layer should create the media player.
- virtual bool OverrideCreateWebMediaPlayer(
+ // Allows embedder to override creating a WebMediaPlayerImpl. If it returns
+ // NULL the content layer will create the media player.
+ virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer(
RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) = 0;
+ media::MediaLog* media_log) = 0;
// Returns true if the renderer process should schedule the idle handler when
// all widgets are hidden.
diff --git a/content/renderer/mock_content_renderer_client.cc b/content/renderer/mock_content_renderer_client.cc
index 5a50a0e..fe811cc 100644
--- a/content/renderer/mock_content_renderer_client.cc
+++ b/content/renderer/mock_content_renderer_client.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -42,17 +42,18 @@ bool MockContentRendererClient::HasErrorPage(int http_status_code,
return false;
}
-bool MockContentRendererClient::OverrideCreateWebMediaPlayer(
+webkit_media::WebMediaPlayerImpl*
+MockContentRendererClient::OverrideCreateWebMediaPlayer(
RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) {
- return false;
+ media::MediaLog* media_log) {
+ return NULL;
}
void MockContentRendererClient::GetNavigationErrorStrings(
diff --git a/content/renderer/mock_content_renderer_client.h b/content/renderer/mock_content_renderer_client.h
index 7bd1c33..af62886 100644
--- a/content/renderer/mock_content_renderer_client.h
+++ b/content/renderer/mock_content_renderer_client.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -34,16 +34,16 @@ class MockContentRendererClient : public ContentRendererClient {
const WebKit::WebURLError& error,
std::string* error_html,
string16* error_description) OVERRIDE;
- virtual bool OverrideCreateWebMediaPlayer(
+ virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer(
RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) OVERRIDE;
+ media::MediaLog* media_log) OVERRIDE;
virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE;
virtual bool AllowPopup(const GURL& creator) OVERRIDE;
virtual bool ShouldFork(WebKit::WebFrame* frame,
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index c5f1fc6..12a5ac7 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1985,17 +1985,15 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
}
#endif
- webkit_media::WebMediaPlayerImpl* media_player = NULL;
- if (!content::GetContentClient()->renderer()->OverrideCreateWebMediaPlayer(
- this, client, AsWeakPtr(), collection, audio_source_provider,
- message_loop_factory, media_stream_impl_.get(), render_media_log,
- &media_player)) {
+ webkit_media::WebMediaPlayerImpl* media_player =
+ content::GetContentClient()->renderer()->OverrideCreateWebMediaPlayer(
+ this, frame, client, AsWeakPtr(), collection, audio_source_provider,
+ message_loop_factory, media_stream_impl_.get(), render_media_log);
+ if (!media_player) {
media_player = new webkit_media::WebMediaPlayerImpl(
- client, AsWeakPtr(), collection, audio_source_provider,
+ frame, client, AsWeakPtr(), collection, audio_source_provider,
message_loop_factory, media_stream_impl_.get(), render_media_log);
}
-
- media_player->Initialize(frame);
return media_player;
}
diff --git a/content/shell/shell_content_renderer_client.cc b/content/shell/shell_content_renderer_client.cc
index ddf3c44..b1f0d41 100644
--- a/content/shell/shell_content_renderer_client.cc
+++ b/content/shell/shell_content_renderer_client.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -48,17 +48,18 @@ void ShellContentRendererClient::GetNavigationErrorStrings(
string16* error_description) {
}
-bool ShellContentRendererClient::OverrideCreateWebMediaPlayer(
+webkit_media::WebMediaPlayerImpl*
+ShellContentRendererClient::OverrideCreateWebMediaPlayer(
RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) {
- return false;
+ media::MediaLog* media_log) {
+ return NULL;
}
bool ShellContentRendererClient::RunIdleHandlerWhenWidgetsHidden() {
diff --git a/content/shell/shell_content_renderer_client.h b/content/shell/shell_content_renderer_client.h
index e0cdc87..eed6d0b 100644
--- a/content/shell/shell_content_renderer_client.h
+++ b/content/shell/shell_content_renderer_client.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -31,16 +31,16 @@ class ShellContentRendererClient : public ContentRendererClient {
const WebKit::WebURLError& error,
std::string* error_html,
string16* error_description) OVERRIDE;
- virtual bool OverrideCreateWebMediaPlayer(
+ virtual webkit_media::WebMediaPlayerImpl* OverrideCreateWebMediaPlayer(
RenderView* render_view,
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<webkit_media::WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
media::MessageLoopFactory* message_loop_factory,
webkit_media::MediaStreamClient* media_stream_client,
- media::MediaLog* media_log,
- webkit_media::WebMediaPlayerImpl** player) OVERRIDE;
+ media::MediaLog* media_log) OVERRIDE;
virtual bool RunIdleHandlerWhenWidgetsHidden() OVERRIDE;
virtual bool AllowPopup(const GURL& creator) OVERRIDE;
virtual bool ShouldFork(WebKit::WebFrame* frame,
diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc
index 4a24a61..d441e61 100644
--- a/webkit/media/webmediaplayer_impl.cc
+++ b/webkit/media/webmediaplayer_impl.cc
@@ -99,6 +99,7 @@ base::TimeDelta ConvertSecondsToTimestamp(float seconds) {
namespace webkit_media {
WebMediaPlayerImpl::WebMediaPlayerImpl(
+ WebKit::WebFrame* frame,
WebKit::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
@@ -108,9 +109,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
media::MediaLog* media_log)
: network_state_(WebKit::WebMediaPlayer::Empty),
ready_state_(WebKit::WebMediaPlayer::HaveNothing),
- main_loop_(NULL),
+ main_loop_(MessageLoop::current()),
filter_collection_(collection),
- pipeline_(NULL),
message_loop_factory_(message_loop_factory),
paused_(true),
seeking_(false),
@@ -118,48 +118,46 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
pending_seek_(false),
pending_seek_seconds_(0.0f),
client_(client),
- proxy_(NULL),
+ proxy_(new WebMediaPlayerProxy(main_loop_, this)),
delegate_(delegate),
media_stream_client_(media_stream_client),
media_log_(media_log),
is_accelerated_compositing_active_(false),
incremented_externally_allocated_memory_(false),
audio_source_provider_(audio_source_provider) {
- // Saves the current message loop.
- DCHECK(!main_loop_);
- main_loop_ = MessageLoop::current();
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
-}
-void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) {
- DCHECK_EQ(main_loop_, MessageLoop::current());
MessageLoop* pipeline_message_loop =
message_loop_factory_->GetMessageLoop("PipelineThread");
CHECK(pipeline_message_loop) << "Failed to create a new thread";
+ pipeline_ = new media::PipelineImpl(pipeline_message_loop, media_log_);
+ pipeline_->Init(
+ base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback,
+ proxy_.get()),
+ base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback,
+ proxy_.get()),
+ base::Bind(&WebMediaPlayerProxy::NetworkEventCallback,
+ proxy_.get()));
// Let V8 know we started new thread if we did not did it yet.
// Made separate task to avoid deletion of player currently being created.
// Also, delaying GC until after player starts gets rid of starting lag --
// collection happens in parallel with playing.
+ //
// TODO(enal): remove when we get rid of per-audio-stream thread.
- if (!incremented_externally_allocated_memory_) {
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory,
- AsWeakPtr()));
- }
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory,
+ AsWeakPtr()));
is_accelerated_compositing_active_ =
frame->view()->isAcceleratedCompositingActive();
- pipeline_ = new media::PipelineImpl(pipeline_message_loop, media_log_);
-
// Also we want to be notified of |main_loop_| destruction.
main_loop_->AddDestructionObserver(this);
- // Create proxy and default video renderer.
- proxy_ = new WebMediaPlayerProxy(main_loop_, this);
+ // Create default video renderer.
scoped_refptr<VideoRendererImpl> video_renderer =
new VideoRendererImpl(
base::Bind(&WebMediaPlayerProxy::Repaint, proxy_.get()),
@@ -167,15 +165,6 @@ void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) {
filter_collection_->AddVideoRenderer(video_renderer);
proxy_->SetVideoRenderer(video_renderer);
- // Set our pipeline callbacks.
- pipeline_->Init(
- base::Bind(&WebMediaPlayerProxy::PipelineEndedCallback,
- proxy_.get()),
- base::Bind(&WebMediaPlayerProxy::PipelineErrorCallback,
- proxy_.get()),
- base::Bind(&WebMediaPlayerProxy::NetworkEventCallback,
- proxy_.get()));
-
// A simple data source that keeps all data in memory.
scoped_ptr<media::DataSourceFactory> simple_data_source_factory(
SimpleDataSource::CreateFactory(MessageLoop::current(), frame,
@@ -198,7 +187,6 @@ void WebMediaPlayerImpl::Initialize(WebKit::WebFrame* frame) {
data_source_factory.release()), pipeline_message_loop));
std::string source_url = GetClient()->sourceURL().spec();
-
if (!source_url.empty()) {
demuxer_factory.reset(
new media::ChunkDemuxerFactory(source_url,
@@ -265,7 +253,6 @@ URLSchemeForHistogram URLScheme(const GURL& url) {
void WebMediaPlayerImpl::load(const WebKit::WebURL& url) {
DCHECK_EQ(main_loop_, MessageLoop::current());
- DCHECK(proxy_);
UMA_HISTOGRAM_ENUMERATION("Media.URLScheme", URLScheme(url), kMaxURLScheme);
diff --git a/webkit/media/webmediaplayer_impl.h b/webkit/media/webmediaplayer_impl.h
index 1e14a5c..661d7d5 100644
--- a/webkit/media/webmediaplayer_impl.h
+++ b/webkit/media/webmediaplayer_impl.h
@@ -99,9 +99,8 @@ class WebMediaPlayerImpl
// audio data is discarded and media plays back based on wall clock time.
//
// This object takes ownership of the |audio_source_provider|.
- //
- // Callers must call |Initialize()| before they can use the object.
- WebMediaPlayerImpl(WebKit::WebMediaPlayerClient* client,
+ WebMediaPlayerImpl(WebKit::WebFrame* frame,
+ WebKit::WebMediaPlayerClient* client,
base::WeakPtr<WebMediaPlayerDelegate> delegate,
media::FilterCollection* collection,
WebKit::WebAudioSourceProvider* audio_source_provider,
@@ -110,11 +109,6 @@ class WebMediaPlayerImpl
media::MediaLog* media_log);
virtual ~WebMediaPlayerImpl();
- // Finalizes initialization of the object using the given WebFrame.
- //
- // TODO(scherkus): fold this into the constructor http://crbug.com/109958
- void Initialize(WebKit::WebFrame* frame);
-
virtual void load(const WebKit::WebURL& url);
virtual void cancelLoad();
diff --git a/webkit/support/webkit_support.cc b/webkit/support/webkit_support.cc
index fd46091..267e24c 100644
--- a/webkit/support/webkit_support.cc
+++ b/webkit/support/webkit_support.cc
@@ -316,17 +316,15 @@ WebKit::WebMediaPlayer* CreateMediaPlayer(
scoped_ptr<media::FilterCollection> collection(
new media::FilterCollection());
- webkit_media::WebMediaPlayerImpl* media_player =
- new webkit_media::WebMediaPlayerImpl(
- client,
- base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(),
- collection.release(),
- NULL,
- message_loop_factory.release(),
- media_stream_client,
- new media::MediaLog());
- media_player->Initialize(frame);
- return media_player;
+ return new webkit_media::WebMediaPlayerImpl(
+ frame,
+ client,
+ base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(),
+ collection.release(),
+ NULL,
+ message_loop_factory.release(),
+ media_stream_client,
+ new media::MediaLog());
#endif
}
diff --git a/webkit/tools/test_shell/test_webview_delegate.cc b/webkit/tools/test_shell/test_webview_delegate.cc
index 13b84849..f7a5865 100644
--- a/webkit/tools/test_shell/test_webview_delegate.cc
+++ b/webkit/tools/test_shell/test_webview_delegate.cc
@@ -647,17 +647,15 @@ WebMediaPlayer* TestWebViewDelegate::createMediaPlayer(
scoped_ptr<media::FilterCollection> collection(
new media::FilterCollection());
- webkit_media::WebMediaPlayerImpl* media_player =
- new webkit_media::WebMediaPlayerImpl(
- client,
- base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(),
- collection.release(),
- NULL,
- message_loop_factory.release(),
- NULL,
- new media::MediaLog());
- media_player->Initialize(frame);
- return media_player;
+ return new webkit_media::WebMediaPlayerImpl(
+ frame,
+ client,
+ base::WeakPtr<webkit_media::WebMediaPlayerDelegate>(),
+ collection.release(),
+ NULL,
+ message_loop_factory.release(),
+ NULL,
+ new media::MediaLog());
}
WebApplicationCacheHost* TestWebViewDelegate::createApplicationCacheHost(