172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "media/base/filters.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "media/base/mock_callback.h" 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "media/base/mock_filter_host.h" 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "media/base/mock_filters.h" 921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "net/base/net_errors.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLError.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLLoader.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/WebKit/Source/WebKit/chromium/public/WebURLResponse.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/media/simple_data_source.h" 1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "webkit/mocks/mock_webframe.h" 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "webkit/mocks/mock_weburlloader.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::_; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::DoAll; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::InSequence; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::Invoke; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::NiceMock; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::NotNull; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::Return; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::SetArgumentPointee; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::StrictMock; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing ::testing::WithArgs; 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing WebKit::WebURLError; 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing WebKit::WebURLLoader; 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing WebKit::WebURLRequest; 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing WebKit::WebURLResponse; 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 35dc0f95d653279beabeb9817299e2902918ba123eKristian Monsennamespace webkit_glue { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const int kDataSize = 1024; 38dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpUrl[] = "http://test"; 39dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpsUrl[] = "https://test"; 40dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kFileUrl[] = "file://test"; 41dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kDataUrl[] = 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "data:text/plain;base64,YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoK"; 43dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kDataUrlDecoded[] = "abcdefghijklmnopqrstuvwxyz"; 44dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kInvalidUrl[] = "whatever://test"; 45dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpRedirectToSameDomainUrl1[] = "http://test/ing"; 46dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpRedirectToSameDomainUrl2[] = "http://test/ing2"; 47dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpRedirectToDifferentDomainUrl1[] = "http://test2"; 48dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstatic const char kHttpRedirectToDifferentDomainUrl2[] = "http://test2/ing"; 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SimpleDataSourceTest : public testing::Test { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SimpleDataSourceTest() { 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int i = 0; i < kDataSize; ++i) { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_[i] = i; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~SimpleDataSourceTest() { 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void InitializeDataSource(const char* url, 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::MockStatusCallback* callback) { 6321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen gurl_ = GURL(url); 6421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen frame_.reset(new NiceMock<MockWebFrame>()); 6621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen url_loader_ = new NiceMock<MockWebURLLoader>(); 6721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch data_source_ = new SimpleDataSource(MessageLoop::current(), 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen frame_.get()); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // There is no need to provide a message loop to data source. 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_source_->set_host(&host_); 7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen data_source_->SetURLLoaderForTest(url_loader_); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen data_source_->Initialize(url, callback); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RequestSucceeded(bool is_loaded) { 8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WebURLResponse response(gurl_); 8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen response.setExpectedContentLength(kDataSize); 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen data_source_->didReceiveResponse(NULL, response); 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int64 size; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(data_source_->GetSize(&size)); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(kDataSize, size); 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen for (int i = 0; i < kDataSize; ++i) { 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen data_source_->didReceiveData(NULL, data_ + i, 1, 1); 9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetLoaded(is_loaded)); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InSequence s; 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetTotalBytes(kDataSize)); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetBufferedBytes(kDataSize)); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen data_source_->didFinishLoading(NULL, 0); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Let the tasks to be executed. 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RequestFailed() { 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InSequence s; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen WebURLError error; 10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen error.reason = net::ERR_FAILED; 10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen data_source_->didFail(NULL, error); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Let the tasks to be executed. 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void Redirect(const char* url) { 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GURL redirectUrl(url); 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebKit::WebURLRequest newRequest(redirectUrl); 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebKit::WebURLResponse redirectResponse(gurl_); 11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen data_source_->willSendRequest(url_loader_, newRequest, redirectResponse); 12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->RunAllPending(); 12372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 12572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void DestroyDataSource() { 12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen data_source_->Stop(media::NewExpectedCallback()); 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_source_ = NULL; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AsyncRead() { 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int i = 0; i < kDataSize; ++i) { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint8 buffer[1]; 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(*this, ReadCallback(1)); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_source_->Read( 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch i, 1, buffer, 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NewCallback(this, &SimpleDataSourceTest::ReadCallback)); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(static_cast<uint8>(data_[i]), buffer[0]); 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD1(ReadCallback, void(size_t size)); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen GURL gurl_; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<MessageLoop> message_loop_; 14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen NiceMock<MockWebURLLoader>* url_loader_; 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<SimpleDataSource> data_source_; 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StrictMock<media::MockFilterHost> host_; 15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen scoped_ptr<NiceMock<MockWebFrame> > frame_; 15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch char data_[kDataSize]; 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(SimpleDataSourceTest); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, InitializeHTTP) { 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestSucceeded(false); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, InitializeHTTPS) { 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpsUrl, 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestSucceeded(false); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, InitializeFile) { 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kFileUrl, 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestSucceeded(true); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, InitializeData) { 18121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen frame_.reset(new NiceMock<MockWebFrame>()); 18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen url_loader_ = new NiceMock<MockWebURLLoader>(); 18321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch data_source_ = new SimpleDataSource(MessageLoop::current(), 18521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen frame_.get()); 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // There is no need to provide a message loop to data source. 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch data_source_->set_host(&host_); 18821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen data_source_->SetURLLoaderForTest(url_loader_); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetLoaded(true)); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetTotalBytes(sizeof(kDataUrlDecoded))); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(host_, SetBufferedBytes(sizeof(kDataUrlDecoded))); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen data_source_->Initialize(kDataUrl, 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->RunAllPending(); 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, RequestFailed) { 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_ERROR_NETWORK)); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestFailed(); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, StopWhenDownloading) { 20972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The callback should be deleted, but not executed. 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TODO(scherkus): should this really be the behaviour? Seems strange... 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen StrictMock<media::MockStatusCallback>* callback = 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new StrictMock<media::MockStatusCallback>(); 21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_CALL(*callback, Destructor()); 21472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 21572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InitializeDataSource(kHttpUrl, callback); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen EXPECT_CALL(*url_loader_, cancel()); 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(SimpleDataSourceTest, AsyncRead) { 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kFileUrl, 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RequestSucceeded(true); 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AsyncRead(); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DestroyDataSource(); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 22972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// NOTE: This test will need to be reworked a little once 23072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// http://code.google.com/p/chromium/issues/detail?id=72578 23172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// is fixed. 23272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(SimpleDataSourceTest, HasSingleOrigin) { 23372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Make sure no redirect case works as expected. 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 23672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RequestSucceeded(false); 23772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(data_source_->HasSingleOrigin()); 23872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DestroyDataSource(); 23972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Test redirect to the same domain. 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 24372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Redirect(kHttpRedirectToSameDomainUrl1); 24472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RequestSucceeded(false); 24572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(data_source_->HasSingleOrigin()); 24672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DestroyDataSource(); 24772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 24872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Test redirect twice to the same domain. 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 25172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Redirect(kHttpRedirectToSameDomainUrl1); 25272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Redirect(kHttpRedirectToSameDomainUrl2); 25372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RequestSucceeded(false); 25472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(data_source_->HasSingleOrigin()); 25572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DestroyDataSource(); 25672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 25772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Test redirect to a different domain. 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 26072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Redirect(kHttpRedirectToDifferentDomainUrl1); 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RequestSucceeded(false); 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(data_source_->HasSingleOrigin()); 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DestroyDataSource(); 26472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 265dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Test redirect to the same domain and then to a different domain. 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen InitializeDataSource(kHttpUrl, 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen media::NewExpectedStatusCallback(media::PIPELINE_OK)); 26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Redirect(kHttpRedirectToSameDomainUrl1); 269dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen Redirect(kHttpRedirectToDifferentDomainUrl1); 27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen RequestSucceeded(false); 27172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(data_source_->HasSingleOrigin()); 27272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DestroyDataSource(); 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace webkit_glue 276