Bug 206520 - Fix fetch/api/policies/referrer-origin-worker.html
Summary: Fix fetch/api/policies/referrer-origin-worker.html
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Rob Buis
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2020-01-21 02:15 PST by Rob Buis
Modified: 2020-02-07 01:11 PST (History)
11 users (show)

See Also:


Attachments
Patch (2.46 KB, patch)
2020-01-21 02:17 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (2.36 KB, patch)
2020-01-22 05:40 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (37.92 KB, patch)
2020-01-23 00:04 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (39.50 KB, patch)
2020-01-23 09:16 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (39.95 KB, patch)
2020-01-23 11:28 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (44.22 KB, patch)
2020-01-24 08:11 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (45.68 KB, patch)
2020-01-24 08:53 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (44.22 KB, patch)
2020-01-24 09:26 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (42.95 KB, patch)
2020-01-24 10:54 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (42.78 KB, patch)
2020-01-25 08:18 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (45.83 KB, patch)
2020-01-27 07:10 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (46.17 KB, patch)
2020-01-27 08:08 PST, Rob Buis
no flags Details | Formatted Diff | Diff
Patch (47.13 KB, patch)
2020-01-27 12:34 PST, Rob Buis
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Rob Buis 2020-01-21 02:15:36 PST
Fix fetch/api/policies/referrer-origin-worker.html by adding
referrer-origin-worker.html.headers, which got lost in the
automated import process.
Comment 1 Rob Buis 2020-01-21 02:17:33 PST
Created attachment 388287 [details]
Patch
Comment 2 youenn fablet 2020-01-21 04:26:41 PST
Comment on attachment 388287 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388287&action=review

> LayoutTests/imported/w3c/ChangeLog:10
> +        automated import process.

