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

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

Issue 2433273003: service worker: Plumb NavigationPreloadManager.enable/disable to browser-side (Closed)
Patch Set: bad msg Created 4 years, 2 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
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"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 OnReportConsoleMessage) 175 OnReportConsoleMessage)
176 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount, 176 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount,
177 OnIncrementServiceWorkerRefCount) 177 OnIncrementServiceWorkerRefCount)
178 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount, 178 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount,
179 OnDecrementServiceWorkerRefCount) 179 OnDecrementServiceWorkerRefCount)
180 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount, 180 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount,
181 OnIncrementRegistrationRefCount) 181 OnIncrementRegistrationRefCount)
182 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount, 182 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount,
183 OnDecrementRegistrationRefCount) 183 OnDecrementRegistrationRefCount)
184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker) 184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker)
185 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_EnableNavigationPreload,
186 OnEnableNavigationPreload)
185 IPC_MESSAGE_UNHANDLED(handled = false) 187 IPC_MESSAGE_UNHANDLED(handled = false)
186 IPC_END_MESSAGE_MAP() 188 IPC_END_MESSAGE_MAP()
187 189
188 if (!handled && GetContext()) { 190 if (!handled && GetContext()) {
189 handled = GetContext()->embedded_worker_registry()->OnMessageReceived( 191 handled = GetContext()->embedded_worker_registry()->OnMessageReceived(
190 message, render_process_id_); 192 message, render_process_id_);
191 if (!handled) 193 if (!handled)
192 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED); 194 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED);
193 } 195 }
194 196
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady", 649 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady",
648 request_id); 650 request_id);
649 if (!provider_host->GetRegistrationForReady(base::Bind( 651 if (!provider_host->GetRegistrationForReady(base::Bind(
650 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete, 652 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete,
651 this, thread_id, request_id, provider_host->AsWeakPtr()))) { 653 this, thread_id, request_id, provider_host->AsWeakPtr()))) {
652 bad_message::ReceivedBadMessage( 654 bad_message::ReceivedBadMessage(
653 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS); 655 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS);
654 } 656 }
655 } 657 }
656 658
659 void ServiceWorkerDispatcherHost::OnEnableNavigationPreload(
660 int thread_id,
661 int request_id,
662 int provider_id,
663 int64_t registration_id,
664 bool enable) {
665 ProviderStatus provider_status;
666 ServiceWorkerProviderHost* provider_host =
667 GetProviderHostForRequest(&provider_status, provider_id);
668 switch (provider_status) {
669 case ProviderStatus::NO_CONTEXT: // fallthrough
670 case ProviderStatus::DEAD_HOST:
671 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
672 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
673 base::ASCIIToUTF16(kShutdownErrorMessage)));
674 return;
675 case ProviderStatus::NO_HOST:
676 bad_message::ReceivedBadMessage(
677 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST);
678 return;
679 case ProviderStatus::NO_URL:
680 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
681 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
682 base::ASCIIToUTF16(kNoDocumentURLErrorMessage)));
683 return;
684 case ProviderStatus::OK:
685 break;
686 }
687
688 ServiceWorkerRegistration* registration =
689 GetContext()->GetLiveRegistration(registration_id);
690 if (!registration) {
691 // |registration| must be alive because a renderer retains a registration
692 // reference at this point.
693 bad_message::ReceivedBadMessage(
694 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID);
695 return;
696 }
697
698 std::vector<GURL> urls = {provider_host->document_url(),
699 registration->pattern()};
700 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
701 bad_message::ReceivedBadMessage(
702 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN);
703 return;
704 }
705
706 if (!GetContentClient()->browser()->AllowServiceWorker(
707 registration->pattern(), provider_host->topmost_frame_url(),
708 resource_context_, render_process_id_, provider_host->frame_id())) {
709 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
710 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled,
711 base::ASCIIToUTF16(kUserDeniedPermissionMessage)));
712 return;
713 }
714
715 // TODO(falken): Write to disk before resolving the promise.
716 registration->EnableNavigationPreload(enable);
717 Send(new ServiceWorkerMsg_DidEnableNavigationPreload(thread_id, request_id));
718 }
719
657 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( 720 void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
658 int handle_id, 721 int handle_id,
659 int provider_id, 722 int provider_id,
660 const base::string16& message, 723 const base::string16& message,
661 const url::Origin& source_origin, 724 const url::Origin& source_origin,
662 const std::vector<int>& sent_message_ports) { 725 const std::vector<int>& sent_message_ports) {
663 TRACE_EVENT0("ServiceWorker", 726 TRACE_EVENT0("ServiceWorker",
664 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); 727 "ServiceWorkerDispatcherHost::OnPostMessageToWorker");
665 if (!GetContext()) 728 if (!GetContext())
666 return; 729 return;
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
1440 if (!handle) { 1503 if (!handle) {
1441 bad_message::ReceivedBadMessage(this, 1504 bad_message::ReceivedBadMessage(this,
1442 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1505 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1443 return; 1506 return;
1444 } 1507 }
1445 handle->version()->StopWorker( 1508 handle->version()->StopWorker(
1446 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1509 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1447 } 1510 }
1448 1511
1449 } // namespace content 1512 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698