Title: [225438] trunk/Source
Revision
225438
Author
commit-qu...@webkit.org
Date
2017-12-01 17:38:50 -0800 (Fri, 01 Dec 2017)

Log Message

[Touch Bar Web API] Object representing Touch Bar Menu to send between Web and UI Processes
https://bugs.webkit.org/show_bug.cgi?id=179714

Patch by Aishwarya Nirmal <anir...@apple.com> on 2017-12-01
Reviewed by Wenson Hsieh.

Source/WebCore:

These changes allow the HTMLMenuElement and HTMLMenuItemElement to parse attributes relating
to the touch bar and convey changes to the elements that will eventually be propogated to the
UI process.

No new tests at this point because the changes to HTMLMenuElement and HTMLMenuItemElement are
new properties, which might not be worth testing, and overriden methods for insertedIntoAncestor
and removedFromAncestor, which are involved in sending a message to a UI process but might be
difficult to test at this point since the UI process only receives (and does not yet process)
the message.

* html/HTMLMenuElement.cpp:
(WebCore::HTMLMenuElement::insertedIntoAncestor):
(WebCore::HTMLMenuElement::removedFromAncestor):
(WebCore::HTMLMenuElement::parseAttribute):
* html/HTMLMenuElement.h:
* html/HTMLMenuItemElement.cpp:
(WebCore::HTMLMenuItemElement::insertedIntoAncestor):
(WebCore::HTMLMenuItemElement::removedFromAncestor):
* html/HTMLMenuItemElement.h:
* page/ChromeClient.h:

Source/WebKit:

These changes define the TouchBarMenuData and TouchBarMenuItemData objects which draw information
from touch bar HTMLMenuElement and HTMLMenuItemElement. These objects represent the contents of
the page-customized touch bar. Changes to the html elements representing the touch bar are sent
to the UI process.

* Shared/TouchBarMenuData.cpp: Copied from Source/WebCore/html/HTMLMenuItemElement.cpp.
(WebKit::TouchBarMenuData::TouchBarMenuData):
(WebKit::TouchBarMenuData::addMenuItem):
(WebKit::TouchBarMenuData::removeMenuItem):
(WebKit::TouchBarMenuData::encode const):
(WebKit::TouchBarMenuData::decode):
* Shared/TouchBarMenuData.h: Copied from Source/WebCore/html/HTMLMenuItemElement.h.
(WebKit::TouchBarMenuData::items):
(WebKit::TouchBarMenuData::isPageCustomized):
(WebKit::TouchBarMenuData::setIsPageCustomized):
* Shared/TouchBarMenuItemData.cpp: Added.
(WebKit::TouchBarMenuItemData::getItemType):
(WebKit::TouchBarMenuItemData::TouchBarMenuItemData):
(WebKit::TouchBarMenuItemData::encode const):
(WebKit::TouchBarMenuItemData::decode):
* Shared/TouchBarMenuItemData.h: Added.
(WebKit::operator<):
(WebKit::operator>):
(WebKit::operator<=):
(WebKit::operator>=):
(WebKit::operator==):
(WebKit::operator!=):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::touchBarMenuDataChanged):
(WebKit::WebPageProxy::touchBarMenuItemDataAdded):
(WebKit::WebPageProxy::touchBarMenuItemDataRemoved):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::touchBarMenuData const):
* UIProcess/WebPageProxy.messages.in:
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::didInsertMenuElement):
(WebKit::WebChromeClient::didRemoveMenuElement):
(WebKit::WebChromeClient::didInsertMenuItemElement):
(WebKit::WebChromeClient::didRemoveMenuItemElement):
* WebProcess/WebCoreSupport/WebChromeClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::didInsertMenuElement):
(WebKit::WebPage::didRemoveMenuElement):
(WebKit::WebPage::didInsertMenuItemElement):
(WebKit::WebPage::didRemoveMenuItemElement):
(WebKit::WebPage::sendTouchBarMenuDataRemovedUpdate):
(WebKit::WebPage::sendTouchBarMenuDataAddedUpdate):
(WebKit::WebPage::sendTouchBarMenuItemDataAddedUpdate):
(WebKit::WebPage::sendTouchBarMenuItemDataRemovedUpdate):
* WebProcess/WebPage/WebPage.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (225437 => 225438)


--- trunk/Source/WebCore/ChangeLog	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/ChangeLog	2017-12-02 01:38:50 UTC (rev 225438)
@@ -1,3 +1,31 @@
+2017-12-01  Aishwarya Nirmal  <anir...@apple.com>
+
+        [Touch Bar Web API] Object representing Touch Bar Menu to send between Web and UI Processes
+        https://bugs.webkit.org/show_bug.cgi?id=179714
+
+        Reviewed by Wenson Hsieh.
+
+        These changes allow the HTMLMenuElement and HTMLMenuItemElement to parse attributes relating
+        to the touch bar and convey changes to the elements that will eventually be propogated to the
+        UI process.
+
+        No new tests at this point because the changes to HTMLMenuElement and HTMLMenuItemElement are
+        new properties, which might not be worth testing, and overriden methods for insertedIntoAncestor
+        and removedFromAncestor, which are involved in sending a message to a UI process but might be
+        difficult to test at this point since the UI process only receives (and does not yet process)
+        the message.
+
+        * html/HTMLMenuElement.cpp:
+        (WebCore::HTMLMenuElement::insertedIntoAncestor):
+        (WebCore::HTMLMenuElement::removedFromAncestor):
+        (WebCore::HTMLMenuElement::parseAttribute):
+        * html/HTMLMenuElement.h:
+        * html/HTMLMenuItemElement.cpp:
+        (WebCore::HTMLMenuItemElement::insertedIntoAncestor):
+        (WebCore::HTMLMenuItemElement::removedFromAncestor):
+        * html/HTMLMenuItemElement.h:
+        * page/ChromeClient.h:
+
 2017-12-01  Daniel Bates  <daba...@apple.com>
 
         AlternativePresentationButtonSubstitution::unapply() may not undo substitution

