Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(811)

Unified Diff: webkit/media/simple_data_source_unittest.cc

Issue 9344003: Fix re-entrancy bug in SimpleDataSource::Abort() introduced in r118338. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/media/simple_data_source.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/media/simple_data_source_unittest.cc
diff --git a/webkit/media/simple_data_source_unittest.cc b/webkit/media/simple_data_source_unittest.cc
index becef1042d02d42ef6ed75e39928035cc1a92787..e49c489246e866e85a7d43721d35da6938d72eeb 100644
--- a/webkit/media/simple_data_source_unittest.cc
+++ b/webkit/media/simple_data_source_unittest.cc
@@ -127,10 +127,15 @@ class SimpleDataSourceTest : public testing::Test {
MessageLoop::current()->RunAllPending();
}
- void DestroyDataSource() {
+ void StopAndDestroyDataSource() {
data_source_->Stop(media::NewExpectedClosure());
MessageLoop::current()->RunAllPending();
+ data_source_ = NULL;
+ }
+ void AbortAndDestroyDataSource() {
+ data_source_->Abort();
+ MessageLoop::current()->RunAllPending();
data_source_ = NULL;
}
@@ -168,21 +173,21 @@ TEST_F(SimpleDataSourceTest, InitializeHTTP) {
InitializeDataSource(kHttpUrl,
media::NewExpectedStatusCB(media::PIPELINE_OK));
RequestSucceeded();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
TEST_F(SimpleDataSourceTest, InitializeHTTPS) {
InitializeDataSource(kHttpsUrl,
media::NewExpectedStatusCB(media::PIPELINE_OK));
RequestSucceeded();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
TEST_F(SimpleDataSourceTest, InitializeFile) {
InitializeDataSource(kFileUrl,
media::NewExpectedStatusCB(media::PIPELINE_OK));
RequestSucceeded();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
TEST_F(SimpleDataSourceTest, InitializeData) {
@@ -201,14 +206,14 @@ TEST_F(SimpleDataSourceTest, InitializeData) {
media::NewExpectedStatusCB(media::PIPELINE_OK));
MessageLoop::current()->RunAllPending();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
TEST_F(SimpleDataSourceTest, RequestFailed) {
InitializeDataSource(kHttpUrl,
media::NewExpectedStatusCB(media::PIPELINE_ERROR_NETWORK));
RequestFailed();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
static void OnStatusCB(bool* called, media::PipelineStatus status) {
@@ -222,7 +227,18 @@ TEST_F(SimpleDataSourceTest, StopWhenDownloading) {
InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called));
EXPECT_CALL(*url_loader_, cancel());
- DestroyDataSource();
+ StopAndDestroyDataSource();
+ EXPECT_FALSE(was_called);
+}
+
+TEST_F(SimpleDataSourceTest, AbortWhenDownloading) {
+ // The callback should be deleted, but not executed.
+ // TODO(scherkus): should this really be the behaviour? Seems strange...
+ bool was_called = false;
+ InitializeDataSource(kHttpUrl, base::Bind(&OnStatusCB, &was_called));
+
+ EXPECT_CALL(*url_loader_, cancel());
+ AbortAndDestroyDataSource();
EXPECT_FALSE(was_called);
}
@@ -231,7 +247,7 @@ TEST_F(SimpleDataSourceTest, AsyncRead) {
media::NewExpectedStatusCB(media::PIPELINE_OK));
RequestSucceeded();
AsyncRead();
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
// NOTE: This test will need to be reworked a little once
@@ -243,7 +259,7 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) {
media::NewExpectedStatusCB(media::PIPELINE_OK));
RequestSucceeded();
EXPECT_TRUE(data_source_->HasSingleOrigin());
- DestroyDataSource();
+ StopAndDestroyDataSource();
// Test redirect to the same domain.
InitializeDataSource(kHttpUrl,
@@ -251,7 +267,7 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) {
Redirect(kHttpRedirectToSameDomainUrl1);
RequestSucceeded();
EXPECT_TRUE(data_source_->HasSingleOrigin());
- DestroyDataSource();
+ StopAndDestroyDataSource();
// Test redirect twice to the same domain.
InitializeDataSource(kHttpUrl,
@@ -260,7 +276,7 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) {
Redirect(kHttpRedirectToSameDomainUrl2);
RequestSucceeded();
EXPECT_TRUE(data_source_->HasSingleOrigin());
- DestroyDataSource();
+ StopAndDestroyDataSource();
// Test redirect to a different domain.
InitializeDataSource(kHttpUrl,
@@ -268,7 +284,7 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) {
Redirect(kHttpRedirectToDifferentDomainUrl1);
RequestSucceeded();
EXPECT_FALSE(data_source_->HasSingleOrigin());
- DestroyDataSource();
+ StopAndDestroyDataSource();
// Test redirect to the same domain and then to a different domain.
InitializeDataSource(kHttpUrl,
@@ -277,7 +293,7 @@ TEST_F(SimpleDataSourceTest, HasSingleOrigin) {
Redirect(kHttpRedirectToDifferentDomainUrl1);
RequestSucceeded();
EXPECT_FALSE(data_source_->HasSingleOrigin());
- DestroyDataSource();
+ StopAndDestroyDataSource();
}
} // namespace webkit_media
« no previous file with comments | « webkit/media/simple_data_source.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698