OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit) | 5 // NOTE: These tests are run as part of "unit_tests" (in chrome/test/unit) |
6 // rather than as part of test_shell_tests because they rely on being able | 6 // rather than as part of test_shell_tests because they rely on being able |
7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses | 7 // to instantiate a MessageLoop of type TYPE_IO. test_shell_tests uses |
8 // TYPE_UI, which URLRequest doesn't allow. | 8 // TYPE_UI, which URLRequest doesn't allow. |
9 // | 9 // |
10 | 10 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
63 | 63 |
64 } // namespace | 64 } // namespace |
65 | 65 |
66 class FileSystemURLRequestJobTest : public testing::Test { | 66 class FileSystemURLRequestJobTest : public testing::Test { |
67 protected: | 67 protected: |
68 FileSystemURLRequestJobTest() | 68 FileSystemURLRequestJobTest() |
69 : message_loop_(MessageLoop::TYPE_IO), // simulate an IO thread | 69 : message_loop_(MessageLoop::TYPE_IO), // simulate an IO thread |
70 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { | 70 ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) { |
71 } | 71 } |
72 | 72 |
73 virtual void SetUp() { | 73 virtual void SetUp() OVERRIDE { |
74 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 74 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
75 | 75 |
76 special_storage_policy_ = new quota::MockSpecialStoragePolicy; | 76 special_storage_policy_ = new quota::MockSpecialStoragePolicy; |
77 // We use the main thread so that we can get the root path synchronously. | 77 // We use the main thread so that we can get the root path synchronously. |
78 // TODO(adamk): Run this on the FILE thread we've created as well. | 78 // TODO(adamk): Run this on the FILE thread we've created as well. |
79 file_system_context_ = | 79 file_system_context_ = |
80 new FileSystemContext( | 80 new FileSystemContext( |
81 base::MessageLoopProxy::current(), | 81 base::MessageLoopProxy::current(), |
82 base::MessageLoopProxy::current(), | 82 base::MessageLoopProxy::current(), |
83 special_storage_policy_, NULL, | 83 special_storage_policy_, NULL, |
84 temp_dir_.path(), | 84 temp_dir_.path(), |
85 CreateDisallowFileAccessOptions()); | 85 CreateDisallowFileAccessOptions()); |
86 | 86 |
87 file_system_context_->sandbox_provider()->ValidateFileSystemRoot( | 87 file_system_context_->sandbox_provider()->ValidateFileSystemRoot( |
88 GURL("http://remote/"), kFileSystemTypeTemporary, true, // create | 88 GURL("http://remote/"), kFileSystemTypeTemporary, true, // create |
89 base::Bind(&FileSystemURLRequestJobTest::OnValidateFileSystem, | 89 base::Bind(&FileSystemURLRequestJobTest::OnValidateFileSystem, |
90 weak_factory_.GetWeakPtr())); | 90 weak_factory_.GetWeakPtr())); |
91 MessageLoop::current()->RunAllPending(); | 91 MessageLoop::current()->RunAllPending(); |
92 | 92 |
93 net::URLRequest::Deprecated::RegisterProtocolFactory( | 93 net::URLRequest::Deprecated::RegisterProtocolFactory( |
94 "filesystem", &FileSystemURLRequestJobFactory); | 94 "filesystem", &FileSystemURLRequestJobFactory); |
95 } | 95 } |
96 | 96 |
97 virtual void TearDown() { | 97 virtual void TearDown() OVERRIDE { |
98 net::URLRequest::Deprecated::RegisterProtocolFactory("filesystem", NULL); | 98 net::URLRequest::Deprecated::RegisterProtocolFactory("filesystem", NULL); |
99 ClearUnusedJob(); | 99 ClearUnusedJob(); |
100 if (pending_job_) { | |
101 pending_job_->Kill(); | |
102 pending_job_ = NULL; | |
103 } | |
104 // FileReader posts a task to close the file in destructor. | |
105 MessageLoop::current()->RunAllPending(); | |
michaeln
2012/04/13 19:08:36
Would it be sufficient to just add the call to Run
kinuko
2012/04/16 02:29:40
I expected so, but it seems we need to explicitly
| |
100 } | 106 } |
101 | 107 |
102 void OnValidateFileSystem(base::PlatformFileError result) { | 108 void OnValidateFileSystem(base::PlatformFileError result) { |
103 ASSERT_EQ(base::PLATFORM_FILE_OK, result); | 109 ASSERT_EQ(base::PLATFORM_FILE_OK, result); |
104 } | 110 } |
105 | 111 |
106 void TestRequestHelper(const GURL& url, | 112 void TestRequestHelper(const GURL& url, |
107 const net::HttpRequestHeaders* headers, | 113 const net::HttpRequestHeaders* headers, |
108 bool run_to_completion) { | 114 bool run_to_completion) { |
109 delegate_.reset(new TestDelegate()); | 115 delegate_.reset(new TestDelegate()); |
110 // Make delegate_ exit the MessageLoop when the request is done. | 116 // Make delegate_ exit the MessageLoop when the request is done. |
111 delegate_->set_quit_on_complete(true); | 117 delegate_->set_quit_on_complete(true); |
112 delegate_->set_quit_on_redirect(true); | 118 delegate_->set_quit_on_redirect(true); |
113 request_.reset(new net::URLRequest(url, delegate_.get())); | 119 request_.reset(new net::URLRequest(url, delegate_.get())); |
114 if (headers) | 120 if (headers) |
115 request_->SetExtraRequestHeaders(*headers); | 121 request_->SetExtraRequestHeaders(*headers); |
122 ASSERT_TRUE(!job_); | |
116 job_ = new FileSystemURLRequestJob( | 123 job_ = new FileSystemURLRequestJob( |
117 request_.get(), | 124 request_.get(), |
118 file_system_context_.get(), | 125 file_system_context_.get(), |
119 base::MessageLoopProxy::current()); | 126 base::MessageLoopProxy::current()); |
127 pending_job_ = job_; | |
120 | 128 |
121 request_->Start(); | 129 request_->Start(); |
122 ASSERT_TRUE(request_->is_pending()); // verify that we're starting async | 130 ASSERT_TRUE(request_->is_pending()); // verify that we're starting async |
123 if (run_to_completion) | 131 if (run_to_completion) |
124 MessageLoop::current()->Run(); | 132 MessageLoop::current()->Run(); |
125 } | 133 } |
126 | 134 |
127 void TestRequest(const GURL& url) { | 135 void TestRequest(const GURL& url) { |
128 TestRequestHelper(url, NULL, true); | 136 TestRequestHelper(url, NULL, true); |
129 } | 137 } |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
205 | 213 |
206 ScopedTempDir temp_dir_; | 214 ScopedTempDir temp_dir_; |
207 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy_; | 215 scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy_; |
208 scoped_refptr<FileSystemContext> file_system_context_; | 216 scoped_refptr<FileSystemContext> file_system_context_; |
209 base::WeakPtrFactory<FileSystemURLRequestJobTest> weak_factory_; | 217 base::WeakPtrFactory<FileSystemURLRequestJobTest> weak_factory_; |
210 | 218 |
211 // NOTE: order matters, request must die before delegate | 219 // NOTE: order matters, request must die before delegate |
212 scoped_ptr<TestDelegate> delegate_; | 220 scoped_ptr<TestDelegate> delegate_; |
213 scoped_ptr<net::URLRequest> request_; | 221 scoped_ptr<net::URLRequest> request_; |
214 | 222 |
223 scoped_refptr<net::URLRequestJob> pending_job_; | |
215 static net::URLRequestJob* job_; | 224 static net::URLRequestJob* job_; |
216 }; | 225 }; |
217 | 226 |
218 // static | 227 // static |
219 net::URLRequestJob* FileSystemURLRequestJobTest::job_ = NULL; | 228 net::URLRequestJob* FileSystemURLRequestJobTest::job_ = NULL; |
220 | 229 |
221 namespace { | 230 namespace { |
222 | 231 |
223 TEST_F(FileSystemURLRequestJobTest, FileTest) { | 232 TEST_F(FileSystemURLRequestJobTest, FileTest) { |
224 WriteFile("file1.dat", kTestFileData, arraysize(kTestFileData) - 1); | 233 WriteFile("file1.dat", kTestFileData, arraysize(kTestFileData) - 1); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
361 | 370 |
362 TestRequest(CreateFileSystemURL(kFilename)); | 371 TestRequest(CreateFileSystemURL(kFilename)); |
363 | 372 |
364 std::string mime_type_from_job; | 373 std::string mime_type_from_job; |
365 request_->GetMimeType(&mime_type_from_job); | 374 request_->GetMimeType(&mime_type_from_job); |
366 EXPECT_EQ(mime_type_direct, mime_type_from_job); | 375 EXPECT_EQ(mime_type_direct, mime_type_from_job); |
367 } | 376 } |
368 | 377 |
369 } // namespace | 378 } // namespace |
370 } // namespace fileapi | 379 } // namespace fileapi |
OLD | NEW |