Modified: trunk/Source/WebCore/html/HTMLMenuElement.cpp (225437 => 225438)


--- trunk/Source/WebCore/html/HTMLMenuElement.cpp	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/html/HTMLMenuElement.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -23,7 +23,12 @@
 #include "config.h"
 #include "HTMLMenuElement.h"
 
+#include "Chrome.h"
+#include "ChromeClient.h"
+#include "Document.h"
+#include "HTMLMenuItemElement.h"
 #include "HTMLNames.h"
+#include "Page.h"
 
 namespace WebCore {
 
@@ -35,6 +40,45 @@
     ASSERT(hasTagName(menuTag));
 }
 
+Node::InsertedIntoAncestorResult HTMLMenuElement::insertedIntoAncestor(InsertionType type, ContainerNode& ancestor)
+{
+    auto result = HTMLElement::insertedIntoAncestor(type, ancestor);
+    if (type.connectedToDocument && RuntimeEnabledFeatures::sharedFeatures().menuItemElementEnabled() && m_isTouchBarMenu) {
+        if (auto* page = document().page())
+            page->chrome().client().didInsertMenuElement(*this);
+    }
+    return result;
+}
+
+void HTMLMenuElement::removedFromAncestor(RemovalType type, ContainerNode& ancestor)
+{
+    HTMLElement::removedFromAncestor(type, ancestor);
+    if (type.disconnectedFromDocument && RuntimeEnabledFeatures::sharedFeatures().menuItemElementEnabled() && m_isTouchBarMenu) {
+        if (auto* page = document().page())
+            page->chrome().client().didRemoveMenuElement(*this);
+    }
+}
+
+void HTMLMenuElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
+{
+    if (name != typeAttr || !RuntimeEnabledFeatures::sharedFeatures().menuItemElementEnabled()) {
+        HTMLElement::parseAttribute(name, value);
+        return;
+    }
+    bool wasTouchBarMenu = m_isTouchBarMenu;
+    m_isTouchBarMenu = equalLettersIgnoringASCIICase(value, "touchbar");
+    if (!wasTouchBarMenu && m_isTouchBarMenu) {
+        if (auto* page = document().page()) {
+            page->chrome().client().didInsertMenuElement(*this);
+            for (auto& child : childrenOfType<Element>(*this))
+                page->chrome().client().didInsertMenuItemElement(downcast<HTMLMenuItemElement>(child));
+        }
+    } else if (wasTouchBarMenu && !m_isTouchBarMenu) {
+        if (auto* page = document().page())
+            page->chrome().client().didRemoveMenuElement(*this);
+    }
+}
+
 Ref<HTMLMenuElement> HTMLMenuElement::create(const QualifiedName& tagName, Document& document)
 {
     return adoptRef(*new HTMLMenuElement(tagName, document));

Modified: trunk/Source/WebCore/html/HTMLMenuElement.h (225437 => 225438)


--- trunk/Source/WebCore/html/HTMLMenuElement.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/html/HTMLMenuElement.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -30,8 +30,16 @@
 public:
     static Ref<HTMLMenuElement> create(const QualifiedName&, Document&);
     
+    bool isTouchBarMenu() const { return m_isTouchBarMenu; }
+
 private:
     HTMLMenuElement(const QualifiedName&, Document&);
+
+    InsertedIntoAncestorResult insertedIntoAncestor(InsertionType, ContainerNode&) final;
+    void removedFromAncestor(RemovalType, ContainerNode&) final;
+    void parseAttribute(const QualifiedName&, const AtomicString&) final;
+
+    bool m_isTouchBarMenu;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/HTMLMenuItemElement.cpp (225437 => 225438)


--- trunk/Source/WebCore/html/HTMLMenuItemElement.cpp	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/html/HTMLMenuItemElement.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -26,7 +26,12 @@
 #include "config.h"
 #include "HTMLMenuItemElement.h"
 
+#include "Chrome.h"
+#include "ChromeClient.h"
+#include "Document.h"
+#include "HTMLMenuElement.h"
 #include "HTMLNames.h"
+#include "Page.h"
 
 namespace WebCore {
 
@@ -37,10 +42,33 @@
 {
     ASSERT(hasTagName(menuitemTag));
 }
-    
+
+Node::InsertedIntoAncestorResult HTMLMenuItemElement::insertedIntoAncestor(InsertionType type, ContainerNode& ancestor)
+{
+    auto result = HTMLElement::insertedIntoAncestor(type, ancestor);
+    if (type.connectedToDocument) {
+        if (auto* page = document().page()) {
+            if (is<HTMLMenuElement>(ancestor) && downcast<HTMLMenuElement>(ancestor).isTouchBarMenu())
+                page->chrome().client().didInsertMenuItemElement(*this);
+        }
+    }
+    return result;
+}
+
+void HTMLMenuItemElement::removedFromAncestor(RemovalType type, ContainerNode& ancestor)
+{
+    HTMLElement::removedFromAncestor(type, ancestor);
+    if (type.disconnectedFromDocument) {
+        if (auto* page = document().page()) {
+            if (is<HTMLMenuElement>(ancestor) && downcast<HTMLMenuElement>(ancestor).isTouchBarMenu())
+                page->chrome().client().didRemoveMenuItemElement(*this);
+        }
+    }
+}
+
 Ref<HTMLMenuItemElement> HTMLMenuItemElement::create(const QualifiedName& tagName, Document& document)
 {
     return adoptRef(*new HTMLMenuItemElement(tagName, document));
 }
-    
+
 }

Modified: trunk/Source/WebCore/html/HTMLMenuItemElement.h (225437 => 225438)


--- trunk/Source/WebCore/html/HTMLMenuItemElement.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/html/HTMLMenuItemElement.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -35,6 +35,9 @@
     
 private:
     HTMLMenuItemElement(const QualifiedName&, Document&);
+
+    InsertedIntoAncestorResult insertedIntoAncestor(InsertionType, ContainerNode&) final;
+    void removedFromAncestor(RemovalType, ContainerNode&) final;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/page/ChromeClient.h (225437 => 225438)


--- trunk/Source/WebCore/page/ChromeClient.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebCore/page/ChromeClient.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -468,6 +468,11 @@
 
     virtual void requestStorageAccess(String&& /*subFrameHost*/, String&& /*topFrameHost*/, WTF::Function<void (bool)>&& callback) { callback(false); }
 
+    virtual void didInsertMenuElement(HTMLMenuElement&) { }
+    virtual void didRemoveMenuElement(HTMLMenuElement&) { }
+    virtual void didInsertMenuItemElement(HTMLMenuItemElement&) { }
+    virtual void didRemoveMenuItemElement(HTMLMenuItemElement&) { }
+
 protected:
     virtual ~ChromeClient() = default;
 };

