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/bind.h" | 5 #include "base/bind.h" |
6 #include "base/callback.h" | 6 #include "base/callback.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/browser/fileapi/chrome_blob_storage_context.h" | 10 #include "content/browser/fileapi/chrome_blob_storage_context.h" |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 RunOnIOThread(base::Bind(&self::TearDownOnIOThread, this)); | 203 RunOnIOThread(base::Bind(&self::TearDownOnIOThread, this)); |
204 wrapper_ = NULL; | 204 wrapper_ = NULL; |
205 } | 205 } |
206 | 206 |
207 virtual void SetUpOnIOThread() {} | 207 virtual void SetUpOnIOThread() {} |
208 virtual void TearDownOnIOThread() {} | 208 virtual void TearDownOnIOThread() {} |
209 | 209 |
210 ServiceWorkerContextWrapper* wrapper() { return wrapper_.get(); } | 210 ServiceWorkerContextWrapper* wrapper() { return wrapper_.get(); } |
211 ServiceWorkerContext* public_context() { return wrapper(); } | 211 ServiceWorkerContext* public_context() { return wrapper(); } |
212 | 212 |
213 void AssociateRendererProcessToWorker(EmbeddedWorkerInstance* worker) { | 213 void AssociateRendererProcessToScope(const GURL& scope) { |
214 worker->AddProcessReference( | 214 wrapper_->process_manager()->AddScopeProcessReference( |
215 shell()->web_contents()->GetRenderProcessHost()->GetID()); | 215 scope, shell()->web_contents()->GetRenderProcessHost()->GetID()); |
216 } | 216 } |
217 | 217 |
218 private: | 218 private: |
219 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; | 219 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; |
220 }; | 220 }; |
221 | 221 |
222 class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, | 222 class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, |
223 public EmbeddedWorkerInstance::Listener { | 223 public EmbeddedWorkerInstance::Listener { |
224 public: | 224 public: |
225 typedef EmbeddedWorkerBrowserTest self; | 225 typedef EmbeddedWorkerBrowserTest self; |
226 | 226 |
227 EmbeddedWorkerBrowserTest() | 227 EmbeddedWorkerBrowserTest() |
228 : last_worker_status_(EmbeddedWorkerInstance::STOPPED), | 228 : last_worker_status_(EmbeddedWorkerInstance::STOPPED), |
229 pause_mode_(DONT_PAUSE) {} | 229 pause_mode_(DONT_PAUSE) {} |
230 virtual ~EmbeddedWorkerBrowserTest() {} | 230 virtual ~EmbeddedWorkerBrowserTest() {} |
231 | 231 |
232 virtual void TearDownOnIOThread() OVERRIDE { | 232 virtual void TearDownOnIOThread() OVERRIDE { |
233 if (worker_) { | 233 if (worker_) { |
234 worker_->RemoveListener(this); | 234 worker_->RemoveListener(this); |
235 worker_.reset(); | 235 worker_.reset(); |
236 } | 236 } |
237 } | 237 } |
238 | 238 |
239 void StartOnIOThread() { | 239 void StartOnIOThread() { |
240 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 240 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
241 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker(); | 241 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker(); |
242 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); | 242 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); |
243 worker_->AddListener(this); | 243 worker_->AddListener(this); |
244 | 244 |
245 AssociateRendererProcessToWorker(worker_.get()); | |
246 | 245 |
247 const int64 service_worker_version_id = 33L; | 246 const int64 service_worker_version_id = 33L; |
248 const GURL scope = embedded_test_server()->GetURL("/"); | 247 const GURL scope = embedded_test_server()->GetURL("/"); |
249 const GURL script_url = embedded_test_server()->GetURL( | 248 const GURL script_url = embedded_test_server()->GetURL( |
250 "/service_worker/worker.js"); | 249 "/service_worker/worker.js"); |
| 250 AssociateRendererProcessToScope(scope); |
251 std::vector<int> processes; | 251 std::vector<int> processes; |
252 processes.push_back( | 252 processes.push_back( |
253 shell()->web_contents()->GetRenderProcessHost()->GetID()); | 253 shell()->web_contents()->GetRenderProcessHost()->GetID()); |
| 254 wrapper()->process_manager()->AddScopePendingProcesses(scope, processes); |
254 worker_->Start( | 255 worker_->Start( |
255 service_worker_version_id, | 256 service_worker_version_id, |
256 scope, | 257 scope, |
257 script_url, | 258 script_url, |
258 pause_mode_ != DONT_PAUSE, | 259 pause_mode_ != DONT_PAUSE, |
259 processes, | |
260 base::Bind(&EmbeddedWorkerBrowserTest::StartOnIOThread2, this)); | 260 base::Bind(&EmbeddedWorkerBrowserTest::StartOnIOThread2, this)); |
261 } | 261 } |
262 void StartOnIOThread2(ServiceWorkerStatusCode status) { | 262 void StartOnIOThread2(ServiceWorkerStatusCode status) { |
263 last_worker_status_ = worker_->status(); | 263 last_worker_status_ = worker_->status(); |
264 EXPECT_EQ(SERVICE_WORKER_OK, status); | 264 EXPECT_EQ(SERVICE_WORKER_OK, status); |
265 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, last_worker_status_); | 265 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, last_worker_status_); |
266 | 266 |
267 if (status != SERVICE_WORKER_OK && !done_closure_.is_null()) | 267 if (status != SERVICE_WORKER_OK && !done_closure_.is_null()) |
268 done_closure_.Run(); | 268 done_closure_.Run(); |
269 } | 269 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 const std::string& worker_url, | 410 const std::string& worker_url, |
411 ServiceWorkerFetchEventResult* result, | 411 ServiceWorkerFetchEventResult* result, |
412 ServiceWorkerResponse* response, | 412 ServiceWorkerResponse* response, |
413 scoped_ptr<webkit_blob::BlobDataHandle>* blob_data_handle) { | 413 scoped_ptr<webkit_blob::BlobDataHandle>* blob_data_handle) { |
414 RunOnIOThread( | 414 RunOnIOThread( |
415 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); | 415 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); |
416 FetchOnRegisteredWorker(result, response, blob_data_handle); | 416 FetchOnRegisteredWorker(result, response, blob_data_handle); |
417 } | 417 } |
418 | 418 |
419 void SetUpRegistrationOnIOThread(const std::string& worker_url) { | 419 void SetUpRegistrationOnIOThread(const std::string& worker_url) { |
| 420 const GURL scope = embedded_test_server()->GetURL("/"); |
420 registration_ = new ServiceWorkerRegistration( | 421 registration_ = new ServiceWorkerRegistration( |
421 embedded_test_server()->GetURL("/"), | 422 scope, |
422 embedded_test_server()->GetURL(worker_url), | 423 embedded_test_server()->GetURL(worker_url), |
423 wrapper()->context()->storage()->NewRegistrationId(), | 424 wrapper()->context()->storage()->NewRegistrationId(), |
424 wrapper()->context()->AsWeakPtr()); | 425 wrapper()->context()->AsWeakPtr()); |
425 version_ = new ServiceWorkerVersion( | 426 version_ = new ServiceWorkerVersion( |
426 registration_, | 427 registration_, |
427 wrapper()->context()->storage()->NewVersionId(), | 428 wrapper()->context()->storage()->NewVersionId(), |
428 wrapper()->context()->AsWeakPtr()); | 429 wrapper()->context()->AsWeakPtr()); |
429 AssociateRendererProcessToWorker(version_->embedded_worker()); | 430 AssociateRendererProcessToScope(scope); |
430 } | 431 } |
431 | 432 |
432 void StartOnIOThread(const base::Closure& done, | 433 void StartOnIOThread(const base::Closure& done, |
433 ServiceWorkerStatusCode* result) { | 434 ServiceWorkerStatusCode* result) { |
434 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 435 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
435 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result)); | 436 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result)); |
436 } | 437 } |
437 | 438 |
438 void InstallOnIOThread(const base::Closure& done, | 439 void InstallOnIOThread(const base::Closure& done, |
439 ServiceWorkerStatusCode* result) { | 440 ServiceWorkerStatusCode* result) { |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, | 829 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, |
829 this, | 830 this, |
830 embedded_test_server()->GetURL("/service_worker/empty.html"), | 831 embedded_test_server()->GetURL("/service_worker/empty.html"), |
831 &status, | 832 &status, |
832 &script_url)); | 833 &script_url)); |
833 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); | 834 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); |
834 } | 835 } |
835 } | 836 } |
836 | 837 |
837 } // namespace content | 838 } // namespace content |
OLD | NEW |