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

Side by Side Diff: webkit/renderer/media/media_info_loader_unittest.cc

Issue 17502007: Move webkit/renderer/media/android/ to content/renderer/media/android/. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/message_loop.h"
7 #include "third_party/WebKit/public/web/WebMediaPlayer.h"
8 #include "third_party/WebKit/public/web/WebView.h"
9 #include "third_party/WebKit/public/platform/WebURLError.h"
10 #include "third_party/WebKit/public/platform/WebURLRequest.h"
11 #include "third_party/WebKit/public/platform/WebURLResponse.h"
12 #include "webkit/mocks/mock_webframeclient.h"
13 #include "webkit/mocks/mock_weburlloader.h"
14 #include "webkit/renderer/media/media_info_loader.h"
15
16 using ::testing::_;
17 using ::testing::InSequence;
18 using ::testing::NiceMock;
19
20 using WebKit::WebString;
21 using WebKit::WebURLError;
22 using WebKit::WebURLResponse;
23 using WebKit::WebView;
24
25 using webkit_glue::MockWebFrameClient;
26 using webkit_glue::MockWebURLLoader;
27
28 namespace webkit_media {
29
30 static const char* kHttpUrl = "http://test";
31 static const char kHttpRedirectToSameDomainUrl1[] = "http://test/ing";
32 static const char kHttpRedirectToSameDomainUrl2[] = "http://test/ing2";
33 static const char kHttpRedirectToDifferentDomainUrl1[] = "http://test2";
34
35 static const int kHttpOK = 200;
36 static const int kHttpNotFound = 404;
37
38 class MediaInfoLoaderTest : public testing::Test {
39 public:
40 MediaInfoLoaderTest()
41 : view_(WebView::create(NULL)) {
42 view_->initializeMainFrame(&client_);
43 }
44
45 virtual ~MediaInfoLoaderTest() {
46 view_->close();
47 }
48
49 void Initialize(
50 const char* url,
51 WebKit::WebMediaPlayer::CORSMode cors_mode) {
52 gurl_ = GURL(url);
53
54 loader_.reset(new MediaInfoLoader(
55 gurl_, cors_mode,
56 base::Bind(&MediaInfoLoaderTest::ReadyCallback,
57 base::Unretained(this))));
58
59 // |test_loader_| will be used when Start() is called.
60 url_loader_ = new NiceMock<MockWebURLLoader>();
61 loader_->test_loader_ = scoped_ptr<WebKit::WebURLLoader>(url_loader_);
62 }
63
64 void Start() {
65 InSequence s;
66 EXPECT_CALL(*url_loader_, loadAsynchronously(_, _));
67 loader_->Start(view_->mainFrame());
68 }
69
70 void Stop() {
71 InSequence s;
72 EXPECT_CALL(*url_loader_, cancel());
73 loader_.reset();
74 }
75
76 void Redirect(const char* url) {
77 GURL redirect_url(url);
78 WebKit::WebURLRequest new_request(redirect_url);
79 WebKit::WebURLResponse redirect_response(gurl_);
80
81 loader_->willSendRequest(url_loader_, new_request, redirect_response);
82
83 base::MessageLoop::current()->RunUntilIdle();
84 }
85
86 void SendResponse(
87 int http_status, MediaInfoLoader::Status expected_status) {
88 EXPECT_CALL(*this, ReadyCallback(expected_status));
89 EXPECT_CALL(*url_loader_, cancel());
90
91 WebURLResponse response(gurl_);
92 response.setHTTPHeaderField(WebString::fromUTF8("Content-Length"),
93 WebString::fromUTF8("0"));
94 response.setExpectedContentLength(0);
95 response.setHTTPStatusCode(http_status);
96 loader_->didReceiveResponse(url_loader_, response);
97 }
98
99 void FailLoad() {
100 EXPECT_CALL(*this, ReadyCallback(MediaInfoLoader::kFailed));
101 loader_->didFail(url_loader_, WebURLError());
102 }
103
104 MOCK_METHOD1(ReadyCallback, void(MediaInfoLoader::Status));
105
106 protected:
107 GURL gurl_;
108
109 scoped_ptr<MediaInfoLoader> loader_;
110 NiceMock<MockWebURLLoader>* url_loader_;
111
112 MockWebFrameClient client_;
113 WebView* view_;
114
115 base::MessageLoop message_loop_;
116
117 private:
118 DISALLOW_COPY_AND_ASSIGN(MediaInfoLoaderTest);
119 };
120
121 TEST_F(MediaInfoLoaderTest, StartStop) {
122 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
123 Start();
124 Stop();
125 }
126
127 TEST_F(MediaInfoLoaderTest, LoadFailure) {
128 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
129 Start();
130 FailLoad();
131 }
132
133 TEST_F(MediaInfoLoaderTest, HasSingleOriginNoRedirect) {
134 // Make sure no redirect case works as expected.
135 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
136 Start();
137 SendResponse(kHttpOK, MediaInfoLoader::kOk);
138 EXPECT_TRUE(loader_->HasSingleOrigin());
139 }
140
141 TEST_F(MediaInfoLoaderTest, HasSingleOriginSingleRedirect) {
142 // Test redirect to the same domain.
143 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
144 Start();
145 Redirect(kHttpRedirectToSameDomainUrl1);
146 SendResponse(kHttpOK, MediaInfoLoader::kOk);
147 EXPECT_TRUE(loader_->HasSingleOrigin());
148 }
149
150 TEST_F(MediaInfoLoaderTest, HasSingleOriginDoubleRedirect) {
151 // Test redirect twice to the same domain.
152 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
153 Start();
154 Redirect(kHttpRedirectToSameDomainUrl1);
155 Redirect(kHttpRedirectToSameDomainUrl2);
156 SendResponse(kHttpOK, MediaInfoLoader::kOk);
157 EXPECT_TRUE(loader_->HasSingleOrigin());
158 }
159
160 TEST_F(MediaInfoLoaderTest, HasSingleOriginDifferentDomain) {
161 // Test redirect to a different domain.
162 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
163 Start();
164 Redirect(kHttpRedirectToDifferentDomainUrl1);
165 SendResponse(kHttpOK, MediaInfoLoader::kOk);
166 EXPECT_FALSE(loader_->HasSingleOrigin());
167 }
168
169 TEST_F(MediaInfoLoaderTest, HasSingleOriginMultipleDomains) {
170 // Test redirect to the same domain and then to a different domain.
171 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
172 Start();
173 Redirect(kHttpRedirectToSameDomainUrl1);
174 Redirect(kHttpRedirectToDifferentDomainUrl1);
175 SendResponse(kHttpOK, MediaInfoLoader::kOk);
176 EXPECT_FALSE(loader_->HasSingleOrigin());
177 }
178
179 TEST_F(MediaInfoLoaderTest, CORSAccessCheckPassed) {
180 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUseCredentials);
181 Start();
182 SendResponse(kHttpOK, MediaInfoLoader::kOk);
183 EXPECT_TRUE(loader_->DidPassCORSAccessCheck());
184 }
185
186 TEST_F(MediaInfoLoaderTest, CORSAccessCheckFailed) {
187 Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUseCredentials);
188 Start();
189 SendResponse(kHttpNotFound, MediaInfoLoader::kFailed);
190 EXPECT_FALSE(loader_->DidPassCORSAccessCheck());
191 }
192
193 } // namespace webkit_media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698