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