Modified: trunk/Source/WebKit/ChangeLog (225437 => 225438)


--- trunk/Source/WebKit/ChangeLog	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/ChangeLog	2017-12-02 01:38:50 UTC (rev 225438)
@@ -1,3 +1,62 @@
+2017-12-01  Aishwarya Nirmal  <anir...@apple.com>
+
+        [Touch Bar Web API] Object representing Touch Bar Menu to send between Web and UI Processes
+        https://bugs.webkit.org/show_bug.cgi?id=179714
+
+        Reviewed by Wenson Hsieh.
+
+        These changes define the TouchBarMenuData and TouchBarMenuItemData objects which draw information
+        from touch bar HTMLMenuElement and HTMLMenuItemElement. These objects represent the contents of
+        the page-customized touch bar. Changes to the html elements representing the touch bar are sent 
+        to the UI process.
+
+        * Shared/TouchBarMenuData.cpp: Copied from Source/WebCore/html/HTMLMenuItemElement.cpp.
+        (WebKit::TouchBarMenuData::TouchBarMenuData):
+        (WebKit::TouchBarMenuData::addMenuItem):
+        (WebKit::TouchBarMenuData::removeMenuItem):
+        (WebKit::TouchBarMenuData::encode const):
+        (WebKit::TouchBarMenuData::decode):
+        * Shared/TouchBarMenuData.h: Copied from Source/WebCore/html/HTMLMenuItemElement.h.
+        (WebKit::TouchBarMenuData::items):
+        (WebKit::TouchBarMenuData::isPageCustomized):
+        (WebKit::TouchBarMenuData::setIsPageCustomized):
+        * Shared/TouchBarMenuItemData.cpp: Added.
+        (WebKit::TouchBarMenuItemData::getItemType):
+        (WebKit::TouchBarMenuItemData::TouchBarMenuItemData):
+        (WebKit::TouchBarMenuItemData::encode const):
+        (WebKit::TouchBarMenuItemData::decode):
+        * Shared/TouchBarMenuItemData.h: Added.
+        (WebKit::operator<):
+        (WebKit::operator>):
+        (WebKit::operator<=):
+        (WebKit::operator>=):
+        (WebKit::operator==):
+        (WebKit::operator!=):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::touchBarMenuDataChanged):
+        (WebKit::WebPageProxy::touchBarMenuItemDataAdded):
+        (WebKit::WebPageProxy::touchBarMenuItemDataRemoved):
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::touchBarMenuData const):
+        * UIProcess/WebPageProxy.messages.in:
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::didInsertMenuElement):
+        (WebKit::WebChromeClient::didRemoveMenuElement):
+        (WebKit::WebChromeClient::didInsertMenuItemElement):
+        (WebKit::WebChromeClient::didRemoveMenuItemElement):
+        * WebProcess/WebCoreSupport/WebChromeClient.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::didInsertMenuElement):
+        (WebKit::WebPage::didRemoveMenuElement):
+        (WebKit::WebPage::didInsertMenuItemElement):
+        (WebKit::WebPage::didRemoveMenuItemElement):
+        (WebKit::WebPage::sendTouchBarMenuDataRemovedUpdate):
+        (WebKit::WebPage::sendTouchBarMenuDataAddedUpdate):
+        (WebKit::WebPage::sendTouchBarMenuItemDataAddedUpdate):
+        (WebKit::WebPage::sendTouchBarMenuItemDataRemovedUpdate):
+        * WebProcess/WebPage/WebPage.h:
+
 2017-12-01  Daniel Bates  <daba...@apple.com>
 
         Alternative Presentation Button: Provide a way to query for the replaced elements

