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

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

Issue 2811063002: Enable ServiceWorkerNavigationPreload by default (Closed)
Patch Set: rebase Created 3 years, 8 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_fetch_dispatcher.cc » ('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"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 if (!callback.is_null()) 73 if (!callback.is_null())
74 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback); 74 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, callback);
75 } 75 }
76 76
77 WebContents* GetWebContents(int render_process_id, int render_frame_id) { 77 WebContents* GetWebContents(int render_process_id, int render_frame_id) {
78 RenderFrameHost* rfh = 78 RenderFrameHost* rfh =
79 RenderFrameHost::FromID(render_process_id, render_frame_id); 79 RenderFrameHost::FromID(render_process_id, render_frame_id);
80 return WebContents::FromRenderFrameHost(rfh); 80 return WebContents::FromRenderFrameHost(rfh);
81 } 81 }
82 82
83 std::string GetNavigationPreloadDisabledErrorMessage(
84 ServiceWorkerVersion::NavigationPreloadSupportStatus support_status) {
85 switch (support_status) {
86 case ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED:
87 NOTREACHED();
88 break;
89 case ServiceWorkerVersion::NavigationPreloadSupportStatus::
90 NOT_SUPPORTED_FIELD_TRIAL_STOPPED:
91 return "The Navigation Preload Origin Trial has ended.";
92 case ServiceWorkerVersion::NavigationPreloadSupportStatus::
93 NOT_SUPPORTED_DISABLED_BY_COMMAND_LINE:
94 return "Navigation Preload is disabled by command line flag.";
95 case ServiceWorkerVersion::NavigationPreloadSupportStatus::
96 NOT_SUPPORTED_NO_VALID_ORIGIN_TRIAL_TOKEN:
97 return "The service worker script does not have a valid Navigation "
98 "Preload Origin Trial token.";
99 }
100 NOTREACHED();
101 return "";
102 }
103
104 } // namespace 83 } // namespace
105 84
106 ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost( 85 ServiceWorkerDispatcherHost::ServiceWorkerDispatcherHost(
107 int render_process_id, 86 int render_process_id,
108 ResourceContext* resource_context) 87 ResourceContext* resource_context)
109 : BrowserMessageFilter(kFilteredMessageClasses, 88 : BrowserMessageFilter(kFilteredMessageClasses,
110 arraysize(kFilteredMessageClasses)), 89 arraysize(kFilteredMessageClasses)),
111 render_process_id_(render_process_id), 90 render_process_id_(render_process_id),
112 resource_context_(resource_context), 91 resource_context_(resource_context),
113 channel_ready_(false), 92 channel_ready_(false),
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-262212670 695 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-262212670
717 // TODO(falken): Remove this comment when the spec is updated. 696 // TODO(falken): Remove this comment when the spec is updated.
718 if (!registration->active_version()) { 697 if (!registration->active_version()) {
719 Send(new ServiceWorkerMsg_EnableNavigationPreloadError( 698 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
720 thread_id, request_id, WebServiceWorkerError::kErrorTypeState, 699 thread_id, request_id, WebServiceWorkerError::kErrorTypeState,
721 std::string(kEnableNavigationPreloadErrorPrefix) + 700 std::string(kEnableNavigationPreloadErrorPrefix) +
722 std::string(kNoActiveWorkerErrorMessage))); 701 std::string(kNoActiveWorkerErrorMessage)));
723 return; 702 return;
724 } 703 }
725 704
726 ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
727 registration->active_version()->GetNavigationPreloadSupportStatus();
728 if (support_status !=
729 ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
730 Send(new ServiceWorkerMsg_EnableNavigationPreloadError(
731 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort,
732 std::string(kEnableNavigationPreloadErrorPrefix) +
733 GetNavigationPreloadDisabledErrorMessage(support_status)));
734 return;
735 }
736
737 std::vector<GURL> urls = {provider_host->document_url(), 705 std::vector<GURL> urls = {provider_host->document_url(),
738 registration->pattern()}; 706 registration->pattern()};
739 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { 707 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
740 bad_message::ReceivedBadMessage( 708 bad_message::ReceivedBadMessage(
741 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN); 709 this, bad_message::SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN);
742 return; 710 return;
743 } 711 }
744 712
745 if (!GetContentClient()->browser()->AllowServiceWorker( 713 if (!GetContentClient()->browser()->AllowServiceWorker(
746 registration->pattern(), provider_host->topmost_frame_url(), 714 registration->pattern(), provider_host->topmost_frame_url(),
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-262212670 837 // https://github.com/w3c/ServiceWorker/issues/920#issuecomment-262212670
870 // TODO(falken): Remove this comment when the spec is updated. 838 // TODO(falken): Remove this comment when the spec is updated.
871 if (!registration->active_version()) { 839 if (!registration->active_version()) {
872 Send(new ServiceWorkerMsg_SetNavigationPreloadHeaderError( 840 Send(new ServiceWorkerMsg_SetNavigationPreloadHeaderError(
873 thread_id, request_id, WebServiceWorkerError::kErrorTypeState, 841 thread_id, request_id, WebServiceWorkerError::kErrorTypeState,
874 std::string(kSetNavigationPreloadHeaderErrorPrefix) + 842 std::string(kSetNavigationPreloadHeaderErrorPrefix) +
875 std::string(kNoActiveWorkerErrorMessage))); 843 std::string(kNoActiveWorkerErrorMessage)));
876 return; 844 return;
877 } 845 }
878 846
879 ServiceWorkerVersion::NavigationPreloadSupportStatus support_status =
880 registration->active_version()->GetNavigationPreloadSupportStatus();
881 if (support_status !=
882 ServiceWorkerVersion::NavigationPreloadSupportStatus::SUPPORTED) {
883 Send(new ServiceWorkerMsg_SetNavigationPreloadHeaderError(
884 thread_id, request_id, WebServiceWorkerError::kErrorTypeAbort,
885 std::string(kSetNavigationPreloadHeaderErrorPrefix) +
886 GetNavigationPreloadDisabledErrorMessage(support_status)));
887 return;
888 }
889 std::vector<GURL> urls = {provider_host->document_url(), 847 std::vector<GURL> urls = {provider_host->document_url(),
890 registration->pattern()}; 848 registration->pattern()};
891 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) { 849 if (!ServiceWorkerUtils::AllOriginsMatchAndCanAccessServiceWorkers(urls)) {
892 bad_message::ReceivedBadMessage( 850 bad_message::ReceivedBadMessage(
893 this, bad_message::SWDH_SET_NAVIGATION_PRELOAD_HEADER_INVALID_ORIGIN); 851 this, bad_message::SWDH_SET_NAVIGATION_PRELOAD_HEADER_INVALID_ORIGIN);
894 return; 852 return;
895 } 853 }
896 854
897 // TODO(falken): Ideally this would match Blink's isValidHTTPHeaderValue. 855 // TODO(falken): Ideally this would match Blink's isValidHTTPHeaderValue.
898 // Chrome's check is less restrictive: it allows non-latin1 characters. 856 // Chrome's check is less restrictive: it allows non-latin1 characters.
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 if (!handle) { 1738 if (!handle) {
1781 bad_message::ReceivedBadMessage(this, 1739 bad_message::ReceivedBadMessage(this,
1782 bad_message::SWDH_TERMINATE_BAD_HANDLE); 1740 bad_message::SWDH_TERMINATE_BAD_HANDLE);
1783 return; 1741 return;
1784 } 1742 }
1785 handle->version()->StopWorker( 1743 handle->version()->StopWorker(
1786 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 1744 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
1787 } 1745 }
1788 1746
1789 } // namespace content 1747 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_fetch_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698