Do you know how it got lost?
Comment 3 Rob Buis 2020-01-21 05:01:05 PST
(In reply to youenn fablet from comment #2)
> Comment on attachment 388287 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=388287&action=review
> 
> > LayoutTests/imported/w3c/ChangeLog:10
> > +        automated import process.
> 
> Do you know how it got lost?

I am not sure it got lost. It seems you imported it in 2016:
https://bugs.webkit.org/show_bug.cgi?id=156914

I don't know if the import process can handle it (or could handle it in 2016) or you removed it locally.

Furthermore I do understand why the lack of headers is no problem for referrer-unsafe-url-worker.html, but I don't understand why it is not a problem for referrer-no-referrer-worker.html. Anyway, since the latter passes, I do not feel like investigating. I do want to have a quick look though to see if there are more cases like fetch/api/policies/referrer-origin-worker.html.
Comment 4 WebKit Commit Bot 2020-01-21 05:30:48 PST
Comment on attachment 388287 [details]
Patch

Clearing flags on attachment: 388287

Committed r254850: <https://trac.webkit.org/changeset/254850>
Comment 5 WebKit Commit Bot 2020-01-21 05:30:49 PST
All reviewed patches have been landed.  Closing bug.
Comment 6 Radar WebKit Bug Importer 2020-01-21 05:31:11 PST
<rdar://problem/58757006>
Comment 7 Carlos Alberto Lopez Perez 2020-01-21 08:29:32 PST
(In reply to Rob Buis from comment #3)
> (In reply to youenn fablet from comment #2)
> > Comment on attachment 388287 [details]
> > Patch
> > 
> > View in context:
> > https://bugs.webkit.org/attachment.cgi?id=388287&action=review
> > 
> > > LayoutTests/imported/w3c/ChangeLog:10
> > > +        automated import process.
> > 
> > Do you know how it got lost?
> 
> I am not sure it got lost. It seems you imported it in 2016:
> https://bugs.webkit.org/show_bug.cgi?id=156914
> 
> I don't know if the import process can handle it (or could handle it in
> 2016) or you removed it locally.
> 
>

I don't see that header (referrer-origin-worker.html.headers) previously imported there, neither on previous git log history to this commit.

I also don't see it on WPT upstream: https://github.com/web-platform-tests/wpt/tree/master/fetch/api/policies

Can you please double check where you got this header from?


This test is actually failing for both Safari and WebKitGTK on wpt.fyi https://wpt.fyi/results/fetch/api/policies/referrer-origin-worker.html?label=experimental&label=master&product=chrome&product=firefox&product=safari&product=webkitgtk&aligned

Perhaps its needed to upstream this header file to WPT?
Comment 8 Rob Buis 2020-01-21 08:52:10 PST
(In reply to Carlos Alberto Lopez Perez from comment #7)
> 
> I don't see that header (referrer-origin-worker.html.headers) previously
> imported there, neither on previous git log history to this commit.
> 
> I also don't see it on WPT upstream:
> https://github.com/web-platform-tests/wpt/tree/master/fetch/api/policies
> 
> Can you please double check where you got this header from?
> 
> 
> This test is actually failing for both Safari and WebKitGTK on wpt.fyi
> https://wpt.fyi/results/fetch/api/policies/referrer-origin-worker.
> html?label=experimental&label=master&product=chrome&product=firefox&product=s
> afari&product=webkitgtk&aligned
> 
> Perhaps its needed to upstream this header file to WPT?

Hmm, maybe this is the wrong way to fix this. I guess the expectation is that the Worker will fetch referrer-no-referrer.js.headers to have the Referrer-Policy set, which is not happening and is the real bug. If Youenn or anybody else can confirm that then this can be reverted. If so my apologies for the misleading statements about the importing process!
Comment 9 Carlos Alberto Lopez Perez 2020-01-22 05:24:30 PST
(In reply to Rob Buis from comment #8)
> (In reply to Carlos Alberto Lopez Perez from comment #7)
> > 
> > I don't see that header (referrer-origin-worker.html.headers) previously
> > imported there, neither on previous git log history to this commit.
> > 
> > I also don't see it on WPT upstream:
> > https://github.com/web-platform-tests/wpt/tree/master/fetch/api/policies
> > 
> > Can you please double check where you got this header from?
> > 
> > 
> > This test is actually failing for both Safari and WebKitGTK on wpt.fyi
> > https://wpt.fyi/results/fetch/api/policies/referrer-origin-worker.
> > html?label=experimental&label=master&product=chrome&product=firefox&product=s
> > afari&product=webkitgtk&aligned
> > 
> > Perhaps its needed to upstream this header file to WPT?
> 
> Hmm, maybe this is the wrong way to fix this. I guess the expectation is
> that the Worker will fetch referrer-no-referrer.js.headers to have the
> Referrer-Policy set, which is not happening and is the real bug. If Youenn
> or anybody else can confirm that then this can be reverted. If so my
> apologies for the misleading statements about the importing process!

I don't know about the specific of this test and if r254850 is the right fix for it or not.

But I know that we shouldn't do changes on imported WPT tests without exporting those changes to WPT itself.

So if you think r254850 is the right fix, then please open a pull-request in https://github.com/web-platform-tests/wpt to upstream this header to WPT.

And if you think this is not the right fix, then please revert this change.

Thanks
Comment 10 Rob Buis 2020-01-22 05:40:52 PST
Reopening to attach new patch.
Comment 11 Rob Buis 2020-01-22 05:40:55 PST
Created attachment 388417 [details]
Patch
Comment 12 Rob Buis 2020-01-22 05:43:22 PST
(In reply to Carlos Alberto Lopez Perez from comment #9)
> So if you think r254850 is the right fix, then please open a pull-request in
> https://github.com/web-platform-tests/wpt to upstream this header to WPT.

Yep, I think I know how to fix it correctly, but this was the wrong way. I tried a webkit-patch rollout but it seemed to get stuck in an endless loop, so I attached the revert by hand. Are you able to review it?
Comment 13 WebKit Commit Bot 2020-01-22 06:48:47 PST
Comment on attachment 388417 [details]
Patch

Clearing flags on attachment: 388417

Committed r254920: <https://trac.webkit.org/changeset/254920>
Comment 14 WebKit Commit Bot 2020-01-22 06:48:49 PST
All reviewed patches have been landed.  Closing bug.
Comment 15 Alexey Proskuryakov 2020-01-22 14:37:35 PST
I'm confused by the state of this bug. Looks like the fix was reverted and the test expectations are FAIL again, so why is it in RESOLVED/FIXED state?
Comment 16 Rob Buis 2020-01-22 23:28:21 PST
Still needs to be fixed.
Comment 17 Rob Buis 2020-01-22 23:30:08 PST
(In reply to Alexey Proskuryakov from comment #15)
> I'm confused by the state of this bug. Looks like the fix was reverted and
> the test expectations are FAIL again, so why is it in RESOLVED/FIXED state?

Right, the automatic cq+ behavior was to close this bug, I re-opened it since the test is not fixed yet indeed. I believe I have a patch for this which I can upload today.
Comment 18 Rob Buis 2020-01-23 00:04:11 PST
Created attachment 388522 [details]
Patch
Comment 19 Rob Buis 2020-01-23 09:16:52 PST
Created attachment 388552 [details]
Patch
Comment 20 Rob Buis 2020-01-23 11:28:54 PST
Created attachment 388567 [details]
Patch
Comment 21 youenn fablet 2020-01-24 06:31:20 PST
Comment on attachment 388567 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388567&action=review

> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:58
> +    , m_referrerPolicy(referrerPolicy)

Can we directly pass a ReferrerPolicy there instead of a String?
Also, can we move this to WorkerGlobalScope to increase code reuse?
Maybe

> Source/WebCore/workers/Worker.cpp:214
> +    m_contextProxy.startWorkerGlobalScope(m_scriptLoader->url(), m_name, context->userAgent(m_scriptLoader->url()), isOnline, m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_workerCreationTime, m_scriptLoader->referrerPolicy(), m_runtimeFlags);

Can we make ScriptLoader return a ReferrerPolicy?

> Source/WebCore/workers/WorkerThread.cpp:107
> +    , m_referrerPolicy(referrerPolicy)

All other strings are isolated, so we should probably do the same for referrer policy, but an enum might be event better here.
Comment 22 Rob Buis 2020-01-24 08:11:01 PST
Created attachment 388694 [details]
Patch
Comment 23 Rob Buis 2020-01-24 08:53:59 PST
Created attachment 388700 [details]
Patch
Comment 24 Rob Buis 2020-01-24 09:26:49 PST
Created attachment 388701 [details]
Patch
Comment 25 Rob Buis 2020-01-24 09:42:57 PST
Comment on attachment 388567 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388567&action=review

Went with using ReferrerPolicy for the parameters.

>> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:58
>> +    , m_referrerPolicy(referrerPolicy)
> 
> Can we directly pass a ReferrerPolicy there instead of a String?
> Also, can we move this to WorkerGlobalScope to increase code reuse?
> Maybe

Done. I initially did it using Strings because a corner case would be slower, namely the parsing would have been done needlessly if a fetch has the referrerPolicy parameter in its RequestInit. But this should not happen much in reality.

>> Source/WebCore/workers/Worker.cpp:214
>> +    m_contextProxy.startWorkerGlobalScope(m_scriptLoader->url(), m_name, context->userAgent(m_scriptLoader->url()), isOnline, m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_workerCreationTime, m_scriptLoader->referrerPolicy(), m_runtimeFlags);
> 
> Can we make ScriptLoader return a ReferrerPolicy?

Unfortunately I think that makes jobFinishedLoadingScript and storing into ServiceWorkerFetchResult too complicated/inefficient.

>> Source/WebCore/workers/WorkerThread.cpp:107
>> +    , m_referrerPolicy(referrerPolicy)
> 
> All other strings are isolated, so we should probably do the same for referrer policy, but an enum might be event better here.

You are right, but not needed if we go with ReferrerPolicy.
Comment 26 youenn fablet 2020-01-24 09:52:47 PST
Comment on attachment 388694 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388694&action=review

> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:56
> +    : WorkerGlobalScope(url, WTFMove(origin), identifier, userAgent, isOnline, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, referrerPolicy, connectionProxy, socketProvider)

s/const ReferrerPolicy&/ReferrerPolicy/ here and elsewhere

> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:98
> +    return m_referrerPolicy;

We should be able to implement it in WorkerGlobalScope directly.

> Source/WebCore/workers/WorkerGlobalScope.h:146
> +    mutable ReferrerPolicy m_referrerPolicy;

Why adding mutable?
No need to make it protected, we can implement referrerPolicy getter in WorkerGlobalScope and make m_referrerPolicy private.

> Source/WebCore/workers/WorkerThread.cpp:91
> +    ReferrerPolicy m_referrerPolicy;

Strange that we use m_XX for struct fields. Might be good to fix this style issue as a follow-up.

> Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp:163
> +    return m_referrerPolicy;

Can we just compute this value from data and pass it to WorkerGlobalScope constructor?

> Source/WebCore/worklets/WorkletGlobalScope.cpp:171
> +    return ReferrerPolicy::NoReferrer;

We should probably return m_referrerPolicy and make it final.
Comment 27 Rob Buis 2020-01-24 10:54:44 PST
Created attachment 388708 [details]
Patch
Comment 28 Rob Buis 2020-01-24 11:30:07 PST
Comment on attachment 388694 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388694&action=review

>> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:56
>> +    : WorkerGlobalScope(url, WTFMove(origin), identifier, userAgent, isOnline, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, referrerPolicy, connectionProxy, socketProvider)
> 
> s/const ReferrerPolicy&/ReferrerPolicy/ here and elsewhere

I believe I used const ReferrerPolicy& in all parameter lists.

>> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:98
>> +    return m_referrerPolicy;
> 
> We should be able to implement it in WorkerGlobalScope directly.

Ah, that is what I did not get, done.

>> Source/WebCore/workers/WorkerGlobalScope.h:146
>> +    mutable ReferrerPolicy m_referrerPolicy;
> 
> Why adding mutable?
> No need to make it protected, we can implement referrerPolicy getter in WorkerGlobalScope and make m_referrerPolicy private.

Nice, as I said above I did not see this, done.

>> Source/WebCore/workers/WorkerThread.cpp:91
>> +    ReferrerPolicy m_referrerPolicy;
> 
> Strange that we use m_XX for struct fields. Might be good to fix this style issue as a follow-up.

Sure, can do.

>> Source/WebCore/workers/service/ServiceWorkerGlobalScope.cpp:163
>> +    return m_referrerPolicy;
> 
> Can we just compute this value from data and pass it to WorkerGlobalScope constructor?

Done.

>> Source/WebCore/worklets/WorkletGlobalScope.cpp:171
>> +    return ReferrerPolicy::NoReferrer;
> 
> We should probably return m_referrerPolicy and make it final.

I made it final. There is no m_referrerPolicy, WorkletGlobalScope does not derive from WorkerGlobalScope.
Comment 29 Rob Buis 2020-01-24 12:13:29 PST
Comment on attachment 388694 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388694&action=review

>>> Source/WebCore/workers/DedicatedWorkerGlobalScope.cpp:56
>>> +    : WorkerGlobalScope(url, WTFMove(origin), identifier, userAgent, isOnline, thread, shouldBypassMainWorldContentSecurityPolicy, WTFMove(topOrigin), timeOrigin, referrerPolicy, connectionProxy, socketProvider)
>> 
>> s/const ReferrerPolicy&/ReferrerPolicy/ here and elsewhere
> 
> I believe I used const ReferrerPolicy& in all parameter lists.

Oops, I misread the suggestion, will fix tomorrow.
Comment 30 Rob Buis 2020-01-25 08:18:40 PST
Created attachment 388775 [details]
Patch
Comment 31 Darin Adler 2020-01-25 09:09:15 PST
Comment on attachment 388708 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388708&action=review

> Source/WebCore/workers/DedicatedWorkerGlobalScope.h:53
> +    static Ref<DedicatedWorkerGlobalScope> create(const URL&, Ref<SecurityOrigin>&&, const String& name, const String& identifier, const String& userAgent, bool isOnline, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, const ReferrerPolicy&, IDBClient::IDBConnectionProxy*, SocketProvider*);

I think we need to move to a structure. This is simply too many arguments to a function.

> Source/WebCore/workers/DedicatedWorkerThread.h:53
> +    Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, Ref<SecurityOrigin>&&, const String& name, const String& identifier, const String& userAgent, bool isOnline, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, const ReferrerPolicy&) override;

Ditto.
Comment 32 Rob Buis 2020-01-27 07:10:57 PST
Created attachment 388856 [details]
Patch
Comment 33 Rob Buis 2020-01-27 08:08:12 PST
Created attachment 388860 [details]
Patch
Comment 34 Rob Buis 2020-01-27 12:34:39 PST
Created attachment 388882 [details]
Patch
Comment 35 Rob Buis 2020-01-27 14:04:01 PST
Comment on attachment 388708 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=388708&action=review

>> Source/WebCore/workers/DedicatedWorkerGlobalScope.h:53
>> +    static Ref<DedicatedWorkerGlobalScope> create(const URL&, Ref<SecurityOrigin>&&, const String& name, const String& identifier, const String& userAgent, bool isOnline, DedicatedWorkerThread&, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, const ReferrerPolicy&, IDBClient::IDBConnectionProxy*, SocketProvider*);
> 
> I think we need to move to a structure. This is simply too many arguments to a function.

Turned out to be quite some work somehow. Done.

>> Source/WebCore/workers/DedicatedWorkerThread.h:53
>> +    Ref<WorkerGlobalScope> createWorkerGlobalScope(const URL&, Ref<SecurityOrigin>&&, const String& name, const String& identifier, const String& userAgent, bool isOnline, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, const ReferrerPolicy&) override;
> 
> Ditto.

Done.
Comment 36 WebKit Commit Bot 2020-02-07 01:11:14 PST
Comment on attachment 388882 [details]
Patch

Clearing flags on attachment: 388882

Committed r256012: <https://trac.webkit.org/changeset/256012>
Comment 37 WebKit Commit Bot 2020-02-07 01:11:17 PST
All reviewed patches have been landed.  Closing bug.