summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 22:34:24 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 22:34:24 +0000
commitd5aa3fc9385b006bc4a10844aa1b7061f457a514 (patch)
treef665dbfb215ba3156d9faa261d2d5465c2da2127
parentd4833b74f7042a84c85ffc73b9fdf26f515d9ab8 (diff)
downloadchromium_src-d5aa3fc9385b006bc4a10844aa1b7061f457a514.zip
chromium_src-d5aa3fc9385b006bc4a10844aa1b7061f457a514.tar.gz
chromium_src-d5aa3fc9385b006bc4a10844aa1b7061f457a514.tar.bz2
Remove ActiveLoader::Cancel().
This will force clients to rely on the destructor to cancel loaders instead and prevents the situation where you hold onto an ActiveLoader that has been cancelled. BufferedResourceLoader did this inside of didFail(), which led to WillFulfillRead() returning true, which led to a hang since the loader had been cancelled. BUG=106751 TEST=http/tests/appacache/video.html Review URL: http://codereview.chromium.org/9112035 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117712 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--webkit/media/active_loader.cc6
-rw-r--r--webkit/media/active_loader.h3
-rw-r--r--webkit/media/buffered_data_source_unittest.cc4
-rw-r--r--webkit/media/buffered_resource_loader.cc4
4 files changed, 5 insertions, 12 deletions
diff --git a/webkit/media/active_loader.cc b/webkit/media/active_loader.cc
index 767ddff..cc1c5e2 100644
--- a/webkit/media/active_loader.cc
+++ b/webkit/media/active_loader.cc
@@ -15,7 +15,7 @@ ActiveLoader::ActiveLoader(scoped_ptr<WebKit::WebURLLoader> loader)
}
ActiveLoader::~ActiveLoader() {
- Cancel();
+ loader_->cancel();
}
void ActiveLoader::SetDeferred(bool deferred) {
@@ -23,8 +23,4 @@ void ActiveLoader::SetDeferred(bool deferred) {
loader_->setDefersLoading(deferred);
}
-void ActiveLoader::Cancel() {
- loader_->cancel();
-}
-
} // namespace webkit_media
diff --git a/webkit/media/active_loader.h b/webkit/media/active_loader.h
index b7300fc..1717307 100644
--- a/webkit/media/active_loader.h
+++ b/webkit/media/active_loader.h
@@ -28,9 +28,6 @@ class ActiveLoader {
void SetDeferred(bool deferred);
bool deferred() { return deferred_; }
- // Cancels the URL loader associated with this object.
- void Cancel();
-
private:
friend class BufferedDataSourceTest;
diff --git a/webkit/media/buffered_data_source_unittest.cc b/webkit/media/buffered_data_source_unittest.cc
index 98a34d6..f1d60e2 100644
--- a/webkit/media/buffered_data_source_unittest.cc
+++ b/webkit/media/buffered_data_source_unittest.cc
@@ -401,7 +401,6 @@ TEST_F(BufferedDataSourceTest, SetBitrate) {
EXPECT_EQ(1234, loader_bitrate());
// During teardown we'll also report our final network status.
- EXPECT_CALL(host_, SetNetworkActivity(true));
EXPECT_CALL(host_, SetBufferedBytes(4000000));
EXPECT_TRUE(data_source_->loading());
@@ -427,7 +426,6 @@ TEST_F(BufferedDataSourceTest, SetPlaybackRate) {
EXPECT_NE(old_loader, loader());
// During teardown we'll also report our final network status.
- EXPECT_CALL(host_, SetNetworkActivity(true));
EXPECT_CALL(host_, SetBufferedBytes(4000000));
EXPECT_TRUE(data_source_->loading());
@@ -447,8 +445,8 @@ TEST_F(BufferedDataSourceTest, Read) {
FinishRead();
// During teardown we'll also report our final network status.
+ EXPECT_CALL(host_, SetNetworkActivity(false));
EXPECT_CALL(host_, SetBufferedBytes(kDataSize));
- //EXPECT_CALL(host_, SetNetworkActivity(false));
EXPECT_TRUE(data_source_->loading());
Stop();
diff --git a/webkit/media/buffered_resource_loader.cc b/webkit/media/buffered_resource_loader.cc
index afac0db..4bb6d80 100644
--- a/webkit/media/buffered_resource_loader.cc
+++ b/webkit/media/buffered_resource_loader.cc
@@ -511,7 +511,9 @@ void BufferedResourceLoader::didFail(
DCHECK(active_loader_.get());
// We don't need to continue loading after failure.
- active_loader_->Cancel();
+ //
+ // Keep it alive until we exit this method so that |error| remains valid.
+ scoped_ptr<ActiveLoader> active_loader(active_loader_.release());
NotifyNetworkEvent();
// Don't leave start callbacks hanging around.