Copied: trunk/Source/WebKit/Shared/TouchBarMenuData.cpp (from rev 225437, trunk/Source/WebCore/html/HTMLMenuItemElement.cpp) (0 => 225438)


--- trunk/Source/WebKit/Shared/TouchBarMenuData.cpp	                        (rev 0)
+++ trunk/Source/WebKit/Shared/TouchBarMenuData.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "TouchBarMenuData.h"
+
+#include "Decoder.h"
+#include "Encoder.h"
+#include "TouchBarMenuItemData.h"
+#include "WebCoreArgumentCoders.h"
+#include <WebCore/HTMLElement.h>
+#include <WebCore/HTMLMenuElement.h>
+#include <WebCore/HTMLNames.h>
+#include <WebCore/Node.h>
+
+namespace WebKit {
+    
+TouchBarMenuData::TouchBarMenuData()
+{
+}
+    
+TouchBarMenuData::TouchBarMenuData(WebCore::HTMLMenuElement& element)
+{
+    if (!element.isTouchBarMenu())
+        return;
+    m_id = element.attributeWithoutSynchronization(WebCore::HTMLNames::idAttr);
+    m_isPageCustomized = true;
+}
+    
+TouchBarMenuData::TouchBarMenuData(const TouchBarMenuData& touchBarMenuData)
+    : m_items(touchBarMenuData.m_items)
+    , m_id(touchBarMenuData.m_id)
+    , m_isPageCustomized(touchBarMenuData.m_isPageCustomized)
+{
+}
+    
+void TouchBarMenuData::addMenuItem(const TouchBarMenuItemData& data)
+{
+    m_items.append(data);
+}
+    
+void TouchBarMenuData::removeMenuItem(const TouchBarMenuItemData& data)
+{
+    m_items.removeFirst(data);
+}
+    
+void TouchBarMenuData::encode(IPC::Encoder& encoder) const
+{
+    encoder << m_items;
+}
+
+bool TouchBarMenuData::decode(IPC::Decoder& decoder, TouchBarMenuData& data)
+{
+    if (!decoder.decode(data.m_items))
+        return false;
+    
+    return true;
+}
+    
+}

Copied: trunk/Source/WebKit/Shared/TouchBarMenuData.h (from rev 225437, trunk/Source/WebCore/html/HTMLMenuItemElement.h) (0 => 225438)


--- trunk/Source/WebKit/Shared/TouchBarMenuData.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/TouchBarMenuData.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+#include "ArgumentCoders.h"
+#include "TouchBarMenuItemData.h"
+#include <WebCore/HTMLMenuElement.h>
+#include <wtf/text/WTFString.h>
+
+namespace IPC {
+class Decoder;
+class Encoder;
+}
+
+namespace WebKit {
+
+class TouchBarMenuData {
+public:
+    explicit TouchBarMenuData();
+    explicit TouchBarMenuData(WebCore::HTMLMenuElement&);
+    explicit TouchBarMenuData(const TouchBarMenuData&);
+
+    void addMenuItem(const TouchBarMenuItemData&);
+    void removeMenuItem(const TouchBarMenuItemData&);
+    
+    const Vector<TouchBarMenuItemData>& items() { return m_items; }
+    
+    void encode(IPC::Encoder&) const;
+    static bool decode(IPC::Decoder&, TouchBarMenuData&);
+    
+    void setID(String);
+    bool isPageCustomized() { return m_isPageCustomized; }
+    void setIsPageCustomized(bool customized) { m_isPageCustomized = customized; }
+    
+private:
+    Vector<TouchBarMenuItemData> m_items;
+    String m_id;
+    
+    bool m_isPageCustomized { false };
+};
+    
+}

Added: trunk/Source/WebKit/Shared/TouchBarMenuItemData.cpp (0 => 225438)


