| 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 "chrome/browser/chromeos/drive/drive_url_request_job.h" | 5 #include "chrome/browser/chromeos/fileapi/external_file_url_request_job.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/threading/thread.h" | 12 #include "base/threading/thread.h" |
| 13 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h" | 13 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h" |
| 14 #include "chrome/browser/chromeos/drive/drive_integration_service.h" | 14 #include "chrome/browser/chromeos/drive/drive_integration_service.h" |
| 15 #include "chrome/browser/chromeos/drive/fake_file_system.h" | 15 #include "chrome/browser/chromeos/drive/fake_file_system.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 34 #include "net/http/http_byte_range.h" | 34 #include "net/http/http_byte_range.h" |
| 35 #include "net/url_request/redirect_info.h" | 35 #include "net/url_request/redirect_info.h" |
| 36 #include "net/url_request/url_request.h" | 36 #include "net/url_request/url_request.h" |
| 37 #include "net/url_request/url_request_context.h" | 37 #include "net/url_request/url_request_context.h" |
| 38 #include "net/url_request/url_request_test_util.h" | 38 #include "net/url_request/url_request_test_util.h" |
| 39 #include "storage/browser/fileapi/external_mount_points.h" | 39 #include "storage/browser/fileapi/external_mount_points.h" |
| 40 #include "storage/browser/fileapi/file_system_context.h" | 40 #include "storage/browser/fileapi/file_system_context.h" |
| 41 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
| 42 #include "url/gurl.h" | 42 #include "url/gurl.h" |
| 43 | 43 |
| 44 namespace drive { | 44 namespace chromeos { |
| 45 namespace { | 45 namespace { |
| 46 class MockProfileManager : public ProfileManagerWithoutInit { | 46 class MockProfileManager : public ProfileManagerWithoutInit { |
| 47 public: | 47 public: |
| 48 explicit MockProfileManager(const base::FilePath& user_data_dir) | 48 explicit MockProfileManager(const base::FilePath& user_data_dir) |
| 49 : ProfileManagerWithoutInit(user_data_dir) {} | 49 : ProfileManagerWithoutInit(user_data_dir) {} |
| 50 | 50 |
| 51 protected: | 51 protected: |
| 52 virtual Profile* CreateProfileHelper( | 52 virtual Profile* CreateProfileHelper( |
| 53 const base::FilePath& file_path) OVERRIDE { | 53 const base::FilePath& file_path) OVERRIDE { |
| 54 if (!base::PathExists(file_path)) { | 54 if (!base::PathExists(file_path)) { |
| 55 if (!base::CreateDirectory(file_path)) | 55 if (!base::CreateDirectory(file_path)) |
| 56 return NULL; | 56 return NULL; |
| 57 } | 57 } |
| 58 return new TestingProfile(file_path); | 58 return new TestingProfile(file_path); |
| 59 } | 59 } |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 // A simple URLRequestJobFactory implementation to create DriveURLRequestJob. | 62 // A simple URLRequestJobFactory implementation to create |
| 63 // ExternalFileURLRequestJob. |
| 63 class TestURLRequestJobFactory : public net::URLRequestJobFactory { | 64 class TestURLRequestJobFactory : public net::URLRequestJobFactory { |
| 64 public: | 65 public: |
| 65 explicit TestURLRequestJobFactory(void* profile_id) | 66 explicit TestURLRequestJobFactory(void* profile_id) |
| 66 : profile_id_(profile_id) {} | 67 : profile_id_(profile_id) {} |
| 67 | 68 |
| 68 virtual ~TestURLRequestJobFactory() {} | 69 virtual ~TestURLRequestJobFactory() {} |
| 69 | 70 |
| 70 // net::URLRequestJobFactory override: | 71 // net::URLRequestJobFactory override: |
| 71 virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( | 72 virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( |
| 72 const std::string& scheme, | 73 const std::string& scheme, |
| 73 net::URLRequest* request, | 74 net::URLRequest* request, |
| 74 net::NetworkDelegate* network_delegate) const OVERRIDE { | 75 net::NetworkDelegate* network_delegate) const OVERRIDE { |
| 75 return new DriveURLRequestJob(profile_id_, request, network_delegate); | 76 return new ExternalFileURLRequestJob( |
| 77 profile_id_, request, network_delegate); |
| 76 } | 78 } |
| 77 | 79 |
| 78 virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE { | 80 virtual bool IsHandledProtocol(const std::string& scheme) const OVERRIDE { |
| 79 return scheme == chrome::kDriveScheme; | 81 return scheme == chrome::kExternalFileScheme; |
| 80 } | 82 } |
| 81 | 83 |
| 82 virtual bool IsHandledURL(const GURL& url) const OVERRIDE { | 84 virtual bool IsHandledURL(const GURL& url) const OVERRIDE { |
| 83 return url.is_valid() && IsHandledProtocol(url.scheme()); | 85 return url.is_valid() && IsHandledProtocol(url.scheme()); |
| 84 } | 86 } |
| 85 | 87 |
| 86 virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE { | 88 virtual bool IsSafeRedirectTarget(const GURL& location) const OVERRIDE { |
| 87 return true; | 89 return true; |
| 88 } | 90 } |
| 89 | 91 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 108 } | 110 } |
| 109 | 111 |
| 110 private: | 112 private: |
| 111 GURL redirect_url_; | 113 GURL redirect_url_; |
| 112 | 114 |
| 113 DISALLOW_COPY_AND_ASSIGN(TestDelegate); | 115 DISALLOW_COPY_AND_ASSIGN(TestDelegate); |
| 114 }; | 116 }; |
| 115 | 117 |
| 116 } // namespace | 118 } // namespace |
| 117 | 119 |
| 118 class DriveURLRequestJobTest : public testing::Test { | 120 class ExternalFileURLRequestJobTest : public testing::Test { |
| 119 protected: | 121 protected: |
| 120 DriveURLRequestJobTest() | 122 ExternalFileURLRequestJobTest() |
| 121 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), | 123 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
| 122 integration_service_factory_callback_( | 124 integration_service_factory_callback_(base::Bind( |
| 123 base::Bind(&DriveURLRequestJobTest::GetDriveIntegrationService, | 125 &ExternalFileURLRequestJobTest::GetDriveIntegrationService, |
| 124 base::Unretained(this))), | 126 base::Unretained(this))), |
| 125 fake_file_system_(NULL) {} | 127 fake_file_system_(NULL) {} |
| 126 | 128 |
| 127 virtual ~DriveURLRequestJobTest() { | 129 virtual ~ExternalFileURLRequestJobTest() {} |
| 128 } | |
| 129 | 130 |
| 130 virtual void SetUp() OVERRIDE { | 131 virtual void SetUp() OVERRIDE { |
| 131 // Create a testing profile. | 132 // Create a testing profile. |
| 132 prefs_.reset(new TestingPrefServiceSimple); | 133 prefs_.reset(new TestingPrefServiceSimple); |
| 133 chrome::RegisterLocalState(prefs_->registry()); | 134 chrome::RegisterLocalState(prefs_->registry()); |
| 134 TestingBrowserProcess::GetGlobal()->SetLocalState(prefs_.get()); | 135 TestingBrowserProcess::GetGlobal()->SetLocalState(prefs_.get()); |
| 135 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 136 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 136 ProfileManager* const profile_manager = | 137 ProfileManager* const profile_manager = |
| 137 new MockProfileManager(temp_dir_.path()); | 138 new MockProfileManager(temp_dir_.path()); |
| 138 TestingBrowserProcess::GetGlobal()->SetProfileManager(profile_manager); | 139 TestingBrowserProcess::GetGlobal()->SetProfileManager(profile_manager); |
| 139 Profile* const profile = | 140 Profile* const profile = |
| 140 profile_manager->GetProfile(temp_dir_.path().Append("user")); | 141 profile_manager->GetProfile(temp_dir_.path().Append("user")); |
| 141 | 142 |
| 142 // Create the drive integration service for the profile. | 143 // Create the drive integration service for the profile. |
| 143 integration_service_factory_scope_.reset( | 144 integration_service_factory_scope_.reset( |
| 144 new DriveIntegrationServiceFactory::ScopedFactoryForTest( | 145 new drive::DriveIntegrationServiceFactory::ScopedFactoryForTest( |
| 145 &integration_service_factory_callback_)); | 146 &integration_service_factory_callback_)); |
| 146 DriveIntegrationServiceFactory::GetForProfile(profile); | 147 drive::DriveIntegrationServiceFactory::GetForProfile(profile); |
| 147 | 148 |
| 148 // Create the URL request job factory. | 149 // Create the URL request job factory. |
| 149 test_network_delegate_.reset(new net::TestNetworkDelegate); | 150 test_network_delegate_.reset(new net::TestNetworkDelegate); |
| 150 test_url_request_job_factory_.reset(new TestURLRequestJobFactory(profile)); | 151 test_url_request_job_factory_.reset(new TestURLRequestJobFactory(profile)); |
| 151 url_request_context_.reset(new net::URLRequestContext()); | 152 url_request_context_.reset(new net::URLRequestContext()); |
| 152 url_request_context_->set_job_factory(test_url_request_job_factory_.get()); | 153 url_request_context_->set_job_factory(test_url_request_job_factory_.get()); |
| 153 url_request_context_->set_network_delegate(test_network_delegate_.get()); | 154 url_request_context_->set_network_delegate(test_network_delegate_.get()); |
| 154 test_delegate_.reset(new TestDelegate); | 155 test_delegate_.reset(new TestDelegate); |
| 155 } | 156 } |
| 156 | 157 |
| 157 virtual void TearDown() { | 158 virtual void TearDown() { |
| 158 TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); | 159 TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); |
| 159 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); | 160 TestingBrowserProcess::GetGlobal()->SetLocalState(NULL); |
| 160 } | 161 } |
| 161 | 162 |
| 162 bool ReadDriveFileSync( | 163 bool ReadDriveFileSync(const base::FilePath& file_path, |
| 163 const base::FilePath& file_path, std::string* out_content) { | 164 std::string* out_content) { |
| 164 scoped_ptr<base::Thread> worker_thread( | 165 scoped_ptr<base::Thread> worker_thread( |
| 165 new base::Thread("ReadDriveFileSync")); | 166 new base::Thread("ReadDriveFileSync")); |
| 166 if (!worker_thread->Start()) | 167 if (!worker_thread->Start()) |
| 167 return false; | 168 return false; |
| 168 | 169 |
| 169 scoped_ptr<DriveFileStreamReader> reader(new DriveFileStreamReader( | 170 scoped_ptr<drive::DriveFileStreamReader> reader( |
| 170 base::Bind(&DriveURLRequestJobTest::GetFileSystem, | 171 new drive::DriveFileStreamReader( |
| 171 base::Unretained(this)), | 172 base::Bind(&ExternalFileURLRequestJobTest::GetFileSystem, |
| 172 worker_thread->message_loop_proxy().get())); | 173 base::Unretained(this)), |
| 174 worker_thread->message_loop_proxy().get())); |
| 173 int error = net::ERR_FAILED; | 175 int error = net::ERR_FAILED; |
| 174 scoped_ptr<ResourceEntry> entry; | 176 scoped_ptr<drive::ResourceEntry> entry; |
| 175 { | 177 { |
| 176 base::RunLoop run_loop; | 178 base::RunLoop run_loop; |
| 177 reader->Initialize( | 179 reader->Initialize(file_path, |
| 178 file_path, | 180 net::HttpByteRange(), |
| 179 net::HttpByteRange(), | 181 google_apis::test_util::CreateQuitCallback( |
| 180 google_apis::test_util::CreateQuitCallback( | 182 &run_loop, |
| 181 &run_loop, | 183 google_apis::test_util::CreateCopyResultCallback( |
| 182 google_apis::test_util::CreateCopyResultCallback( | 184 &error, &entry))); |
| 183 &error, &entry))); | |
| 184 run_loop.Run(); | 185 run_loop.Run(); |
| 185 } | 186 } |
| 186 if (error != net::OK || !entry) | 187 if (error != net::OK || !entry) |
| 187 return false; | 188 return false; |
| 188 | 189 |
| 189 // Read data from the reader. | 190 // Read data from the reader. |
| 190 std::string content; | 191 std::string content; |
| 191 if (test_util::ReadAllData(reader.get(), &content) != net::OK) | 192 if (drive::test_util::ReadAllData(reader.get(), &content) != net::OK) |
| 192 return false; | 193 return false; |
| 193 | 194 |
| 194 if (static_cast<size_t>(entry->file_info().size()) != content.size()) | 195 if (static_cast<size_t>(entry->file_info().size()) != content.size()) |
| 195 return false; | 196 return false; |
| 196 | 197 |
| 197 *out_content = content; | 198 *out_content = content; |
| 198 return true; | 199 return true; |
| 199 } | 200 } |
| 200 | 201 |
| 201 scoped_ptr<net::URLRequestContext> url_request_context_; | 202 scoped_ptr<net::URLRequestContext> url_request_context_; |
| 202 scoped_ptr<TestDelegate> test_delegate_; | 203 scoped_ptr<TestDelegate> test_delegate_; |
| 203 | 204 |
| 204 private: | 205 private: |
| 205 // Create the drive integration service for the |profile| | 206 // Create the drive integration service for the |profile| |
| 206 DriveIntegrationService* GetDriveIntegrationService(Profile* profile) { | 207 drive::DriveIntegrationService* GetDriveIntegrationService(Profile* profile) { |
| 207 FakeDriveService* const drive_service = new FakeDriveService; | 208 drive::FakeDriveService* const drive_service = new drive::FakeDriveService; |
| 208 if (!test_util::SetUpTestEntries(drive_service)) | 209 if (!drive::test_util::SetUpTestEntries(drive_service)) |
| 209 return NULL; | 210 return NULL; |
| 210 | 211 |
| 211 const std::string& drive_mount_name = | 212 const std::string& drive_mount_name = |
| 212 util::GetDriveMountPointPath(profile).BaseName().AsUTF8Unsafe(); | 213 drive::util::GetDriveMountPointPath(profile).BaseName().AsUTF8Unsafe(); |
| 213 storage::ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( | 214 storage::ExternalMountPoints::GetSystemInstance()->RegisterFileSystem( |
| 214 drive_mount_name, | 215 drive_mount_name, |
| 215 storage::kFileSystemTypeDrive, | 216 storage::kFileSystemTypeDrive, |
| 216 storage::FileSystemMountOption(), | 217 storage::FileSystemMountOption(), |
| 217 util::GetDriveMountPointPath(profile)); | 218 drive::util::GetDriveMountPointPath(profile)); |
| 218 DCHECK(!fake_file_system_); | 219 DCHECK(!fake_file_system_); |
| 219 fake_file_system_ = new test_util::FakeFileSystem(drive_service); | 220 fake_file_system_ = new drive::test_util::FakeFileSystem(drive_service); |
| 220 return new drive::DriveIntegrationService(profile, | 221 return new drive::DriveIntegrationService(profile, |
| 221 NULL, | 222 NULL, |
| 222 drive_service, | 223 drive_service, |
| 223 drive_mount_name, | 224 drive_mount_name, |
| 224 temp_dir_.path().Append("cache"), | 225 temp_dir_.path().Append("cache"), |
| 225 fake_file_system_); | 226 fake_file_system_); |
| 226 } | 227 } |
| 227 | 228 |
| 228 FileSystemInterface* GetFileSystem() { return fake_file_system_; } | 229 drive::FileSystemInterface* GetFileSystem() { return fake_file_system_; } |
| 229 | 230 |
| 230 content::TestBrowserThreadBundle thread_bundle_; | 231 content::TestBrowserThreadBundle thread_bundle_; |
| 231 DriveIntegrationServiceFactory::FactoryCallback | 232 drive::DriveIntegrationServiceFactory::FactoryCallback |
| 232 integration_service_factory_callback_; | 233 integration_service_factory_callback_; |
| 233 scoped_ptr<DriveIntegrationServiceFactory::ScopedFactoryForTest> | 234 scoped_ptr<drive::DriveIntegrationServiceFactory::ScopedFactoryForTest> |
| 234 integration_service_factory_scope_; | 235 integration_service_factory_scope_; |
| 235 scoped_ptr<DriveIntegrationService> integration_service_; | 236 scoped_ptr<drive::DriveIntegrationService> integration_service_; |
| 236 test_util::FakeFileSystem* fake_file_system_; | 237 drive::test_util::FakeFileSystem* fake_file_system_; |
| 237 | 238 |
| 238 scoped_ptr<net::TestNetworkDelegate> test_network_delegate_; | 239 scoped_ptr<net::TestNetworkDelegate> test_network_delegate_; |
| 239 scoped_ptr<TestURLRequestJobFactory> test_url_request_job_factory_; | 240 scoped_ptr<TestURLRequestJobFactory> test_url_request_job_factory_; |
| 240 | 241 |
| 241 base::ScopedTempDir temp_dir_; | 242 base::ScopedTempDir temp_dir_; |
| 242 scoped_ptr<TestingPrefServiceSimple> prefs_; | 243 scoped_ptr<TestingPrefServiceSimple> prefs_; |
| 243 scoped_refptr<storage::FileSystemContext> file_system_context_; | 244 scoped_refptr<storage::FileSystemContext> file_system_context_; |
| 244 }; | 245 }; |
| 245 | 246 |
| 246 TEST_F(DriveURLRequestJobTest, NonGetMethod) { | 247 TEST_F(ExternalFileURLRequestJobTest, NonGetMethod) { |
| 247 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 248 scoped_ptr<net::URLRequest> request( |
| 248 GURL("drive:drive/root/File 1.txt"), | 249 url_request_context_->CreateRequest(GURL("drive:drive/root/File 1.txt"), |
| 249 net::DEFAULT_PRIORITY, | 250 net::DEFAULT_PRIORITY, |
| 250 test_delegate_.get(), | 251 test_delegate_.get(), |
| 251 NULL)); | 252 NULL)); |
| 252 request->set_method("POST"); // Set non "GET" method. | 253 request->set_method("POST"); // Set non "GET" method. |
| 253 request->Start(); | 254 request->Start(); |
| 254 | 255 |
| 255 base::RunLoop().Run(); | 256 base::RunLoop().Run(); |
| 256 | 257 |
| 257 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 258 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 258 EXPECT_EQ(net::ERR_METHOD_NOT_SUPPORTED, request->status().error()); | 259 EXPECT_EQ(net::ERR_METHOD_NOT_SUPPORTED, request->status().error()); |
| 259 } | 260 } |
| 260 | 261 |
| 261 TEST_F(DriveURLRequestJobTest, RegularFile) { | 262 TEST_F(ExternalFileURLRequestJobTest, RegularFile) { |
| 262 const GURL kTestUrl("drive:drive/root/File 1.txt"); | 263 const GURL kTestUrl("drive:drive/root/File 1.txt"); |
| 263 const base::FilePath kTestFilePath("drive/root/File 1.txt"); | 264 const base::FilePath kTestFilePath("drive/root/File 1.txt"); |
| 264 | 265 |
| 265 // For the first time, the file should be fetched from the server. | 266 // For the first time, the file should be fetched from the server. |
| 266 { | 267 { |
| 267 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 268 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 268 kTestUrl, | 269 kTestUrl, net::DEFAULT_PRIORITY, test_delegate_.get(), NULL)); |
| 269 net::DEFAULT_PRIORITY, | |
| 270 test_delegate_.get(), | |
| 271 NULL)); | |
| 272 request->Start(); | 270 request->Start(); |
| 273 | 271 |
| 274 base::RunLoop().Run(); | 272 base::RunLoop().Run(); |
| 275 | 273 |
| 276 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); | 274 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 277 // It looks weird, but the mime type for the "File 1.txt" is "audio/mpeg" | 275 // It looks weird, but the mime type for the "File 1.txt" is "audio/mpeg" |
| 278 // on the server. | 276 // on the server. |
| 279 std::string mime_type; | 277 std::string mime_type; |
| 280 request->GetMimeType(&mime_type); | 278 request->GetMimeType(&mime_type); |
| 281 EXPECT_EQ("audio/mpeg", mime_type); | 279 EXPECT_EQ("audio/mpeg", mime_type); |
| 282 | 280 |
| 283 // Reading file must be done after |request| runs, otherwise | 281 // Reading file must be done after |request| runs, otherwise |
| 284 // it'll create a local cache file, and we cannot test correctly. | 282 // it'll create a local cache file, and we cannot test correctly. |
| 285 std::string expected_data; | 283 std::string expected_data; |
| 286 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); | 284 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); |
| 287 EXPECT_EQ(expected_data, test_delegate_->data_received()); | 285 EXPECT_EQ(expected_data, test_delegate_->data_received()); |
| 288 } | 286 } |
| 289 | 287 |
| 290 // For the second time, the locally cached file should be used. | 288 // For the second time, the locally cached file should be used. |
| 291 // The caching emulation is done by FakeFileSystem. | 289 // The caching emulation is done by FakeFileSystem. |
| 292 { | 290 { |
| 293 test_delegate_.reset(new TestDelegate); | 291 test_delegate_.reset(new TestDelegate); |
| 294 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 292 scoped_ptr<net::URLRequest> request( |
| 295 GURL("drive:drive/root/File 1.txt"), | 293 url_request_context_->CreateRequest(GURL("drive:drive/root/File 1.txt"), |
| 296 net::DEFAULT_PRIORITY, | 294 net::DEFAULT_PRIORITY, |
| 297 test_delegate_.get(), | 295 test_delegate_.get(), |
| 298 NULL)); | 296 NULL)); |
| 299 request->Start(); | 297 request->Start(); |
| 300 | 298 |
| 301 base::RunLoop().Run(); | 299 base::RunLoop().Run(); |
| 302 | 300 |
| 303 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); | 301 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 304 std::string mime_type; | 302 std::string mime_type; |
| 305 request->GetMimeType(&mime_type); | 303 request->GetMimeType(&mime_type); |
| 306 EXPECT_EQ("audio/mpeg", mime_type); | 304 EXPECT_EQ("audio/mpeg", mime_type); |
| 307 | 305 |
| 308 std::string expected_data; | 306 std::string expected_data; |
| 309 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); | 307 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); |
| 310 EXPECT_EQ(expected_data, test_delegate_->data_received()); | 308 EXPECT_EQ(expected_data, test_delegate_->data_received()); |
| 311 } | 309 } |
| 312 } | 310 } |
| 313 | 311 |
| 314 TEST_F(DriveURLRequestJobTest, HostedDocument) { | 312 TEST_F(ExternalFileURLRequestJobTest, HostedDocument) { |
| 315 // Open a gdoc file. | 313 // Open a gdoc file. |
| 316 test_delegate_->set_quit_on_redirect(true); | 314 test_delegate_->set_quit_on_redirect(true); |
| 317 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 315 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 318 GURL("drive:drive/root/Document 1 excludeDir-test.gdoc"), | 316 GURL("drive:drive/root/Document 1 excludeDir-test.gdoc"), |
| 319 net::DEFAULT_PRIORITY, | 317 net::DEFAULT_PRIORITY, |
| 320 test_delegate_.get(), | 318 test_delegate_.get(), |
| 321 NULL)); | 319 NULL)); |
| 322 request->Start(); | 320 request->Start(); |
| 323 | 321 |
| 324 base::RunLoop().Run(); | 322 base::RunLoop().Run(); |
| 325 | 323 |
| 326 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); | 324 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 327 // Make sure that a hosted document triggers redirection. | 325 // Make sure that a hosted document triggers redirection. |
| 328 EXPECT_TRUE(request->is_redirecting()); | 326 EXPECT_TRUE(request->is_redirecting()); |
| 329 EXPECT_TRUE(test_delegate_->redirect_url().is_valid()); | 327 EXPECT_TRUE(test_delegate_->redirect_url().is_valid()); |
| 330 } | 328 } |
| 331 | 329 |
| 332 TEST_F(DriveURLRequestJobTest, RootDirectory) { | 330 TEST_F(ExternalFileURLRequestJobTest, RootDirectory) { |
| 333 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 331 scoped_ptr<net::URLRequest> request( |
| 334 GURL("drive:drive/root"), | 332 url_request_context_->CreateRequest(GURL("drive:drive/root"), |
| 335 net::DEFAULT_PRIORITY, | 333 net::DEFAULT_PRIORITY, |
| 336 test_delegate_.get(), | 334 test_delegate_.get(), |
| 337 NULL)); | 335 NULL)); |
| 338 request->Start(); | 336 request->Start(); |
| 339 | 337 |
| 340 base::RunLoop().Run(); | 338 base::RunLoop().Run(); |
| 341 | 339 |
| 342 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 340 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 343 EXPECT_EQ(net::ERR_FAILED, request->status().error()); | 341 EXPECT_EQ(net::ERR_FAILED, request->status().error()); |
| 344 } | 342 } |
| 345 | 343 |
| 346 TEST_F(DriveURLRequestJobTest, Directory) { | 344 TEST_F(ExternalFileURLRequestJobTest, Directory) { |
| 347 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 345 scoped_ptr<net::URLRequest> request( |
| 348 GURL("drive:drive/root/Directory 1"), | 346 url_request_context_->CreateRequest(GURL("drive:drive/root/Directory 1"), |
| 349 net::DEFAULT_PRIORITY, | 347 net::DEFAULT_PRIORITY, |
| 350 test_delegate_.get(), | 348 test_delegate_.get(), |
| 351 NULL)); | 349 NULL)); |
| 352 request->Start(); | 350 request->Start(); |
| 353 | 351 |
| 354 base::RunLoop().Run(); | 352 base::RunLoop().Run(); |
| 355 | 353 |
| 356 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 354 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 357 EXPECT_EQ(net::ERR_FAILED, request->status().error()); | 355 EXPECT_EQ(net::ERR_FAILED, request->status().error()); |
| 358 } | 356 } |
| 359 | 357 |
| 360 TEST_F(DriveURLRequestJobTest, NonExistingFile) { | 358 TEST_F(ExternalFileURLRequestJobTest, NonExistingFile) { |
| 361 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 359 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 362 GURL("drive:drive/root/non-existing-file.txt"), | 360 GURL("drive:drive/root/non-existing-file.txt"), |
| 363 net::DEFAULT_PRIORITY, | 361 net::DEFAULT_PRIORITY, |
| 364 test_delegate_.get(), | 362 test_delegate_.get(), |
| 365 NULL)); | 363 NULL)); |
| 366 request->Start(); | 364 request->Start(); |
| 367 | 365 |
| 368 base::RunLoop().Run(); | 366 base::RunLoop().Run(); |
| 369 | 367 |
| 370 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 368 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 371 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()); | 369 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()); |
| 372 } | 370 } |
| 373 | 371 |
| 374 TEST_F(DriveURLRequestJobTest, WrongFormat) { | 372 TEST_F(ExternalFileURLRequestJobTest, WrongFormat) { |
| 375 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 373 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 376 GURL("drive:"), | 374 GURL("drive:"), net::DEFAULT_PRIORITY, test_delegate_.get(), NULL)); |
| 377 net::DEFAULT_PRIORITY, | |
| 378 test_delegate_.get(), | |
| 379 NULL)); | |
| 380 request->Start(); | 375 request->Start(); |
| 381 | 376 |
| 382 base::RunLoop().Run(); | 377 base::RunLoop().Run(); |
| 383 | 378 |
| 384 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 379 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 385 EXPECT_EQ(net::ERR_INVALID_URL, request->status().error()); | 380 EXPECT_EQ(net::ERR_INVALID_URL, request->status().error()); |
| 386 } | 381 } |
| 387 | 382 |
| 388 TEST_F(DriveURLRequestJobTest, Cancel) { | 383 TEST_F(ExternalFileURLRequestJobTest, Cancel) { |
| 389 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 384 scoped_ptr<net::URLRequest> request( |
| 390 GURL("drive:drive/root/File 1.txt"), | 385 url_request_context_->CreateRequest(GURL("drive:drive/root/File 1.txt"), |
| 391 net::DEFAULT_PRIORITY, | 386 net::DEFAULT_PRIORITY, |
| 392 test_delegate_.get(), | 387 test_delegate_.get(), |
| 393 NULL)); | 388 NULL)); |
| 394 | 389 |
| 395 // Start the request, and cancel it immediately after it. | 390 // Start the request, and cancel it immediately after it. |
| 396 request->Start(); | 391 request->Start(); |
| 397 request->Cancel(); | 392 request->Cancel(); |
| 398 | 393 |
| 399 base::RunLoop().Run(); | 394 base::RunLoop().Run(); |
| 400 | 395 |
| 401 EXPECT_EQ(net::URLRequestStatus::CANCELED, request->status().status()); | 396 EXPECT_EQ(net::URLRequestStatus::CANCELED, request->status().status()); |
| 402 } | 397 } |
| 403 | 398 |
| 404 TEST_F(DriveURLRequestJobTest, RangeHeader) { | 399 TEST_F(ExternalFileURLRequestJobTest, RangeHeader) { |
| 405 const GURL kTestUrl("drive:drive/root/File 1.txt"); | 400 const GURL kTestUrl("drive:drive/root/File 1.txt"); |
| 406 const base::FilePath kTestFilePath("drive/root/File 1.txt"); | 401 const base::FilePath kTestFilePath("drive/root/File 1.txt"); |
| 407 | 402 |
| 408 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 403 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 409 kTestUrl, | 404 kTestUrl, net::DEFAULT_PRIORITY, test_delegate_.get(), NULL)); |
| 410 net::DEFAULT_PRIORITY, | |
| 411 test_delegate_.get(), | |
| 412 NULL)); | |
| 413 | 405 |
| 414 // Set range header. | 406 // Set range header. |
| 415 request->SetExtraRequestHeaderByName( | 407 request->SetExtraRequestHeaderByName( |
| 416 "Range", "bytes=3-5", false /* overwrite */); | 408 "Range", "bytes=3-5", false /* overwrite */); |
| 417 request->Start(); | 409 request->Start(); |
| 418 | 410 |
| 419 base::RunLoop().Run(); | 411 base::RunLoop().Run(); |
| 420 | 412 |
| 421 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); | 413 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); |
| 422 | 414 |
| 423 // Reading file must be done after |request| runs, otherwise | 415 // Reading file must be done after |request| runs, otherwise |
| 424 // it'll create a local cache file, and we cannot test correctly. | 416 // it'll create a local cache file, and we cannot test correctly. |
| 425 std::string expected_data; | 417 std::string expected_data; |
| 426 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); | 418 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); |
| 427 EXPECT_EQ(expected_data.substr(3, 3), test_delegate_->data_received()); | 419 EXPECT_EQ(expected_data.substr(3, 3), test_delegate_->data_received()); |
| 428 } | 420 } |
| 429 | 421 |
| 430 TEST_F(DriveURLRequestJobTest, WrongRangeHeader) { | 422 TEST_F(ExternalFileURLRequestJobTest, WrongRangeHeader) { |
| 431 const GURL kTestUrl("drive:drive/root/File 1.txt"); | 423 const GURL kTestUrl("drive:drive/root/File 1.txt"); |
| 432 | 424 |
| 433 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( | 425 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest( |
| 434 kTestUrl, | 426 kTestUrl, net::DEFAULT_PRIORITY, test_delegate_.get(), NULL)); |
| 435 net::DEFAULT_PRIORITY, | |
| 436 test_delegate_.get(), | |
| 437 NULL)); | |
| 438 | 427 |
| 439 // Set range header. | 428 // Set range header. |
| 440 request->SetExtraRequestHeaderByName( | 429 request->SetExtraRequestHeaderByName( |
| 441 "Range", "Wrong Range Header Value", false /* overwrite */); | 430 "Range", "Wrong Range Header Value", false /* overwrite */); |
| 442 request->Start(); | 431 request->Start(); |
| 443 | 432 |
| 444 base::RunLoop().Run(); | 433 base::RunLoop().Run(); |
| 445 | 434 |
| 446 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); | 435 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); |
| 447 EXPECT_EQ(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, request->status().error()); | 436 EXPECT_EQ(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, request->status().error()); |
| 448 } | 437 } |
| 449 | 438 |
| 450 } // namespace drive | 439 } // namespace chromeos |
| OLD | NEW |