| 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/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "base/strings/string16.h" | 10 #include "base/strings/string16.h" |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 embedded_worker_->SendMessage(ServiceWorkerMsg_GeofencingEvent( | 537 embedded_worker_->SendMessage(ServiceWorkerMsg_GeofencingEvent( |
| 538 request_id, event_type, region_id, region)); | 538 request_id, event_type, region_id, region)); |
| 539 if (status != SERVICE_WORKER_OK) { | 539 if (status != SERVICE_WORKER_OK) { |
| 540 geofencing_callbacks_.Remove(request_id); | 540 geofencing_callbacks_.Remove(request_id); |
| 541 RunSoon(base::Bind(callback, status)); | 541 RunSoon(base::Bind(callback, status)); |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 | 544 |
| 545 void ServiceWorkerVersion::DispatchCrossOriginConnectEvent( | 545 void ServiceWorkerVersion::DispatchCrossOriginConnectEvent( |
| 546 const CrossOriginConnectCallback& callback, | 546 const CrossOriginConnectCallback& callback, |
| 547 const CrossOriginServiceWorkerClient& client) { | 547 const NavigatorConnectClient& client) { |
| 548 DCHECK_EQ(ACTIVATED, status()) << status(); | 548 DCHECK_EQ(ACTIVATED, status()) << status(); |
| 549 | 549 |
| 550 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 550 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 551 switches::kEnableExperimentalWebPlatformFeatures)) { | 551 switches::kEnableExperimentalWebPlatformFeatures)) { |
| 552 callback.Run(SERVICE_WORKER_ERROR_ABORT, false); | 552 callback.Run(SERVICE_WORKER_ERROR_ABORT, false); |
| 553 return; | 553 return; |
| 554 } | 554 } |
| 555 | 555 |
| 556 if (running_status() != RUNNING) { | 556 if (running_status() != RUNNING) { |
| 557 // Schedule calling this method after starting the worker. | 557 // Schedule calling this method after starting the worker. |
| 558 StartWorker( | 558 StartWorker( |
| 559 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), | 559 base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), |
| 560 base::Bind(&RunErrorCrossOriginConnectCallback, callback), | 560 base::Bind(&RunErrorCrossOriginConnectCallback, callback), |
| 561 base::Bind(&self::DispatchCrossOriginConnectEvent, | 561 base::Bind(&self::DispatchCrossOriginConnectEvent, |
| 562 weak_factory_.GetWeakPtr(), callback, client))); | 562 weak_factory_.GetWeakPtr(), callback, client))); |
| 563 return; | 563 return; |
| 564 } | 564 } |
| 565 | 565 |
| 566 int request_id = cross_origin_connect_callbacks_.Add( | 566 int request_id = cross_origin_connect_callbacks_.Add( |
| 567 new CrossOriginConnectCallback(callback)); | 567 new CrossOriginConnectCallback(callback)); |
| 568 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( | 568 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( |
| 569 ServiceWorkerMsg_CrossOriginConnectEvent(request_id, client)); | 569 ServiceWorkerMsg_CrossOriginConnectEvent(request_id, client)); |
| 570 if (status != SERVICE_WORKER_OK) { | 570 if (status != SERVICE_WORKER_OK) { |
| 571 cross_origin_connect_callbacks_.Remove(request_id); | 571 cross_origin_connect_callbacks_.Remove(request_id); |
| 572 RunSoon(base::Bind(callback, status, false)); | 572 RunSoon(base::Bind(callback, status, false)); |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 | 575 |
| 576 void ServiceWorkerVersion::DispatchCrossOriginMessageEvent( | 576 void ServiceWorkerVersion::DispatchCrossOriginMessageEvent( |
| 577 const CrossOriginServiceWorkerClient& client, | 577 const NavigatorConnectClient& client, |
| 578 const base::string16& message, | 578 const base::string16& message, |
| 579 const std::vector<int>& sent_message_port_ids, | 579 const std::vector<int>& sent_message_port_ids, |
| 580 const StatusCallback& callback) { | 580 const StatusCallback& callback) { |
| 581 // Unlike in the case of DispatchMessageEvent, here the caller is assumed to | 581 // Unlike in the case of DispatchMessageEvent, here the caller is assumed to |
| 582 // have already put all the sent message ports on hold. So no need to do that | 582 // have already put all the sent message ports on hold. So no need to do that |
| 583 // here again. | 583 // here again. |
| 584 | 584 |
| 585 if (running_status() != RUNNING) { | 585 if (running_status() != RUNNING) { |
| 586 // Schedule calling this method after starting the worker. | 586 // Schedule calling this method after starting the worker. |
| 587 StartWorker(base::Bind( | 587 StartWorker(base::Bind( |
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1172 int request_id) { | 1172 int request_id) { |
| 1173 callbacks->Remove(request_id); | 1173 callbacks->Remove(request_id); |
| 1174 if (is_doomed_) { | 1174 if (is_doomed_) { |
| 1175 // The stop should be already scheduled, but try to stop immediately, in | 1175 // The stop should be already scheduled, but try to stop immediately, in |
| 1176 // order to release worker resources soon. | 1176 // order to release worker resources soon. |
| 1177 StopWorkerIfIdle(); | 1177 StopWorkerIfIdle(); |
| 1178 } | 1178 } |
| 1179 } | 1179 } |
| 1180 | 1180 |
| 1181 } // namespace content | 1181 } // namespace content |
| OLD | NEW |