--- trunk/Source/WebKit/Shared/TouchBarMenuItemData.cpp	                        (rev 0)
+++ trunk/Source/WebKit/Shared/TouchBarMenuItemData.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "config.h"
+#include "TouchBarMenuItemData.h"
+
+#include "Decoder.h"
+#include "Encoder.h"
+#include "WebCoreArgumentCoders.h"
+#include <WebCore/HTMLElement.h>
+#include <WebCore/HTMLMenuItemElement.h>
+#include <WebCore/HTMLNames.h>
+#include <WebCore/Node.h>
+#include <vector>
+
+namespace WebKit {
+
+ItemType TouchBarMenuItemData::getItemType(String value)
+{
+    return ItemType::Button;
+}
+
+TouchBarMenuItemData::TouchBarMenuItemData()
+{
+}
+
+TouchBarMenuItemData::TouchBarMenuItemData(WebCore::HTMLMenuItemElement& element)
+{
+    itemType = getItemType(element.attributeWithoutSynchronization(WebCore::HTMLNames::typeAttr));
+    identifier = element.attributeWithoutSynchronization(WebCore::HTMLNames::idAttr);
+    commandName = element.attributeWithoutSynchronization(WebCore::HTMLNames::onclickAttr);
+    priority = element.attributeWithoutSynchronization(WebCore::HTMLNames::valueAttr).toFloat();
+}
+    
+TouchBarMenuItemData::TouchBarMenuItemData(const TouchBarMenuItemData& other)
+    : itemType(other.itemType)
+    , identifier(other.identifier)
+    , commandName(other.commandName)
+    , priority(other.priority)
+{
+}
+
+void TouchBarMenuItemData::encode(IPC::Encoder& encoder) const
+{
+    encoder.encodeEnum(itemType);
+    
+    encoder << identifier;
+    encoder << commandName;
+    encoder << priority;
+}
+
+std::optional<TouchBarMenuItemData> TouchBarMenuItemData::decode(IPC::Decoder& decoder)
+{
+    TouchBarMenuItemData result;
+    if (!decoder.decodeEnum(result.itemType))
+        return std::nullopt;
+    
+    if (!decoder.decode(result.identifier))
+        return std::nullopt;
+    
+    if (!decoder.decode(result.commandName))
+        return std::nullopt;
+    
+    if (!decoder.decode(result.priority))
+        return std::nullopt;
+    
+    return WTFMove(result);
+}
+
+}

Added: trunk/Source/WebKit/Shared/TouchBarMenuItemData.h (0 => 225438)


--- trunk/Source/WebKit/Shared/TouchBarMenuItemData.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/TouchBarMenuItemData.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+#include "ArgumentCoders.h"
+#include <WebCore/HTMLMenuItemElement.h>
+#include <wtf/text/WTFString.h>
+
+namespace IPC {
+class Decoder;
+class Encoder;
+}
+
+namespace WebKit {
+    
+// Based on NSTouchBarItem types.
+enum ItemType {
+    Button
+};
+
+struct TouchBarMenuItemData {
+    explicit TouchBarMenuItemData();
+    explicit TouchBarMenuItemData(WebCore::HTMLMenuItemElement&);
+    explicit TouchBarMenuItemData(const TouchBarMenuItemData&);
+    
+    void encode(IPC::Encoder&) const;
+    static std::optional<TouchBarMenuItemData> decode(IPC::Decoder&);
+    static ItemType getItemType(String);
+    
+    bool validTouchBarDisplay { true };
+    
+    ItemType itemType { ItemType::Button };
+    String identifier;
+    String commandName;
+    float priority { 0.0 };
+};
+    
+// Touch Bar Menu Items will be ordered based on priority.
+inline bool operator<(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return lhs.priority < rhs.priority;
+}
+
+inline bool operator>(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return rhs < lhs;
+}
+
+inline bool operator<=(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return !(lhs > rhs);
+}
+
+inline bool operator>=(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return !(lhs < rhs);
+}
+
+inline bool operator==(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return lhs.itemType == rhs.itemType
+    && lhs.identifier == rhs.identifier
+    && lhs.commandName == rhs.commandName
+    && lhs.priority == rhs.priority;
+}
+
+inline bool operator!=(const TouchBarMenuItemData& lhs, const TouchBarMenuItemData& rhs)
+{
+    return !(lhs == rhs);
+}
+
+}

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (225437 => 225438)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -155,6 +155,8 @@
 #if PLATFORM(COCOA)
 #include "RemoteLayerTreeDrawingAreaProxy.h"
 #include "RemoteLayerTreeScrollingPerformanceData.h"
+#include "TouchBarMenuData.h"
+#include "TouchBarMenuItemData.h"
 #include "VideoFullscreenManagerProxy.h"
 #include "VideoFullscreenManagerProxyMessages.h"
 #include "ViewSnapshotStore.h"
@@ -7148,6 +7150,23 @@
     });
 }
 
+#if PLATFORM(COCOA)
+void WebPageProxy::touchBarMenuDataChanged(const TouchBarMenuData& touchBarMenuData)
+{
+    m_touchBarMenuData = touchBarMenuData;
+}
+
+void WebPageProxy::touchBarMenuItemDataAdded(const TouchBarMenuItemData& touchBarMenuItemData)
+{
+    m_touchBarMenuData.addMenuItem(touchBarMenuItemData);
+}
+
+void WebPageProxy::touchBarMenuItemDataRemoved(const TouchBarMenuItemData& touchBarMenuItemData)
+{
+    m_touchBarMenuData.removeMenuItem(touchBarMenuItemData);
+}
+#endif
+
 #if ENABLE(ATTACHMENT_ELEMENT)
 
 void WebPageProxy::insertAttachment(const String& identifier, const AttachmentDisplayOptions& options, const String& filename, std::optional<String> contentType, SharedBuffer& data, Function<void(CallbackBase::Error)>&& callback)

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (225437 => 225438)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -104,6 +104,8 @@
 
 #if PLATFORM(COCOA)
 #include "LayerRepresentation.h"
