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

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

Issue 2443103002: service worker: Implement NavigationPreloadManager.getState (Closed)
Patch Set: rm file added in bad merge 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
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[] = 54 const char kEnableNavigationPreloadErrorPrefix[] =
55 "Failed to enable or disable navigation preload: "; 55 "Failed to enable or disable navigation preload: ";
56 const char kGetNavigationPreloadStateErrorPrefix[] =
57 "Failed to get navigation preload state: ";
56 58
57 const uint32_t kFilteredMessageClasses[] = { 59 const uint32_t kFilteredMessageClasses[] = {
58 ServiceWorkerMsgStart, EmbeddedWorkerMsgStart, 60 ServiceWorkerMsgStart, EmbeddedWorkerMsgStart,
59 }; 61 };
60 62
61 void RunSoon(const base::Closure& callback) { 63 void RunSoon(const base::Closure& callback) {
62 if (!callback.is_null()) 64 if (!callback.is_null())
63 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 65 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
64 } 66 }
65 67
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 OnIncrementServiceWorkerRefCount) 183 OnIncrementServiceWorkerRefCount)
182 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount, 184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount,
183 OnDecrementServiceWorkerRefCount) 185 OnDecrementServiceWorkerRefCount)
184 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount, 186 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount,
185 OnIncrementRegistrationRefCount) 187 OnIncrementRegistrationRefCount)
186 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount, 188 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount,
187 OnDecrementRegistrationRefCount) 189 OnDecrementRegistrationRefCount)
188 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker) 190 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_TerminateWorker, OnTerminateWorker)
189 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_EnableNavigationPreload, 191 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_EnableNavigationPreload,
190 OnEnableNavigationPreload) 192 OnEnableNavigationPreload)
193 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetNavigationPreloadState,
194 OnGetNavigationPreloadState)
191 IPC_MESSAGE_UNHANDLED(handled = false) 195 IPC_MESSAGE_UNHANDLED(handled = false)
192 IPC_END_MESSAGE_MAP() 196 IPC_END_MESSAGE_MAP()
193 197
194 if (!handled && GetContext()) { 198 if (!handled && GetContext()) {
195 handled = GetContext()->embedded_worker_registry()->OnMessageReceived( 199 handled = GetContext()->embedded_worker_registry()->OnMessageReceived(
196 message, render_process_id_); 200 message, render_process_id_);
197 if (!handled) 201 if (!handled)
198 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED); 202 bad_message::ReceivedBadMessage(this, bad_message::SWDH_NOT_HANDLED);
199 } 203 }
200 204
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 std::string(kEnableNavigationPreloadErrorPrefix) + 721 std::string(kEnableNavigationPreloadErrorPrefix) +
718 std::string(kUserDeniedPermissionMessage))); 722 std::string(kUserDeniedPermissionMessage)));
719 return; 723 return;
720 } 724 }
721 725
722 // TODO(falken): Write to disk before resolving the promise. 726 // TODO(falken): Write to disk before resolving the promise.
723 registration->EnableNavigationPreload(enable); 727 registration->EnableNavigationPreload(enable);
724 Send(new ServiceWorkerMsg_DidEnableNavigationPreload(thread_id, request_id)); 728 Send(new ServiceWorkerMsg_DidEnableNavigationPreload(thread_id, request_id));
725 } 729 }
726 730
731 void ServiceWorkerDispatcherHost::OnGetNavigationPreloadState(
732 int thread_id,
733 int request_id,
734 int provider_id,
735 int64_t registration_id) {
736 ProviderStatus provider_status;
737 ServiceWorkerProviderHost* provider_host =
738 GetProviderHostForRequest(&provider_status, provider_id);
739 switch (provider_status) {
740 case ProviderStatus::NO_CONTEXT: // fallthrough
741 case ProviderStatus::DEAD_HOST:
742 Send(new ServiceWorkerMsg_GetNavigationPreloadStateError(
743 thread_id, request_id, WebServiceWorkerError::ErrorTypeAbort,
744 std::string(kGetNavigationPreloadStateErrorPrefix) +
745 std::string(kShutdownErrorMessage)));
746 return;
747 case ProviderStatus::NO_HOST:
748 bad_message::ReceivedBadMessage(
749 this, bad_message::SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST);
750 return;
751 case ProviderStatus::NO_URL:
752 Send(new ServiceWorkerMsg_GetNavigationPreloadStateError(
753 thread_id, request_id, WebServiceWorkerError::ErrorTypeSecurity,
754 std::string(kGetNavigationPreloadStateErrorPrefix) +
755 std::string(kNoDocumentURLErrorMessage)));
756 return;
757 case ProviderStatus::OK:
758 break;
759 }
760
761 ServiceWorkerRegistration* registration =
762 GetContext()->GetLiveRegistration(registration_id);
763 if (!registration) {
764 // |registration| must be alive because a renderer retains a registration
765 // reference at this point.
766 bad_message::ReceivedBadMessage(
767 this,
768 bad_message::SWDH_GET_NAVIGATION_PRELOAD_STATE_BAD_REGISTRATION_ID);
769 return;
770 }
771
772 std::vector<GURL> urls = {provider_host->document_url(),
773 registration->pattern()};
774 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
775 bad_message::ReceivedBadMessage(
776 this, bad_message::SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN);
777 return;
778 }
779
780 if (!GetContentClient()->browser()->AllowServiceWorker(
781 registration->pattern(), provider_host->topmost_frame_url(),
782 resource_context_, render_process_id_, provider_host->frame_id())) {
783 Send(new ServiceWorkerMsg_GetNavigationPreloadStateError(
784 thread_id, request_id, WebServiceWorkerError::ErrorTypeDisabled,
785 std::string(kGetNavigationPreloadStateErrorPrefix) +
786 std::string(kUserDeniedPermissionMessage)));
787 return;
788 }
789
790 Send(new ServiceWorkerMsg_DidGetNavigationPreloadState(
791 thread_id, request_id, registration->is_navigation_preload_enabled()));
792 }
793
727 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( 794 void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
728 int handle_id, 795 int handle_id,
729 int provider_id, 796 int provider_id,
730 const base::string16& message, 797 const base::string16& message,
731 const url::Origin& source_origin, 798 const url::Origin& source_origin,
732 const std::vector<int>& sent_message_ports) { 799 const std::vector<int>& sent_message_ports) {
733 TRACE_EVENT0("ServiceWorker", 800 TRACE_EVENT0("ServiceWorker",
734 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); 801 "ServiceWorkerDispatcherHost::OnPostMessageToWorker");
735 if (!GetContext()) 802 if (!GetContext())
736 return; 803 return;
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
1510 if (!handle) { 1577 if (!handle) {
1511 bad_message::ReceivedBadMessage(this, 1578 bad_message::ReceivedBadMessage(this,
1512 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1579 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1513 return; 1580 return;
1514 } 1581 }
1515 handle->version()->StopWorker( 1582 handle->version()->StopWorker(
1516 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1583 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1517 } 1584 }
1518 1585
1519 } // namespace content 1586 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698