OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/pepper/quota_reservation.h" | 5 #include "content/browser/renderer_host/pepper/quota_reservation.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
11 #include "base/files/scoped_temp_dir.h" | 11 #include "base/files/scoped_temp_dir.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
13 #include "base/run_loop.h" | 13 #include "base/run_loop.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "webkit/browser/fileapi/quota/quota_reservation.h" | 15 #include "webkit/browser/fileapi/quota/quota_reservation.h" |
16 | 16 |
17 using fileapi::FileSystemType; | |
18 using fileapi::QuotaReservationManager; | 17 using fileapi::QuotaReservationManager; |
19 | 18 |
20 namespace content { | 19 namespace content { |
21 | 20 |
22 namespace { | 21 namespace { |
23 | 22 |
24 const char kOrigin[] = "http://example.com"; | 23 const char kOrigin[] = "http://example.com"; |
25 const FileSystemType kType = fileapi::kFileSystemTypeTemporary; | 24 const fileapi::FileSystemType kType = fileapi::kFileSystemTypeTemporary; |
26 | 25 |
27 const base::FilePath::StringType file1_name = FILE_PATH_LITERAL("file1"); | 26 const base::FilePath::StringType file1_name = FILE_PATH_LITERAL("file1"); |
28 const base::FilePath::StringType file2_name = FILE_PATH_LITERAL("file2"); | 27 const base::FilePath::StringType file2_name = FILE_PATH_LITERAL("file2"); |
29 const base::FilePath::StringType file3_name = FILE_PATH_LITERAL("file3"); | 28 const base::FilePath::StringType file3_name = FILE_PATH_LITERAL("file3"); |
30 const int kFile1ID = 1; | 29 const int kFile1ID = 1; |
31 const int kFile2ID = 2; | 30 const int kFile2ID = 2; |
32 const int kFile3ID = 3; | 31 const int kFile3ID = 3; |
33 | 32 |
34 class FakeBackend : public QuotaReservationManager::QuotaBackend { | 33 class FakeBackend : public QuotaReservationManager::QuotaBackend { |
35 public: | 34 public: |
36 FakeBackend() {} | 35 FakeBackend() {} |
37 virtual ~FakeBackend() {} | 36 virtual ~FakeBackend() {} |
38 | 37 |
39 virtual void ReserveQuota( | 38 virtual void ReserveQuota( |
40 const GURL& origin, | 39 const GURL& origin, |
41 FileSystemType type, | 40 fileapi::FileSystemType type, |
42 int64 delta, | 41 int64 delta, |
43 const QuotaReservationManager::ReserveQuotaCallback& callback) OVERRIDE { | 42 const QuotaReservationManager::ReserveQuotaCallback& callback) OVERRIDE { |
44 base::MessageLoopProxy::current()->PostTask( | 43 base::MessageLoopProxy::current()->PostTask( |
45 FROM_HERE, | 44 FROM_HERE, |
46 base::Bind(base::IgnoreResult(callback), base::File::FILE_OK, delta)); | 45 base::Bind(base::IgnoreResult(callback), base::File::FILE_OK, delta)); |
47 } | 46 } |
48 | 47 |
49 virtual void ReleaseReservedQuota(const GURL& origin, | 48 virtual void ReleaseReservedQuota(const GURL& origin, |
50 FileSystemType type, | 49 fileapi::FileSystemType type, |
51 int64 size) OVERRIDE {} | 50 int64 size) OVERRIDE {} |
52 | 51 |
53 virtual void CommitQuotaUsage(const GURL& origin, | 52 virtual void CommitQuotaUsage(const GURL& origin, |
54 FileSystemType type, | 53 fileapi::FileSystemType type, |
55 int64 delta) OVERRIDE {} | 54 int64 delta) OVERRIDE {} |
56 | 55 |
57 virtual void IncrementDirtyCount(const GURL& origin, | 56 virtual void IncrementDirtyCount(const GURL& origin, |
58 FileSystemType type) OVERRIDE {} | 57 fileapi::FileSystemType type) OVERRIDE {} |
59 virtual void DecrementDirtyCount(const GURL& origin, | 58 virtual void DecrementDirtyCount(const GURL& origin, |
60 FileSystemType type) OVERRIDE {} | 59 fileapi::FileSystemType type) OVERRIDE {} |
61 | 60 |
62 private: | 61 private: |
63 DISALLOW_COPY_AND_ASSIGN(FakeBackend); | 62 DISALLOW_COPY_AND_ASSIGN(FakeBackend); |
64 }; | 63 }; |
65 | 64 |
66 } // namespace | 65 } // namespace |
67 | 66 |
68 class QuotaReservationTest : public testing::Test { | 67 class QuotaReservationTest : public testing::Test { |
69 public: | 68 public: |
70 QuotaReservationTest() {} | 69 QuotaReservationTest() {} |
(...skipping 17 matching lines...) Expand all Loading... |
88 | 87 |
89 fileapi::FileSystemURL MakeFileSystemURL( | 88 fileapi::FileSystemURL MakeFileSystemURL( |
90 const base::FilePath::StringType& file_name) { | 89 const base::FilePath::StringType& file_name) { |
91 return fileapi::FileSystemURL::CreateForTest( | 90 return fileapi::FileSystemURL::CreateForTest( |
92 GURL(kOrigin), kType, MakeFilePath(file_name)); | 91 GURL(kOrigin), kType, MakeFilePath(file_name)); |
93 } | 92 } |
94 | 93 |
95 scoped_refptr<QuotaReservation> CreateQuotaReservation( | 94 scoped_refptr<QuotaReservation> CreateQuotaReservation( |
96 scoped_refptr<fileapi::QuotaReservation> reservation, | 95 scoped_refptr<fileapi::QuotaReservation> reservation, |
97 const GURL& origin, | 96 const GURL& origin, |
98 FileSystemType type) { | 97 fileapi::FileSystemType type) { |
99 // Sets reservation_ as a side effect. | 98 // Sets reservation_ as a side effect. |
100 return scoped_refptr<QuotaReservation>( | 99 return scoped_refptr<QuotaReservation>( |
101 new QuotaReservation(reservation, origin, type)); | 100 new QuotaReservation(reservation, origin, type)); |
102 } | 101 } |
103 | 102 |
104 void SetFileSize(const base::FilePath::StringType& file_name, int64 size) { | 103 void SetFileSize(const base::FilePath::StringType& file_name, int64 size) { |
105 base::File file(MakeFilePath(file_name), | 104 base::File file(MakeFilePath(file_name), |
106 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE); | 105 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE); |
107 ASSERT_TRUE(file.IsValid()); | 106 ASSERT_TRUE(file.IsValid()); |
108 ASSERT_TRUE(file.SetLength(size)); | 107 ASSERT_TRUE(file.SetLength(size)); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 *file_growths, | 141 *file_growths, |
143 base::Bind(&GotReservedQuota, reserved_quota, file_growths)); | 142 base::Bind(&GotReservedQuota, reserved_quota, file_growths)); |
144 base::RunLoop().RunUntilIdle(); | 143 base::RunLoop().RunUntilIdle(); |
145 } | 144 } |
146 | 145 |
147 // Tests that: | 146 // Tests that: |
148 // 1) We can reserve quota with no files open. | 147 // 1) We can reserve quota with no files open. |
149 // 2) Open a file, grow it, close it, and reserve quota with correct sizes. | 148 // 2) Open a file, grow it, close it, and reserve quota with correct sizes. |
150 TEST_F(QuotaReservationTest, ReserveQuota) { | 149 TEST_F(QuotaReservationTest, ReserveQuota) { |
151 GURL origin(kOrigin); | 150 GURL origin(kOrigin); |
152 FileSystemType type = kType; | 151 fileapi::FileSystemType type = kType; |
153 | 152 |
154 scoped_refptr<fileapi::QuotaReservation> reservation( | 153 scoped_refptr<fileapi::QuotaReservation> reservation( |
155 reservation_manager()->CreateReservation(origin, type)); | 154 reservation_manager()->CreateReservation(origin, type)); |
156 scoped_refptr<QuotaReservation> test = | 155 scoped_refptr<QuotaReservation> test = |
157 CreateQuotaReservation(reservation, origin, type); | 156 CreateQuotaReservation(reservation, origin, type); |
158 | 157 |
159 // Reserve quota with no files open. | 158 // Reserve quota with no files open. |
160 int64 amount = 100; | 159 int64 amount = 100; |
161 int64 reserved_quota; | 160 int64 reserved_quota; |
162 ppapi::FileGrowthMap file_growths; | 161 ppapi::FileGrowthMap file_growths; |
(...skipping 20 matching lines...) Expand all Loading... |
183 EXPECT_EQ(amount, reservation->remaining_quota()); | 182 EXPECT_EQ(amount, reservation->remaining_quota()); |
184 test->CloseFile(kFile1ID, ppapi::FileGrowth(new_file_size, 0)); | 183 test->CloseFile(kFile1ID, ppapi::FileGrowth(new_file_size, 0)); |
185 EXPECT_EQ(amount - (new_file_size - file_size), | 184 EXPECT_EQ(amount - (new_file_size - file_size), |
186 reservation->remaining_quota()); | 185 reservation->remaining_quota()); |
187 } | 186 } |
188 | 187 |
189 // Tests that: | 188 // Tests that: |
190 // 1) We can open and close multiple files. | 189 // 1) We can open and close multiple files. |
191 TEST_F(QuotaReservationTest, MultipleFiles) { | 190 TEST_F(QuotaReservationTest, MultipleFiles) { |
192 GURL origin(kOrigin); | 191 GURL origin(kOrigin); |
193 FileSystemType type = kType; | 192 fileapi::FileSystemType type = kType; |
194 | 193 |
195 scoped_refptr<fileapi::QuotaReservation> reservation( | 194 scoped_refptr<fileapi::QuotaReservation> reservation( |
196 reservation_manager()->CreateReservation(origin, type)); | 195 reservation_manager()->CreateReservation(origin, type)); |
197 scoped_refptr<QuotaReservation> test = | 196 scoped_refptr<QuotaReservation> test = |
198 CreateQuotaReservation(reservation, origin, type); | 197 CreateQuotaReservation(reservation, origin, type); |
199 | 198 |
200 // Open some files of different sizes. | 199 // Open some files of different sizes. |
201 int64 file1_size = 10; | 200 int64 file1_size = 10; |
202 SetFileSize(file1_name, file1_size); | 201 SetFileSize(file1_name, file1_size); |
203 int64 open_file1_size = | 202 int64 open_file1_size = |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 EXPECT_EQ(amount, reserved_quota); | 235 EXPECT_EQ(amount, reserved_quota); |
237 EXPECT_EQ(2U, file_growths.size()); | 236 EXPECT_EQ(2U, file_growths.size()); |
238 EXPECT_EQ(file1_size, file_growths[kFile1ID].max_written_offset); | 237 EXPECT_EQ(file1_size, file_growths[kFile1ID].max_written_offset); |
239 EXPECT_EQ(file3_size, file_growths[kFile3ID].max_written_offset); | 238 EXPECT_EQ(file3_size, file_growths[kFile3ID].max_written_offset); |
240 | 239 |
241 test->CloseFile(kFile1ID, ppapi::FileGrowth(file1_size, 0)); | 240 test->CloseFile(kFile1ID, ppapi::FileGrowth(file1_size, 0)); |
242 test->CloseFile(kFile3ID, ppapi::FileGrowth(file3_size, 0)); | 241 test->CloseFile(kFile3ID, ppapi::FileGrowth(file3_size, 0)); |
243 } | 242 } |
244 | 243 |
245 } // namespace content | 244 } // namespace content |
OLD | NEW |