+#include "TouchBarMenuData.h"
+#include "TouchBarMenuItemData.h"
 #endif
 
 #if PLATFORM(GTK)
@@ -482,7 +484,11 @@
     bool canDelete() const { return hasSelectedRange() && isContentEditable(); }
     bool hasSelectedRange() const { return m_editorState.selectionIsRange; }
     bool isContentEditable() const { return m_editorState.isContentEditable; }
-    
+
+#if PLATFORM(COCOA)
+    const TouchBarMenuData& touchBarMenuData() const { return m_touchBarMenuData; }
+#endif
+
     bool maintainsInactiveSelection() const;
     void setMaintainsInactiveSelection(bool);
     void setEditable(bool);
@@ -1220,6 +1226,13 @@
 #endif
     void editorStateChanged(const EditorState&);
 
+#if PLATFORM(COCOA)
+    void touchBarMenuDataRemoved();
+    void touchBarMenuDataChanged(const TouchBarMenuData&);
+    void touchBarMenuItemDataAdded(const TouchBarMenuItemData&);
+    void touchBarMenuItemDataRemoved(const TouchBarMenuItemData&);
+#endif
+
     void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t webProcessContextId);
 
 #if ENABLE(ATTACHMENT_ELEMENT)
@@ -1783,6 +1796,10 @@
     EditorState m_editorState;
     bool m_isEditable { false };
 
+#if PLATFORM(COCOA)
+    TouchBarMenuData m_touchBarMenuData;
+#endif
+
     double m_textZoomFactor { 1 };
     double m_pageZoomFactor { 1 };
     double m_pageScaleFactor { 1 };

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (225437 => 225438)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in	2017-12-02 01:38:50 UTC (rev 225438)
@@ -314,6 +314,7 @@
     StartDrag(struct WebKit::WebSelectionData selection, uint64_t dragOperation, WebKit::ShareableBitmap::Handle dragImage)
 #endif
 
+
 #if ENABLE(DATA_INTERACTION)
     DidPerformDataInteractionControllerOperation(bool handled)
     DidHandleStartDataInteractionRequest(bool started)
@@ -346,6 +347,10 @@
     SearchWithSpotlight(String string)
 
     SearchTheWeb(String string)
+
+    TouchBarMenuDataChanged(WebKit::TouchBarMenuData touchBarMenuData)
+    TouchBarMenuItemDataAdded(struct WebKit::TouchBarMenuItemData touchBarMenuItemData)
+    TouchBarMenuItemDataRemoved(struct WebKit::TouchBarMenuItemData touchBarMenuItemData)
 #endif
 
 #if USE(APPKIT)

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (225437 => 225438)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2017-12-02 01:38:50 UTC (rev 225438)
@@ -723,6 +723,9 @@
 		2E5C770E1FA7D429005932C3 /* APIAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E5C770C1FA7D429005932C3 /* APIAttachment.h */; };
 		2E5C770F1FA7D429005932C3 /* APIAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E5C770D1FA7D429005932C3 /* APIAttachment.cpp */; };
 		2E7A944A1BBD97C300945547 /* _WKFocusedElementInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E7A94491BBD95C600945547 /* _WKFocusedElementInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		2F809DD71FBD1BC9005FE63A /* TouchBarMenuItemData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2F809DD51FBD1BC9005FE63A /* TouchBarMenuItemData.cpp */; };
+		2F8336861FA139DF00C6E080 /* TouchBarMenuData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD43B911FA006A10083F51C /* TouchBarMenuData.h */; };
+		2F8336871FA13A1E00C6E080 /* TouchBarMenuData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2FD43B921FA006A30083F51C /* TouchBarMenuData.cpp */; };
 		31099973146C75A20029DEB9 /* WebNotificationClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 31099971146C759B0029DEB9 /* WebNotificationClient.cpp */; };
 		310999C7146C9E3D0029DEB9 /* WebNotificationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 31099968146C71F50029DEB9 /* WebNotificationClient.h */; };
 		312C0C4A146DDC8A0016C911 /* WKNotificationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 312C0C49146DDC8A0016C911 /* WKNotificationProvider.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3036,6 +3039,10 @@
 		2E5C770C1FA7D429005932C3 /* APIAttachment.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = APIAttachment.h; sourceTree = "<group>"; };
 		2E5C770D1FA7D429005932C3 /* APIAttachment.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = APIAttachment.cpp; sourceTree = "<group>"; };
 		2E7A94491BBD95C600945547 /* _WKFocusedElementInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = _WKFocusedElementInfo.h; sourceTree = "<group>"; };
+		2F809DD51FBD1BC9005FE63A /* TouchBarMenuItemData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = TouchBarMenuItemData.cpp; sourceTree = "<group>"; };
+		2F809DD91FBD1BF2005FE63A /* TouchBarMenuItemData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TouchBarMenuItemData.h; sourceTree = "<group>"; };
+		2FD43B911FA006A10083F51C /* TouchBarMenuData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TouchBarMenuData.h; sourceTree = "<group>"; };
+		2FD43B921FA006A30083F51C /* TouchBarMenuData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TouchBarMenuData.cpp; sourceTree = "<group>"; };
 		31099968146C71F50029DEB9 /* WebNotificationClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebNotificationClient.h; sourceTree = "<group>"; };
 		31099971146C759B0029DEB9 /* WebNotificationClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebNotificationClient.cpp; sourceTree = "<group>"; };
 		312C0C49146DDC8A0016C911 /* WKNotificationProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNotificationProvider.h; sourceTree = "<group>"; };
@@ -5126,6 +5133,10 @@
 				5272B2881406985D0096A5D0 /* StatisticsData.cpp */,
 				5272B2891406985D0096A5D0 /* StatisticsData.h */,
 				1A5E4DA312D3BD3D0099A2BB /* TextCheckerState.h */,
