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 3 // found in the LICENSE file. 4 5 #include "webkit/browser/blob/mock_blob_url_request_context.h" 6 7 #include "webkit/browser/blob/blob_storage_controller.h" 8 #include "webkit/browser/blob/blob_url_request_job.h" 9 #include "webkit/common/blob/blob_data.h" 10 11 namespace webkit_blob { 12 13 namespace { 14 15 class MockBlobProtocolHandler 16 : public net::URLRequestJobFactory::ProtocolHandler { 17 public: 18 explicit MockBlobProtocolHandler( 19 BlobStorageController* blob_storage_controller, 20 fileapi::FileSystemContext* file_system_context) 21 : blob_storage_controller_(blob_storage_controller), 22 file_system_context_(file_system_context) {} 23 24 virtual ~MockBlobProtocolHandler() {} 25 26 virtual net::URLRequestJob* MaybeCreateJob( 27 net::URLRequest* request, 28 net::NetworkDelegate* network_delegate) const OVERRIDE { 29 return new BlobURLRequestJob( 30 request, 31 network_delegate, 32 blob_storage_controller_->GetBlobDataFromUrl(request->url()), 33 file_system_context_, 34 base::MessageLoopProxy::current().get()); 35 } 36 37 private: 38 webkit_blob::BlobStorageController* const blob_storage_controller_; 39 fileapi::FileSystemContext* const file_system_context_; 40 41 DISALLOW_COPY_AND_ASSIGN(MockBlobProtocolHandler); 42 }; 43 44 } // namespace 45 46 MockBlobURLRequestContext::MockBlobURLRequestContext( 47 fileapi::FileSystemContext* file_system_context) 48 : blob_storage_controller_(new BlobStorageController) { 49 // Job factory owns the protocol handler. 50 job_factory_.SetProtocolHandler( 51 "blob", new MockBlobProtocolHandler(blob_storage_controller_.get(), 52 file_system_context)); 53 set_job_factory(&job_factory_); 54 } 55 56 MockBlobURLRequestContext::~MockBlobURLRequestContext() {} 57 58 ScopedTextBlob::ScopedTextBlob( 59 const MockBlobURLRequestContext& request_context, 60 const GURL& blob_url, 61 const std::string& data) 62 : blob_url_(blob_url), 63 blob_storage_controller_(request_context.blob_storage_controller()) { 64 DCHECK(blob_storage_controller_); 65 scoped_refptr<BlobData> blob_data(new BlobData()); 66 blob_data->AppendData(data); 67 blob_storage_controller_->AddFinishedBlob(blob_url_, blob_data.get()); 68 } 69 70 ScopedTextBlob::~ScopedTextBlob() { 71 blob_storage_controller_->RemoveBlob(blob_url_); 72 } 73 74 } // namespace webkit_blob 75