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 "content/browser/service_worker/service_worker_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 1374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1385 if (pending_skip_waiting_requests_.size() == 1) | 1385 if (pending_skip_waiting_requests_.size() == 1) |
1386 registration->ActivateWaitingVersionWhenReady(); | 1386 registration->ActivateWaitingVersionWhenReady(); |
1387 } | 1387 } |
1388 | 1388 |
1389 void ServiceWorkerVersion::DidSkipWaiting(int request_id) { | 1389 void ServiceWorkerVersion::DidSkipWaiting(int request_id) { |
1390 if (running_status() == STARTING || running_status() == RUNNING) | 1390 if (running_status() == STARTING || running_status() == RUNNING) |
1391 embedded_worker_->SendMessage(ServiceWorkerMsg_DidSkipWaiting(request_id)); | 1391 embedded_worker_->SendMessage(ServiceWorkerMsg_DidSkipWaiting(request_id)); |
1392 } | 1392 } |
1393 | 1393 |
1394 void ServiceWorkerVersion::OnClaimClients(int request_id) { | 1394 void ServiceWorkerVersion::OnClaimClients(int request_id) { |
1395 StatusCallback callback = base::Bind(&ServiceWorkerVersion::DidClaimClients, | |
1396 weak_factory_.GetWeakPtr(), request_id); | |
1397 if (status_ != ACTIVATING && status_ != ACTIVATED) { | 1395 if (status_ != ACTIVATING && status_ != ACTIVATED) { |
1398 callback.Run(SERVICE_WORKER_ERROR_STATE); | 1396 embedded_worker_->SendMessage(ServiceWorkerMsg_ClaimClientsError( |
1397 request_id, blink::WebServiceWorkerError::ErrorTypeState, | |
1398 base::ASCIIToUTF16(kClaimClientsStateErrorMesage))); | |
1399 return; | 1399 return; |
1400 } | 1400 } |
1401 if (!context_) { | 1401 if (context_) { |
1402 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 1402 if (ServiceWorkerRegistration* registration = |
1403 return; | 1403 context_->GetLiveRegistration(registration_id_)) { |
falken
2015/03/23 00:38:57
(unrelated to this patch) I think there might be a
michaeln
2015/03/23 20:02:26
Good question. I think the answer is 'yes', hiroki
xiang
2015/03/24 07:32:51
Thanks for the clarification, yes, the Registratio
| |
1404 registration->ClaimClients(); | |
1405 embedded_worker_->SendMessage( | |
1406 ServiceWorkerMsg_DidClaimClients(request_id)); | |
1407 return; | |
1408 } | |
1404 } | 1409 } |
1405 | 1410 |
1406 ServiceWorkerRegistration* registration = | 1411 embedded_worker_->SendMessage(ServiceWorkerMsg_ClaimClientsError( |
1407 context_->GetLiveRegistration(registration_id_); | 1412 request_id, blink::WebServiceWorkerError::ErrorTypeAbort, |
1408 if (!registration) { | 1413 base::ASCIIToUTF16(kClaimClientsShutdownErrorMesage))); |
1409 callback.Run(SERVICE_WORKER_ERROR_ABORT); | 1414 return; |
michaeln
2015/03/20 19:25:21
this return statement is not needed
xiang
2015/03/24 07:32:51
Done.
| |
1410 return; | |
1411 } | |
1412 registration->ClaimClients(callback); | |
1413 } | 1415 } |
1414 | 1416 |
1415 void ServiceWorkerVersion::OnPongFromWorker() { | 1417 void ServiceWorkerVersion::OnPongFromWorker() { |
1416 ClearTick(&ping_time_); | 1418 ClearTick(&ping_time_); |
1417 } | 1419 } |
1418 | 1420 |
1419 void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker( | 1421 void ServiceWorkerVersion::DidEnsureLiveRegistrationForStartWorker( |
1420 bool pause_after_download, | 1422 bool pause_after_download, |
1421 const StatusCallback& callback, | 1423 const StatusCallback& callback, |
1422 ServiceWorkerStatusCode status, | 1424 ServiceWorkerStatusCode status, |
(...skipping 20 matching lines...) Expand all Loading... | |
1443 cache_listener_.reset(new ServiceWorkerCacheListener(this, context_)); | 1445 cache_listener_.reset(new ServiceWorkerCacheListener(this, context_)); |
1444 embedded_worker_->Start( | 1446 embedded_worker_->Start( |
1445 version_id_, scope_, script_url_, pause_after_download, | 1447 version_id_, scope_, script_url_, pause_after_download, |
1446 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, | 1448 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, |
1447 weak_factory_.GetWeakPtr())); | 1449 weak_factory_.GetWeakPtr())); |
1448 } | 1450 } |
1449 return; | 1451 return; |
1450 } | 1452 } |
1451 } | 1453 } |
1452 | 1454 |
1453 void ServiceWorkerVersion::DidClaimClients( | |
1454 int request_id, ServiceWorkerStatusCode status) { | |
1455 if (status == SERVICE_WORKER_ERROR_STATE) { | |
1456 embedded_worker_->SendMessage(ServiceWorkerMsg_ClaimClientsError( | |
1457 request_id, blink::WebServiceWorkerError::ErrorTypeState, | |
1458 base::ASCIIToUTF16(kClaimClientsStateErrorMesage))); | |
1459 return; | |
1460 } | |
1461 if (status == SERVICE_WORKER_ERROR_ABORT) { | |
1462 embedded_worker_->SendMessage(ServiceWorkerMsg_ClaimClientsError( | |
1463 request_id, blink::WebServiceWorkerError::ErrorTypeAbort, | |
1464 base::ASCIIToUTF16(kClaimClientsShutdownErrorMesage))); | |
1465 return; | |
1466 } | |
1467 DCHECK(status == SERVICE_WORKER_OK); | |
1468 embedded_worker_->SendMessage(ServiceWorkerMsg_DidClaimClients(request_id)); | |
1469 } | |
1470 | |
1471 void ServiceWorkerVersion::DidGetClients( | 1455 void ServiceWorkerVersion::DidGetClients( |
1472 int request_id, | 1456 int request_id, |
1473 const std::vector<ServiceWorkerClientInfo>& clients) { | 1457 const std::vector<ServiceWorkerClientInfo>& clients) { |
1474 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 1458 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
1475 if (running_status() != RUNNING) | 1459 if (running_status() != RUNNING) |
1476 return; | 1460 return; |
1477 | 1461 |
1478 embedded_worker_->SendMessage( | 1462 embedded_worker_->SendMessage( |
1479 ServiceWorkerMsg_DidGetClients(request_id, clients)); | 1463 ServiceWorkerMsg_DidGetClients(request_id, clients)); |
1480 } | 1464 } |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1652 int request_id) { | 1636 int request_id) { |
1653 callbacks->Remove(request_id); | 1637 callbacks->Remove(request_id); |
1654 if (is_doomed_) { | 1638 if (is_doomed_) { |
1655 // The stop should be already scheduled, but try to stop immediately, in | 1639 // The stop should be already scheduled, but try to stop immediately, in |
1656 // order to release worker resources soon. | 1640 // order to release worker resources soon. |
1657 StopWorkerIfIdle(); | 1641 StopWorkerIfIdle(); |
1658 } | 1642 } |
1659 } | 1643 } |
1660 | 1644 |
1661 } // namespace content | 1645 } // namespace content |
OLD | NEW |