| Index: webkit/media/android/media_info_loader_android_unittest.cc
|
| diff --git a/webkit/media/android/media_info_loader_android_unittest.cc b/webkit/media/android/media_info_loader_android_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2a968ae19ec884c6aa6fc5d6bb0e603771b0d2bb
|
| --- /dev/null
|
| +++ b/webkit/media/android/media_info_loader_android_unittest.cc
|
| @@ -0,0 +1,192 @@
|
| +// Copyright (c) 2013 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.
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/message_loop.h"
|
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLError.h"
|
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h"
|
| +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLResponse.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h"
|
| +#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
|
| +#include "webkit/media/android/media_info_loader_android.h"
|
| +#include "webkit/mocks/mock_webframeclient.h"
|
| +#include "webkit/mocks/mock_weburlloader.h"
|
| +
|
| +using ::testing::_;
|
| +using ::testing::InSequence;
|
| +using ::testing::NiceMock;
|
| +
|
| +using WebKit::WebString;
|
| +using WebKit::WebURLError;
|
| +using WebKit::WebURLResponse;
|
| +using WebKit::WebView;
|
| +
|
| +using webkit_glue::MockWebFrameClient;
|
| +using webkit_glue::MockWebURLLoader;
|
| +
|
| +namespace webkit_media {
|
| +
|
| +static const char* kHttpUrl = "http://test";
|
| +static const char kHttpRedirectToSameDomainUrl1[] = "http://test/ing";
|
| +static const char kHttpRedirectToSameDomainUrl2[] = "http://test/ing2";
|
| +static const char kHttpRedirectToDifferentDomainUrl1[] = "http://test2";
|
| +
|
| +static const int kHttpOK = 200;
|
| +static const int kHttpNotFound = 404;
|
| +
|
| +class MediaInfoLoaderAndroidTest : public testing::Test {
|
| + public:
|
| + MediaInfoLoaderAndroidTest()
|
| + : view_(WebView::create(NULL)) {
|
| + view_->initializeMainFrame(&client_);
|
| + }
|
| +
|
| + virtual ~MediaInfoLoaderAndroidTest() {
|
| + view_->close();
|
| + }
|
| +
|
| + void Initialize(
|
| + const char* url,
|
| + WebKit::WebMediaPlayer::CORSMode cors_mode) {
|
| + gurl_ = GURL(url);
|
| +
|
| + loader_.reset(new MediaInfoLoaderAndroid(
|
| + gurl_, cors_mode,
|
| + base::Bind(&MediaInfoLoaderAndroidTest::ReadyCallback,
|
| + base::Unretained(this))));
|
| +
|
| + // |test_loader_| will be used when Start() is called.
|
| + url_loader_ = new NiceMock<MockWebURLLoader>();
|
| + loader_->test_loader_ = scoped_ptr<WebKit::WebURLLoader>(url_loader_);
|
| + }
|
| +
|
| + void Start() {
|
| + InSequence s;
|
| + EXPECT_CALL(*url_loader_, loadAsynchronously(_, _));
|
| + loader_->Start(view_->mainFrame());
|
| + }
|
| +
|
| + void Stop() {
|
| + InSequence s;
|
| + EXPECT_CALL(*url_loader_, cancel());
|
| + loader_.reset();
|
| + }
|
| +
|
| + void Redirect(const char* url) {
|
| + GURL redirectUrl(url);
|
| + WebKit::WebURLRequest newRequest(redirectUrl);
|
| + WebKit::WebURLResponse redirectResponse(gurl_);
|
| +
|
| + loader_->willSendRequest(url_loader_, newRequest, redirectResponse);
|
| +
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + }
|
| +
|
| + void SendResponse(
|
| + int http_status, MediaInfoLoaderAndroid::Status expected_status) {
|
| + EXPECT_CALL(*this, ReadyCallback(expected_status));
|
| +
|
| + WebURLResponse response(gurl_);
|
| + response.setHTTPHeaderField(WebString::fromUTF8("Content-Length"),
|
| + WebString::fromUTF8("0"));
|
| + response.setExpectedContentLength(0);
|
| + response.setHTTPStatusCode(http_status);
|
| + loader_->didReceiveResponse(url_loader_, response);
|
| + }
|
| +
|
| + void FailLoad() {
|
| + EXPECT_CALL(*this, ReadyCallback(MediaInfoLoaderAndroid::kFailed));
|
| + loader_->didFail(url_loader_, WebURLError());
|
| + }
|
| +
|
| + MOCK_METHOD1(ReadyCallback, void(MediaInfoLoaderAndroid::Status));
|
| +
|
| + protected:
|
| + GURL gurl_;
|
| +
|
| + scoped_ptr<MediaInfoLoaderAndroid> loader_;
|
| + NiceMock<MockWebURLLoader>* url_loader_;
|
| +
|
| + MockWebFrameClient client_;
|
| + WebView* view_;
|
| +
|
| + base::MessageLoop message_loop_;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(MediaInfoLoaderAndroidTest);
|
| +};
|
| +
|
| +TEST_F(MediaInfoLoaderAndroidTest, StartStop) {
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + Stop();
|
| +}
|
| +
|
| +TEST_F(MediaInfoLoaderAndroidTest, LoadFailure) {
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + FailLoad();
|
| + Stop();
|
| +}
|
| +
|
| +TEST_F(MediaInfoLoaderAndroidTest, HasSingleOrigin) {
|
| + // Make sure no redirect case works as expected.
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_TRUE(loader_->HasSingleOrigin());
|
| + Stop();
|
| +
|
| + // Test redirect to the same domain.
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + Redirect(kHttpRedirectToSameDomainUrl1);
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_TRUE(loader_->HasSingleOrigin());
|
| + Stop();
|
| +
|
| + // Test redirect twice to the same domain.
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + Redirect(kHttpRedirectToSameDomainUrl1);
|
| + Redirect(kHttpRedirectToSameDomainUrl2);
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_TRUE(loader_->HasSingleOrigin());
|
| + Stop();
|
| +
|
| + // Test redirect to a different domain.
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + Redirect(kHttpRedirectToDifferentDomainUrl1);
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_FALSE(loader_->HasSingleOrigin());
|
| + Stop();
|
| +
|
| + // Test redirect to the same domain and then to a different domain.
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUnspecified);
|
| + Start();
|
| + Redirect(kHttpRedirectToSameDomainUrl1);
|
| + Redirect(kHttpRedirectToDifferentDomainUrl1);
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_FALSE(loader_->HasSingleOrigin());
|
| + Stop();
|
| +}
|
| +
|
| +TEST_F(MediaInfoLoaderAndroidTest, CORSAccessCheckPassed) {
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUseCredentials);
|
| + Start();
|
| + SendResponse(kHttpOK, MediaInfoLoaderAndroid::kOk);
|
| + EXPECT_TRUE(loader_->DidPassCORSAccessCheck());
|
| + Stop();
|
| +}
|
| +
|
| +TEST_F(MediaInfoLoaderAndroidTest, CORSAccessCheckFailed) {
|
| + Initialize(kHttpUrl, WebKit::WebMediaPlayer::CORSModeUseCredentials);
|
| + Start();
|
| + SendResponse(kHttpNotFound, MediaInfoLoaderAndroid::kFailed);
|
| + EXPECT_FALSE(loader_->DidPassCORSAccessCheck());
|
| + Stop();
|
| +}
|
| +
|
| +} // namespace webkit_media
|
|
|