| 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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 RunOnIOThread(base::Bind(&self::TearDownOnIOThread, this)); | 287 RunOnIOThread(base::Bind(&self::TearDownOnIOThread, this)); |
| 288 wrapper_ = NULL; | 288 wrapper_ = NULL; |
| 289 } | 289 } |
| 290 | 290 |
| 291 virtual void SetUpOnIOThread() {} | 291 virtual void SetUpOnIOThread() {} |
| 292 virtual void TearDownOnIOThread() {} | 292 virtual void TearDownOnIOThread() {} |
| 293 | 293 |
| 294 ServiceWorkerContextWrapper* wrapper() { return wrapper_.get(); } | 294 ServiceWorkerContextWrapper* wrapper() { return wrapper_.get(); } |
| 295 ServiceWorkerContext* public_context() { return wrapper(); } | 295 ServiceWorkerContext* public_context() { return wrapper(); } |
| 296 | 296 |
| 297 void AssociateRendererProcessToWorker(EmbeddedWorkerInstance* worker) { | 297 void AssociateRendererProcessToPattern(const GURL& pattern) { |
| 298 worker->AddProcessReference( | 298 wrapper_->process_manager()->AddProcessReferenceToPattern( |
| 299 shell()->web_contents()->GetRenderProcessHost()->GetID()); | 299 pattern, shell()->web_contents()->GetRenderProcessHost()->GetID()); |
| 300 } | 300 } |
| 301 | 301 |
| 302 private: | 302 private: |
| 303 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; | 303 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; |
| 304 }; | 304 }; |
| 305 | 305 |
| 306 class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, | 306 class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, |
| 307 public EmbeddedWorkerInstance::Listener { | 307 public EmbeddedWorkerInstance::Listener { |
| 308 public: | 308 public: |
| 309 typedef EmbeddedWorkerBrowserTest self; | 309 typedef EmbeddedWorkerBrowserTest self; |
| 310 | 310 |
| 311 EmbeddedWorkerBrowserTest() | 311 EmbeddedWorkerBrowserTest() |
| 312 : last_worker_status_(EmbeddedWorkerInstance::STOPPED), | 312 : last_worker_status_(EmbeddedWorkerInstance::STOPPED), |
| 313 pause_mode_(DONT_PAUSE) {} | 313 pause_mode_(DONT_PAUSE) {} |
| 314 virtual ~EmbeddedWorkerBrowserTest() {} | 314 virtual ~EmbeddedWorkerBrowserTest() {} |
| 315 | 315 |
| 316 virtual void TearDownOnIOThread() OVERRIDE { | 316 virtual void TearDownOnIOThread() OVERRIDE { |
| 317 if (worker_) { | 317 if (worker_) { |
| 318 worker_->RemoveListener(this); | 318 worker_->RemoveListener(this); |
| 319 worker_.reset(); | 319 worker_.reset(); |
| 320 } | 320 } |
| 321 } | 321 } |
| 322 | 322 |
| 323 void StartOnIOThread() { | 323 void StartOnIOThread() { |
| 324 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 324 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 325 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker(); | 325 worker_ = wrapper()->context()->embedded_worker_registry()->CreateWorker(); |
| 326 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); | 326 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); |
| 327 worker_->AddListener(this); | 327 worker_->AddListener(this); |
| 328 | 328 |
| 329 AssociateRendererProcessToWorker(worker_.get()); | |
| 330 | 329 |
| 331 const int64 service_worker_version_id = 33L; | 330 const int64 service_worker_version_id = 33L; |
| 332 const GURL scope = embedded_test_server()->GetURL("/"); | 331 const GURL pattern = embedded_test_server()->GetURL("/"); |
| 333 const GURL script_url = embedded_test_server()->GetURL( | 332 const GURL script_url = embedded_test_server()->GetURL( |
| 334 "/service_worker/worker.js"); | 333 "/service_worker/worker.js"); |
| 335 std::vector<int> processes; | 334 AssociateRendererProcessToPattern(pattern); |
| 336 processes.push_back( | 335 int process_id = shell()->web_contents()->GetRenderProcessHost()->GetID(); |
| 337 shell()->web_contents()->GetRenderProcessHost()->GetID()); | 336 wrapper()->process_manager()->AddProcessReferenceToPattern( |
| 337 pattern, process_id); |
| 338 worker_->Start( | 338 worker_->Start( |
| 339 service_worker_version_id, | 339 service_worker_version_id, |
| 340 scope, | 340 pattern, |
| 341 script_url, | 341 script_url, |
| 342 pause_mode_ != DONT_PAUSE, | 342 pause_mode_ != DONT_PAUSE, |
| 343 processes, | |
| 344 base::Bind(&EmbeddedWorkerBrowserTest::StartOnIOThread2, this)); | 343 base::Bind(&EmbeddedWorkerBrowserTest::StartOnIOThread2, this)); |
| 345 } | 344 } |
| 346 void StartOnIOThread2(ServiceWorkerStatusCode status) { | 345 void StartOnIOThread2(ServiceWorkerStatusCode status) { |
| 347 last_worker_status_ = worker_->status(); | 346 last_worker_status_ = worker_->status(); |
| 348 EXPECT_EQ(SERVICE_WORKER_OK, status); | 347 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 349 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, last_worker_status_); | 348 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, last_worker_status_); |
| 350 | 349 |
| 351 if (status != SERVICE_WORKER_OK && !done_closure_.is_null()) | 350 if (status != SERVICE_WORKER_OK && !done_closure_.is_null()) |
| 352 done_closure_.Run(); | 351 done_closure_.Run(); |
| 353 } | 352 } |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 void FetchTestHelper(const std::string& worker_url, | 495 void FetchTestHelper(const std::string& worker_url, |
| 497 ServiceWorkerFetchEventResult* result, | 496 ServiceWorkerFetchEventResult* result, |
| 498 ServiceWorkerResponse* response, | 497 ServiceWorkerResponse* response, |
| 499 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) { | 498 scoped_ptr<storage::BlobDataHandle>* blob_data_handle) { |
| 500 RunOnIOThread( | 499 RunOnIOThread( |
| 501 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); | 500 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); |
| 502 FetchOnRegisteredWorker(result, response, blob_data_handle); | 501 FetchOnRegisteredWorker(result, response, blob_data_handle); |
| 503 } | 502 } |
| 504 | 503 |
| 505 void SetUpRegistrationOnIOThread(const std::string& worker_url) { | 504 void SetUpRegistrationOnIOThread(const std::string& worker_url) { |
| 505 const GURL pattern = embedded_test_server()->GetURL("/"); |
| 506 registration_ = new ServiceWorkerRegistration( | 506 registration_ = new ServiceWorkerRegistration( |
| 507 embedded_test_server()->GetURL("/"), | 507 pattern, |
| 508 wrapper()->context()->storage()->NewRegistrationId(), | 508 wrapper()->context()->storage()->NewRegistrationId(), |
| 509 wrapper()->context()->AsWeakPtr()); | 509 wrapper()->context()->AsWeakPtr()); |
| 510 version_ = new ServiceWorkerVersion( | 510 version_ = new ServiceWorkerVersion( |
| 511 registration_.get(), | 511 registration_.get(), |
| 512 embedded_test_server()->GetURL(worker_url), | 512 embedded_test_server()->GetURL(worker_url), |
| 513 wrapper()->context()->storage()->NewVersionId(), | 513 wrapper()->context()->storage()->NewVersionId(), |
| 514 wrapper()->context()->AsWeakPtr()); | 514 wrapper()->context()->AsWeakPtr()); |
| 515 AssociateRendererProcessToWorker(version_->embedded_worker()); | 515 AssociateRendererProcessToPattern(pattern); |
| 516 } | 516 } |
| 517 | 517 |
| 518 void StartOnIOThread(const base::Closure& done, | 518 void StartOnIOThread(const base::Closure& done, |
| 519 ServiceWorkerStatusCode* result) { | 519 ServiceWorkerStatusCode* result) { |
| 520 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 520 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 521 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result)); | 521 version_->StartWorker(CreateReceiver(BrowserThread::UI, done, result)); |
| 522 } | 522 } |
| 523 | 523 |
| 524 void InstallOnIOThread(const base::Closure& done, | 524 void InstallOnIOThread(const base::Closure& done, |
| 525 ServiceWorkerStatusCode* result) { | 525 ServiceWorkerStatusCode* result) { |
| (...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 RunOnIOThread( | 946 RunOnIOThread( |
| 947 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, | 947 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, |
| 948 this, | 948 this, |
| 949 embedded_test_server()->GetURL("/service_worker/empty.html"), | 949 embedded_test_server()->GetURL("/service_worker/empty.html"), |
| 950 &status)); | 950 &status)); |
| 951 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); | 951 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); |
| 952 } | 952 } |
| 953 } | 953 } |
| 954 | 954 |
| 955 } // namespace content | 955 } // namespace content |
| OLD | NEW |