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

Side by Side Diff: webkit/glue/media/simple_data_source_unittest.cc

Issue 5619002: Revert 68094 - Refactoring BufferedDataSource to work with WebURLLoader inste... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/glue/media/simple_data_source.cc ('k') | webkit/glue/mock_webframe.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/callback.h" 5 #include "base/callback.h"
6 #include "media/base/filters.h" 6 #include "media/base/filters.h"
7 #include "media/base/mock_filter_host.h" 7 #include "media/base/mock_filter_host.h"
8 #include "media/base/mock_filters.h" 8 #include "media/base/mock_filters.h"
9 #include "net/base/net_errors.h" 9 #include "webkit/glue/media/mock_media_resource_loader_bridge_factory.h"
10 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
11 #include "third_party/WebKit/WebKit/chromium/public/WebURLError.h"
12 #include "third_party/WebKit/WebKit/chromium/public/WebURLLoader.h"
13 #include "third_party/WebKit/WebKit/chromium/public/WebURLRequest.h"
14 #include "third_party/WebKit/WebKit/chromium/public/WebURLResponse.h"
15 #include "webkit/glue/media/simple_data_source.h" 10 #include "webkit/glue/media/simple_data_source.h"
16 #include "webkit/glue/mock_webframe.h" 11 #include "webkit/glue/mock_resource_loader_bridge.h"
17 #include "webkit/glue/mock_weburlloader_impl.h"
18 12
19 using ::testing::_; 13 using ::testing::_;
20 using ::testing::DoAll; 14 using ::testing::DoAll;
21 using ::testing::InSequence; 15 using ::testing::InSequence;
22 using ::testing::Invoke; 16 using ::testing::Invoke;
23 using ::testing::NiceMock; 17 using ::testing::NiceMock;
24 using ::testing::NotNull; 18 using ::testing::NotNull;
25 using ::testing::Return; 19 using ::testing::Return;
26 using ::testing::SetArgumentPointee; 20 using ::testing::SetArgumentPointee;
27 using ::testing::StrictMock; 21 using ::testing::StrictMock;
28 using ::testing::WithArgs; 22 using ::testing::WithArgs;
29 23
30 using WebKit::WebURLError;
31 using WebKit::WebURLLoader;
32 using WebKit::WebURLRequest;
33 using WebKit::WebURLResponse;
34
35 namespace { 24 namespace {
36 25
37 const int kDataSize = 1024; 26 const int kDataSize = 1024;
38 const char kHttpUrl[] = "http://test"; 27 const char kHttpUrl[] = "http://test";
39 const char kHttpsUrl[] = "https://test"; 28 const char kHttpsUrl[] = "https://test";
40 const char kFileUrl[] = "file://test"; 29 const char kFileUrl[] = "file://test";
41 const char kDataUrl[] = 30 const char kDataUrl[] =
42 "data:text/plain;base64,YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK"; 31 "data:text/plain;base64,YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK";
43 const char kDataUrlDecoded[] = "abcdefghijklmnopqrstuvwxyz"; 32 const char kDataUrlDecoded[] = "abcdefghijklmnopqrstuvwxyz";
44 const char kInvalidUrl[] = "whatever://test"; 33 const char kInvalidUrl[] = "whatever://test";
45 34
46 } // namespace 35 } // namespace
47 36
48 namespace webkit_glue { 37 namespace webkit_glue {
49 38
50 class SimpleDataSourceTest : public testing::Test { 39 class SimpleDataSourceTest : public testing::Test {
51 public: 40 public:
52 SimpleDataSourceTest() { 41 SimpleDataSourceTest() {
42 bridge_factory_.reset(
43 new NiceMock<MockMediaResourceLoaderBridgeFactory>());
44 bridge_.reset(new NiceMock<MockResourceLoaderBridge>());
45
53 for (int i = 0; i < kDataSize; ++i) { 46 for (int i = 0; i < kDataSize; ++i) {
54 data_[i] = i; 47 data_[i] = i;
55 } 48 }
56 } 49 }
57 50
58 virtual ~SimpleDataSourceTest() { 51 virtual ~SimpleDataSourceTest() {
59 ignore_result(frame_.release()); 52 if (bridge_.get())
53 EXPECT_CALL(*bridge_, OnDestroy());
54 if (bridge_factory_.get())
55 EXPECT_CALL(*bridge_factory_, OnDestroy());
60 } 56 }
61 57
62 void InitializeDataSource(const char* url) { 58 void InitializeDataSource(const char* url) {
63 gurl_ = GURL(url);
64
65 frame_.reset(new NiceMock<MockWebFrame>());
66 url_loader_ = new NiceMock<MockWebURLLoader>();
67
68 data_source_ = new SimpleDataSource(MessageLoop::current(), 59 data_source_ = new SimpleDataSource(MessageLoop::current(),
69 frame_.get()); 60 bridge_factory_.get());
61 CHECK(data_source_);
70 62
71 // There is no need to provide a message loop to data source. 63 // There is no need to provide a message loop to data source.
72 data_source_->set_host(&host_); 64 data_source_->set_host(&host_);
73 data_source_->SetURLLoaderForTest(url_loader_);
74 65
66 // First a bridge is created.
75 InSequence s; 67 InSequence s;
68 EXPECT_CALL(*bridge_factory_, CreateBridge(GURL(url), _, -1, -1))
69 .WillOnce(Return(bridge_.get()));
70 EXPECT_CALL(*bridge_, Start(data_source_.get()))
71 .WillOnce(Return(true));
76 72
77 data_source_->Initialize(url, callback_.NewCallback()); 73 data_source_->Initialize(url, callback_.NewCallback());
74
78 MessageLoop::current()->RunAllPending(); 75 MessageLoop::current()->RunAllPending();
79 } 76 }
80 77
81 void RequestSucceeded(bool is_loaded) { 78 void RequestSucceeded(bool is_loaded) {
82 WebURLResponse response(gurl_); 79 ResourceResponseInfo info;
83 response.setExpectedContentLength(kDataSize); 80 info.content_length = kDataSize;
84 81
85 data_source_->didReceiveResponse(NULL, response); 82 data_source_->OnReceivedResponse(info, false);
86 int64 size; 83 int64 size;
87 EXPECT_TRUE(data_source_->GetSize(&size)); 84 EXPECT_TRUE(data_source_->GetSize(&size));
88 EXPECT_EQ(kDataSize, size); 85 EXPECT_EQ(kDataSize, size);
89 86
90 for (int i = 0; i < kDataSize; ++i) { 87 for (int i = 0; i < kDataSize; ++i)
91 data_source_->didReceiveData(NULL, data_ + i, 1); 88 data_source_->OnReceivedData(data_ + i, 1);
92 }
93 89
94 EXPECT_CALL(host_, SetLoaded(is_loaded)); 90 EXPECT_CALL(host_, SetLoaded(is_loaded));
95 91
96 InSequence s; 92 InSequence s;
93 EXPECT_CALL(*bridge_, OnDestroy())
94 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
97 EXPECT_CALL(host_, SetTotalBytes(kDataSize)); 95 EXPECT_CALL(host_, SetTotalBytes(kDataSize));
98 EXPECT_CALL(host_, SetBufferedBytes(kDataSize)); 96 EXPECT_CALL(host_, SetBufferedBytes(kDataSize));
99 EXPECT_CALL(callback_, OnFilterCallback()); 97 EXPECT_CALL(callback_, OnFilterCallback());
100 EXPECT_CALL(callback_, OnCallbackDestroyed()); 98 EXPECT_CALL(callback_, OnCallbackDestroyed());
101 99
102 data_source_->didFinishLoading(NULL, 0); 100 URLRequestStatus status;
101 status.set_status(URLRequestStatus::SUCCESS);
102 status.set_os_error(0);
103 data_source_->OnCompletedRequest(status, "", base::Time());
103 104
104 // Let the tasks to be executed. 105 // Let the tasks to be executed.
105 MessageLoop::current()->RunAllPending(); 106 MessageLoop::current()->RunAllPending();
106 } 107 }
107 108
108 void RequestFailed() { 109 void RequestFailed() {
109 InSequence s; 110 InSequence s;
111 EXPECT_CALL(*bridge_, OnDestroy())
112 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
110 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK)); 113 EXPECT_CALL(host_, SetError(media::PIPELINE_ERROR_NETWORK));
111 EXPECT_CALL(callback_, OnFilterCallback()); 114 EXPECT_CALL(callback_, OnFilterCallback());
112 EXPECT_CALL(callback_, OnCallbackDestroyed()); 115 EXPECT_CALL(callback_, OnCallbackDestroyed());
113 116
114 WebURLError error; 117 URLRequestStatus status;
115 error.reason = net::ERR_FAILED; 118 status.set_status(URLRequestStatus::FAILED);
116 data_source_->didFail(NULL, error); 119 status.set_os_error(100);
120 data_source_->OnCompletedRequest(status, "", base::Time());
117 121
118 // Let the tasks to be executed. 122 // Let the tasks to be executed.
119 MessageLoop::current()->RunAllPending(); 123 MessageLoop::current()->RunAllPending();
120 } 124 }
121 125
122 void DestroyDataSource() { 126 void DestroyDataSource() {
127 EXPECT_CALL(*bridge_factory_, OnDestroy())
128 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridgeFactory));
129
123 StrictMock<media::MockFilterCallback> callback; 130 StrictMock<media::MockFilterCallback> callback;
124 EXPECT_CALL(callback, OnFilterCallback()); 131 EXPECT_CALL(callback, OnFilterCallback());
125 EXPECT_CALL(callback, OnCallbackDestroyed()); 132 EXPECT_CALL(callback, OnCallbackDestroyed());
126
127 data_source_->Stop(callback.NewCallback()); 133 data_source_->Stop(callback.NewCallback());
128 MessageLoop::current()->RunAllPending(); 134 MessageLoop::current()->RunAllPending();
129 135
130 data_source_ = NULL; 136 data_source_ = NULL;
131 } 137 }
132 138
133 void AsyncRead() { 139 void AsyncRead() {
134 for (int i = 0; i < kDataSize; ++i) { 140 for (int i = 0; i < kDataSize; ++i) {
135 uint8 buffer[1]; 141 uint8 buffer[1];
136 142
137 EXPECT_CALL(*this, ReadCallback(1)); 143 EXPECT_CALL(*this, ReadCallback(1));
138 data_source_->Read( 144 data_source_->Read(
139 i, 1, buffer, 145 i, 1, buffer,
140 NewCallback(this, &SimpleDataSourceTest::ReadCallback)); 146 NewCallback(this, &SimpleDataSourceTest::ReadCallback));
141 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); 147 EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]);
142 } 148 }
143 } 149 }
144 150
151 void ReleaseBridge() {
152 ignore_result(bridge_.release());
153 }
154
155 void ReleaseBridgeFactory() {
156 ignore_result(bridge_factory_.release());
157 }
158
145 MOCK_METHOD1(ReadCallback, void(size_t size)); 159 MOCK_METHOD1(ReadCallback, void(size_t size));
146 160
147 protected: 161 protected:
148 GURL gurl_;
149 scoped_ptr<MessageLoop> message_loop_; 162 scoped_ptr<MessageLoop> message_loop_;
150 NiceMock<MockWebURLLoader>* url_loader_; 163 scoped_ptr<NiceMock<MockMediaResourceLoaderBridgeFactory> > bridge_factory_;
164 scoped_ptr<NiceMock<MockResourceLoaderBridge> > bridge_;
151 scoped_refptr<SimpleDataSource> data_source_; 165 scoped_refptr<SimpleDataSource> data_source_;
152 StrictMock<media::MockFilterHost> host_; 166 StrictMock<media::MockFilterHost> host_;
153 StrictMock<media::MockFilterCallback> callback_; 167 StrictMock<media::MockFilterCallback> callback_;
154 scoped_ptr<NiceMock<MockWebFrame> > frame_;
155
156 char data_[kDataSize]; 168 char data_[kDataSize];
157 169
158 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); 170 DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest);
159 }; 171 };
160 172
161 TEST_F(SimpleDataSourceTest, InitializeHTTP) { 173 TEST_F(SimpleDataSourceTest, InitializeHTTP) {
162 InitializeDataSource(kHttpUrl); 174 InitializeDataSource(kHttpUrl);
163 RequestSucceeded(false); 175 RequestSucceeded(false);
164 DestroyDataSource(); 176 DestroyDataSource();
165 } 177 }
166 178
167 TEST_F(SimpleDataSourceTest, InitializeHTTPS) { 179 TEST_F(SimpleDataSourceTest, InitializeHTTPS) {
168 InitializeDataSource(kHttpsUrl); 180 InitializeDataSource(kHttpsUrl);
169 RequestSucceeded(false); 181 RequestSucceeded(false);
170 DestroyDataSource(); 182 DestroyDataSource();
171 } 183 }
172 184
173 TEST_F(SimpleDataSourceTest, InitializeFile) { 185 TEST_F(SimpleDataSourceTest, InitializeFile) {
174 InitializeDataSource(kFileUrl); 186 InitializeDataSource(kFileUrl);
175 RequestSucceeded(true); 187 RequestSucceeded(true);
176 DestroyDataSource(); 188 DestroyDataSource();
177 } 189 }
178 190
179 TEST_F(SimpleDataSourceTest, InitializeData) { 191 TEST_F(SimpleDataSourceTest, InitializeData) {
180 frame_.reset(new NiceMock<MockWebFrame>());
181 url_loader_ = new NiceMock<MockWebURLLoader>();
182
183 data_source_ = new SimpleDataSource(MessageLoop::current(), 192 data_source_ = new SimpleDataSource(MessageLoop::current(),
184 frame_.get()); 193 bridge_factory_.get());
185 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl)); 194 EXPECT_TRUE(data_source_->IsUrlSupported(kDataUrl));
195 CHECK(data_source_);
186 196
187 // There is no need to provide a message loop to data source. 197 // There is no need to provide a message loop to data source.
188 data_source_->set_host(&host_); 198 data_source_->set_host(&host_);
189 data_source_->SetURLLoaderForTest(url_loader_);
190 199
191 EXPECT_CALL(host_, SetLoaded(true)); 200 EXPECT_CALL(host_, SetLoaded(true));
192 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); 201 EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded)));
193 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); 202 EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded)));
194 EXPECT_CALL(callback_, OnFilterCallback()); 203 EXPECT_CALL(callback_, OnFilterCallback());
195 EXPECT_CALL(callback_, OnCallbackDestroyed()); 204 EXPECT_CALL(callback_, OnCallbackDestroyed());
196 205
197 data_source_->Initialize(kDataUrl, callback_.NewCallback()); 206 data_source_->Initialize(kDataUrl, callback_.NewCallback());
198 MessageLoop::current()->RunAllPending(); 207 MessageLoop::current()->RunAllPending();
199 208
200 DestroyDataSource(); 209 DestroyDataSource();
201 } 210 }
202 211
203 TEST_F(SimpleDataSourceTest, RequestFailed) { 212 TEST_F(SimpleDataSourceTest, RequestFailed) {
204 InitializeDataSource(kHttpUrl); 213 InitializeDataSource(kHttpUrl);
205 RequestFailed(); 214 RequestFailed();
206 DestroyDataSource(); 215 DestroyDataSource();
207 } 216 }
208 217
209 TEST_F(SimpleDataSourceTest, StopWhenDownloading) { 218 TEST_F(SimpleDataSourceTest, StopWhenDownloading) {
210 InitializeDataSource(kHttpUrl); 219 InitializeDataSource(kHttpUrl);
211 220
212 EXPECT_CALL(*url_loader_, cancel()); 221 EXPECT_CALL(*bridge_, Cancel());
222 EXPECT_CALL(*bridge_, OnDestroy())
223 .WillOnce(Invoke(this, &SimpleDataSourceTest::ReleaseBridge));
213 EXPECT_CALL(callback_, OnCallbackDestroyed()); 224 EXPECT_CALL(callback_, OnCallbackDestroyed());
214 DestroyDataSource(); 225 DestroyDataSource();
215 } 226 }
216 227
217 TEST_F(SimpleDataSourceTest, AsyncRead) { 228 TEST_F(SimpleDataSourceTest, AsyncRead) {
218 InitializeDataSource(kFileUrl); 229 InitializeDataSource(kFileUrl);
219 RequestSucceeded(true); 230 RequestSucceeded(true);
220 AsyncRead(); 231 AsyncRead();
221 DestroyDataSource(); 232 DestroyDataSource();
222 } 233 }
223 234
224 } // namespace webkit_glue 235 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « webkit/glue/media/simple_data_source.cc ('k') | webkit/glue/mock_webframe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698