+				2FD43B921FA006A30083F51C /* TouchBarMenuData.cpp */,
+				2FD43B911FA006A10083F51C /* TouchBarMenuData.h */,
+				2F809DD51FBD1BC9005FE63A /* TouchBarMenuItemData.cpp */,
+				2F809DD91FBD1BF2005FE63A /* TouchBarMenuItemData.h */,
 				1A64245D12DE29A100CAAE2C /* UpdateInfo.cpp */,
 				1A64245C12DE29A100CAAE2C /* UpdateInfo.h */,
 				5C19A51E1FD0B14600EEA323 /* URLSchemeTaskParameters.cpp */,
@@ -8935,6 +8946,7 @@
 				CE1A0BD71A48E6C60054EF74 /* TextInputSPI.h in Headers */,
 				1AAF263914687C39004A1E8A /* TiledCoreAnimationDrawingArea.h in Headers */,
 				1AF05D8714688348008B1E81 /* TiledCoreAnimationDrawingAreaProxy.h in Headers */,
+				2F8336861FA139DF00C6E080 /* TouchBarMenuData.h in Headers */,
 				1AFE436618B6C081009C7A48 /* UIDelegate.h in Headers */,
 				515BE1B51D5917FF00DD7C68 /* UIGamepad.h in Headers */,
 				515BE1A91D55293400DD7C68 /* UIGamepadProvider.h in Headers */,
@@ -10543,6 +10555,8 @@
 				1AA417EF12C00D87002BE67B /* TextCheckerMac.mm in Sources */,
 				1AAF263814687C39004A1E8A /* TiledCoreAnimationDrawingArea.mm in Sources */,
 				1AF05D8614688348008B1E81 /* TiledCoreAnimationDrawingAreaProxy.mm in Sources */,
+				2F8336871FA13A1E00C6E080 /* TouchBarMenuData.cpp in Sources */,
+				2F809DD71FBD1BC9005FE63A /* TouchBarMenuItemData.cpp in Sources */,
 				1AFE436518B6C081009C7A48 /* UIDelegate.mm in Sources */,
 				515BE1B41D5917FF00DD7C68 /* UIGamepad.cpp in Sources */,
 				515BE1A81D55293400DD7C68 /* UIGamepadProvider.cpp in Sources */,

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp (225437 => 225438)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -127,6 +127,26 @@
 {
 }
 
+void WebChromeClient::didInsertMenuElement(HTMLMenuElement& element)
+{
+    m_page.didInsertMenuElement(element);
+}
+
+void WebChromeClient::didRemoveMenuElement(HTMLMenuElement& element)
+{
+    m_page.didRemoveMenuElement(element);
+}
+
+void WebChromeClient::didInsertMenuItemElement(HTMLMenuItemElement& element)
+{
+    m_page.didInsertMenuItemElement(element);
+}
+
+void WebChromeClient::didRemoveMenuItemElement(HTMLMenuItemElement& element)
+{
+    m_page.didRemoveMenuItemElement(element);
+}
+
 inline WebChromeClient::~WebChromeClient()
 {
 }

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h (225437 => 225438)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -42,6 +42,11 @@
 private:
     ~WebChromeClient();
 
+    void didInsertMenuElement(WebCore::HTMLMenuElement&);
+    void didRemoveMenuElement(WebCore::HTMLMenuElement&);
+    void didInsertMenuItemElement(WebCore::HTMLMenuItemElement&);
+    void didRemoveMenuItemElement(WebCore::HTMLMenuItemElement&);
+
     void chromeDestroyed() final;
     
     void setWindowRect(const WebCore::FloatRect&) final;

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (225437 => 225438)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2017-12-02 01:38:50 UTC (rev 225438)
@@ -152,6 +152,8 @@
 #include <WebCore/HTMLFormElement.h>
 #include <WebCore/HTMLImageElement.h>
 #include <WebCore/HTMLInputElement.h>
+#include <WebCore/HTMLMenuElement.h>
+#include <WebCore/HTMLMenuItemElement.h>
 #include <WebCore/HTMLOListElement.h>
 #include <WebCore/HTMLPlugInElement.h>
 #include <WebCore/HTMLPlugInImageElement.h>
@@ -223,6 +225,8 @@
 #include "PDFPlugin.h"
 #include "PlaybackSessionManager.h"
 #include "RemoteLayerTreeTransaction.h"
