1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Copyright 2014 The Chromium Authors. All rights reserved. 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Use of this source code is governed by a BSD-style license that can be 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// found in the LICENSE file. 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include <string> 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "android_webview/native/aw_media_url_interceptor.h" 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/memory/scoped_ptr.h" 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1004a2c71d674a261e65d5afc603b7a3efa77e88efHoward Hinnant#include "testing/gtest/include/gtest/gtest.h" 1104a2c71d674a261e65d5afc603b7a3efa77e88efHoward Hinnant 12997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnallusing testing::Test; 13997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall 14997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnallnamespace android_webview { 15997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall 16997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnallnamespace { 17997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Sentinel value to check whether the fields have been set. 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst int UNSET_VALUE = -1; 2087d1a8a4d81892ccfaf1319d056880e89a17528eHoward Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass AwMediaUrlInterceptorTest : public Test { 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public: 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant AwMediaUrlInterceptorTest() 24b87922c2c5d55dc021733d39a99e4297cb60cc31Howard Hinnant : fd_(UNSET_VALUE), offset_(UNSET_VALUE), size_(UNSET_VALUE), 25b87922c2c5d55dc021733d39a99e4297cb60cc31Howard Hinnant url_interceptor_(new AwMediaUrlInterceptor()){ 26b87922c2c5d55dc021733d39a99e4297cb60cc31Howard Hinnant } 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant protected: 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int fd_; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int64 offset_; 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int64 size_; 31ef5aa93b9cdc5bfea3e4c59bafd784a9ff968decHoward Hinnant scoped_ptr<AwMediaUrlInterceptor> url_interceptor_; 3214fa9f9d8ff5a4541404f3e23b91188e74c56f31Howard Hinnant}; 33d4ecf9c8c3b240202c61ad97e6458f7a41c26f5fMarshall Clow 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} // namespace 35d4ecf9c8c3b240202c61ad97e6458f7a41c26f5fMarshall Clow 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantTEST_F(AwMediaUrlInterceptorTest, TestInterceptValidAssetUrl) { 37ed14a76beba8f2a0e30f5c66d327d60f87a75921Howard Hinnant // This asset file exists in the android_webview_unittests-debug.apk. 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // See gyp rule android_webview_unittests_apk. 399ae96d0f21779b8807c6c1be05ab211ea8bde544Marshall Clow const std::string valid_asset_url( 409ae96d0f21779b8807c6c1be05ab211ea8bde544Marshall Clow "file:///android_asset/asset_file.ogg"); 41a36451371c101fbaf1efd61f66ec2a0721974085Marshall Clow 429ae96d0f21779b8807c6c1be05ab211ea8bde544Marshall Clow ASSERT_TRUE(url_interceptor_->Intercept( 43a36451371c101fbaf1efd61f66ec2a0721974085Marshall Clow valid_asset_url, &fd_, &offset_, &size_)); 449ae96d0f21779b8807c6c1be05ab211ea8bde544Marshall Clow EXPECT_NE(UNSET_VALUE, fd_); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_NE(UNSET_VALUE, offset_); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_NE(UNSET_VALUE, size_); 47866569b8c31f680ce95fd403ac5e21bd4552a1b8Howard Hinnant} 4862a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt 4962a6ac33a217b0e5a4c42367c6b72e51497246aeSean HuntTEST_F(AwMediaUrlInterceptorTest, TestInterceptInvalidAssetUrl) { 5062a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt // This asset file does not exist in the android_webview_unittests-debug.apk. 5162a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt // See gyp rule android_webview_unittests_apk. 5262a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt const std::string invalid_asset_url( 5362a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt "file:///android_asset/file_does_not_exist.ogg"); 5462a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt 55866569b8c31f680ce95fd403ac5e21bd4552a1b8Howard Hinnant ASSERT_FALSE(url_interceptor_->Intercept( 5662a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt invalid_asset_url, &fd_, &offset_, &size_)); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, fd_); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, offset_); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, size_); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantTEST_F(AwMediaUrlInterceptorTest, TestInterceptNonAssetUrl) { 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // This url does not refer to an asset in the apk. 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const std::string non_asset_url("file:///sdcard/file.txt"); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ASSERT_FALSE(url_interceptor_->Intercept( 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant non_asset_url, &fd_, &offset_, &size_)); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, fd_); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, offset_); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant EXPECT_EQ(UNSET_VALUE, size_); 714c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger} 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} // namespace android_webview 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant