OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/callback.h" | 6 #include "base/callback.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "content/browser/fileapi/chrome_blob_storage_context.h" | 10 #include "content/browser/fileapi/chrome_blob_storage_context.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "content/public/browser/blob_handle.h" | 21 #include "content/public/browser/blob_handle.h" |
22 #include "content/public/test/test_browser_context.h" | 22 #include "content/public/test/test_browser_context.h" |
23 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
24 #include "net/base/io_buffer.h" | 24 #include "net/base/io_buffer.h" |
25 #include "net/http/http_request_headers.h" | 25 #include "net/http/http_request_headers.h" |
26 #include "net/http/http_response_headers.h" | 26 #include "net/http/http_response_headers.h" |
27 #include "net/url_request/url_request.h" | 27 #include "net/url_request/url_request.h" |
28 #include "net/url_request/url_request_context.h" | 28 #include "net/url_request/url_request_context.h" |
29 #include "net/url_request/url_request_job_factory_impl.h" | 29 #include "net/url_request/url_request_job_factory_impl.h" |
30 #include "testing/gtest/include/gtest/gtest.h" | 30 #include "testing/gtest/include/gtest/gtest.h" |
31 #include "webkit/browser/blob/blob_storage_context.h" | 31 #include "storage/browser/blob/blob_storage_context.h" |
32 #include "webkit/browser/blob/blob_url_request_job.h" | 32 #include "storage/browser/blob/blob_url_request_job.h" |
33 #include "webkit/browser/blob/blob_url_request_job_factory.h" | 33 #include "storage/browser/blob/blob_url_request_job_factory.h" |
34 #include "webkit/common/blob/blob_data.h" | 34 #include "storage/common/blob/blob_data.h" |
35 | 35 |
36 namespace content { | 36 namespace content { |
37 | 37 |
38 class ServiceWorkerURLRequestJobTest; | 38 class ServiceWorkerURLRequestJobTest; |
39 | 39 |
40 namespace { | 40 namespace { |
41 | 41 |
42 const int kProcessID = 1; | 42 const int kProcessID = 1; |
43 const int kProviderID = 100; | 43 const int kProviderID = 100; |
44 const char kTestData[] = "Here is sample text for the blob."; | 44 const char kTestData[] = "Here is sample text for the blob."; |
45 | 45 |
46 class MockHttpProtocolHandler | 46 class MockHttpProtocolHandler |
47 : public net::URLRequestJobFactory::ProtocolHandler { | 47 : public net::URLRequestJobFactory::ProtocolHandler { |
48 public: | 48 public: |
49 MockHttpProtocolHandler( | 49 MockHttpProtocolHandler( |
50 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 50 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
51 base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context) | 51 base::WeakPtr<storage::BlobStorageContext> blob_storage_context) |
52 : provider_host_(provider_host), | 52 : provider_host_(provider_host), |
53 blob_storage_context_(blob_storage_context) {} | 53 blob_storage_context_(blob_storage_context) {} |
54 virtual ~MockHttpProtocolHandler() {} | 54 virtual ~MockHttpProtocolHandler() {} |
55 | 55 |
56 virtual net::URLRequestJob* MaybeCreateJob( | 56 virtual net::URLRequestJob* MaybeCreateJob( |
57 net::URLRequest* request, | 57 net::URLRequest* request, |
58 net::NetworkDelegate* network_delegate) const OVERRIDE { | 58 net::NetworkDelegate* network_delegate) const OVERRIDE { |
59 ServiceWorkerURLRequestJob* job = new ServiceWorkerURLRequestJob( | 59 ServiceWorkerURLRequestJob* job = new ServiceWorkerURLRequestJob( |
60 request, network_delegate, provider_host_, blob_storage_context_); | 60 request, network_delegate, provider_host_, blob_storage_context_); |
61 job->ForwardToServiceWorker(); | 61 job->ForwardToServiceWorker(); |
62 return job; | 62 return job; |
63 } | 63 } |
64 | 64 |
65 private: | 65 private: |
66 base::WeakPtr<ServiceWorkerProviderHost> provider_host_; | 66 base::WeakPtr<ServiceWorkerProviderHost> provider_host_; |
67 base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context_; | 67 base::WeakPtr<storage::BlobStorageContext> blob_storage_context_; |
68 }; | 68 }; |
69 | 69 |
70 // Returns a BlobProtocolHandler that uses |blob_storage_context|. Caller owns | 70 // Returns a BlobProtocolHandler that uses |blob_storage_context|. Caller owns |
71 // the memory. | 71 // the memory. |
72 webkit_blob::BlobProtocolHandler* CreateMockBlobProtocolHandler( | 72 storage::BlobProtocolHandler* CreateMockBlobProtocolHandler( |
73 webkit_blob::BlobStorageContext* blob_storage_context) { | 73 storage::BlobStorageContext* blob_storage_context) { |
74 // The FileSystemContext and MessageLoopProxy are not actually used but a | 74 // The FileSystemContext and MessageLoopProxy are not actually used but a |
75 // MessageLoopProxy is needed to avoid a DCHECK in BlobURLRequestJob ctor. | 75 // MessageLoopProxy is needed to avoid a DCHECK in BlobURLRequestJob ctor. |
76 return new webkit_blob::BlobProtocolHandler( | 76 return new storage::BlobProtocolHandler( |
77 blob_storage_context, NULL, base::MessageLoopProxy::current().get()); | 77 blob_storage_context, NULL, base::MessageLoopProxy::current().get()); |
78 } | 78 } |
79 | 79 |
80 } // namespace | 80 } // namespace |
81 | 81 |
82 class ServiceWorkerURLRequestJobTest : public testing::Test { | 82 class ServiceWorkerURLRequestJobTest : public testing::Test { |
83 protected: | 83 protected: |
84 ServiceWorkerURLRequestJobTest() | 84 ServiceWorkerURLRequestJobTest() |
85 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), | 85 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), |
86 blob_data_(new webkit_blob::BlobData("blob-id:myblob")) {} | 86 blob_data_(new storage::BlobData("blob-id:myblob")) {} |
87 virtual ~ServiceWorkerURLRequestJobTest() {} | 87 virtual ~ServiceWorkerURLRequestJobTest() {} |
88 | 88 |
89 virtual void SetUp() OVERRIDE { | 89 virtual void SetUp() OVERRIDE { |
90 browser_context_.reset(new TestBrowserContext); | 90 browser_context_.reset(new TestBrowserContext); |
91 SetUpWithHelper(new EmbeddedWorkerTestHelper(kProcessID)); | 91 SetUpWithHelper(new EmbeddedWorkerTestHelper(kProcessID)); |
92 } | 92 } |
93 | 93 |
94 void SetUpWithHelper(EmbeddedWorkerTestHelper* helper) { | 94 void SetUpWithHelper(EmbeddedWorkerTestHelper* helper) { |
95 helper_.reset(helper); | 95 helper_.reset(helper); |
96 | 96 |
97 registration_ = new ServiceWorkerRegistration( | 97 registration_ = new ServiceWorkerRegistration( |
98 GURL("http://example.com/"), | 98 GURL("http://example.com/"), |
99 GURL("http://example.com/service_worker.js"), | 99 GURL("http://example.com/service_worker.js"), |
100 1L, | 100 1L, |
101 helper_->context()->AsWeakPtr()); | 101 helper_->context()->AsWeakPtr()); |
102 version_ = new ServiceWorkerVersion( | 102 version_ = new ServiceWorkerVersion( |
103 registration_, 1L, helper_->context()->AsWeakPtr()); | 103 registration_, 1L, helper_->context()->AsWeakPtr()); |
104 | 104 |
105 scoped_ptr<ServiceWorkerProviderHost> provider_host( | 105 scoped_ptr<ServiceWorkerProviderHost> provider_host( |
106 new ServiceWorkerProviderHost( | 106 new ServiceWorkerProviderHost( |
107 kProcessID, kProviderID, helper_->context()->AsWeakPtr(), NULL)); | 107 kProcessID, kProviderID, helper_->context()->AsWeakPtr(), NULL)); |
108 provider_host->AssociateRegistration(registration_); | 108 provider_host->AssociateRegistration(registration_); |
109 registration_->SetActiveVersion(version_.get()); | 109 registration_->SetActiveVersion(version_.get()); |
110 | 110 |
111 ChromeBlobStorageContext* chrome_blob_storage_context = | 111 ChromeBlobStorageContext* chrome_blob_storage_context = |
112 ChromeBlobStorageContext::GetFor(browser_context_.get()); | 112 ChromeBlobStorageContext::GetFor(browser_context_.get()); |
113 // Wait for chrome_blob_storage_context to finish initializing. | 113 // Wait for chrome_blob_storage_context to finish initializing. |
114 base::RunLoop().RunUntilIdle(); | 114 base::RunLoop().RunUntilIdle(); |
115 webkit_blob::BlobStorageContext* blob_storage_context = | 115 storage::BlobStorageContext* blob_storage_context = |
116 chrome_blob_storage_context->context(); | 116 chrome_blob_storage_context->context(); |
117 | 117 |
118 url_request_job_factory_.reset(new net::URLRequestJobFactoryImpl); | 118 url_request_job_factory_.reset(new net::URLRequestJobFactoryImpl); |
119 url_request_job_factory_->SetProtocolHandler( | 119 url_request_job_factory_->SetProtocolHandler( |
120 "http", | 120 "http", |
121 new MockHttpProtocolHandler(provider_host->AsWeakPtr(), | 121 new MockHttpProtocolHandler(provider_host->AsWeakPtr(), |
122 blob_storage_context->AsWeakPtr())); | 122 blob_storage_context->AsWeakPtr())); |
123 url_request_job_factory_->SetProtocolHandler( | 123 url_request_job_factory_->SetProtocolHandler( |
124 "blob", CreateMockBlobProtocolHandler(blob_storage_context)); | 124 "blob", CreateMockBlobProtocolHandler(blob_storage_context)); |
125 url_request_context_.set_job_factory(url_request_job_factory_.get()); | 125 url_request_context_.set_job_factory(url_request_job_factory_.get()); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 scoped_ptr<TestBrowserContext> browser_context_; | 158 scoped_ptr<TestBrowserContext> browser_context_; |
159 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 159 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
160 scoped_refptr<ServiceWorkerRegistration> registration_; | 160 scoped_refptr<ServiceWorkerRegistration> registration_; |
161 scoped_refptr<ServiceWorkerVersion> version_; | 161 scoped_refptr<ServiceWorkerVersion> version_; |
162 | 162 |
163 scoped_ptr<net::URLRequestJobFactoryImpl> url_request_job_factory_; | 163 scoped_ptr<net::URLRequestJobFactoryImpl> url_request_job_factory_; |
164 net::URLRequestContext url_request_context_; | 164 net::URLRequestContext url_request_context_; |
165 MockURLRequestDelegate url_request_delegate_; | 165 MockURLRequestDelegate url_request_delegate_; |
166 scoped_ptr<net::URLRequest> request_; | 166 scoped_ptr<net::URLRequest> request_; |
167 | 167 |
168 scoped_refptr<webkit_blob::BlobData> blob_data_; | 168 scoped_refptr<storage::BlobData> blob_data_; |
169 | 169 |
170 private: | 170 private: |
171 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerURLRequestJobTest); | 171 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerURLRequestJobTest); |
172 }; | 172 }; |
173 | 173 |
174 TEST_F(ServiceWorkerURLRequestJobTest, Simple) { | 174 TEST_F(ServiceWorkerURLRequestJobTest, Simple) { |
175 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 175 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
176 TestRequest(200, "OK", std::string()); | 176 TestRequest(200, "OK", std::string()); |
177 } | 177 } |
178 | 178 |
(...skipping 27 matching lines...) Expand all Loading... |
206 }; | 206 }; |
207 | 207 |
208 TEST_F(ServiceWorkerURLRequestJobTest, BlobResponse) { | 208 TEST_F(ServiceWorkerURLRequestJobTest, BlobResponse) { |
209 ChromeBlobStorageContext* blob_storage_context = | 209 ChromeBlobStorageContext* blob_storage_context = |
210 ChromeBlobStorageContext::GetFor(browser_context_.get()); | 210 ChromeBlobStorageContext::GetFor(browser_context_.get()); |
211 std::string expected_response; | 211 std::string expected_response; |
212 for (int i = 0; i < 1024; ++i) { | 212 for (int i = 0; i < 1024; ++i) { |
213 blob_data_->AppendData(kTestData); | 213 blob_data_->AppendData(kTestData); |
214 expected_response += kTestData; | 214 expected_response += kTestData; |
215 } | 215 } |
216 scoped_ptr<webkit_blob::BlobDataHandle> blob_handle = | 216 scoped_ptr<storage::BlobDataHandle> blob_handle = |
217 blob_storage_context->context()->AddFinishedBlob(blob_data_); | 217 blob_storage_context->context()->AddFinishedBlob(blob_data_); |
218 SetUpWithHelper(new BlobResponder(kProcessID, blob_handle->uuid())); | 218 SetUpWithHelper(new BlobResponder(kProcessID, blob_handle->uuid())); |
219 | 219 |
220 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 220 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
221 TestRequest(200, "OK", expected_response); | 221 TestRequest(200, "OK", expected_response); |
222 } | 222 } |
223 | 223 |
224 TEST_F(ServiceWorkerURLRequestJobTest, NonExistentBlobUUIDResponse) { | 224 TEST_F(ServiceWorkerURLRequestJobTest, NonExistentBlobUUIDResponse) { |
225 SetUpWithHelper(new BlobResponder(kProcessID, "blob-id:nothing-is-here")); | 225 SetUpWithHelper(new BlobResponder(kProcessID, "blob-id:nothing-is-here")); |
226 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 226 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
227 TestRequest(500, "Service Worker Response Error", std::string()); | 227 TestRequest(500, "Service Worker Response Error", std::string()); |
228 } | 228 } |
229 | 229 |
230 // TODO(kinuko): Add more tests with different response data and also for | 230 // TODO(kinuko): Add more tests with different response data and also for |
231 // FallbackToNetwork case. | 231 // FallbackToNetwork case. |
232 | 232 |
233 } // namespace content | 233 } // namespace content |
OLD | NEW |