+#include "TouchBarMenuData.h"
+#include "TouchBarMenuItemData.h"
 #include "VideoFullscreenManager.h"
 #include "WKStringCF.h"
 #include <WebCore/LegacyWebArchive.h>
@@ -5118,6 +5122,42 @@
 #endif
 }
 
+void WebPage::didInsertMenuElement(HTMLMenuElement& element)
+{
+#if PLATFORM(COCOA)
+    sendTouchBarMenuDataAddedUpdate(element);
+#else
+    ASSERT_UNUSED(element, element);
+#endif
+}
+
+void WebPage::didRemoveMenuElement(HTMLMenuElement& element)
+{
+#if PLATFORM(COCOA)
+    sendTouchBarMenuDataRemovedUpdate(element);
+#else
+    ASSERT_UNUSED(element, element);
+#endif
+}
+
+void WebPage::didInsertMenuItemElement(HTMLMenuItemElement& element)
+{
+#if PLATFORM(COCOA)
+    sendTouchBarMenuItemDataAddedUpdate(element);
+#else
+    ASSERT_UNUSED(element, element);
+#endif
+}
+
+void WebPage::didRemoveMenuItemElement(HTMLMenuItemElement& element)
+{
+#if PLATFORM(COCOA)
+    sendTouchBarMenuItemDataRemovedUpdate(element);
+#else
+    ASSERT_UNUSED(element, element);
+#endif
+}
+
 #if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC)
 static const int primarySnapshottedPlugInSearchLimit = 3000;
 static const float primarySnapshottedPlugInSearchBucketSize = 1.1;
@@ -5339,6 +5379,28 @@
     }
 }
 
+#if PLATFORM(COCOA)
+void WebPage::sendTouchBarMenuDataRemovedUpdate(HTMLMenuElement& element)
+{
+    send(Messages::WebPageProxy::TouchBarMenuDataChanged(TouchBarMenuData { }));
+}
+
+void WebPage::sendTouchBarMenuDataAddedUpdate(HTMLMenuElement& element)
+{
+    send(Messages::WebPageProxy::TouchBarMenuDataChanged(TouchBarMenuData {element}));
+}
+
+void WebPage::sendTouchBarMenuItemDataAddedUpdate(HTMLMenuItemElement& element)
+{
+    send(Messages::WebPageProxy::TouchBarMenuItemDataAdded(TouchBarMenuItemData {element}));
+}
+
+void WebPage::sendTouchBarMenuItemDataRemovedUpdate(HTMLMenuItemElement& element)
+{
+    send(Messages::WebPageProxy::TouchBarMenuItemDataRemoved(TouchBarMenuItemData {element}));
+}
+#endif
+
 void WebPage::sendPartialEditorStateAndSchedulePostLayoutUpdate()
 {
     Frame& frame = m_page->focusController().focusedOrMainFrame();

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (225437 => 225438)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2017-12-02 01:12:48 UTC (rev 225437)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2017-12-02 01:38:50 UTC (rev 225438)
@@ -49,6 +49,8 @@
 #include <WebCore/ActivityState.h>
 #include <WebCore/DictionaryPopupInfo.h>
 #include <WebCore/FrameLoaderTypes.h>
+#include <WebCore/HTMLMenuElement.h>
+#include <WebCore/HTMLMenuItemElement.h>
 #include <WebCore/IntRect.h>
 #include <WebCore/IntSizeHash.h>
 #include <WebCore/Page.h>
@@ -123,6 +125,8 @@
 class FrameSelection;
 class FrameView;
 class GraphicsContext;
+class HTMLMenuElement;
+class HTMLMenuItemElement;
 class HTMLPlugInElement;
 class HTMLPlugInImageElement;
 class IntPoint;
@@ -306,6 +310,11 @@
     String platformUserAgent(const WebCore::URL&) const;
     WebCore::KeyboardUIMode keyboardUIMode();
 
+    void didInsertMenuElement(WebCore::HTMLMenuElement&);
+    void didRemoveMenuElement(WebCore::HTMLMenuElement&);
+    void didInsertMenuItemElement(WebCore::HTMLMenuItemElement&);
+    void didRemoveMenuItemElement(WebCore::HTMLMenuItemElement&);
+
     const String& overrideContentSecurityPolicy() const { return m_overrideContentSecurityPolicy; }
 
     WebUndoStep* webUndoStep(uint64_t);
@@ -1036,6 +1045,13 @@
     void platformEditorState(WebCore::Frame&, EditorState& result, IncludePostLayoutDataHint) const;
     void sendEditorStateUpdate();
 
+#if PLATFORM(COCOA)
+    void sendTouchBarMenuDataAddedUpdate(WebCore::HTMLMenuElement&);
+    void sendTouchBarMenuDataRemovedUpdate(WebCore::HTMLMenuElement&);
+    void sendTouchBarMenuItemDataAddedUpdate(WebCore::HTMLMenuItemElement&);
+    void sendTouchBarMenuItemDataRemovedUpdate(WebCore::HTMLMenuItemElement&);
+#endif
+
     void didReceiveWebPageMessage(IPC::Connection&, IPC::Decoder&);
     void didReceiveSyncWebPageMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to