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

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: comments Created 4 years, 1 month 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 namespace { 45 namespace {
46 46
47 const char kNoDocumentURLErrorMessage[] = 47 const char kNoDocumentURLErrorMessage[] =
48 "No URL is associated with the caller's document."; 48 "No URL is associated with the caller's document.";
49 const char kShutdownErrorMessage[] = 49 const char kShutdownErrorMessage[] =
50 "The Service Worker system has shutdown."; 50 "The Service Worker system has shutdown.";
51 const char kUserDeniedPermissionMessage[] = 51 const char kUserDeniedPermissionMessage[] =
52 "The user denied permission to use Service Worker."; 52 "The user denied permission to use Service Worker.";
53 const char kInvalidStateErrorMessage[] = "The object is in an invalid state."; 53 const char kInvalidStateErrorMessage[] = "The object is in an invalid state.";
54 const char kEnableNavigationPreloadErrorPrefix[] =
55 "Failed to enable or disable navigation preload: ";
54 56
55 const uint32_t kFilteredMessageClasses[] = { 57 const uint32_t kFilteredMessageClasses[] = {
56 ServiceWorkerMsgStart, EmbeddedWorkerMsgStart, 58 ServiceWorkerMsgStart, EmbeddedWorkerMsgStart,
57 }; 59 };
58 60
59 void RunSoon(const base::Closure& callback) { 61 void RunSoon(const base::Closure& callback) {
60 if (!callback.is_null()) 62 if (!callback.is_null())
61 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 63 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
62 } 64 }
63 65
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 OnReportConsoleMessage) 179 OnReportConsoleMessage)
178 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount, 180 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount,
179 OnIncrementServiceWorkerRefCount) 181 OnIncrementServiceWorkerRefCount)
180 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount, 182 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount,
181 OnDecrementServiceWorkerRefCount) 183 OnDecrementServiceWorkerRefCount)
182 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount, 184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount,
183 OnIncrementRegistrationRefCount) 185 OnIncrementRegistrationRefCount)
184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount, 186 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount,
185 OnDecrementRegistrationRefCount) 187 OnDecrementRegistrationRefCount)
186 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker) 188 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker)
189 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_EnableNavigationPreload,
190 OnEnableNavigationPreload)
187 IPC_MESSAGE_UNHANDLED(handled = false) 191 IPC_MESSAGE_UNHANDLED(handled = false)
188 IPC_END_MESSAGE_MAP() 192 IPC_END_MESSAGE_MAP()
189 193
190 if (!handled && GetContext()) { 194 if (!handled && GetContext()) {
191 handled = GetContext()->embedded_worker_registry()->OnMessageReceived( 195 handled = GetContext()->embedded_worker_registry()->OnMessageReceived(
192 message, render_process_id_); 196 message, render_process_id_);
193 if (!handled) 197 if (!handled)
194 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED); 198 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED);
195 } 199 }
196 200
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady", 653 "ServiceWorker", "ServiceWorkerDispatcherHost::GetRegistrationForReady",
650 request_id); 654 request_id);
651 if (!provider_host->GetRegistrationForReady(base::Bind( 655 if (!provider_host->GetRegistrationForReady(base::Bind(
652 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete, 656 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete,
653 this, thread_id, request_id, provider_host->AsWeakPtr()))) { 657 this, thread_id, request_id, provider_host->AsWeakPtr()))) {
654 bad_message::ReceivedBadMessage( 658 bad_message::ReceivedBadMessage(
655 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS); 659 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS);
656 } 660 }
657 } 661 }
658 662
663 void ServiceWorkerDispatcherHost::OnEnableNavigationPreload(
664 int thread_id,
665 int request_id,
666 int provider_id,
667 int64_t registration_id,
668 bool enable) {
669 ProviderStatus provider_status;
670 ServiceWorkerProviderHost* provider_host =
671 GetProviderHostForRequest(&provider_status, provider_id);
672 switch (provider_status) {
673 case ProviderStatus::NO_CONTEXT: // fallthrough
674 case ProviderStatus::DEAD_HOST:
675 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
676 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
677 std::string(kEnableNavigationPreloadErrorPrefix) +
678 std::string(kShutdownErrorMessage)));
679 return;
680 case ProviderStatus::NO_HOST:
681 bad_message::ReceivedBadMessage(
682 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST);
683 return;
684 case ProviderStatus::NO_URL:
685 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
686 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
687 std::string(kEnableNavigationPreloadErrorPrefix) +
688 std::string(kNoDocumentURLErrorMessage)));
689 return;
690 case ProviderStatus::OK:
691 break;
692 }
693
694 ServiceWorkerRegistration* registration =
695 GetContext()->GetLiveRegistration(registration_id);
696 if (!registration) {
697 // |registration| must be alive because a renderer retains a registration
698 // reference at this point.
699 bad_message::ReceivedBadMessage(
700 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID);
701 return;
702 }
703
704 std::vector<GURL> urls = {provider_host->document_url(),
705 registration->pattern()};
706 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
707 bad_message::ReceivedBadMessage(
708 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN);
709 return;
710 }
711
712 if (!GetContentClient()->browser()->AllowServiceWorker(
713 registration->pattern(), provider_host->topmost_frame_url(),
714 resource_context_, render_process_id_, provider_host->frame_id())) {
715 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
716 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled,
717 std::string(kEnableNavigationPreloadErrorPrefix) +
718 std::string(kUserDeniedPermissionMessage)));
719 return;
720 }
721
722 // TODO(falken): Write to disk before resolving the promise.
723 registration->EnableNavigationPreload(enable);
724 Send(new ServiceWorkerMsg_DidEnableNavigationPreload(thread_id, request_id));
725 }
726
659 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( 727 void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
660 int handle_id, 728 int handle_id,
661 int provider_id, 729 int provider_id,
662 const base::string16& message, 730 const base::string16& message,
663 const url::Origin& source_origin, 731 const url::Origin& source_origin,
664 const std::vector<int>& sent_message_ports) { 732 const std::vector<int>& sent_message_ports) {
665 TRACE_EVENT0("ServiceWorker", 733 TRACE_EVENT0("ServiceWorker",
666 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); 734 "ServiceWorkerDispatcherHost::OnPostMessageToWorker");
667 if (!GetContext()) 735 if (!GetContext())
668 return; 736 return;
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 if (!handle) { 1510 if (!handle) {
1443 bad_message::ReceivedBadMessage(this, 1511 bad_message::ReceivedBadMessage(this,
1444 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1512 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1445 return; 1513 return;
1446 } 1514 }
1447 handle->version()->StopWorker( 1515 handle->version()->StopWorker(
1448 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1516 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1449 } 1517 }
1450 1518
1451 } // namespace content 1519 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698