<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[182303] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/182303">182303</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2015-04-02 18:16:24 -0700 (Thu, 02 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>
Source/WebCore:
Unreviewed: Reapplied Change after rollout.

Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

Patch by Brady Eidson &lt;beidson@apple.com&gt; on 2015-04-02

* page/ContextMenuClient.h:
(WebCore::ContextMenuClient::shareSelectedTextMenuItem):

* page/ContextMenuContext.h:
(WebCore::ContextMenuContext::setSelectedText):
(WebCore::ContextMenuContext::selectedText):

* page/ContextMenuController.cpp:
(WebCore::ContextMenuController::populate): Add a Share menu item returned from the client.
(WebCore::ContextMenuController::checkOrEnableIfNeeded):

* platform/ContextMenuItem.cpp:
(WebCore::ContextMenuItem::shareSelectedTextMenuItem):

* platform/ContextMenuItem.h:
(WebCore::ContextMenuItem::supportsShareMenu):

* platform/gtk/ContextMenuItemGtk.cpp:
(WebCore::ContextMenuItem::shareSelectedTextMenuItem):

* platform/mac/ContextMenuItemMac.mm:
(WebCore::ContextMenuItem::releasePlatformDescription):
(WebCore::ContextMenuItem::getPlatformDescription):
(WebCore::ContextMenuItem::supportsShareMenu):
(WebCore::ContextMenuItem::shareSelectedTextMenuItem): Use NSMenu SPI to get the Share menu.

* platform/spi/mac/NSMenuSPI.h: Forward declare instead of #include

Source/WebKit/mac:
Unreviewed: Reland change after rollout.

Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

Patch by Brady Eidson &lt;beidson@apple.com&gt; on 2015-04-02

* WebView/WebImmediateActionController.mm: Update for required #include

Source/WebKit2:
Unreviewed: Re-applied change after rollout.

Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318

Patch by Brady Eidson &lt;beidson@apple.com&gt; on 2015-04-02

* Shared/API/c/WKContextMenuItemTypes.h: Add a constant for the Share menu.
* Shared/API/c/WKSharedAPICast.h:
(WebKit::toAPI):
(WebKit::toImpl):

* Shared/ContextMenuContextData.cpp:
(WebKit::ContextMenuContextData::ContextMenuContextData):
(WebKit::ContextMenuContextData::encode):
(WebKit::ContextMenuContextData::decode):
* Shared/ContextMenuContextData.h:
(WebKit::ContextMenuContextData::selectedText):

Add a &quot;cross platform&quot; menu item wrapper, right now only for NSMenuItem.
* Shared/NativeContextMenuItem.h:
(WebKit::NativeContextMenuItem::~NativeContextMenuItem):
(WebKit::NativeContextMenuItem::nsMenuItem):
* Shared/mac/NativeContextMenuItem.mm:
(WebKit::NativeContextMenuItem::NativeContextMenuItem):

Let WebContextMenuItem hold on to a NativeContextMenuItem to maintain full fidelity of the platform.
* Shared/WebContextMenuItem.cpp:
(WebKit::WebContextMenuItem::WebContextMenuItem):
* Shared/WebContextMenuItem.h:
(WebKit::WebContextMenuItem::create):
(WebKit::WebContextMenuItem::nativeContextMenuItem):

* UIProcess/API/APIContextMenuClient.h:
(API::ContextMenuClient::getContextMenuFromProposedMenu):
(API::ContextMenuClient::showContextMenu):

* UIProcess/API/C/WKPage.cpp:
(WKPageSetPageContextMenuClient):

* UIProcess/WebContextMenuProxy.h:

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::internalShowContextMenu): Translate the placeholder item from the web process into the
  native Share menu before consulting the context menu client. Also create the API items here so the native NSMenuItem
  can be attached to them.

* UIProcess/mac/WebContextMenuProxyMac.h:
* UIProcess/mac/WebContextMenuProxyMac.mm:
(-[WKMenuTarget forwardContextMenuAction:]):
(WebKit::nsMenuItem):
(WebKit::nsMenuItemVector):
(WebKit::WebContextMenuProxyMac::populate):
(WebKit::WebContextMenuProxyMac::showContextMenu):

* WebKit2.xcodeproj/project.pbxproj:

* WebProcess/WebCoreSupport/WebContextMenuClient.h:
* WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
(WebKit::WebContextMenuClient::shareSelectedTextMenuItem): In the web process, mark the Share menu's place in the
  context menu with a placeholder item. It will be translated into the real Share menu in the UI process.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuClienth">trunk/Source/WebCore/page/ContextMenuClient.h</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuContexth">trunk/Source/WebCore/page/ContextMenuContext.h</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuControllercpp">trunk/Source/WebCore/page/ContextMenuController.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformContextMenuItemcpp">trunk/Source/WebCore/platform/ContextMenuItem.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformContextMenuItemh">trunk/Source/WebCore/platform/ContextMenuItem.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgtkContextMenuItemGtkcpp">trunk/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformmacContextMenuItemMacmm">trunk/Source/WebCore/platform/mac/ContextMenuItemMac.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformspimacNSMenuSPIh">trunk/Source/WebCore/platform/spi/mac/NSMenuSPI.h</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacWebViewWebImmediateActionControllermm">trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIcWKContextMenuItemTypesh">trunk/Source/WebKit2/Shared/API/c/WKContextMenuItemTypes.h</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIcWKSharedAPICasth">trunk/Source/WebKit2/Shared/API/c/WKSharedAPICast.h</a></li>
<li><a href="#trunkSourceWebKit2SharedContextMenuContextDatacpp">trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedContextMenuContextDatah">trunk/Source/WebKit2/Shared/ContextMenuContextData.h</a></li>
<li><a href="#trunkSourceWebKit2SharedWebContextMenuItemcpp">trunk/Source/WebKit2/Shared/WebContextMenuItem.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebContextMenuItemh">trunk/Source/WebKit2/Shared/WebContextMenuItem.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIAPIContextMenuClienth">trunk/Source/WebKit2/UIProcess/API/APIContextMenuClient.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebContextMenuProxyh">trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflWebContextMenuProxyEflcpp">trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflWebContextMenuProxyEflh">trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessgtkWebContextMenuProxyGtkcpp">trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessgtkWebContextMenuProxyGtkh">trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWebContextMenuProxyMach">trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacWebContextMenuProxyMacmm">trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebContextMenuClienth">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportmacWebContextMenuClientMacmm">trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2SharedNativeContextMenuItemh">trunk/Source/WebKit2/Shared/NativeContextMenuItem.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacNativeContextMenuItemmm">trunk/Source/WebKit2/Shared/mac/NativeContextMenuItem.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/ChangeLog        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2015-04-02  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Unreviewed: Reapplied Change after rollout.
+
+        Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
+        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318
+
+        * page/ContextMenuClient.h:
+        (WebCore::ContextMenuClient::shareSelectedTextMenuItem):
+
+        * page/ContextMenuContext.h:
+        (WebCore::ContextMenuContext::setSelectedText):
+        (WebCore::ContextMenuContext::selectedText):
+
+        * page/ContextMenuController.cpp:
+        (WebCore::ContextMenuController::populate): Add a Share menu item returned from the client.
+        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
+
+        * platform/ContextMenuItem.cpp:
+        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):
+
+        * platform/ContextMenuItem.h:
+        (WebCore::ContextMenuItem::supportsShareMenu):
+
+        * platform/gtk/ContextMenuItemGtk.cpp:
+        (WebCore::ContextMenuItem::shareSelectedTextMenuItem):
+
+        * platform/mac/ContextMenuItemMac.mm:
+        (WebCore::ContextMenuItem::releasePlatformDescription):
+        (WebCore::ContextMenuItem::getPlatformDescription):
+        (WebCore::ContextMenuItem::supportsShareMenu):
+        (WebCore::ContextMenuItem::shareSelectedTextMenuItem): Use NSMenu SPI to get the Share menu.
+
+        * platform/spi/mac/NSMenuSPI.h: Forward declare instead of #include
+
</ins><span class="cx"> 2015-04-02  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r182293.
</span></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ContextMenuClient.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuClient.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/page/ContextMenuClient.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">         virtual void searchWithSpotlight() = 0;
</span><ins>+        virtual ContextMenuItem shareSelectedTextMenuItem(const String&amp; selectedText) { return ContextMenuItem::shareSelectedTextMenuItem(selectedText); }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(ACCESSIBILITY_CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ContextMenuContext.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuContext.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/page/ContextMenuContext.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -41,6 +41,9 @@
</span><span class="cx"> 
</span><span class="cx">     const HitTestResult&amp; hitTestResult() const { return m_hitTestResult; }
</span><span class="cx"> 
</span><ins>+    void setSelectedText(const String&amp; selectedText) { m_selectedText = selectedText; }
+    const String&amp; selectedText() const { return m_selectedText; }
+
</ins><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     void setControlledImage(Image* controlledImage) { m_controlledImage = controlledImage; }
</span><span class="cx">     Image* controlledImage() const { return m_controlledImage.get(); }
</span><span class="lines">@@ -49,6 +52,7 @@
</span><span class="cx"> private:
</span><span class="cx"> 
</span><span class="cx">     HitTestResult m_hitTestResult;
</span><ins>+    String m_selectedText;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     RefPtr&lt;Image&gt; m_controlledImage;
</span></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ContextMenuController.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuController.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/page/ContextMenuController.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -892,9 +892,10 @@
</span><span class="cx"> 
</span><span class="cx">         if (imageURL.isEmpty() &amp;&amp; linkURL.isEmpty() &amp;&amp; mediaURL.isEmpty()) {
</span><span class="cx">             if (m_context.hitTestResult().isSelected()) {
</span><ins>+                String selectedString;
</ins><span class="cx">                 if (selectionContainsPossibleWord(frame)) {
</span><span class="cx"> #if PLATFORM(COCOA)
</span><del>-                    String selectedString = frame-&gt;displayStringModifiedByEncoding(frame-&gt;editor().selectedText());
</del><ins>+                    selectedString = frame-&gt;displayStringModifiedByEncoding(frame-&gt;editor().selectedText());
</ins><span class="cx">                     ContextMenuItem LookUpInDictionaryItem(ActionType, ContextMenuItemTagLookUpInDictionary, contextMenuItemTagLookUpInDictionary(selectedString));
</span><span class="cx"> 
</span><span class="cx">                     appendItem(LookUpInDictionaryItem, m_contextMenu.get());
</span><span class="lines">@@ -910,6 +911,14 @@
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">                 appendItem(*separatorItem(), m_contextMenu.get());
</span><span class="cx"> 
</span><ins>+                if (!selectedString.isEmpty() &amp;&amp; ContextMenuItem::supportsShareMenu()) {
+                    ContextMenuItem ShareItem(m_client.shareSelectedTextMenuItem(selectedString));
+                    appendItem(ShareItem, m_contextMenu.get());
+                    appendItem(*separatorItem(), m_contextMenu.get());
+
+                    m_context.setSelectedText(selectedString);
+                }
+
</ins><span class="cx">                 ContextMenuItem SpeechMenuItem(SubmenuType, ContextMenuItemTagSpeechMenu, contextMenuItemTagSpeechMenu());
</span><span class="cx">                 createAndAppendSpeechSubMenu(SpeechMenuItem);
</span><span class="cx">                 appendItem(SpeechMenuItem, m_contextMenu.get());
</span><span class="lines">@@ -1400,6 +1409,7 @@
</span><span class="cx">         case ContextMenuItemLastCustomTag:
</span><span class="cx">         case ContextMenuItemBaseApplicationTag:
</span><span class="cx">         case ContextMenuItemTagDictationAlternative:
</span><ins>+        case ContextMenuItemTagShareMenu:
</ins><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagMediaPlayPause:
</span><span class="cx">             if (m_context.hitTestResult().mediaPlaying())
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformContextMenuItemcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ContextMenuItem.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ContextMenuItem.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/platform/ContextMenuItem.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -117,6 +117,16 @@
</span><span class="cx">     return m_enabled;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool ContextMenuItem::supportsShareMenu()
+{
+    return false;
+}
+
+ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String&amp;)
+{
+    return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString());
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTEXT_MENUS) &amp;&amp; USE(CROSS_PLATFORM_CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformContextMenuItemh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ContextMenuItem.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ContextMenuItem.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/platform/ContextMenuItem.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -161,6 +161,7 @@
</span><span class="cx">         ContextMenuItemTagDictationAlternative,
</span><span class="cx">         ContextMenuItemTagOpenLinkInThisWindow,
</span><span class="cx">         ContextMenuItemTagToggleVideoFullscreen,
</span><ins>+        ContextMenuItemTagShareMenu, 
</ins><span class="cx">         ContextMenuItemBaseCustomTag = 5000,
</span><span class="cx">         ContextMenuItemCustomTagNoAction = 5998,
</span><span class="cx">         ContextMenuItemLastCustomTag = 5999,
</span><span class="lines">@@ -205,6 +206,9 @@
</span><span class="cx"> 
</span><span class="cx">         void setSubMenu(ContextMenu*);
</span><span class="cx"> 
</span><ins>+        static bool supportsShareMenu();
+        WEBCORE_EXPORT static ContextMenuItem shareSelectedTextMenuItem(const String&amp;);
+
</ins><span class="cx"> #if PLATFORM(GTK)
</span><span class="cx">         GtkAction* gtkAction() const;
</span><span class="cx"> #endif
</span><span class="lines">@@ -228,6 +232,7 @@
</span><span class="cx">         ContextMenuItem(ContextMenuAction, const String&amp;, bool enabled, bool checked, Vector&lt;ContextMenuItem&gt;&amp; submenuItems);
</span><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT PlatformMenuItemDescription releasePlatformDescription();
</span><ins>+        WEBCORE_EXPORT PlatformMenuItemDescription getPlatformDescription() const;
</ins><span class="cx"> 
</span><span class="cx">         WEBCORE_EXPORT String title() const;
</span><span class="cx">         void setTitle(const String&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgtkContextMenuItemGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/platform/gtk/ContextMenuItemGtk.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -283,6 +283,16 @@
</span><span class="cx">     return gtk_activatable_get_related_action(GTK_ACTIVATABLE(m_platformDescription));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool ContextMenuItem::supportsShareMenu()
+{
+    return false;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String&amp;)
+{
+    return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString());
+}
+
+}
+
</ins><span class="cx"> #endif // ENABLE(CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformmacContextMenuItemMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/mac/ContextMenuItemMac.mm (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/mac/ContextMenuItemMac.mm        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/platform/mac/ContextMenuItemMac.mm        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ContextMenu.h&quot;
</span><ins>+#include &quot;NSMenuSPI.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -95,13 +96,18 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NSMenuItem* ContextMenuItem::releasePlatformDescription()
</del><ins>+NSMenuItem *ContextMenuItem::releasePlatformDescription()
</ins><span class="cx"> {
</span><del>-    NSMenuItem* item = [m_platformDescription.get() retain];
</del><ins>+    NSMenuItem *item = [m_platformDescription.get() retain];
</ins><span class="cx">     m_platformDescription = 0;
</span><span class="cx">     return item;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+NSMenuItem *ContextMenuItem::getPlatformDescription() const
+{
+    return m_platformDescription.get();
+}
+
</ins><span class="cx"> ContextMenuItemType ContextMenuItem::type() const
</span><span class="cx"> {
</span><span class="cx">     if ([m_platformDescription.get() isSeparatorItem])
</span><span class="lines">@@ -187,6 +193,19 @@
</span><span class="cx">     return [m_platformDescription.get() state] == NSOnState;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool ContextMenuItem::supportsShareMenu()
+{
+    static bool supportsShareMenu = [[NSMenuItem class] respondsToSelector:@selector(standardShareMenuItemWithItems:)];
+    return supportsShareMenu;
+}
+
+ContextMenuItem ContextMenuItem::shareSelectedTextMenuItem(const String&amp; selectedText)
+{
+    ContextMenuItem item([NSMenuItem standardShareMenuItemWithItems:@[ (NSString *)selectedText ]]);
+    item.setAction(ContextMenuItemTagShareMenu);
+    return item;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformspimacNSMenuSPIh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/spi/mac/NSMenuSPI.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/spi/mac/NSMenuSPI.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebCore/platform/spi/mac/NSMenuSPI.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -23,8 +23,6 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#import &quot;QuickLookMacSPI.h&quot;
-
</del><span class="cx"> // FIXME: We should just include the appropriate internal headers.
</span><span class="cx"> 
</span><span class="cx"> typedef NS_ENUM(NSInteger, NSMenuType) {
</span><span class="lines">@@ -37,6 +35,8 @@
</span><span class="cx"> + (NSMenuType)menuTypeForEvent:(NSEvent *)event;
</span><span class="cx"> @end
</span><span class="cx"> 
</span><ins>+@class QLPreviewMenuItem;
+
</ins><span class="cx"> @interface NSMenuItem (Private)
</span><span class="cx"> + (QLPreviewMenuItem *)standardQuickLookMenuItem;
</span><span class="cx"> + (NSMenuItem *)standardShareMenuItemWithItems:(NSArray *)items;
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit/mac/ChangeLog        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2015-04-02  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Unreviewed: Reland change after rollout.
+
+        Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
+        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318
+
+        * WebView/WebImmediateActionController.mm: Update for required #include
+
</ins><span class="cx"> 2015-04-02  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r182293.
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebViewWebImmediateActionControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit/mac/WebView/WebImmediateActionController.mm        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx"> #import &lt;WebCore/LookupSPI.h&gt;
</span><span class="cx"> #import &lt;WebCore/NSMenuSPI.h&gt;
</span><span class="cx"> #import &lt;WebCore/Page.h&gt;
</span><ins>+#import &lt;WebCore/QuickLookMacSPI.h&gt;
</ins><span class="cx"> #import &lt;WebCore/RenderElement.h&gt;
</span><span class="cx"> #import &lt;WebCore/RenderObject.h&gt;
</span><span class="cx"> #import &lt;WebCore/RuntimeApplicationChecks.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/ChangeLog        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -1,3 +1,65 @@
</span><ins>+2015-04-02  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Unreviewed: Re-applied change after rollout.
+
+        Expose the &quot;Share&quot; menu for text selections on platforms where it's available.
+        rdar://problem/20034174 and https://bugs.webkit.org/show_bug.cgi?id=143318
+
+        * Shared/API/c/WKContextMenuItemTypes.h: Add a constant for the Share menu.
+        * Shared/API/c/WKSharedAPICast.h:
+        (WebKit::toAPI):
+        (WebKit::toImpl):
+
+        * Shared/ContextMenuContextData.cpp:
+        (WebKit::ContextMenuContextData::ContextMenuContextData):
+        (WebKit::ContextMenuContextData::encode):
+        (WebKit::ContextMenuContextData::decode):
+        * Shared/ContextMenuContextData.h:
+        (WebKit::ContextMenuContextData::selectedText):
+
+        Add a &quot;cross platform&quot; menu item wrapper, right now only for NSMenuItem.
+        * Shared/NativeContextMenuItem.h:
+        (WebKit::NativeContextMenuItem::~NativeContextMenuItem):
+        (WebKit::NativeContextMenuItem::nsMenuItem):
+        * Shared/mac/NativeContextMenuItem.mm:
+        (WebKit::NativeContextMenuItem::NativeContextMenuItem):
+
+        Let WebContextMenuItem hold on to a NativeContextMenuItem to maintain full fidelity of the platform.
+        * Shared/WebContextMenuItem.cpp:
+        (WebKit::WebContextMenuItem::WebContextMenuItem):
+        * Shared/WebContextMenuItem.h:
+        (WebKit::WebContextMenuItem::create):
+        (WebKit::WebContextMenuItem::nativeContextMenuItem):
+
+        * UIProcess/API/APIContextMenuClient.h:
+        (API::ContextMenuClient::getContextMenuFromProposedMenu):
+        (API::ContextMenuClient::showContextMenu):
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageSetPageContextMenuClient):
+
+        * UIProcess/WebContextMenuProxy.h:
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::internalShowContextMenu): Translate the placeholder item from the web process into the
+          native Share menu before consulting the context menu client. Also create the API items here so the native NSMenuItem
+          can be attached to them.
+
+        * UIProcess/mac/WebContextMenuProxyMac.h:
+        * UIProcess/mac/WebContextMenuProxyMac.mm:
+        (-[WKMenuTarget forwardContextMenuAction:]):
+        (WebKit::nsMenuItem):
+        (WebKit::nsMenuItemVector):
+        (WebKit::WebContextMenuProxyMac::populate):
+        (WebKit::WebContextMenuProxyMac::showContextMenu):
+
+        * WebKit2.xcodeproj/project.pbxproj:
+
+        * WebProcess/WebCoreSupport/WebContextMenuClient.h:
+        * WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm:
+        (WebKit::WebContextMenuClient::shareSelectedTextMenuItem): In the web process, mark the Share menu's place in the
+          context menu with a placeholder item. It will be translated into the real Share menu in the UI process.
+
</ins><span class="cx"> 2015-04-02  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r182293.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIcWKContextMenuItemTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/c/WKContextMenuItemTypes.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/c/WKContextMenuItemTypes.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/API/c/WKContextMenuItemTypes.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -121,6 +121,7 @@
</span><span class="cx">     kWKContextMenuItemTagSelectAll,
</span><span class="cx">     kWKContextMenuItemTagOpenLinkInThisWindow,
</span><span class="cx">     kWKContextMenuItemTagToggleVideoFullscreen,
</span><ins>+    kWKContextMenuItemTagShareMenu,
</ins><span class="cx">     kWKContextMenuItemBaseApplicationTag = 10000
</span><span class="cx"> };
</span><span class="cx"> typedef uint32_t WKContextMenuItemTag;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIcWKSharedAPICasth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/c/WKSharedAPICast.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/c/WKSharedAPICast.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/API/c/WKSharedAPICast.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -503,6 +503,8 @@
</span><span class="cx"> #endif
</span><span class="cx">     case WebCore::ContextMenuItemTagOpenLinkInThisWindow:
</span><span class="cx">         return kWKContextMenuItemTagOpenLinkInThisWindow;
</span><ins>+    case WebCore::ContextMenuItemTagShareMenu:
+        return kWKContextMenuItemTagShareMenu;
</ins><span class="cx">     default:
</span><span class="cx">         if (action &lt; WebCore::ContextMenuItemBaseApplicationTag)
</span><span class="cx">             LOG_ERROR(&quot;ContextMenuAction %i is an unknown tag but is below the allowable custom tag value of %i&quot;, action, WebCore::  ContextMenuItemBaseApplicationTag);
</span><span class="lines">@@ -692,6 +694,8 @@
</span><span class="cx">         return WebCore::ContextMenuItemTagCapitalize;
</span><span class="cx">     case kWKContextMenuItemTagChangeBack:
</span><span class="cx">         return WebCore::ContextMenuItemTagChangeBack;
</span><ins>+    case kWKContextMenuItemTagShareMenu:
+        return WebCore::ContextMenuItemTagShareMenu;
</ins><span class="cx"> #endif
</span><span class="cx">     case kWKContextMenuItemTagOpenLinkInThisWindow:
</span><span class="cx">         return WebCore::ContextMenuItemTagOpenLinkInThisWindow;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedContextMenuContextDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx"> 
</span><span class="cx"> ContextMenuContextData::ContextMenuContextData(const ContextMenuContext&amp; context)
</span><span class="cx">     : m_webHitTestResultData(WebHitTestResult::Data(context.hitTestResult()))
</span><ins>+    , m_selectedText(context.selectedText())
</ins><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     , m_selectionIsEditable(false)
</span><span class="cx"> #endif
</span><span class="lines">@@ -64,6 +65,7 @@
</span><span class="cx"> void ContextMenuContextData::encode(IPC::ArgumentEncoder&amp; encoder) const
</span><span class="cx"> {
</span><span class="cx">     encoder &lt;&lt; m_webHitTestResultData;
</span><ins>+    encoder &lt;&lt; m_selectedText;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     ShareableBitmap::Handle handle;
</span><span class="lines">@@ -78,6 +80,9 @@
</span><span class="cx">     if (!decoder.decode(contextMenuContextData.m_webHitTestResultData))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    if (!decoder.decode(contextMenuContextData.m_selectedText))
+        return false;
+
</ins><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     ShareableBitmap::Handle handle;
</span><span class="cx">     if (!decoder.decode(handle))
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedContextMenuContextDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/ContextMenuContextData.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/ContextMenuContextData.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/ContextMenuContextData.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">     ContextMenuContextData(const WebCore::ContextMenuContext&amp;);
</span><span class="cx">     
</span><span class="cx">     const WebHitTestResult::Data&amp; webHitTestResultData() const { return m_webHitTestResultData; }
</span><ins>+    const String&amp; selectedText() const { return m_selectedText; }
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     ContextMenuContextData(const Vector&lt;uint8_t&gt;&amp; selectionData, const Vector&lt;String&gt;&amp; selectedTelephoneNumbers, bool isEditable)
</span><span class="lines">@@ -71,6 +72,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebHitTestResult::Data m_webHitTestResultData;
</span><ins>+    String m_selectedText;
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     RefPtr&lt;ShareableBitmap&gt; m_controlledImage;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedNativeContextMenuItemh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/Shared/NativeContextMenuItem.h (0 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/NativeContextMenuItem.h                                (rev 0)
+++ trunk/Source/WebKit2/Shared/NativeContextMenuItem.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+/*
+ * Copyright (C) 2015 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.
+ */
+
+#ifndef NativeContextMenuItem_h
+#define NativeContextMenuItem_h
+
+#if ENABLE(CONTEXT_MENUS)
+
+#if PLATFORM(COCOA)
+#include &lt;wtf/RetainPtr.h&gt;
+OBJC_CLASS NSMenuItem;
+#endif
+
+namespace WebCore {
+
+class ContextMenuItem;
+
+}
+
+namespace WebKit {
+
+class NativeContextMenuItem {
+public:
+    NativeContextMenuItem(const WebCore::ContextMenuItem&amp; coreItem);
+
+    virtual ~NativeContextMenuItem() { }
+
+#if PLATFORM(COCOA)
+    NSMenuItem *nsMenuItem() { return m_nsMenuItem.get(); }
+#endif
+
+private:
+
+#if PLATFORM(COCOA)
+    RetainPtr&lt;NSMenuItem&gt; m_nsMenuItem;
+#endif
+
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTEXT_MENUS)
+#endif // NativeContextMenuItem_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2SharedWebContextMenuItemcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebContextMenuItem.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebContextMenuItem.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/WebContextMenuItem.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -40,6 +40,12 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WebContextMenuItem::WebContextMenuItem(const WebCore::ContextMenuItem&amp; coreItem)
+    : m_webContextMenuItemData(coreItem)
+{
+    m_nativeContextMenuItem = std::make_unique&lt;NativeContextMenuItem&gt;(coreItem);
+}
+
</ins><span class="cx"> PassRefPtr&lt;WebContextMenuItem&gt; WebContextMenuItem::create(const String&amp; title, bool enabled, API::Array* submenuItems)
</span><span class="cx"> {
</span><span class="cx">     size_t size = submenuItems-&gt;size();
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebContextMenuItemh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebContextMenuItem.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebContextMenuItem.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/Shared/WebContextMenuItem.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -29,12 +29,17 @@
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;APIObject.h&quot;
</span><ins>+#include &quot;NativeContextMenuItem.h&quot;
</ins><span class="cx"> #include &quot;WebContextMenuItemData.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace API {
</span><span class="cx"> class Array;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+namespace WebCore {
+class ContextMenuItem;
+}
+
</ins><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class WebContextMenuItem : public API::ObjectImpl&lt;API::Object::Type::ContextMenuItem&gt; {
</span><span class="lines">@@ -43,6 +48,12 @@
</span><span class="cx">     {
</span><span class="cx">         return adoptRef(new WebContextMenuItem(data));
</span><span class="cx">     }
</span><ins>+
+    static PassRefPtr&lt;WebContextMenuItem&gt; create(const WebCore::ContextMenuItem&amp; item)
+    {
+        return adoptRef(new WebContextMenuItem(item));
+    }
+
</ins><span class="cx">     static PassRefPtr&lt;WebContextMenuItem&gt; create(const String&amp; title, bool enabled, API::Array* submenuItems);
</span><span class="cx">     static WebContextMenuItem* separatorItem();
</span><span class="cx"> 
</span><span class="lines">@@ -52,11 +63,15 @@
</span><span class="cx">     void setUserData(API::Object*);
</span><span class="cx"> 
</span><span class="cx">     WebContextMenuItemData* data() { return &amp;m_webContextMenuItemData; }
</span><ins>+    NativeContextMenuItem* nativeContextMenuItem() { return m_nativeContextMenuItem.get(); }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebContextMenuItem(const WebContextMenuItemData&amp;);
</span><ins>+    WebContextMenuItem(const WebCore::ContextMenuItem&amp;);
</ins><span class="cx"> 
</span><span class="cx">     WebContextMenuItemData m_webContextMenuItemData;
</span><ins>+
+    std::unique_ptr&lt;NativeContextMenuItem&gt; m_nativeContextMenuItem;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacNativeContextMenuItemmm"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/Shared/mac/NativeContextMenuItem.mm (0 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/NativeContextMenuItem.mm                                (rev 0)
+++ trunk/Source/WebKit2/Shared/mac/NativeContextMenuItem.mm        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+/*
+ * Copyright (C) 2015 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 &quot;config.h&quot;
+#include &quot;NativeContextMenuItem.h&quot;
+
+#if ENABLE(CONTEXT_MENUS)
+
+#include &lt;WebCore/ContextMenuItem.h&gt;
+
+using namespace WebCore;
+
+namespace WebKit {
+
+NativeContextMenuItem::NativeContextMenuItem(const ContextMenuItem&amp; coreItem)
+    : m_nsMenuItem(coreItem.getPlatformDescription())
+{
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTEXT_MENUS)
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIAPIContextMenuClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/APIContextMenuClient.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/APIContextMenuClient.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/API/APIContextMenuClient.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;WebHitTestResult.h&quot;
</span><ins>+#include &lt;wtf/RefPtr.h&gt;
</ins><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -36,6 +37,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><ins>+class WebContextMenuItem;
</ins><span class="cx"> class WebContextMenuItemData;
</span><span class="cx"> class WebPageProxy;
</span><span class="cx"> }
</span><span class="lines">@@ -46,10 +48,10 @@
</span><span class="cx"> public:
</span><span class="cx">     virtual ~ContextMenuClient() { }
</span><span class="cx"> 
</span><del>-    virtual bool getContextMenuFromProposedMenu(WebKit::WebPageProxy&amp;, const Vector&lt;WebKit::WebContextMenuItemData&gt;&amp; /* proposedMenu */, Vector&lt;WebKit::WebContextMenuItemData&gt;&amp; /* customMenu */, const WebKit::WebHitTestResult::Data&amp;, API::Object* /* userData */) { return false; }
</del><ins>+    virtual bool getContextMenuFromProposedMenu(WebKit::WebPageProxy&amp;, const Vector&lt;RefPtr&lt;WebKit::WebContextMenuItem&gt;&gt;&amp; /* proposedMenu */, Vector&lt;RefPtr&lt;WebKit::WebContextMenuItem&gt;&gt;&amp; /* customMenu */, const WebKit::WebHitTestResult::Data&amp;, API::Object* /* userData */) { return false; }
</ins><span class="cx">     virtual void customContextMenuItemSelected(WebKit::WebPageProxy&amp;, const WebKit::WebContextMenuItemData&amp;) { }
</span><span class="cx">     virtual void contextMenuDismissed(WebKit::WebPageProxy&amp;) { }
</span><del>-    virtual bool showContextMenu(WebKit::WebPageProxy&amp;, const WebCore::IntPoint&amp;, const Vector&lt;WebKit::WebContextMenuItemData&gt;&amp;) { return false; }
</del><ins>+    virtual bool showContextMenu(WebKit::WebPageProxy&amp;, const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebKit::WebContextMenuItem&gt;&gt;&amp;) { return false; }
</ins><span class="cx">     virtual bool hideContextMenu(WebKit::WebPageProxy&amp;) { return false; }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -744,7 +744,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        virtual bool getContextMenuFromProposedMenu(WebPageProxy&amp; page, const Vector&lt;WebContextMenuItemData&gt;&amp; proposedMenuVector, Vector&lt;WebContextMenuItemData&gt;&amp; customMenu, const WebHitTestResult::Data&amp; hitTestResultData, API::Object* userData) override
</del><ins>+        virtual bool getContextMenuFromProposedMenu(WebPageProxy&amp; page, const Vector&lt;RefPtr&lt;WebKit::WebContextMenuItem&gt;&gt;&amp; proposedMenuVector, Vector&lt;RefPtr&lt;WebKit::WebContextMenuItem&gt;&gt;&amp; customMenu, const WebHitTestResult::Data&amp; hitTestResultData, API::Object* userData) override
</ins><span class="cx">         {
</span><span class="cx">             if (!m_client.getContextMenuFromProposedMenu &amp;&amp; !m_client.getContextMenuFromProposedMenu_deprecatedForUseWithV0)
</span><span class="cx">                 return false;
</span><span class="lines">@@ -756,7 +756,7 @@
</span><span class="cx">             proposedMenuItems.reserveInitialCapacity(proposedMenuVector.size());
</span><span class="cx"> 
</span><span class="cx">             for (const auto&amp; menuItem : proposedMenuVector)
</span><del>-                proposedMenuItems.uncheckedAppend(WebContextMenuItem::create(menuItem));
</del><ins>+                proposedMenuItems.uncheckedAppend(menuItem);
</ins><span class="cx"> 
</span><span class="cx">             WKArrayRef newMenu = nullptr;
</span><span class="cx">             if (m_client.base.version &gt;= 2) {
</span><span class="lines">@@ -777,7 +777,7 @@
</span><span class="cx">                     continue;
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                customMenu.append(*item-&gt;data());
</del><ins>+                customMenu.append(item);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             return true;
</span><span class="lines">@@ -799,7 +799,7 @@
</span><span class="cx">             m_client.contextMenuDismissed(toAPI(&amp;page), m_client.base.clientInfo);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        virtual bool showContextMenu(WebPageProxy&amp; page, const WebCore::IntPoint&amp; menuLocation, const Vector&lt;WebContextMenuItemData&gt;&amp; menuItemsVector) override
</del><ins>+        virtual bool showContextMenu(WebPageProxy&amp; page, const WebCore::IntPoint&amp; menuLocation, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; menuItemsVector) override
</ins><span class="cx">         {
</span><span class="cx">             if (!m_client.showContextMenu)
</span><span class="cx">                 return false;
</span><span class="lines">@@ -808,7 +808,7 @@
</span><span class="cx">             menuItems.reserveInitialCapacity(menuItemsVector.size());
</span><span class="cx"> 
</span><span class="cx">             for (const auto&amp; menuItem : menuItemsVector)
</span><del>-                menuItems.uncheckedAppend(WebContextMenuItem::create(menuItem));
</del><ins>+                menuItems.uncheckedAppend(menuItem);
</ins><span class="cx"> 
</span><span class="cx">             m_client.showContextMenu(toAPI(&amp;page), toAPI(menuLocation), toAPI(API::Array::create(WTF::move(menuItems)).get()), m_client.base.clientInfo);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebContextMenuProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/WebContextMenuProxy.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -37,13 +37,13 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class ContextMenuContextData;
</span><del>-class WebContextMenuItemData;
</del><ins>+class WebContextMenuItem;
</ins><span class="cx"> 
</span><span class="cx"> class WebContextMenuProxy : public RefCounted&lt;WebContextMenuProxy&gt; {
</span><span class="cx"> public:
</span><span class="cx">     virtual ~WebContextMenuProxy();
</span><span class="cx"> 
</span><del>-    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;) = 0;
</del><ins>+    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;) = 0;
</ins><span class="cx">     virtual void hideContextMenu() = 0;
</span><span class="cx">     virtual void cancelTracking() { }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -69,6 +69,7 @@
</span><span class="cx"> #include &quot;WebBackForwardList.h&quot;
</span><span class="cx"> #include &quot;WebBackForwardListItem.h&quot;
</span><span class="cx"> #include &quot;WebCertificateInfo.h&quot;
</span><ins>+#include &quot;WebContextMenuItem.h&quot;
</ins><span class="cx"> #include &quot;WebContextMenuProxy.h&quot;
</span><span class="cx"> #include &quot;WebCoreArgumentCoders.h&quot;
</span><span class="cx"> #include &quot;WebEditCommandProxy.h&quot;
</span><span class="lines">@@ -4028,18 +4029,31 @@
</span><span class="cx">     m_process-&gt;responsivenessTimer()-&gt;stop();
</span><span class="cx"> 
</span><span class="cx">     // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
</span><del>-    Vector&lt;WebContextMenuItemData&gt; items;
-    bool useProposedItems = true;
</del><span class="cx">     bool askClientToChangeMenu = clientEligibility == ContextMenuClientEligibility::EligibleForClient;
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     if (contextMenuContextData.controlledImage())
</span><span class="cx">         askClientToChangeMenu = false;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    if (askClientToChangeMenu &amp;&amp; m_contextMenuClient-&gt;getContextMenuFromProposedMenu(*this, proposedItems, items, contextMenuContextData.webHitTestResultData(), m_process-&gt;transformHandlesToObjects(userData.object()).get()))
</del><ins>+    Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt; proposedAPIItems;
+    for (auto&amp; item : proposedItems) {
+        if (item.action() != ContextMenuItemTagShareMenu) {
+            proposedAPIItems.append(WebContextMenuItem::create(item));
+            continue;
+        }
+
+        // Currently we only support the share menu for text selection, so create the appropriate menu item for that text selection now.
+        ContextMenuItem coreItem = ContextMenuItem::shareSelectedTextMenuItem(contextMenuContextData.selectedText());
+        proposedAPIItems.append(WebContextMenuItem::create(coreItem));
+    }
+
+    Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt; clientItems;
+    bool useProposedItems = true;
+
+    if (askClientToChangeMenu &amp;&amp; m_contextMenuClient-&gt;getContextMenuFromProposedMenu(*this, proposedAPIItems, clientItems, contextMenuContextData.webHitTestResultData(), m_process-&gt;transformHandlesToObjects(userData.object()).get()))
</ins><span class="cx">         useProposedItems = false;
</span><span class="cx"> 
</span><del>-    const Vector&lt;WebContextMenuItemData&gt;&amp; itemsToShow = useProposedItems ? proposedItems : items;
</del><ins>+    const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; itemsToShow = useProposedItems ? proposedAPIItems : clientItems;
</ins><span class="cx">     if (!m_contextMenuClient-&gt;showContextMenu(*this, menuLocation, itemsToShow))
</span><span class="cx">         m_activeContextMenu-&gt;showContextMenu(menuLocation, itemsToShow, contextMenuContextData);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflWebContextMenuProxyEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebContextMenuProxyEfl::showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;)
</del><ins>+void WebContextMenuProxyEfl::showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;)
</ins><span class="cx"> {
</span><span class="cx">     notImplemented();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflWebContextMenuProxyEflh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/efl/WebContextMenuProxyEfl.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx"> 
</span><span class="cx">     ~WebContextMenuProxyEfl();
</span><span class="cx"> 
</span><del>-    void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;);
</del><ins>+    void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;);
</ins><span class="cx">     void hideContextMenu();
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessgtkWebContextMenuProxyGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.cpp        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -130,15 +130,15 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebContextMenuProxyGtk::populate(const Vector&lt;WebContextMenuItemData&gt;&amp; items)
</del><ins>+void WebContextMenuProxyGtk::populate(const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; items)
</ins><span class="cx"> {
</span><span class="cx">     for (size_t i = 0; i &lt; items.size(); i++) {
</span><del>-        ContextMenuItem menuitem = items.at(i).core();
</del><ins>+        ContextMenuItem menuitem = items.at(i)-&gt;data()-&gt;core();
</ins><span class="cx">         append(menuitem);
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebContextMenuProxyGtk::showContextMenu(const WebCore::IntPoint&amp; position, const Vector&lt;WebContextMenuItemData&gt;&amp; items, const ContextMenuContextData&amp;)
</del><ins>+void WebContextMenuProxyGtk::showContextMenu(const WebCore::IntPoint&amp; position, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; items, const ContextMenuContextData&amp;)
</ins><span class="cx"> {
</span><span class="cx">     if (!items.isEmpty())
</span><span class="cx">         populate(items);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessgtkWebContextMenuProxyGtkh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextMenuProxyGtk.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">     }
</span><span class="cx">     ~WebContextMenuProxyGtk();
</span><span class="cx"> 
</span><del>-    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;);
</del><ins>+    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;);
</ins><span class="cx">     virtual void hideContextMenu();
</span><span class="cx"> 
</span><span class="cx">     void populate(Vector&lt;WebCore::ContextMenuItem&gt;&amp;);
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     WebContextMenuProxyGtk(GtkWidget*, WebPageProxy*);
</span><span class="cx"> 
</span><span class="cx">     void append(WebCore::ContextMenuItem&amp;);
</span><del>-    void populate(const Vector&lt;WebContextMenuItemData&gt;&amp;);
</del><ins>+    void populate(const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;);
</ins><span class="cx">     static void menuPositionFunction(GtkMenu*, gint*, gint*, gboolean*, WebContextMenuProxyGtk*);
</span><span class="cx"> 
</span><span class="cx">     GtkWidget* m_webView;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWebContextMenuProxyMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class ShareableBitmap;
</span><ins>+class WebContextMenuItemData;
</ins><span class="cx"> class WebPageProxy;
</span><span class="cx"> 
</span><span class="cx"> class WebContextMenuProxyMac : public WebContextMenuProxy {
</span><span class="lines">@@ -48,7 +49,7 @@
</span><span class="cx">     }
</span><span class="cx">     ~WebContextMenuProxyMac();
</span><span class="cx"> 
</span><del>-    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;) override;
</del><ins>+    virtual void showContextMenu(const WebCore::IntPoint&amp;, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void hideContextMenu() override;
</span><span class="cx">     virtual void cancelTracking() override;
</span><span class="lines">@@ -65,7 +66,7 @@
</span><span class="cx"> private:
</span><span class="cx">     WebContextMenuProxyMac(WKView*, WebPageProxy*);
</span><span class="cx"> 
</span><del>-    void populate(const Vector&lt;WebContextMenuItemData&gt;&amp;, const ContextMenuContextData&amp;);
</del><ins>+    void populate(const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp;, const ContextMenuContextData&amp;);
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     void setupServicesMenu(const ContextMenuContextData&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacWebContextMenuProxyMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> #import &quot;ServicesController.h&quot;
</span><span class="cx"> #import &quot;ShareableBitmap.h&quot;
</span><span class="cx"> #import &quot;StringUtilities.h&quot;
</span><ins>+#import &quot;WebContextMenuItem.h&quot;
</ins><span class="cx"> #import &quot;WebContextMenuItemData.h&quot;
</span><span class="cx"> #import &quot;WebProcessProxy.h&quot;
</span><span class="cx"> #import &quot;WKView.h&quot;
</span><span class="lines">@@ -140,7 +141,7 @@
</span><span class="cx">         ASSERT([representedObject isKindOfClass:[WKUserDataWrapper class]]);
</span><span class="cx">         item.setUserData([static_cast&lt;WKUserDataWrapper *&gt;(representedObject) userData]);
</span><span class="cx">     }
</span><del>-            
</del><ins>+
</ins><span class="cx">     _menuProxy-&gt;contextMenuItemSelected(item);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -292,59 +293,72 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static Vector&lt;RetainPtr&lt;NSMenuItem&gt;&gt; nsMenuItemVector(const Vector&lt;WebContextMenuItemData&gt;&amp; items)
</del><ins>+template&lt;typename ItemType&gt; static Vector&lt;RetainPtr&lt;NSMenuItem&gt;&gt; nsMenuItemVector(const Vector&lt;ItemType&gt;&amp;);
+
+static RetainPtr&lt;NSMenuItem&gt; nsMenuItem(const WebContextMenuItemData&amp; item)
</ins><span class="cx"> {
</span><del>-    Vector&lt;RetainPtr&lt;NSMenuItem&gt;&gt; result;
</del><ins>+    switch (item.type()) {
+    case ActionType:
+    case CheckableActionType: {
+        NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(item.title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@&quot;&quot;];
+        [menuItem setTag:item.action()];
+        [menuItem setEnabled:item.enabled()];
+        [menuItem setState:item.checked() ? NSOnState : NSOffState];
</ins><span class="cx"> 
</span><del>-    unsigned size = items.size();
-    result.reserveCapacity(size);
-    for (unsigned i = 0; i &lt; size; i++) {
-        switch (items[i].type()) {
-        case ActionType:
-        case CheckableActionType: {
-            NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(items[i].title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@&quot;&quot;];
-            [menuItem setTag:items[i].action()];
-            [menuItem setEnabled:items[i].enabled()];
-            [menuItem setState:items[i].checked() ? NSOnState : NSOffState];
-
-            if (std::function&lt;void ()&gt; selectionHandler = items[i].selectionHandler()) {
-                WKSelectionHandlerWrapper *wrapper = [[WKSelectionHandlerWrapper alloc] initWithSelectionHandler:selectionHandler];
-                [menuItem setRepresentedObject:wrapper];
-                [wrapper release];
-            } else if (items[i].userData()) {
-                WKUserDataWrapper *wrapper = [[WKUserDataWrapper alloc] initWithUserData:items[i].userData()];
-                [menuItem setRepresentedObject:wrapper];
-                [wrapper release];
-            }
-
-            result.append(adoptNS(menuItem));
-            break;
</del><ins>+        if (std::function&lt;void ()&gt; selectionHandler = item.selectionHandler()) {
+            WKSelectionHandlerWrapper *wrapper = [[WKSelectionHandlerWrapper alloc] initWithSelectionHandler:selectionHandler];
+            [menuItem setRepresentedObject:wrapper];
+            [wrapper release];
+        } else if (item.userData()) {
+            WKUserDataWrapper *wrapper = [[WKUserDataWrapper alloc] initWithUserData:item.userData()];
+            [menuItem setRepresentedObject:wrapper];
+            [wrapper release];
</ins><span class="cx">         }
</span><del>-        case SeparatorType:
-            result.append([NSMenuItem separatorItem]);
-            break;
-        case SubmenuType: {
-            NSMenu* menu = [[NSMenu alloc] initWithTitle:nsStringFromWebCoreString(items[i].title())];
-            [menu setAutoenablesItems:NO];
-            populateNSMenu(menu, nsMenuItemVector(items[i].submenu()));
-                
-            NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(items[i].title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@&quot;&quot;];
-            [menuItem setEnabled:items[i].enabled()];
-            [menuItem setSubmenu:menu];
-            [menu release];
</del><span class="cx"> 
</span><del>-            result.append(adoptNS(menuItem));
</del><ins>+        return adoptNS(menuItem);
+        break;
+    }
+    case SeparatorType:
+        return [NSMenuItem separatorItem];
+        break;
+    case SubmenuType: {
+        NSMenu* menu = [[NSMenu alloc] initWithTitle:nsStringFromWebCoreString(item.title())];
+        [menu setAutoenablesItems:NO];
+        populateNSMenu(menu, nsMenuItemVector(item.submenu()));
</ins><span class="cx">             
</span><del>-            break;
-        }
-        default:
-            ASSERT_NOT_REACHED();
-        }
</del><ins>+        NSMenuItem* menuItem = [[NSMenuItem alloc] initWithTitle:nsStringFromWebCoreString(item.title()) action:@selector(forwardContextMenuAction:) keyEquivalent:@&quot;&quot;];
+        [menuItem setEnabled:item.enabled()];
+        [menuItem setSubmenu:menu];
+        [menu release];
+
+        return adoptNS(menuItem);
</ins><span class="cx">     }
</span><ins>+    default:
+        ASSERT_NOT_REACHED();
+    }
+}
</ins><span class="cx"> 
</span><ins>+static RetainPtr&lt;NSMenuItem&gt; nsMenuItem(const RefPtr&lt;WebContextMenuItem&gt;&amp; item)
+{
+    if (NativeContextMenuItem* nativeItem = item-&gt;nativeContextMenuItem())
+        return nativeItem-&gt;nsMenuItem();
+
+    ASSERT(item-&gt;data());
+    return nsMenuItem(*item-&gt;data());
+}
+
+template&lt;typename ItemType&gt; static Vector&lt;RetainPtr&lt;NSMenuItem&gt;&gt; nsMenuItemVector(const Vector&lt;ItemType&gt;&amp; items)
+{
+    Vector&lt;RetainPtr&lt;NSMenuItem&gt;&gt; result;
+
+    unsigned size = items.size();
+    result.reserveCapacity(size);
+    for (auto&amp; item : items)
+        result.uncheckedAppend(nsMenuItem(item));
+
</ins><span class="cx">     WKMenuTarget* target = [WKMenuTarget sharedMenuTarget];
</span><del>-    for (unsigned i = 0; i &lt; size; ++i)
-        [result[i].get() setTarget:target];
</del><ins>+    for (auto&amp; item : result)
+        [item.get() setTarget:target];
</ins><span class="cx">     
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="lines">@@ -421,7 +435,7 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void WebContextMenuProxyMac::populate(const Vector&lt;WebContextMenuItemData&gt;&amp; items, const ContextMenuContextData&amp; context)
</del><ins>+void WebContextMenuProxyMac::populate(const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; items, const ContextMenuContextData&amp; context)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     if (context.needsServicesMenu()) {
</span><span class="lines">@@ -442,7 +456,7 @@
</span><span class="cx">     populateNSMenu(menu, nsMenuItemVector(items));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebContextMenuProxyMac::showContextMenu(const IntPoint&amp; menuLocation, const Vector&lt;WebContextMenuItemData&gt;&amp; items, const ContextMenuContextData&amp; context)
</del><ins>+void WebContextMenuProxyMac::showContextMenu(const IntPoint&amp; menuLocation, const Vector&lt;RefPtr&lt;WebContextMenuItem&gt;&gt;&amp; items, const ContextMenuContextData&amp; context)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS)
</span><span class="cx">     if (items.isEmpty() &amp;&amp; !context.needsServicesMenu())
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -944,6 +944,7 @@
</span><span class="cx">                 516319921628980A00E22F00 /* NetworkProcessProxyMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 516319911628980A00E22F00 /* NetworkProcessProxyMac.mm */; };
</span><span class="cx">                 5163199416289A6000E22F00 /* NetworkProcessMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51ACC9341628064800342550 /* NetworkProcessMessageReceiver.cpp */; };
</span><span class="cx">                 5163199516289A6300E22F00 /* NetworkProcessMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 51ACC9351628064800342550 /* NetworkProcessMessages.h */; };
</span><ins>+                5163EA451ACC7AE50012D1E4 /* NativeContextMenuItem.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */; };
</ins><span class="cx">                 51654EFD184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51654EFB184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp */; };
</span><span class="cx">                 51654EFE184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 51654EFC184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h */; };
</span><span class="cx">                 51654F00184EF34A007DC837 /* UniqueIDBDatabaseBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51654EFF184EF34A007DC837 /* UniqueIDBDatabaseBackingStore.h */; };
</span><span class="lines">@@ -3131,6 +3132,8 @@
</span><span class="cx">                 5160BFE013381DF900918999 /* LoggingFoundation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = LoggingFoundation.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 516311861858446600534647 /* WebCrossThreadCopier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCrossThreadCopier.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 516319911628980A00E22F00 /* NetworkProcessProxyMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkProcessProxyMac.mm; path = mac/NetworkProcessProxyMac.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                5163EA3F1ACC74820012D1E4 /* NativeContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeContextMenuItem.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NativeContextMenuItem.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 51654EFB184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UniqueIDBDatabaseBackingStoreSQLite.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51654EFC184EF33F007DC837 /* UniqueIDBDatabaseBackingStoreSQLite.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueIDBDatabaseBackingStoreSQLite.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51654EFF184EF34A007DC837 /* UniqueIDBDatabaseBackingStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UniqueIDBDatabaseBackingStore.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4736,6 +4739,7 @@
</span><span class="cx">                                 C58CDF2C1887609F00871536 /* InteractionInformationAtPosition.h */,
</span><span class="cx">                                 1A92DC1212F8BAB90017AF65 /* LayerTreeContext.cpp */,
</span><span class="cx">                                 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */,
</span><ins>+                                5163EA3F1ACC74820012D1E4 /* NativeContextMenuItem.h */,
</ins><span class="cx">                                 C02BFF1512514FD8009CCBEA /* NativeWebKeyboardEvent.h */,
</span><span class="cx">                                 31EA25D3134F78D6005B1452 /* NativeWebMouseEvent.h */,
</span><span class="cx">                                 263172CE18B469490065B9C3 /* NativeWebTouchEvent.h */,
</span><span class="lines">@@ -6529,6 +6533,7 @@
</span><span class="cx">                                 CDC3830D1721242D008A2FC3 /* CookieStorageShim.mm */,
</span><span class="cx">                                 CDC382F9172116D3008A2FC3 /* CookieStorageShimLibrary.cpp */,
</span><span class="cx">                                 CDC3830B172121CE008A2FC3 /* CookieStorageShimLibrary.h */,
</span><ins>+                                5163EA431ACC74AE0012D1E4 /* NativeContextMenuItem.mm */,
</ins><span class="cx">                                 C02BFF1D1251502E009CCBEA /* NativeWebKeyboardEventMac.mm */,
</span><span class="cx">                                 31EA25D0134F78B2005B1452 /* NativeWebMouseEventMac.mm */,
</span><span class="cx">                                 DF58C6351371ACA000F9A37C /* NativeWebWheelEventMac.mm */,
</span><span class="lines">@@ -9991,6 +9996,7 @@
</span><span class="cx">                                 BCA284D61492F2C7001F9042 /* WKConnection.mm in Sources */,
</span><span class="cx">                                 BC4A6296147313A0006C681A /* WKConnectionRef.cpp in Sources */,
</span><span class="cx">                                 0FCB4E4D18BBE044000FCFC9 /* WKContentView.mm in Sources */,
</span><ins>+                                5163EA451ACC7AE50012D1E4 /* NativeContextMenuItem.mm in Sources */,
</ins><span class="cx">                                 0FCB4E6D18BBF26A000FCFC9 /* WKContentViewInteraction.mm in Sources */,
</span><span class="cx">                                 BCB9E24C1120E15C00A137E0 /* WKContext.cpp in Sources */,
</span><span class="cx">                                 1AE52F971920263300A1FA37 /* WKContextConfigurationRef.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebContextMenuClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebContextMenuClient.h        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx">     
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     virtual void searchWithSpotlight() override;
</span><ins>+    virtual WebCore::ContextMenuItem shareSelectedTextMenuItem(const String&amp;) override;
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if USE(ACCESSIBILITY_CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportmacWebContextMenuClientMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm (182302 => 182303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm        2015-04-03 01:07:02 UTC (rev 182302)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebContextMenuClientMac.mm        2015-04-03 01:16:24 UTC (rev 182303)
</span><span class="lines">@@ -94,6 +94,11 @@
</span><span class="cx">     m_page-&gt;send(Messages::WebPageProxy::SearchWithSpotlight(selectedString));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ContextMenuItem WebContextMenuClient::shareSelectedTextMenuItem(const String&amp; selectedText)
+{
+    return ContextMenuItem(SubmenuType, ContextMenuItemTagShareMenu, emptyString());
+}
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTEXT_MENUS)
</span></span></pre>
</div>
</div>

</body>
</html>