⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 268901 in webkit


Ignore:
Timestamp:
Oct 22, 2020, 6:32:09 PM (6 years ago)
Author:
Aditya Keerthi
Message:

[Contact Picker API] Add skeleton implementation of ContactsManager.select()
https://bugs.webkit.org/show_bug.cgi?id=218050
<rdar://problem/69862186>

Reviewed by Devin Rousso.

Source/WebCore:

ContactsManager.select() is the interface that allows clients to
present a contact picker. The method should immediately reject when
called from a subframe, when called outside user-interaction and when
called while a contact picker is already being displayed. Furthermore,
the promise is rejected when the supplied properties are empty or
invalid.

After the conditions necessary for the UI to be presented are verified,
ContactsManager.select() calls into the page's Chrome to display the
picker. The UI implementation on macOS and iOS will be done in
forthcoming patches.

See https://wicg.github.io/contact-api/spec/#contacts-manager-select
for more information.

Tests: contact-picker/contacts-select-invalid-properties-and-options.html

contact-picker/contacts-select-requires-user-gesture.html
contact-picker/contacts-select-subframe.html

  • Headers.cmake:
  • Modules/contact-picker/ContactInfo.h: Added encoder and decoder for IPC.

(WebCore::ContactInfo::encode const):
(WebCore::ContactInfo::decode):

  • Modules/contact-picker/ContactInfo.idl:
  • Modules/contact-picker/ContactProperty.h:
  • Modules/contact-picker/ContactsManager.cpp:

(WebCore::ContactsManager::frame const):
(WebCore::ContactsManager::select):

  • Modules/contact-picker/ContactsManager.h:
  • Modules/contact-picker/ContactsRequestData.h: Added.

ContactsRequestData encapsulates the information required to display a
picker UI. This includes the requested properties, the URL of the
presenting site, and whether multiple contact selection should be allowed.

(WebCore::ContactsRequestData::encode const):
(WebCore::ContactsRequestData::decode):

  • WebCore.xcodeproj/project.pbxproj:
  • page/Chrome.cpp:

(WebCore::Chrome::showContactPicker):

  • page/Chrome.h:
  • page/ChromeClient.h:

(WebCore::ChromeClient::showContactPicker):

Source/WebKit:

Added the necessary plumbing in order for the UIProcess to display a
contact picker after a call to ContactsManager.select() is made.

  • UIProcess/PageClient.h:

(WebKit::PageClient::showContactPicker):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::showContactPicker):

  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::showContactPicker):

  • WebProcess/WebCoreSupport/WebChromeClient.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::showContactPicker):

  • WebProcess/WebPage/WebPage.h:

LayoutTests:

Added tests for failure cases of the API. Note that success cases are
untested since no platforms currently display a picker UI, and the
specification states that the promise should fail in this case. The
success test cases will be added once the UI is implemented for iOS.

  • contact-picker/contacts-select-invalid-properties-and-options-expected.txt: Added.
  • contact-picker/contacts-select-invalid-properties-and-options.html: Added.
  • contact-picker/contacts-select-requires-user-gesture-expected.txt: Added.
  • contact-picker/contacts-select-requires-user-gesture.html: Added.
  • contact-picker/contacts-select-subframe-expected.txt: Added.
  • contact-picker/contacts-select-subframe.html: Added.
