Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(437)

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 2840343002: network service: pass a URLLoaderFactory to renderers on SW registration
Patch Set: . Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_url_loader_factory_creation.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_dispatcher_host.h" 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/debug/crash_logging.h" 9 #include "base/debug/crash_logging.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/profiler/scoped_tracker.h" 13 #include "base/profiler/scoped_tracker.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/threading/thread_task_runner_handle.h" 16 #include "base/threading/thread_task_runner_handle.h"
17 #include "base/trace_event/trace_event.h" 17 #include "base/trace_event/trace_event.h"
18 #include "content/browser/bad_message.h" 18 #include "content/browser/bad_message.h"
19 #include "content/browser/service_worker/embedded_worker_registry.h" 19 #include "content/browser/service_worker/embedded_worker_registry.h"
20 #include "content/browser/service_worker/embedded_worker_status.h" 20 #include "content/browser/service_worker/embedded_worker_status.h"
21 #include "content/browser/service_worker/service_worker_client_utils.h" 21 #include "content/browser/service_worker/service_worker_client_utils.h"
22 #include "content/browser/service_worker/service_worker_context_core.h" 22 #include "content/browser/service_worker/service_worker_context_core.h"
23 #include "content/browser/service_worker/service_worker_context_wrapper.h" 23 #include "content/browser/service_worker/service_worker_context_wrapper.h"
24 #include "content/browser/service_worker/service_worker_handle.h" 24 #include "content/browser/service_worker/service_worker_handle.h"
25 #include "content/browser/service_worker/service_worker_navigation_handle_core.h " 25 #include "content/browser/service_worker/service_worker_navigation_handle_core.h "
26 #include "content/browser/service_worker/service_worker_registration.h" 26 #include "content/browser/service_worker/service_worker_registration.h"
27 #include "content/browser/service_worker/service_worker_registration_handle.h" 27 #include "content/browser/service_worker/service_worker_registration_handle.h"
28 #include "content/browser/service_worker/service_worker_url_loader_factory_creat ion.h"
28 #include "content/common/service_worker/embedded_worker_messages.h" 29 #include "content/common/service_worker/embedded_worker_messages.h"
29 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h" 30 #include "content/common/service_worker/service_worker_event_dispatcher.mojom.h"
30 #include "content/common/service_worker/service_worker_messages.h" 31 #include "content/common/service_worker/service_worker_messages.h"
31 #include "content/common/service_worker/service_worker_types.h" 32 #include "content/common/service_worker/service_worker_types.h"
32 #include "content/common/service_worker/service_worker_utils.h" 33 #include "content/common/service_worker/service_worker_utils.h"
33 #include "content/public/browser/content_browser_client.h" 34 #include "content/public/browser/content_browser_client.h"
34 #include "content/public/browser/render_frame_host.h" 35 #include "content/public/browser/render_frame_host.h"
35 #include "content/public/browser/web_contents.h" 36 #include "content/public/browser/web_contents.h"
36 #include "content/public/common/browser_side_navigation_policy.h" 37 #include "content/public/common/browser_side_navigation_policy.h"
37 #include "content/public/common/child_process_host.h" 38 #include "content/public/common/child_process_host.h"
38 #include "content/public/common/content_client.h" 39 #include "content/public/common/content_client.h"
39 #include "content/public/common/origin_util.h" 40 #include "content/public/common/origin_util.h"
41 #include "content/public/common/service_manager_connection.h"
42 #include "content/public/common/service_names.mojom.h"
40 #include "ipc/ipc_message_macros.h" 43 #include "ipc/ipc_message_macros.h"
41 #include "net/http/http_util.h" 44 #include "net/http/http_util.h"
42 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerError.h" 45 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerError.h"
43 #include "url/gurl.h" 46 #include "url/gurl.h"
44 47
45 using blink::WebServiceWorkerError; 48 using blink::WebServiceWorkerError;
46 49
47 namespace content { 50 namespace content {
48 51
49 namespace { 52 namespace {
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 1246
1244 ServiceWorkerRegistration* registration = 1247 ServiceWorkerRegistration* registration =
1245 GetContext()->GetLiveRegistration(registration_id); 1248 GetContext()->GetLiveRegistration(registration_id);
1246 DCHECK(registration); 1249 DCHECK(registration);
1247 1250
1248 ServiceWorkerRegistrationObjectInfo info; 1251 ServiceWorkerRegistrationObjectInfo info;
1249 ServiceWorkerVersionAttributes attrs; 1252 ServiceWorkerVersionAttributes attrs;
1250 GetRegistrationObjectInfoAndVersionAttributes( 1253 GetRegistrationObjectInfoAndVersionAttributes(
1251 provider_host->AsWeakPtr(), registration, &info, &attrs); 1254 provider_host->AsWeakPtr(), registration, &info, &attrs);
1252 1255
1256 mojo::ScopedMessagePipeHandle url_loader_factory;
1257 const bool network_service_enabled =
1258 base::CommandLine::ForCurrentProcess()->HasSwitch(
1259 switches::kEnableNetworkService);
1260 if (network_service_enabled) {
1261 url_loader_factory =
1262 ServiceWorkerURLLoaderFactoryCreation::InitializeForRenderer(
1263 provider_host)
1264 .PassHandle();
1265 }
1266
1253 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( 1267 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
1254 thread_id, request_id, info, attrs)); 1268 thread_id, request_id, info, attrs, url_loader_factory.release()));
1255 } 1269 }
1256 1270
1257 void ServiceWorkerDispatcherHost::UpdateComplete( 1271 void ServiceWorkerDispatcherHost::UpdateComplete(
1258 int thread_id, 1272 int thread_id,
1259 int provider_id, 1273 int provider_id,
1260 int request_id, 1274 int request_id,
1261 ServiceWorkerStatusCode status, 1275 ServiceWorkerStatusCode status,
1262 const std::string& status_message, 1276 const std::string& status_message,
1263 int64_t registration_id) { 1277 int64_t registration_id) {
1264 TRACE_EVENT_ASYNC_END2( 1278 TRACE_EVENT_ASYNC_END2(
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1421 ServiceWorkerRegistrationObjectInfo info; 1435 ServiceWorkerRegistrationObjectInfo info;
1422 ServiceWorkerVersionAttributes attrs; 1436 ServiceWorkerVersionAttributes attrs;
1423 if (status == SERVICE_WORKER_OK) { 1437 if (status == SERVICE_WORKER_OK) {
1424 DCHECK(registration.get()); 1438 DCHECK(registration.get());
1425 if (!registration->is_uninstalling()) { 1439 if (!registration->is_uninstalling()) {
1426 GetRegistrationObjectInfoAndVersionAttributes( 1440 GetRegistrationObjectInfoAndVersionAttributes(
1427 provider_host->AsWeakPtr(), registration.get(), &info, &attrs); 1441 provider_host->AsWeakPtr(), registration.get(), &info, &attrs);
1428 } 1442 }
1429 } 1443 }
1430 1444
1445 // TODO(scottmg): Pass url loader factory.
1431 Send(new ServiceWorkerMsg_DidGetRegistration( 1446 Send(new ServiceWorkerMsg_DidGetRegistration(
1432 thread_id, request_id, info, attrs)); 1447 thread_id, request_id, info, attrs, mojo::MessagePipeHandle()));
1433 } 1448 }
1434 1449
1435 void ServiceWorkerDispatcherHost::GetRegistrationsComplete( 1450 void ServiceWorkerDispatcherHost::GetRegistrationsComplete(
1436 int thread_id, 1451 int thread_id,
1437 int provider_id, 1452 int provider_id,
1438 int request_id, 1453 int request_id,
1439 ServiceWorkerStatusCode status, 1454 ServiceWorkerStatusCode status,
1440 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& 1455 const std::vector<scoped_refptr<ServiceWorkerRegistration>>&
1441 registrations) { 1456 registrations) {
1442 TRACE_EVENT_ASYNC_END1("ServiceWorker", 1457 TRACE_EVENT_ASYNC_END1("ServiceWorker",
(...skipping 14 matching lines...) Expand all
1457 &error_type, &error_message); 1472 &error_type, &error_message);
1458 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationsError( 1473 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationsError(
1459 thread_id, request_id, error_type, 1474 thread_id, request_id, error_type,
1460 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + 1475 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) +
1461 error_message)); 1476 error_message));
1462 return; 1477 return;
1463 } 1478 }
1464 1479
1465 std::vector<ServiceWorkerRegistrationObjectInfo> object_infos; 1480 std::vector<ServiceWorkerRegistrationObjectInfo> object_infos;
1466 std::vector<ServiceWorkerVersionAttributes> version_attrs; 1481 std::vector<ServiceWorkerVersionAttributes> version_attrs;
1482 std::vector<mojo::MessagePipeHandle> url_loader_factories;
1467 1483
1468 for (const auto& registration : registrations) { 1484 for (const auto& registration : registrations) {
1469 DCHECK(registration.get()); 1485 DCHECK(registration.get());
1470 if (!registration->is_uninstalling()) { 1486 if (!registration->is_uninstalling()) {
1471 ServiceWorkerRegistrationObjectInfo object_info; 1487 ServiceWorkerRegistrationObjectInfo object_info;
1472 ServiceWorkerVersionAttributes version_attr; 1488 ServiceWorkerVersionAttributes version_attr;
1473 GetRegistrationObjectInfoAndVersionAttributes( 1489 GetRegistrationObjectInfoAndVersionAttributes(
1474 provider_host->AsWeakPtr(), registration.get(), &object_info, 1490 provider_host->AsWeakPtr(), registration.get(), &object_info,
1475 &version_attr); 1491 &version_attr);
1476 object_infos.push_back(object_info); 1492 object_infos.push_back(object_info);
1477 version_attrs.push_back(version_attr); 1493 version_attrs.push_back(version_attr);
1494 url_loader_factories.push_back(mojo::MessagePipeHandle());
1478 } 1495 }
1479 } 1496 }
1480 1497
1498 // TODO(scottmg): Pass url loader factory.
1481 Send(new ServiceWorkerMsg_DidGetRegistrations(thread_id, request_id, 1499 Send(new ServiceWorkerMsg_DidGetRegistrations(thread_id, request_id,
1482 object_infos, version_attrs)); 1500 object_infos, version_attrs,
1501 url_loader_factories));
1483 } 1502 }
1484 1503
1485 void ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete( 1504 void ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete(
1486 int thread_id, 1505 int thread_id,
1487 int request_id, 1506 int request_id,
1488 base::WeakPtr<ServiceWorkerProviderHost> provider_host, 1507 base::WeakPtr<ServiceWorkerProviderHost> provider_host,
1489 ServiceWorkerRegistration* registration) { 1508 ServiceWorkerRegistration* registration) {
1490 DCHECK(registration); 1509 DCHECK(registration);
1491 TRACE_EVENT_ASYNC_END1( 1510 TRACE_EVENT_ASYNC_END1(
1492 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady", 1511 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady",
1493 request_id, "Registration ID", 1512 request_id, "Registration ID",
1494 registration ? registration->id() : kInvalidServiceWorkerRegistrationId); 1513 registration ? registration->id() : kInvalidServiceWorkerRegistrationId);
1495 if (!GetContext()) 1514 if (!GetContext())
1496 return; 1515 return;
1497 1516
1498 ServiceWorkerRegistrationObjectInfo info; 1517 ServiceWorkerRegistrationObjectInfo info;
1499 ServiceWorkerVersionAttributes attrs; 1518 ServiceWorkerVersionAttributes attrs;
1500 GetRegistrationObjectInfoAndVersionAttributes( 1519 GetRegistrationObjectInfoAndVersionAttributes(
1501 provider_host, registration, &info, &attrs); 1520 provider_host, registration, &info, &attrs);
1521 // TODO(scottmg): Pass url loader factory.
1502 Send(new ServiceWorkerMsg_DidGetRegistrationForReady( 1522 Send(new ServiceWorkerMsg_DidGetRegistrationForReady(
1503 thread_id, request_id, info, attrs)); 1523 thread_id, request_id, info, attrs, mojo::MessagePipeHandle()));
1504 } 1524 }
1505 1525
1506 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() { 1526 ServiceWorkerContextCore* ServiceWorkerDispatcherHost::GetContext() {
1507 if (!context_wrapper_.get()) 1527 if (!context_wrapper_.get())
1508 return nullptr; 1528 return nullptr;
1509 return context_wrapper_->context(); 1529 return context_wrapper_->context();
1510 } 1530 }
1511 1531
1512 ServiceWorkerProviderHost* 1532 ServiceWorkerProviderHost*
1513 ServiceWorkerDispatcherHost::GetProviderHostForRequest(ProviderStatus* status, 1533 ServiceWorkerDispatcherHost::GetProviderHostForRequest(ProviderStatus* status,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 if (!handle) { 1609 if (!handle) {
1590 bad_message::ReceivedBadMessage(this, 1610 bad_message::ReceivedBadMessage(this,
1591 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1611 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1592 return; 1612 return;
1593 } 1613 }
1594 handle->version()->StopWorker( 1614 handle->version()->StopWorker(
1595 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1615 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1596 } 1616 }
1597 1617
1598 } // namespace content 1618 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_url_loader_factory_creation.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698