source: webkit/trunk/Source/WebKit/UIProcess/SystemPreviewController.h

Last change on this file was 288093, checked in by [email protected], 3 years ago

Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
https://bugs.webkit.org/show_bug.cgi?id=235070

Reviewed by Chris Dumez.

LayoutTests/imported/w3c:

  • web-platform-tests/service-workers/service-worker/fetch-event.https-expected.txt:

Source/WebCore:

Update ScriptExecutionContextIdentifier to be a process-scoped UUID.
This allows to identify the process running a process as well as exposing to JavaScript context identifiers as UUIDs.
This is matching what Chrome and Firefox are doing.
Make SWServer store the maping from context UUID strings to the internal ScriptExecutionContextIdentifiers.
This allows to find a ServiceWorkerClient directly from its JavaScript exposed identifier.
Rename reservedClientId in resultingClientId to match the spec.

Covered by existing tests.

  • Modules/web-locks/WebLockRegistry.cpp:
  • dom/ScriptExecutionContext.cpp:
  • loader/DocumentLoader.cpp:
  • page/mac/PageMac.mm:
  • platform/ProcessQualified.h:
  • platform/ScriptExecutionContextIdentifier.h:
  • testing/Internals.cpp:
  • testing/Internals.h:
  • testing/Internals.idl:
  • testing/ServiceWorkerInternals.cpp:
  • testing/ServiceWorkerInternals.h:
  • testing/ServiceWorkerInternals.idl:
  • workers/service/FetchEvent.cpp:
  • workers/service/FetchEvent.h:
  • workers/service/FetchEvent.idl:
  • workers/service/ServiceWorkerClient.cpp:
  • workers/service/ServiceWorkerClient.idl:
  • workers/service/ServiceWorkerClients.cpp:
  • workers/service/context/SWContextManager.h:
  • workers/service/context/ServiceWorkerFetch.cpp:
  • workers/service/context/ServiceWorkerFetch.h:
  • workers/service/context/ServiceWorkerThread.cpp:
  • workers/service/context/ServiceWorkerThread.h:
  • workers/service/context/ServiceWorkerThreadProxy.cpp:
  • workers/service/context/ServiceWorkerThreadProxy.h:
  • workers/service/server/SWServer.cpp:
  • workers/service/server/SWServer.h:
  • workers/service/server/SWServerToContextConnection.cpp:
  • workers/service/server/SWServerToContextConnection.h:
  • workers/service/server/SWServerWorker.cpp:
  • workers/service/server/SWServerWorker.h:

Source/WebKit:

Change findByClientIdentifier into findByVisibleClientIdentifieran and make it asn async reply.
Update fetch event code path to send the visible IDs of the FetchEvent from network process to worker context process.
We store these IDs in NetworkResourceLoader so that we can change them in case of redirection for navigations.

  • NetworkProcess/NetworkResourceLoader.h:
  • NetworkProcess/ServiceWorker/ServiceWorkerFetchTask.cpp:
  • NetworkProcess/ServiceWorker/WebSWServerConnection.cpp:
  • NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp:
  • NetworkProcess/ServiceWorker/WebSWServerToContextConnection.h:
  • NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in:
  • WebProcess/InjectedBundle/API/c/WKBundle.cpp:
  • WebProcess/InjectedBundle/InjectedBundle.cpp:
  • WebProcess/InjectedBundle/InjectedBundle.h:
  • WebProcess/Storage/WebSWContextManagerConnection.cpp:
  • WebProcess/Storage/WebSWContextManagerConnection.h:
  • WebProcess/Storage/WebSWContextManagerConnection.messages.in:

Source/WTF:

  • wtf/UUID.cpp:
  • wtf/UUID.h: Add routine to stringify a UUID. Add routine to parse a stringified UUID. We restrict UUID::create to values for which the version 4 UUID stringification is bijective.

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WTF/UUID.cpp:
  • TestWebKitAPI/Tests/WebKitCocoa/SystemPreview.mm:

LayoutTests:

Updated tests to not rely on visible ID to be the serialization of a ScriptExecutionContextIdentifier.
For that reason, add internals API to get the internal ID from a ServiceWorkerClient.

  • http/tests/workers/service/client-added-to-clients-when-restored-from-page-cache.html:
  • http/tests/workers/service/client-removed-from-clients-while-in-page-cache.html:
  • http/tests/workers/service/resources/getClientIds-worker.js:
  • http/tests/workers/service/serviceworkerclients-matchAll-worker.js:
  • http/tests/workers/service/serviceworkerclients-matchAll.https.html:
  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Author Id Revision HeadURL
File size: 2.7 KB
Line 
1/*
2 * Copyright (C) 2018 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#pragma once
27
28#if USE(SYSTEM_PREVIEW)
29
30#include <WebCore/FrameLoaderTypes.h>
31#include <WebCore/IntRect.h>
32#include <WebCore/ResourceError.h>
33#include <wtf/RetainPtr.h>
34#include <wtf/URL.h>
35
36#if USE(QUICK_LOOK)
37OBJC_CLASS QLPreviewController;
38OBJC_CLASS _WKPreviewControllerDataSource;
39OBJC_CLASS _WKPreviewControllerDelegate;
40#endif
41
42namespace WebKit {
43
44class WebPageProxy;
45
46class SystemPreviewController {
47 WTF_MAKE_FAST_ALLOCATED;
48public:
49 explicit SystemPreviewController(WebPageProxy&);
50
51 bool canPreview(const String& mimeType) const;
52
53 void start(URL originatingPageURL, const String& mimeType, const WebCore::SystemPreviewInfo&);
54 void updateProgress(float);
55 void finish(URL);
56 void cancel();
57 void fail(const WebCore::ResourceError&);
58
59 WebPageProxy& page() { return m_webPageProxy; }
60 const WebCore::SystemPreviewInfo& previewInfo() const { return m_systemPreviewInfo; }
61
62 void triggerSystemPreviewAction();
63
64 void triggerSystemPreviewActionWithTargetForTesting(uint64_t elementID, NSString* documentID, uint64_t pageID);
65
66private:
67 WebPageProxy& m_webPageProxy;
68 WebCore::SystemPreviewInfo m_systemPreviewInfo;
69#if USE(QUICK_LOOK)
70 RetainPtr<QLPreviewController> m_qlPreviewController;
71 RetainPtr<_WKPreviewControllerDelegate> m_qlPreviewControllerDelegate;
72 RetainPtr<_WKPreviewControllerDataSource> m_qlPreviewControllerDataSource;
73#endif
74};
75
76}
77
78#endif
Note: See TracBrowser for help on using the repository browser.