Location:
trunk
Files:
6 added
21 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r268898 r268901  
     12020-10-22  Aditya Keerthi  <akeerthi@apple.com>
     2
     3        [Contact Picker API] Add skeleton implementation of ContactsManager.select()
     4        https://bugs.webkit.org/show_bug.cgi?id=218050
     5        <rdar://problem/69862186>
     6
     7        Reviewed by Devin Rousso.
     8
     9        Added tests for failure cases of the API. Note that success cases are
     10        untested since no platforms currently display a picker UI, and the
     11        specification states that the promise should fail in this case. The
     12        success test cases will be added once the UI is implemented for iOS.
     13
     14        * contact-picker/contacts-select-invalid-properties-and-options-expected.txt: Added.
     15        * contact-picker/contacts-select-invalid-properties-and-options.html: Added.
     16        * contact-picker/contacts-select-requires-user-gesture-expected.txt: Added.
     17        * contact-picker/contacts-select-requires-user-gesture.html: Added.
     18        * contact-picker/contacts-select-subframe-expected.txt: Added.
     19        * contact-picker/contacts-select-subframe.html: Added.
     20
    1212020-10-22  Simon Fraser  <simon.fraser@apple.com>
    222
  • trunk/Source/WebCore/ChangeLog

    r268900 r268901  
     12020-10-22  Aditya Keerthi  <akeerthi@apple.com>
     2
     3        [Contact Picker API] Add skeleton implementation of ContactsManager.select()
     4        https://bugs.webkit.org/show_bug.cgi?id=218050
     5        <rdar://problem/69862186>
     6
     7        Reviewed by Devin Rousso.
     8
     9        ContactsManager.select() is the interface that allows clients to
     10        present a contact picker. The method should immediately reject when
     11        called from a subframe, when called outside user-interaction and when
     12        called while a contact picker is already being displayed. Furthermore,
     13        the promise is rejected when the supplied properties are empty or
     14        invalid.
     15
     16        After the conditions necessary for the UI to be presented are verified,
     17        ContactsManager.select() calls into the page's Chrome to display the
     18        picker. The UI implementation on macOS and iOS will be done in
     19        forthcoming patches.
     20
     21        See https://wicg.github.io/contact-api/spec/#contacts-manager-select
     22        for more information.
     23
     24        Tests: contact-picker/contacts-select-invalid-properties-and-options.html
     25               contact-picker/contacts-select-requires-user-gesture.html
     26               contact-picker/contacts-select-subframe.html
     27
     28        * Headers.cmake:
     29        * Modules/contact-picker/ContactInfo.h: Added encoder and decoder for IPC.
     30        (WebCore::ContactInfo::encode const):
     31        (WebCore::ContactInfo::decode):
     32        * Modules/contact-picker/ContactInfo.idl:
     33        * Modules/contact-picker/ContactProperty.h:
     34        * Modules/contact-picker/ContactsManager.cpp:
     35        (WebCore::ContactsManager::frame const):
     36        (WebCore::ContactsManager::select):
     37        * Modules/contact-picker/ContactsManager.h:
     38        * Modules/contact-picker/ContactsRequestData.h: Added.
     39
     40        ContactsRequestData encapsulates the information required to display a
     41        picker UI. This includes the requested properties, the URL of the
     42        presenting site, and whether multiple contact selection should be allowed.
     43
     44        (WebCore::ContactsRequestData::encode const):
     45        (WebCore::ContactsRequestData::decode):
     46        * WebCore.xcodeproj/project.pbxproj:
     47        * page/Chrome.cpp:
     48        (WebCore::Chrome::showContactPicker):
     49        * page/Chrome.h:
     50        * page/ChromeClient.h:
     51        (WebCore::ChromeClient::showContactPicker):
     52
    1532020-10-22  Chris Dumez  <cdumez@apple.com>
    254
  • trunk/Source/WebCore/Headers.cmake

    r268669 r268901  
    1919    Modules/cache/DOMCacheEngine.h
    2020    Modules/cache/RetrieveRecordsOptions.h
     21
     22    Modules/contact-picker/ContactInfo.h
     23    Modules/contact-picker/ContactProperty.h
     24    Modules/contact-picker/ContactsRequestData.h
    2125
    2226    Modules/encryptedmedia/CDMClient.h
  • trunk/Source/WebCore/Modules/contact-picker/ContactInfo.h

    r268038 r268901  
    2727
    2828#include <wtf/Forward.h>
     29#include <wtf/Optional.h>
    2930#include <wtf/Vector.h>
    3031
     
    3536    Vector<String> email;
    3637    Vector<String> tel;
     38
     39    template<class Encoder> void encode(Encoder&) const;
     40    template<class Decoder> static Optional<ContactInfo> decode(Decoder&);
    3741};
    3842
     43template<class Encoder>
     44void ContactInfo::encode(Encoder& encoder) const
     45{
     46    encoder << name;
     47    encoder << email;
     48    encoder << tel;
    3949}
     50
     51template<class Decoder>
     52Optional<ContactInfo> ContactInfo::decode(Decoder& decoder)
     53{
     54    Optional<Vector<String>> name;
     55    decoder >> name;
     56    if (!name)
     57        return WTF::nullopt;
     58
     59    Optional<Vector<String>> email;
     60    decoder >> email;
     61    if (!email)
     62        return WTF::nullopt;
     63
     64    Optional<Vector<String>> tel;
     65    decoder >> tel;
     66    if (!tel)
     67        return WTF::nullopt;
     68
     69    return {{ *name, *email, *tel }};
     70}
     71
     72} // namespace WebCore
  • trunk/Source/WebCore/Modules/contact-picker/ContactInfo.idl

    r267988 r268901  
    2626// https://wicg.github.io/contact-api/
    2727
    28 dictionary ContactInfo {
     28[
     29    JSGenerateToJSObject,
     30] dictionary ContactInfo {
    2931    sequence<USVString> name;
    3032    sequence<USVString> email;
  • trunk/Source/WebCore/Modules/contact-picker/ContactProperty.h

    r267988 r268901  
    2626#pragma once
    2727
     28#include <wtf/EnumTraits.h>
     29
    2830namespace WebCore {
    2931
     
    3133
    3234}
     35
     36namespace WTF {
     37
     38template<> struct EnumTraits<WebCore::ContactProperty> {
     39    using values = EnumValues<
     40        WebCore::ContactProperty,
     41        WebCore::ContactProperty::Email,
     42        WebCore::ContactProperty::Name,
     43        WebCore::ContactProperty::Tel
     44    >;
     45};
     46
     47}
  • trunk/Source/WebCore/Modules/contact-picker/ContactsManager.cpp

    r268144 r268901  
    2727#include "ContactsManager.h"
    2828
     29#include "Chrome.h"
    2930#include "ContactInfo.h"
    3031#include "ContactProperty.h"
     32#include "ContactsRequestData.h"
    3133#include "ContactsSelectOptions.h"
     34#include "Document.h"
     35#include "Frame.h"
     36#include "JSContactInfo.h"
    3237#include "JSDOMPromiseDeferred.h"
    3338#include "Navigator.h"
     39#include "Page.h"
     40#include "UserGestureIndicator.h"
     41#include <wtf/CompletionHandler.h>
    3442#include <wtf/IsoMallocInlines.h>
     43#include <wtf/Optional.h>
     44#include <wtf/URL.h>
    3545
    3646namespace WebCore {
     
    5060ContactsManager::~ContactsManager() = default;
    5161
     62
     63Frame* ContactsManager::frame() const
     64{
     65    return m_navigator ? m_navigator->frame() : nullptr;
     66}
     67
    5268Navigator* ContactsManager::navigator()
    5369{
     
    6379void ContactsManager::select(const Vector<ContactProperty>& properties, const ContactsSelectOptions& options, Ref<DeferredPromise>&& promise)
    6480{
    65     UNUSED_PARAM(properties);
    66     UNUSED_PARAM(options);
    67     promise->reject(NotSupportedError);
     81    auto* frame = this->frame();
     82    if (!frame || !frame->isMainFrame() || !frame->document() || !frame->page()) {
     83        promise->reject(InvalidStateError);
     84        return;
     85    }
     86
     87    if (!UserGestureIndicator::processingUserGesture()) {
     88        promise->reject(SecurityError);
     89        return;
     90    }
     91
     92    if (m_contactPickerIsShowing) {
     93        promise->reject(InvalidStateError);
     94        return;
     95    }
     96
     97    if (properties.isEmpty()) {
     98        promise->reject(TypeError);
     99        return;
     100    }
     101
     102    ContactsRequestData requestData;
     103    requestData.properties = properties;
     104    requestData.multiple = options.multiple;
     105    requestData.url = frame->document()->url().truncatedForUseAsBase().string();
     106
     107    m_contactPickerIsShowing = true;
     108
     109    frame->page()->chrome().showContactPicker(requestData, [promise = WTFMove(promise), this] (Optional<Vector<ContactInfo>>&& info) {
     110        m_contactPickerIsShowing = false;
     111        if (info) {
     112            promise->resolve<IDLSequence<IDLDictionary<ContactInfo>>>(*info);
     113            return;
     114        }
     115
     116        promise->reject(UnknownError);
     117    });
    68118}
    69119
  • trunk/Source/WebCore/Modules/contact-picker/ContactsManager.h

    r267988 r268901  
    3434
    3535class DeferredPromise;
     36class Frame;
    3637class Navigator;
    3738
     
    4647    ~ContactsManager();
    4748
     49    Frame* frame() const;
    4850    Navigator* navigator();
    4951
     
    5557
    5658    WeakPtr<Navigator> m_navigator;
     59    bool m_contactPickerIsShowing { false };
    5760};
    5861
  • trunk/Source/WebCore/Modules/contact-picker/ContactsRequestData.h

    r268900 r268901  
    2626#pragma once
    2727
     28#include "ContactProperty.h"
    2829#include <wtf/Forward.h>
     30#include <wtf/Optional.h>
    2931#include <wtf/Vector.h>
    3032
    3133namespace WebCore {
    3234
    33 struct ContactInfo {
    34     Vector<String> name;
    35     Vector<String> email;
    36     Vector<String> tel;
     35struct ContactsRequestData {
     36    Vector<ContactProperty> properties;
     37    bool multiple { false };
     38    String url;
     39
     40    template<class Encoder> void encode(Encoder&) const;
     41    template<class Decoder> static Optional<ContactsRequestData> decode(Decoder&);
    3742};
    3843
     44template<class Encoder>
     45void ContactsRequestData::encode(Encoder& encoder) const
     46{
     47    encoder << properties;
     48    encoder << multiple;
     49    encoder << url;
    3950}
     51
     52template<class Decoder>
     53Optional<ContactsRequestData> ContactsRequestData::decode(Decoder& decoder)
     54{
     55    Optional<Vector<ContactProperty>> properties;
     56    decoder >> properties;
     57    if (!properties)
     58        return WTF::nullopt;
     59
     60    Optional<bool> multiple;
     61    decoder >> multiple;
     62    if (!multiple)
     63        return WTF::nullopt;
     64
     65    Optional<String> url;
     66    decoder >> url;
     67    if (!url)
     68        return WTF::nullopt;
     69
     70    return {{ *properties, *multiple, *url }};
     71}
     72
     73}
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r268897 r268901  
    51085108                E4E94D6122FF158A00DD191F /* ComplexLineLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = E4A1AC7822FAFD500017B75B /* ComplexLineLayout.h */; settings = {ATTRIBUTES = (Private, ); }; };
    51095109                E4F9EEF3156DA00700D23E7E /* StyleSheetContents.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */; settings = {ATTRIBUTES = (Private, ); }; };
     5110                E50620842540919C00C43091 /* ContactsRequestData.h in Headers */ = {isa = PBXBuildFile; fileRef = E50620832540919B00C43091 /* ContactsRequestData.h */; settings = {ATTRIBUTES = (Private, ); }; };
    51105111                E516699120FF9918009D2C27 /* ListButtonArrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E516698F20FF9916009D2C27 /* ListButtonArrow@2x.png */; };
    51115112                E517670320B88C1400D41167 /* DataListSuggestionInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = E517670220B88C1400D41167 /* DataListSuggestionInformation.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1618816189                E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleSheetContents.h; sourceTree = "<group>"; };
    1618916190                E4FB4B35239BEB10003C336A /* LayoutIntegrationInlineContent.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutIntegrationInlineContent.cpp; sourceTree = "<group>"; };
     16191                E50620832540919B00C43091 /* ContactsRequestData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ContactsRequestData.h; sourceTree = "<group>"; };
    1619016192                E516698F20FF9916009D2C27 /* ListButtonArrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ListButtonArrow@2x.png"; sourceTree = "<group>"; };
    1619116193                E517670220B88C1400D41167 /* DataListSuggestionInformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionInformation.h; sourceTree = "<group>"; };
     
    2876328765                                E596DD2D251903EF00C275A7 /* ContactsManager.h */,
    2876428766                                E596DD2F251903EF00C275A7 /* ContactsManager.idl */,
     28767                                E50620832540919B00C43091 /* ContactsRequestData.h */,
    2876528768                                E596DD332519041400C275A7 /* ContactsSelectOptions.h */,
    2876628769                                E596DD342519041400C275A7 /* ContactsSelectOptions.idl */,
     
    3106031063                                E596DD58251BAC4A00C275A7 /* ContactProperty.h in Headers */,
    3106131064                                E596DD30251903EF00C275A7 /* ContactsManager.h in Headers */,
     31065                                E50620842540919C00C43091 /* ContactsRequestData.h in Headers */,
    3106231066                                E596DD352519041400C275A7 /* ContactsSelectOptions.h in Headers */,
    3106331067                                A818721C0977D3C0005826D9 /* ContainerNode.h in Headers */,
  • trunk/Source/WebCore/page/Chrome.cpp

    r266063 r268901  
    2424
    2525#include "ChromeClient.h"
     26#include "ContactInfo.h"
     27#include "ContactsRequestData.h"
    2628#include "DOMWindow.h"
    2729#include "Document.h"
     
    473475}
    474476
     477void Chrome::showContactPicker(const ContactsRequestData& requestData, CompletionHandler<void(Optional<Vector<ContactInfo>>&&)>&& callback)
     478{
     479    m_client.showContactPicker(requestData, WTFMove(callback));
     480}
     481
    475482void Chrome::loadIconForFiles(const Vector<String>& filenames, FileIconLoader& loader)
    476483{
  • trunk/Source/WebCore/page/Chrome.h

    r268031 r268901  
    5858class SearchPopupMenu;
    5959
     60struct ContactInfo;
     61struct ContactsRequestData;
    6062struct DateTimeChooserParameters;
    6163struct ShareDataWithParsedURL;
     
    162164    void runOpenPanel(Frame&, FileChooser&);
    163165    void showShareSheet(ShareDataWithParsedURL&, CompletionHandler<void(bool)>&&);
     166    void showContactPicker(const ContactsRequestData&, CompletionHandler<void(Optional<Vector<ContactInfo>>&&)>&&);
    164167    void loadIconForFiles(const Vector<String>&, FileIconLoader&);
    165168
  • trunk/Source/WebCore/page/ChromeClient.h

    r268116 r268901  
    2424#include "AXObjectCache.h"
    2525#include "AutoplayEvent.h"
     26#include "ContactInfo.h"
    2627#include "Cursor.h"
    2728#include "DatabaseDetails.h"
     
    114115#endif
    115116
     117struct ContactsRequestData;
    116118struct ContentRuleListResults;
    117119struct DateTimeChooserParameters;
     
    303305    virtual void runOpenPanel(Frame&, FileChooser&) = 0;
    304306    virtual void showShareSheet(ShareDataWithParsedURL&, WTF::CompletionHandler<void(bool)>&& callback) { callback(false); }
     307    virtual void showContactPicker(const ContactsRequestData&, WTF::CompletionHandler<void(Optional<Vector<ContactInfo>>&&)>&& callback) { callback(WTF::nullopt); }
    305308   
    306309    // Asynchronous request to load an icon for specified filenames.
  • trunk/Source/WebKit/ChangeLog

    r268883 r268901  
     12020-10-22  Aditya Keerthi  <akeerthi@apple.com>
     2
     3        [Contact Picker API] Add skeleton implementation of ContactsManager.select()
     4        https://bugs.webkit.org/show_bug.cgi?id=218050
     5        <rdar://problem/69862186>
     6
     7        Reviewed by Devin Rousso.
     8
     9        Added the necessary plumbing in order for the UIProcess to display a
     10        contact picker after a call to ContactsManager.select() is made.
     11
     12        * UIProcess/PageClient.h:
     13        (WebKit::PageClient::showContactPicker):
     14        * UIProcess/WebPageProxy.cpp:
     15        (WebKit::WebPageProxy::showContactPicker):
     16        * UIProcess/WebPageProxy.h:
     17        * UIProcess/WebPageProxy.messages.in:
     18        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     19        (WebKit::WebChromeClient::showContactPicker):
     20        * WebProcess/WebCoreSupport/WebChromeClient.h:
     21        * WebProcess/WebPage/WebPage.cpp:
     22        (WebKit::WebPage::showContactPicker):
     23        * WebProcess/WebPage/WebPage.h:
     24
    1252020-10-22  Ryosuke Niwa  <rniwa@webkit.org>
    226
  • trunk/Source/WebKit/UIProcess/PageClient.h

    r268635 r268901  
    3636#include <WebCore/ActivityState.h>
    3737#include <WebCore/AlternativeTextClient.h>
     38#include <WebCore/ContactInfo.h>
     39#include <WebCore/ContactsRequestData.h>
    3840#include <WebCore/DragActions.h>
    3941#include <WebCore/EditorClient.h>
     
    257259    virtual bool handleRunOpenPanel(WebPageProxy*, WebFrameProxy*, const FrameInfoData&, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) { return false; }
    258260    virtual bool showShareSheet(const WebCore::ShareDataWithParsedURL&, WTF::CompletionHandler<void (bool)>&&) { return false; }
     261    virtual void showContactPicker(const WebCore::ContactsRequestData&, WTF::CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&& completionHandler) { completionHandler(WTF::nullopt); }
    259262
    260263    virtual void didChangeContentSize(const WebCore::IntSize&) = 0;
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r268878 r268901  
    58635863    pageClient().showShareSheet(shareData, WTFMove(completionHandler));
    58645864}
     5865
     5866void WebPageProxy::showContactPicker(const WebCore::ContactsRequestData& requestData, CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&& completionHandler)
     5867{
     5868    MESSAGE_CHECK(m_process, m_preferences->contactPickerAPIEnabled());
     5869    pageClient().showContactPicker(requestData, WTFMove(completionHandler));
     5870}
    58655871   
    58665872void WebPageProxy::printFrame(FrameIdentifier frameID, CompletionHandler<void()>&& completionHandler)
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r268878 r268901  
    246246struct BackForwardItemIdentifier;
    247247struct CompositionHighlight;
     248struct ContactInfo;
     249struct ContactsRequestData;
    248250struct ContentRuleListResults;
    249251struct DataListSuggestionInformation;
     
    19551957    bool didChooseFilesForOpenPanelWithImageTranscoding(const Vector<String>& fileURLs, const Vector<String>& allowedMIMETypes);
    19561958    void showShareSheet(const WebCore::ShareDataWithParsedURL&, CompletionHandler<void(bool)>&&);
     1959    void showContactPicker(const WebCore::ContactsRequestData&, CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&&);
    19571960    void printFrame(WebCore::FrameIdentifier, CompletionHandler<void()>&&);
    19581961    void exceededDatabaseQuota(WebCore::FrameIdentifier, const String& originIdentifier, const String& databaseName, const String& displayName, uint64_t currentQuota, uint64_t currentOriginUsage, uint64_t currentDatabaseUsage, uint64_t expectedUsage, Messages::WebPageProxy::ExceededDatabaseQuotaDelayedReply&&);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in

    r268635 r268901  
    7070    RunOpenPanel(WebCore::FrameIdentifier frameID, struct WebKit::FrameInfoData frameInfo, struct WebCore::FileChooserSettings parameters)
    7171    ShowShareSheet(struct WebCore::ShareDataWithParsedURL shareData) -> (bool granted) Async
     72    ShowContactPicker(struct WebCore::ContactsRequestData requestData) -> (Optional<Vector<WebCore::ContactInfo>> info) Async
    7273    PrintFrame(WebCore::FrameIdentifier frameID) -> () Synchronous
    7374    RunModal()
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r268612 r268901  
    823823}
    824824
     825void WebChromeClient::showContactPicker(const WebCore::ContactsRequestData& requestData, WTF::CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&& callback)
     826{
     827    m_page.showContactPicker(requestData, WTFMove(callback));
     828}
     829
    825830void WebChromeClient::loadIconForFiles(const Vector<String>& filenames, FileIconLoader& loader)
    826831{
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h

    r268612 r268901  
    201201    void runOpenPanel(WebCore::Frame&, WebCore::FileChooser&) final;
    202202    void showShareSheet(WebCore::ShareDataWithParsedURL&, WTF::CompletionHandler<void(bool)>&&) final;
     203    void showContactPicker(const WebCore::ContactsRequestData&, WTF::CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&&) final;
    203204    void loadIconForFiles(const Vector<String>&, WebCore::FileIconLoader&) final;
    204205
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r268499 r268901  
    150150#include <WebCore/Chrome.h>
    151151#include <WebCore/CommonVM.h>
     152#include <WebCore/ContactsRequestData.h>
    152153#include <WebCore/ContextMenuController.h>
    153154#include <WebCore/DOMPasteAccess.h>
     
    69176918}
    69186919
     6920void WebPage::showContactPicker(const WebCore::ContactsRequestData& requestData, CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&& callback)
     6921{
     6922    sendWithAsyncReply(Messages::WebPageProxy::ShowContactPicker(requestData), WTFMove(callback));
     6923}
     6924
    69196925WebCore::DOMPasteAccessResponse WebPage::requestDOMPasteAccess(const String& originIdentifier)
    69206926{
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r268635 r268901  
    217217struct CompositionHighlight;
    218218struct CompositionUnderline;
     219struct ContactInfo;
     220struct ContactsRequestData;
    219221struct DictationAlternative;
    220222struct ElementContext;
     
    12431245
    12441246    void showShareSheet(WebCore::ShareDataWithParsedURL&, CompletionHandler<void(bool)>&& callback);
     1247    void showContactPicker(const WebCore::ContactsRequestData&, CompletionHandler<void(Optional<Vector<WebCore::ContactInfo>>&&)>&&);
    12451248   
    12461249#if ENABLE(ATTACHMENT_ELEMENT)
Note: See TracChangeset for help on using the changeset viewer.