<!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>[164720] 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/164720">164720</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2014-02-26 10:02:44 -0800 (Wed, 26 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Pipe experimental image controls menu up to WebKit2
https://bugs.webkit.org/show_bug.cgi?id=129339

Reviewed by Simon Fraser.

Source/WebCore:

Handle events for the image control, starting down the context menu code path if appropriate:
* html/shadow/mac/ImageControlsRootElementMac.cpp:
(WebCore::ImageControlsRootElementMac::defaultEventHandler):
* html/shadow/mac/ImageControlsRootElementMac.h:

Add a class to hold a HitTestResult and addition info about the current ContextMenu invocation:
* page/ContextMenuContext.cpp: Added.
(WebCore::ContextMenuContext::ContextMenuContext):
* page/ContextMenuContext.h: Added.
(WebCore::ContextMenuContext::hitTestResult):
(WebCore::ContextMenuContext::isImageControl):

Update ContextMenuController to work with ContextMenuContext instead of HitTestResult directly:
* page/ContextMenuController.cpp:
(WebCore::ContextMenuController::showContextMenu):
(WebCore::ContextMenuController::createContextMenu):
(WebCore::ContextMenuController::contextMenuItemSelected):
(WebCore::ContextMenuController::populate):
(WebCore::ContextMenuController::addInspectElementItem):
(WebCore::ContextMenuController::checkOrEnableIfNeeded):
(WebCore::ContextMenuController::showImageControlsMenu):
* page/ContextMenuController.h:
(WebCore::ContextMenuController::contextMenu):
(WebCore::ContextMenuController::setContextMenuContext):
(WebCore::ContextMenuController::context):
(WebCore::ContextMenuController::hitTestResult):

* CMakeLists.txt:
* GNUmakefile.list.am:
* WebCore.vcxproj/WebCore.vcxproj:
* WebCore.xcodeproj/project.pbxproj:

Source/WebKit2:

Add a WebKit object to represent the data from a ContextMenuContext object that can be shared via IPC:
* Shared/ContextMenuContextData.cpp: Added.
(WebKit::ContextMenuContextData::ContextMenuContextData):
(WebKit::ContextMenuContextData::encode):
(WebKit::ContextMenuContextData::decode):
* Shared/ContextMenuContextData.h: Added.
(WebKit::ContextMenuContextData::webHitTestResultData):
(WebKit::ContextMenuContextData::isImageControl):

Update the rest of WK2 to use this object instead of WebHitTestResult::Data directly:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::showContextMenu):
(WebKit::WebPageProxy::internalShowContextMenu): Also make an ENABLE(IMAGE_CONTROLS) change here.
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:

* WebProcess/WebPage/WebContextMenu.cpp:
(WebKit::WebContextMenu::show):

* CMakeLists.txt:
* GNUmakefile.list.am:
* WebKit2.xcodeproj/project.pbxproj:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreGNUmakefilelistam">trunk/Source/WebCore/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceWebCoreWebCorevcxprojWebCorevcxproj">trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowmacImageControlsRootElementMaccpp">trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlshadowmacImageControlsRootElementMach">trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.h</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuControllercpp">trunk/Source/WebCore/page/ContextMenuController.cpp</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuControllerh">trunk/Source/WebCore/page/ContextMenuController.h</a></li>
<li><a href="#trunkSourceWebKit2CMakeListstxt">trunk/Source/WebKit2/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2GNUmakefilelistam">trunk/Source/WebKit2/GNUmakefile.list.am</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebContextMenucpp">trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorepageContextMenuContextcpp">trunk/Source/WebCore/page/ContextMenuContext.cpp</a></li>
<li><a href="#trunkSourceWebCorepageContextMenuContexth">trunk/Source/WebCore/page/ContextMenuContext.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>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/CMakeLists.txt        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -1689,6 +1689,7 @@
</span><span class="cx">     page/Chrome.cpp
</span><span class="cx">     page/Console.cpp
</span><span class="cx">     page/ContentSecurityPolicy.cpp
</span><ins>+    page/ContextMenuContext.cpp
</ins><span class="cx">     page/ContextMenuController.cpp
</span><span class="cx">     page/Crypto.cpp
</span><span class="cx">     page/DOMSecurityPolicy.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/ChangeLog        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -1,3 +1,42 @@
</span><ins>+2014-02-26  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Pipe experimental image controls menu up to WebKit2
+        https://bugs.webkit.org/show_bug.cgi?id=129339
+
+        Reviewed by Simon Fraser.
+
+        Handle events for the image control, starting down the context menu code path if appropriate:
+        * html/shadow/mac/ImageControlsRootElementMac.cpp:
+        (WebCore::ImageControlsRootElementMac::defaultEventHandler):
+        * html/shadow/mac/ImageControlsRootElementMac.h:
+
+        Add a class to hold a HitTestResult and addition info about the current ContextMenu invocation:
+        * page/ContextMenuContext.cpp: Added.
+        (WebCore::ContextMenuContext::ContextMenuContext):
+        * page/ContextMenuContext.h: Added.
+        (WebCore::ContextMenuContext::hitTestResult):
+        (WebCore::ContextMenuContext::isImageControl):
+
+        Update ContextMenuController to work with ContextMenuContext instead of HitTestResult directly:
+        * page/ContextMenuController.cpp:
+        (WebCore::ContextMenuController::showContextMenu):
+        (WebCore::ContextMenuController::createContextMenu):
+        (WebCore::ContextMenuController::contextMenuItemSelected):
+        (WebCore::ContextMenuController::populate):
+        (WebCore::ContextMenuController::addInspectElementItem):
+        (WebCore::ContextMenuController::checkOrEnableIfNeeded):
+        (WebCore::ContextMenuController::showImageControlsMenu):
+        * page/ContextMenuController.h:
+        (WebCore::ContextMenuController::contextMenu):
+        (WebCore::ContextMenuController::setContextMenuContext):
+        (WebCore::ContextMenuController::context):
+        (WebCore::ContextMenuController::hitTestResult):
+
+        * CMakeLists.txt:
+        * GNUmakefile.list.am:
+        * WebCore.vcxproj/WebCore.vcxproj:
+        * WebCore.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2014-02-26  Zan Dobersek  &lt;zdobersek@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION(r162947): Document::topDocument() returns an incorrect reference for cached Documents
</span></span></pre></div>
<a id="trunkSourceWebCoreGNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/GNUmakefile.list.am (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/GNUmakefile.list.am        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/GNUmakefile.list.am        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -4046,6 +4046,8 @@
</span><span class="cx">         Source/WebCore/page/ContentSecurityPolicy.cpp \
</span><span class="cx">         Source/WebCore/page/ContentSecurityPolicy.h \
</span><span class="cx">         Source/WebCore/page/ContextMenuClient.h \
</span><ins>+        Source/WebCore/page/ContextMenuContext.cpp \
+        Source/WebCore/page/ContextMenuContext.h \
</ins><span class="cx">         Source/WebCore/page/ContextMenuController.cpp \
</span><span class="cx">         Source/WebCore/page/ContextMenuController.h \
</span><span class="cx">         Source/WebCore/page/ContextMenuProvider.h \
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorevcxprojWebCorevcxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -6967,6 +6967,7 @@
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\animation\CompositeAnimation.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\Console.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\ContentSecurityPolicy.cpp&quot; /&gt;
</span><ins>+    &lt;ClCompile Include=&quot;..\page\ContextMenuContext.cpp&quot; /&gt;
</ins><span class="cx">     &lt;ClCompile Include=&quot;..\page\ContextMenuController.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\Crypto.cpp&quot; /&gt;
</span><span class="cx">     &lt;ClCompile Include=&quot;..\page\animation\CSSPropertyAnimation.cpp&quot; /&gt;
</span><span class="lines">@@ -18656,6 +18657,7 @@
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\Console.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\ContentSecurityPolicy.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\ContextMenuClient.h&quot; /&gt;
</span><ins>+    &lt;ClInclude Include=&quot;..\page\ContextMenuContext.h&quot; /&gt;
</ins><span class="cx">     &lt;ClInclude Include=&quot;..\page\ContextMenuController.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\ContextMenuProvider.h&quot; /&gt;
</span><span class="cx">     &lt;ClInclude Include=&quot;..\page\Crypto.h&quot; /&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -1739,6 +1739,8 @@
</span><span class="cx">                 510194451836F7E500925523 /* IDBCursorBackendOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 510194431836F7E400925523 /* IDBCursorBackendOperations.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 51059DDD1820B17600DFF9B1 /* IDBTransactionBackendOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51059DD91820B17600DFF9B1 /* IDBTransactionBackendOperations.cpp */; };
</span><span class="cx">                 51059DDE1820B17600DFF9B1 /* IDBTransactionBackendOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 51059DDA1820B17600DFF9B1 /* IDBTransactionBackendOperations.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                5106D7BD18BDB76F000AB166 /* ContextMenuContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5106D7BB18BDB76F000AB166 /* ContextMenuContext.cpp */; };
+                5106D7BE18BDB76F000AB166 /* ContextMenuContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 5106D7BC18BDB76F000AB166 /* ContextMenuContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 510A326F18318431003C5326 /* IDBServerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 510A326E18318431003C5326 /* IDBServerConnection.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 510B7DB7182D9F5D009BF957 /* IDBTransactionBackend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510B7DB5182D9F5D009BF957 /* IDBTransactionBackend.cpp */; };
</span><span class="cx">                 510B7DB8182D9F5D009BF957 /* IDBTransactionBackend.h in Headers */ = {isa = PBXBuildFile; fileRef = 510B7DB6182D9F5D009BF957 /* IDBTransactionBackend.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -8625,6 +8627,8 @@
</span><span class="cx">                 510194431836F7E400925523 /* IDBCursorBackendOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBCursorBackendOperations.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51059DD91820B17600DFF9B1 /* IDBTransactionBackendOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBTransactionBackendOperations.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51059DDA1820B17600DFF9B1 /* IDBTransactionBackendOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBTransactionBackendOperations.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                5106D7BB18BDB76F000AB166 /* ContextMenuContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContextMenuContext.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                5106D7BC18BDB76F000AB166 /* ContextMenuContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContextMenuContext.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 510A326E18318431003C5326 /* IDBServerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBServerConnection.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 510B7DB5182D9F5D009BF957 /* IDBTransactionBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IDBTransactionBackend.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 510B7DB6182D9F5D009BF957 /* IDBTransactionBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBTransactionBackend.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16043,6 +16047,8 @@
</span><span class="cx">                                 97C471D912F925BC0086354B /* ContentSecurityPolicy.cpp */,
</span><span class="cx">                                 97C471DA12F925BD0086354B /* ContentSecurityPolicy.h */,
</span><span class="cx">                                 065AD4F20B0C2EDA005A2B1D /* ContextMenuClient.h */,
</span><ins>+                                5106D7BB18BDB76F000AB166 /* ContextMenuContext.cpp */,
+                                5106D7BC18BDB76F000AB166 /* ContextMenuContext.h */,
</ins><span class="cx">                                 065AD4F30B0C2EDA005A2B1D /* ContextMenuController.cpp */,
</span><span class="cx">                                 065AD4F40B0C2EDA005A2B1D /* ContextMenuController.h */,
</span><span class="cx">                                 7ADE722510CBBB9B006B3B3A /* ContextMenuProvider.h */,
</span><span class="lines">@@ -24524,6 +24530,7 @@
</span><span class="cx">                                 450CEBF115073BBE002BB149 /* LabelableElement.h in Headers */,
</span><span class="cx">                                 A456FA2711AD4A830020B420 /* LabelsNodeList.h in Headers */,
</span><span class="cx">                                 85EC9AFB0A71A2C600EEEAED /* Language.h in Headers */,
</span><ins>+                                5106D7BE18BDB76F000AB166 /* ContextMenuContext.h in Headers */,
</ins><span class="cx">                                 2917B5621473496C0052C9D0 /* LayerFlushScheduler.h in Headers */,
</span><span class="cx">                                 2917B5631473496C0052C9D0 /* LayerFlushSchedulerClient.h in Headers */,
</span><span class="cx">                                 93F72AF31666EDFC002A02BD /* LayerPool.h in Headers */,
</span><span class="lines">@@ -26387,6 +26394,7 @@
</span><span class="cx">                                 85031B3C0A44EFC700F992E0 /* BeforeUnloadEvent.cpp in Sources */,
</span><span class="cx">                                 B2C3DA230D006C1D00EF6F26 /* BidiContext.cpp in Sources */,
</span><span class="cx">                                 BCE7898B1120E8020060ECE5 /* BidiRun.cpp in Sources */,
</span><ins>+                                5106D7BD18BDB76F000AB166 /* ContextMenuContext.cpp in Sources */,
</ins><span class="cx">                                 FD31608C12B026F700C1A359 /* Biquad.cpp in Sources */,
</span><span class="cx">                                 FD31602412B0267600C1A359 /* BiquadDSPKernel.cpp in Sources */,
</span><span class="cx">                                 FDC54F041399B0DA008D9117 /* BiquadFilterNode.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowmacImageControlsRootElementMaccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -28,6 +28,9 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(IMAGE_CONTROLS)
</span><span class="cx"> 
</span><ins>+#include &quot;ContextMenuController.h&quot;
+#include &quot;Event.h&quot;
+#include &quot;Page.h&quot;
</ins><span class="cx"> #include &quot;Text.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -61,6 +64,18 @@
</span><span class="cx">     return controls.release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ImageControlsRootElementMac::defaultEventHandler(Event* event)
+{
+    if (event-&gt;type() == eventNames().clickEvent) {
+        if (Page* page = document().page())
+            page-&gt;contextMenuController().showImageControlsMenu(event);
+
+        return;
+    }
+    
+    HTMLDivElement::defaultEventHandler(event);
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(IMAGE_CONTROLS)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlshadowmacImageControlsRootElementMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.h (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.h        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/html/shadow/mac/ImageControlsRootElementMac.h        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -40,6 +40,8 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     ImageControlsRootElementMac(Document&amp;);
</span><ins>+
+    virtual void defaultEventHandler(Event*) override;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuContextcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/ContextMenuContext.cpp (0 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuContext.cpp                                (rev 0)
+++ trunk/Source/WebCore/page/ContextMenuContext.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+/*
+ * Copyright (C) 2014 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. ``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 COMPUTER, INC. OR
+ * 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;ContextMenuContext.h&quot;
+
+#if ENABLE(CONTEXT_MENUS)
+
+namespace WebCore {
+
+ContextMenuContext::ContextMenuContext()
+#if ENABLE(IMAGE_CONTROLS)
+    : m_isImageControl(false)
+#endif
+{
+}
+
+ContextMenuContext::ContextMenuContext(const HitTestResult&amp; hitTestResult, bool isImageControl)
+    : m_hitTestResult(hitTestResult)
+#if ENABLE(IMAGE_CONTROLS)
+    , m_isImageControl(isImageControl)
+#endif
+{
+    ASSERT_UNUSED(isImageControl, true);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(CONTEXT_MENUS)
</ins></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuContexth"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/page/ContextMenuContext.h (0 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuContext.h                                (rev 0)
+++ trunk/Source/WebCore/page/ContextMenuContext.h        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+/*
+ * Copyright (C) 2014 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. ``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 COMPUTER, INC. OR
+ * 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 ContextMenuContext_h
+#define ContextMenuContext_h
+
+#if ENABLE(CONTEXT_MENUS)
+
+#include &quot;HitTestResult.h&quot;
+
+namespace WebCore {
+
+class ContextMenuContext {
+public:
+    ContextMenuContext();
+    ContextMenuContext(const HitTestResult&amp;, bool isImageControl = false);
+
+    const HitTestResult&amp; hitTestResult() const { return m_hitTestResult; }
+
+#if ENABLE(IMAGE_CONTROLS)
+    bool isImageControl() const { return m_isImageControl; }
+#endif
+
+private:
+
+    HitTestResult m_hitTestResult;
+
+#if ENABLE(IMAGE_CONTROLS)
+    bool m_isImageControl;
+#endif
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(CONTEXT_MENUS)
+#endif // ContextMenuContext_h
</ins></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuControllercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ContextMenuController.cpp (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuController.cpp        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/page/ContextMenuController.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -121,7 +121,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_menuProvider-&gt;populateContextMenu(m_contextMenu.get());
</span><del>-    if (m_hitTestResult.isSelected()) {
</del><ins>+    if (m_context.hitTestResult().isSelected()) {
</ins><span class="cx">         appendItem(*separatorItem(), m_contextMenu.get());
</span><span class="cx">         populate();
</span><span class="cx">     }
</span><span class="lines">@@ -138,13 +138,18 @@
</span><span class="cx">     MouseEvent&amp; mouseEvent = toMouseEvent(*event);
</span><span class="cx">     HitTestResult result(mouseEvent.absoluteLocation());
</span><span class="cx"> 
</span><del>-    if (Frame* frame = event-&gt;target()-&gt;toNode()-&gt;document().frame())
</del><ins>+    Node* node = event-&gt;target()-&gt;toNode();
+    if (Frame* frame = node-&gt;document().frame())
</ins><span class="cx">         result = frame-&gt;eventHandler().hitTestResultAtPoint(mouseEvent.absoluteLocation());
</span><del>-
</del><ins>+    
</ins><span class="cx">     if (!result.innerNonSharedNode())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    m_hitTestResult = result;
</del><ins>+#if ENABLE(IMAGE_CONTROLS)
+    m_context = ContextMenuContext(result, node-&gt;isImageControlsRootElement());
+#else
+    m_context = ContextMenuContext(result);
+#endif
</ins><span class="cx"> 
</span><span class="cx">     return adoptPtr(new ContextMenu);
</span><span class="cx"> }
</span><span class="lines">@@ -208,65 +213,65 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Frame* frame = m_hitTestResult.innerNonSharedNode()-&gt;document().frame();
</del><ins>+    Frame* frame = m_context.hitTestResult().innerNonSharedNode()-&gt;document().frame();
</ins><span class="cx">     if (!frame)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     switch (item-&gt;action()) {
</span><span class="cx">     case ContextMenuItemTagOpenLinkInNewWindow:
</span><del>-        openNewWindow(m_hitTestResult.absoluteLinkURL(), frame);
</del><ins>+        openNewWindow(m_context.hitTestResult().absoluteLinkURL(), frame);
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagDownloadLinkToDisk:
</span><span class="cx">         // FIXME: Some day we should be able to do this from within WebCore. (Bug 117709)
</span><del>-        m_client.downloadURL(m_hitTestResult.absoluteLinkURL());
</del><ins>+        m_client.downloadURL(m_context.hitTestResult().absoluteLinkURL());
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagCopyLinkToClipboard:
</span><del>-        frame-&gt;editor().copyURL(m_hitTestResult.absoluteLinkURL(), m_hitTestResult.textContent());
</del><ins>+        frame-&gt;editor().copyURL(m_context.hitTestResult().absoluteLinkURL(), m_context.hitTestResult().textContent());
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagOpenImageInNewWindow:
</span><del>-        openNewWindow(m_hitTestResult.absoluteImageURL(), frame);
</del><ins>+        openNewWindow(m_context.hitTestResult().absoluteImageURL(), frame);
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagDownloadImageToDisk:
</span><span class="cx">         // FIXME: Some day we should be able to do this from within WebCore. (Bug 117709)
</span><del>-        m_client.downloadURL(m_hitTestResult.absoluteImageURL());
</del><ins>+        m_client.downloadURL(m_context.hitTestResult().absoluteImageURL());
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagCopyImageToClipboard:
</span><span class="cx">         // FIXME: The Pasteboard class is not written yet
</span><span class="cx">         // For now, call into the client. This is temporary!
</span><del>-        frame-&gt;editor().copyImage(m_hitTestResult);
</del><ins>+        frame-&gt;editor().copyImage(m_context.hitTestResult());
</ins><span class="cx">         break;
</span><span class="cx"> #if PLATFORM(GTK) || PLATFORM(EFL)
</span><span class="cx">     case ContextMenuItemTagCopyImageUrlToClipboard:
</span><del>-        frame-&gt;editor().copyURL(m_hitTestResult.absoluteImageURL(), m_hitTestResult.textContent());
</del><ins>+        frame-&gt;editor().copyURL(m_context.hitTestResult().absoluteImageURL(), m_context.hitTestResult().textContent());
</ins><span class="cx">         break;
</span><span class="cx"> #endif
</span><span class="cx">     case ContextMenuItemTagOpenMediaInNewWindow:
</span><del>-        openNewWindow(m_hitTestResult.absoluteMediaURL(), frame);
</del><ins>+        openNewWindow(m_context.hitTestResult().absoluteMediaURL(), frame);
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagDownloadMediaToDisk:
</span><span class="cx">         // FIXME: Some day we should be able to do this from within WebCore. (Bug 117709)
</span><del>-        m_client.downloadURL(m_hitTestResult.absoluteMediaURL());
</del><ins>+        m_client.downloadURL(m_context.hitTestResult().absoluteMediaURL());
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagCopyMediaLinkToClipboard:
</span><del>-        frame-&gt;editor().copyURL(m_hitTestResult.absoluteMediaURL(), m_hitTestResult.textContent());
</del><ins>+        frame-&gt;editor().copyURL(m_context.hitTestResult().absoluteMediaURL(), m_context.hitTestResult().textContent());
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagToggleMediaControls:
</span><del>-        m_hitTestResult.toggleMediaControlsDisplay();
</del><ins>+        m_context.hitTestResult().toggleMediaControlsDisplay();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagToggleMediaLoop:
</span><del>-        m_hitTestResult.toggleMediaLoopPlayback();
</del><ins>+        m_context.hitTestResult().toggleMediaLoopPlayback();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagToggleVideoFullscreen:
</span><del>-        m_hitTestResult.toggleMediaFullscreenState();
</del><ins>+        m_context.hitTestResult().toggleMediaFullscreenState();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagEnterVideoFullscreen:
</span><del>-        m_hitTestResult.enterFullscreenForVideo();
</del><ins>+        m_context.hitTestResult().enterFullscreenForVideo();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagMediaPlayPause:
</span><del>-        m_hitTestResult.toggleMediaPlayState();
</del><ins>+        m_context.hitTestResult().toggleMediaPlayState();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagMediaMute:
</span><del>-        m_hitTestResult.toggleMediaMuteState();
</del><ins>+        m_context.hitTestResult().toggleMediaMuteState();
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagOpenFrameInNewWindow: {
</span><span class="cx">         DocumentLoader* loader = frame-&gt;loader().documentLoader();
</span><span class="lines">@@ -376,13 +381,13 @@
</span><span class="cx">         m_client.lookUpInDictionary(frame);
</span><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagOpenLink:
</span><del>-        if (Frame* targetFrame = m_hitTestResult.targetFrame())
-            targetFrame-&gt;loader().loadFrameRequest(FrameLoadRequest(frame-&gt;document()-&gt;securityOrigin(), ResourceRequest(m_hitTestResult.absoluteLinkURL(), frame-&gt;loader().outgoingReferrer())), false, false, 0, 0, MaybeSendReferrer);
</del><ins>+        if (Frame* targetFrame = m_context.hitTestResult().targetFrame())
+            targetFrame-&gt;loader().loadFrameRequest(FrameLoadRequest(frame-&gt;document()-&gt;securityOrigin(), ResourceRequest(m_context.hitTestResult().absoluteLinkURL(), frame-&gt;loader().outgoingReferrer())), false, false, 0, 0, MaybeSendReferrer);
</ins><span class="cx">         else
</span><del>-            openNewWindow(m_hitTestResult.absoluteLinkURL(), frame);
</del><ins>+            openNewWindow(m_context.hitTestResult().absoluteLinkURL(), frame);
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagOpenLinkInThisWindow:
</span><del>-        frame-&gt;loader().loadFrameRequest(FrameLoadRequest(frame-&gt;document()-&gt;securityOrigin(), ResourceRequest(m_hitTestResult.absoluteLinkURL(), frame-&gt;loader().outgoingReferrer())), false, false, 0, 0, MaybeSendReferrer);
</del><ins>+        frame-&gt;loader().loadFrameRequest(FrameLoadRequest(frame-&gt;document()-&gt;securityOrigin(), ResourceRequest(m_context.hitTestResult().absoluteLinkURL(), frame-&gt;loader().outgoingReferrer())), false, false, 0, 0, MaybeSendReferrer);
</ins><span class="cx">         break;
</span><span class="cx">     case ContextMenuItemTagBold:
</span><span class="cx">         frame-&gt;editor().command(&quot;ToggleBold&quot;).execute();
</span><span class="lines">@@ -400,7 +405,7 @@
</span><span class="cx">     case ContextMenuItemTagStartSpeaking: {
</span><span class="cx">         RefPtr&lt;Range&gt; selectedRange = frame-&gt;selection().toNormalizedRange();
</span><span class="cx">         if (!selectedRange || selectedRange-&gt;collapsed(IGNORE_EXCEPTION)) {
</span><del>-            Document&amp; document = m_hitTestResult.innerNonSharedNode()-&gt;document();
</del><ins>+            Document&amp; document = m_context.hitTestResult().innerNonSharedNode()-&gt;document();
</ins><span class="cx">             selectedRange = document.createRange();
</span><span class="cx">             selectedRange-&gt;selectNode(document.documentElement(), IGNORE_EXCEPTION);
</span><span class="cx">         }
</span><span class="lines">@@ -469,7 +474,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">     case ContextMenuItemTagChangeBack:
</span><del>-        frame-&gt;editor().changeBackToReplacedString(m_hitTestResult.replacedString());
</del><ins>+        frame-&gt;editor().changeBackToReplacedString(m_context.hitTestResult().replacedString());
</ins><span class="cx">         break;
</span><span class="cx"> #endif
</span><span class="cx"> #if USE(AUTOMATIC_TEXT_REPLACEMENT)
</span><span class="lines">@@ -498,7 +503,7 @@
</span><span class="cx"> #if ENABLE(INSPECTOR)
</span><span class="cx">     case ContextMenuItemTagInspectElement:
</span><span class="cx">         if (Page* page = frame-&gt;page())
</span><del>-            page-&gt;inspectorController().inspect(m_hitTestResult.innerNonSharedNode());
</del><ins>+            page-&gt;inspectorController().inspect(m_context.hitTestResult().innerNonSharedNode());
</ins><span class="cx">         break;
</span><span class="cx"> #endif
</span><span class="cx">     case ContextMenuItemTagDictationAlternative:
</span><span class="lines">@@ -804,20 +809,26 @@
</span><span class="cx">     ContextMenuItem SelectAllItem(ActionType, ContextMenuItemTagSelectAll, contextMenuItemTagSelectAll());
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    Node* node = m_hitTestResult.innerNonSharedNode();
</del><ins>+    Node* node = m_context.hitTestResult().innerNonSharedNode();
</ins><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx"> #if PLATFORM(GTK)
</span><del>-    if (!m_hitTestResult.isContentEditable() &amp;&amp; (node-&gt;isElementNode() &amp;&amp; toElement(node)-&gt;isFormControlElement()))
</del><ins>+    if (!m_context.hitTestResult().isContentEditable() &amp;&amp; (node-&gt;isElementNode() &amp;&amp; toElement(node)-&gt;isFormControlElement()))
</ins><span class="cx">         return;
</span><span class="cx"> #endif
</span><span class="cx">     Frame* frame = node-&gt;document().frame();
</span><span class="cx">     if (!frame)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    if (!m_hitTestResult.isContentEditable()) {
</del><ins>+#if ENABLE(IMAGE_CONTROLS)
+    // The default image control menu gets populated solely by the platform.
+    if (m_context.isImageControl())
+        return;
+#endif
+
+    if (!m_context.hitTestResult().isContentEditable()) {
</ins><span class="cx">         FrameLoader&amp; loader = frame-&gt;loader();
</span><del>-        URL linkURL = m_hitTestResult.absoluteLinkURL();
</del><ins>+        URL linkURL = m_context.hitTestResult().absoluteLinkURL();
</ins><span class="cx">         if (!linkURL.isEmpty()) {
</span><span class="cx">             if (loader.client().canHandleRequest(ResourceRequest(linkURL))) {
</span><span class="cx">                 appendItem(OpenLinkItem, m_contextMenu.get());
</span><span class="lines">@@ -827,21 +838,21 @@
</span><span class="cx">             appendItem(CopyLinkItem, m_contextMenu.get());
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        URL imageURL = m_hitTestResult.absoluteImageURL();
</del><ins>+        URL imageURL = m_context.hitTestResult().absoluteImageURL();
</ins><span class="cx">         if (!imageURL.isEmpty()) {
</span><span class="cx">             if (!linkURL.isEmpty())
</span><span class="cx">                 appendItem(*separatorItem(), m_contextMenu.get());
</span><span class="cx"> 
</span><span class="cx">             appendItem(OpenImageInNewWindowItem, m_contextMenu.get());
</span><span class="cx">             appendItem(DownloadImageItem, m_contextMenu.get());
</span><del>-            if (imageURL.isLocalFile() || m_hitTestResult.image())
</del><ins>+            if (imageURL.isLocalFile() || m_context.hitTestResult().image())
</ins><span class="cx">                 appendItem(CopyImageItem, m_contextMenu.get());
</span><span class="cx"> #if PLATFORM(GTK) || PLATFORM(EFL)
</span><span class="cx">             appendItem(CopyImageUrlItem, m_contextMenu.get());
</span><span class="cx"> #endif
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        URL mediaURL = m_hitTestResult.absoluteMediaURL();
</del><ins>+        URL mediaURL = m_context.hitTestResult().absoluteMediaURL();
</ins><span class="cx">         if (!mediaURL.isEmpty()) {
</span><span class="cx">             if (!linkURL.isEmpty() || !imageURL.isEmpty())
</span><span class="cx">                 appendItem(*separatorItem(), m_contextMenu.get());
</span><span class="lines">@@ -863,7 +874,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (imageURL.isEmpty() &amp;&amp; linkURL.isEmpty() &amp;&amp; mediaURL.isEmpty()) {
</span><del>-            if (m_hitTestResult.isSelected()) {
</del><ins>+            if (m_context.hitTestResult().isSelected()) {
</ins><span class="cx">                 if (selectionContainsPossibleWord(frame)) {
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">                     String selectedString = frame-&gt;displayStringModifiedByEncoding(frame-&gt;editor().selectedText());
</span><span class="lines">@@ -959,7 +970,7 @@
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">                 } else {
</span><span class="cx">                     // If the string was autocorrected, generate a contextual menu item allowing it to be changed back.
</span><del>-                    String replacedString = m_hitTestResult.replacedString();
</del><ins>+                    String replacedString = m_context.hitTestResult().replacedString();
</ins><span class="cx">                     if (!replacedString.isEmpty()) {
</span><span class="cx">                         ContextMenuItem item(ActionType, ContextMenuItemTagChangeBack, contextMenuItemTagChangeBack(replacedString));
</span><span class="cx">                         appendItem(item, m_contextMenu.get());
</span><span class="lines">@@ -972,7 +983,7 @@
</span><span class="cx"> 
</span><span class="cx">             if (!haveContextMenuItemsForMisspellingOrGrammer) {
</span><span class="cx">                 // Spelling and grammar checking is mutually exclusive with dictation alternatives.
</span><del>-                Vector&lt;String&gt; dictationAlternatives = m_hitTestResult.dictationAlternatives();
</del><ins>+                Vector&lt;String&gt; dictationAlternatives = m_context.hitTestResult().dictationAlternatives();
</ins><span class="cx">                 if (!dictationAlternatives.isEmpty()) {
</span><span class="cx">                     for (size_t i = 0; i &lt; dictationAlternatives.size(); ++i) {
</span><span class="cx">                         ContextMenuItem item(ActionType, ContextMenuItemTagDictationAlternative, dictationAlternatives[i]);
</span><span class="lines">@@ -984,7 +995,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         FrameLoader&amp; loader = frame-&gt;loader();
</span><del>-        URL linkURL = m_hitTestResult.absoluteLinkURL();
</del><ins>+        URL linkURL = m_context.hitTestResult().absoluteLinkURL();
</ins><span class="cx">         if (!linkURL.isEmpty()) {
</span><span class="cx">             if (loader.client().canHandleRequest(ResourceRequest(linkURL))) {
</span><span class="cx">                 appendItem(OpenLinkItem, m_contextMenu.get());
</span><span class="lines">@@ -995,7 +1006,7 @@
</span><span class="cx">             appendItem(*separatorItem(), m_contextMenu.get());
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (m_hitTestResult.isSelected() &amp;&amp; !inPasswordField &amp;&amp; selectionContainsPossibleWord(frame)) {
</del><ins>+        if (m_context.hitTestResult().isSelected() &amp;&amp; !inPasswordField &amp;&amp; selectionContainsPossibleWord(frame)) {
</ins><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx">             String selectedString = frame-&gt;displayStringModifiedByEncoding(frame-&gt;editor().selectedText());
</span><span class="cx">             ContextMenuItem LookUpInDictionaryItem(ActionType, ContextMenuItemTagLookUpInDictionary, contextMenuItemTagLookUpInDictionary(selectedString));
</span><span class="lines">@@ -1084,7 +1095,7 @@
</span><span class="cx"> #if ENABLE(INSPECTOR)
</span><span class="cx"> void ContextMenuController::addInspectElementItem()
</span><span class="cx"> {
</span><del>-    Node* node = m_hitTestResult.innerNonSharedNode();
</del><ins>+    Node* node = m_context.hitTestResult().innerNonSharedNode();
</ins><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -1112,7 +1123,7 @@
</span><span class="cx">     if (item.type() == SeparatorType)
</span><span class="cx">         return;
</span><span class="cx">     
</span><del>-    Frame* frame = m_hitTestResult.innerNonSharedNode()-&gt;document().frame();
</del><ins>+    Frame* frame = m_context.hitTestResult().innerNonSharedNode()-&gt;document().frame();
</ins><span class="cx">     if (!frame)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -1310,40 +1321,40 @@
</span><span class="cx"> #endif
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagOpenMediaInNewWindow:
</span><del>-            if (m_hitTestResult.mediaIsVideo())
</del><ins>+            if (m_context.hitTestResult().mediaIsVideo())
</ins><span class="cx">                 item.setTitle(contextMenuItemTagOpenVideoInNewWindow());
</span><span class="cx">             else
</span><span class="cx">                 item.setTitle(contextMenuItemTagOpenAudioInNewWindow());
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagDownloadMediaToDisk:
</span><del>-            if (m_hitTestResult.mediaIsVideo())
</del><ins>+            if (m_context.hitTestResult().mediaIsVideo())
</ins><span class="cx">                 item.setTitle(contextMenuItemTagDownloadVideoToDisk());
</span><span class="cx">             else
</span><span class="cx">                 item.setTitle(contextMenuItemTagDownloadAudioToDisk());
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagCopyMediaLinkToClipboard:
</span><del>-            if (m_hitTestResult.mediaIsVideo())
</del><ins>+            if (m_context.hitTestResult().mediaIsVideo())
</ins><span class="cx">                 item.setTitle(contextMenuItemTagCopyVideoLinkToClipboard());
</span><span class="cx">             else
</span><span class="cx">                 item.setTitle(contextMenuItemTagCopyAudioLinkToClipboard());
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagToggleMediaControls:
</span><span class="cx"> #if SUPPORTS_TOGGLE_SHOW_HIDE_MEDIA_CONTROLS
</span><del>-            item.setTitle(m_hitTestResult.mediaControlsEnabled() ? contextMenuItemTagHideMediaControls() : contextMenuItemTagShowMediaControls());
</del><ins>+            item.setTitle(m_context.hitTestResult().mediaControlsEnabled() ? contextMenuItemTagHideMediaControls() : contextMenuItemTagShowMediaControls());
</ins><span class="cx"> #else
</span><del>-            shouldCheck = m_hitTestResult.mediaControlsEnabled();
</del><ins>+            shouldCheck = m_context.hitTestResult().mediaControlsEnabled();
</ins><span class="cx"> #endif
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagToggleMediaLoop:
</span><del>-            shouldCheck = m_hitTestResult.mediaLoopEnabled();
</del><ins>+            shouldCheck = m_context.hitTestResult().mediaLoopEnabled();
</ins><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagToggleVideoFullscreen:
</span><span class="cx"> #if SUPPORTS_TOGGLE_VIDEO_FULLSCREEN
</span><del>-            item.setTitle(m_hitTestResult.mediaIsInFullscreen() ? contextMenuItemTagExitVideoFullscreen() : contextMenuItemTagEnterVideoFullscreen());
</del><ins>+            item.setTitle(m_context.hitTestResult().mediaIsInFullscreen() ? contextMenuItemTagExitVideoFullscreen() : contextMenuItemTagEnterVideoFullscreen());
</ins><span class="cx">             break;
</span><span class="cx"> #endif
</span><span class="cx">         case ContextMenuItemTagEnterVideoFullscreen:
</span><del>-            shouldEnable = m_hitTestResult.mediaSupportsFullscreen();
</del><ins>+            shouldEnable = m_context.hitTestResult().mediaSupportsFullscreen();
</ins><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagOpenFrameInNewWindow:
</span><span class="cx">         case ContextMenuItemTagSpellingGuess:
</span><span class="lines">@@ -1382,14 +1393,14 @@
</span><span class="cx">         case ContextMenuItemTagDictationAlternative:
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagMediaPlayPause:
</span><del>-            if (m_hitTestResult.mediaPlaying())
</del><ins>+            if (m_context.hitTestResult().mediaPlaying())
</ins><span class="cx">                 item.setTitle(contextMenuItemTagMediaPause());
</span><span class="cx">             else
</span><span class="cx">                 item.setTitle(contextMenuItemTagMediaPlay());
</span><span class="cx">             break;
</span><span class="cx">         case ContextMenuItemTagMediaMute:
</span><del>-            shouldEnable = m_hitTestResult.mediaHasAudio();
-            shouldCheck = shouldEnable &amp;&amp;  m_hitTestResult.mediaMuted();
</del><ins>+            shouldEnable = m_context.hitTestResult().mediaHasAudio();
+            shouldCheck = shouldEnable &amp;&amp;  m_context.hitTestResult().mediaMuted();
</ins><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1411,6 +1422,15 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if ENABLE(IMAGE_CONTROLS)
+void ContextMenuController::showImageControlsMenu(Event* event)
+{
+    clearContextMenu();
+    handleContextMenuEvent(event);
+    m_client.showContextMenu();
+}
+#endif
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(CONTEXT_MENUS)
</span></span></pre></div>
<a id="trunkSourceWebCorepageContextMenuControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ContextMenuController.h (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ContextMenuController.h        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebCore/page/ContextMenuController.h        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx"> 
</span><del>-#include &quot;HitTestResult.h&quot;
</del><ins>+#include &quot;ContextMenuContext.h&quot;
</ins><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> #include &lt;wtf/OwnPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/PassRefPtr.h&gt;
</span><span class="lines">@@ -36,62 +36,67 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-    class ContextMenu;
-    class ContextMenuClient;
-    class ContextMenuItem;
-    class ContextMenuProvider;
-    class Event;
-    class Page;
</del><ins>+class ContextMenu;
+class ContextMenuClient;
+class ContextMenuItem;
+class ContextMenuProvider;
+class Event;
+class Page;
</ins><span class="cx"> 
</span><del>-    class ContextMenuController {
-        WTF_MAKE_NONCOPYABLE(ContextMenuController); WTF_MAKE_FAST_ALLOCATED;
-    public:
-        ContextMenuController(Page&amp;, ContextMenuClient&amp;);
-        ~ContextMenuController();
</del><ins>+class ContextMenuController {
+    WTF_MAKE_NONCOPYABLE(ContextMenuController); WTF_MAKE_FAST_ALLOCATED;
+public:
+    ContextMenuController(Page&amp;, ContextMenuClient&amp;);
+    ~ContextMenuController();
</ins><span class="cx"> 
</span><del>-        ContextMenu* contextMenu() const { return m_contextMenu.get(); }
-        void clearContextMenu();
</del><ins>+    ContextMenu* contextMenu() const { return m_contextMenu.get(); }
+    void clearContextMenu();
</ins><span class="cx"> 
</span><del>-        void handleContextMenuEvent(Event*);
-        void showContextMenu(Event*, PassRefPtr&lt;ContextMenuProvider&gt;);
</del><ins>+    void handleContextMenuEvent(Event*);
+    void showContextMenu(Event*, PassRefPtr&lt;ContextMenuProvider&gt;);
</ins><span class="cx"> 
</span><del>-        void populate();
-        void contextMenuItemSelected(ContextMenuItem*);
-        void addInspectElementItem();
</del><ins>+    void populate();
+    void contextMenuItemSelected(ContextMenuItem*);
+    void addInspectElementItem();
</ins><span class="cx"> 
</span><del>-        void checkOrEnableIfNeeded(ContextMenuItem&amp;) const;
</del><ins>+    void checkOrEnableIfNeeded(ContextMenuItem&amp;) const;
</ins><span class="cx"> 
</span><del>-        void setHitTestResult(const HitTestResult&amp; result) { m_hitTestResult = result; }
-        const HitTestResult&amp; hitTestResult() { return m_hitTestResult; }
</del><ins>+    void setContextMenuContext(const ContextMenuContext&amp; context) { m_context = context; }
+    const ContextMenuContext&amp; context() const { return m_context; }
+    const HitTestResult&amp; hitTestResult() const { return m_context.hitTestResult(); }
</ins><span class="cx"> 
</span><span class="cx"> #if USE(ACCESSIBILITY_CONTEXT_MENUS)
</span><del>-        void showContextMenuAt(Frame*, const IntPoint&amp; clickPoint);
</del><ins>+    void showContextMenuAt(Frame*, const IntPoint&amp; clickPoint);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    private:
-        PassOwnPtr&lt;ContextMenu&gt; createContextMenu(Event*);
-        void showContextMenu(Event*);
-        
-        void appendItem(ContextMenuItem&amp;, ContextMenu* parentMenu);
</del><ins>+#if ENABLE(IMAGE_CONTROLS)
+    void showImageControlsMenu(Event*);
+#endif
</ins><span class="cx"> 
</span><del>-        void createAndAppendFontSubMenu(ContextMenuItem&amp;);
-        void createAndAppendSpellingAndGrammarSubMenu(ContextMenuItem&amp;);
-        void createAndAppendSpellingSubMenu(ContextMenuItem&amp;);
-        void createAndAppendSpeechSubMenu(ContextMenuItem&amp; );
-        void createAndAppendWritingDirectionSubMenu(ContextMenuItem&amp;);
-        void createAndAppendTextDirectionSubMenu(ContextMenuItem&amp;);
-        void createAndAppendSubstitutionsSubMenu(ContextMenuItem&amp;);
-        void createAndAppendTransformationsSubMenu(ContextMenuItem&amp;);
</del><ins>+private:
+    PassOwnPtr&lt;ContextMenu&gt; createContextMenu(Event*);
+    void showContextMenu(Event*);
+    
+    void appendItem(ContextMenuItem&amp;, ContextMenu* parentMenu);
+
+    void createAndAppendFontSubMenu(ContextMenuItem&amp;);
+    void createAndAppendSpellingAndGrammarSubMenu(ContextMenuItem&amp;);
+    void createAndAppendSpellingSubMenu(ContextMenuItem&amp;);
+    void createAndAppendSpeechSubMenu(ContextMenuItem&amp;);
+    void createAndAppendWritingDirectionSubMenu(ContextMenuItem&amp;);
+    void createAndAppendTextDirectionSubMenu(ContextMenuItem&amp;);
+    void createAndAppendSubstitutionsSubMenu(ContextMenuItem&amp;);
+    void createAndAppendTransformationsSubMenu(ContextMenuItem&amp;);
</ins><span class="cx"> #if PLATFORM(GTK)
</span><del>-        void createAndAppendUnicodeSubMenu(ContextMenuItem&amp;);
</del><ins>+    void createAndAppendUnicodeSubMenu(ContextMenuItem&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-        Page&amp; m_page;
-        ContextMenuClient&amp; m_client;
-        OwnPtr&lt;ContextMenu&gt; m_contextMenu;
-        RefPtr&lt;ContextMenuProvider&gt; m_menuProvider;
-        HitTestResult m_hitTestResult;
-    };
</del><ins>+    Page&amp; m_page;
+    ContextMenuClient&amp; m_client;
+    OwnPtr&lt;ContextMenu&gt; m_contextMenu;
+    RefPtr&lt;ContextMenuProvider&gt; m_menuProvider;
+    ContextMenuContext m_context;
+};
</ins><span class="cx"> 
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2CMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/CMakeLists.txt (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/CMakeLists.txt        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/CMakeLists.txt        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -194,6 +194,7 @@
</span><span class="cx">     Shared/ChildProcess.cpp
</span><span class="cx">     Shared/ChildProcessProxy.cpp
</span><span class="cx">     Shared/ConnectionStack.cpp
</span><ins>+    Shared/ContextMenuContextData.cpp
</ins><span class="cx">     Shared/DictionaryPopupInfo.cpp
</span><span class="cx">     Shared/EditorState.cpp
</span><span class="cx">     Shared/FontInfo.cpp
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/ChangeLog        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2014-02-26  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Pipe experimental image controls menu up to WebKit2
+        https://bugs.webkit.org/show_bug.cgi?id=129339
+
+        Reviewed by Simon Fraser.
+
+        Add a WebKit object to represent the data from a ContextMenuContext object that can be shared via IPC:
+        * Shared/ContextMenuContextData.cpp: Added.
+        (WebKit::ContextMenuContextData::ContextMenuContextData):
+        (WebKit::ContextMenuContextData::encode):
+        (WebKit::ContextMenuContextData::decode):
+        * Shared/ContextMenuContextData.h: Added.
+        (WebKit::ContextMenuContextData::webHitTestResultData):
+        (WebKit::ContextMenuContextData::isImageControl):
+
+        Update the rest of WK2 to use this object instead of WebHitTestResult::Data directly:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::showContextMenu):
+        (WebKit::WebPageProxy::internalShowContextMenu): Also make an ENABLE(IMAGE_CONTROLS) change here.
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+
+        * WebProcess/WebPage/WebContextMenu.cpp:
+        (WebKit::WebContextMenu::show):
+
+        * CMakeLists.txt:
+        * GNUmakefile.list.am:
+        * WebKit2.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2014-02-26  Enrique Ocaña González  &lt;eocanha@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebKitFindOptions shouldn't expose WEBKIT_FIND_OPTIONS_SHOW_{OVERLAY,FIND_INDICATOR,HIGHLIGHT}
</span></span></pre></div>
<a id="trunkSourceWebKit2GNUmakefilelistam"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/GNUmakefile.list.am (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/GNUmakefile.list.am        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/GNUmakefile.list.am        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -360,6 +360,8 @@
</span><span class="cx">         Source/WebKit2/Shared/CommandLine.h \
</span><span class="cx">         Source/WebKit2/Shared/ConnectionStack.cpp \
</span><span class="cx">         Source/WebKit2/Shared/ConnectionStack.h \
</span><ins>+        Source/WebKit2/Shared/ContextMenuContextData.cpp \
+        Source/WebKit2/Shared/ContextMenuContextData.h \
</ins><span class="cx">         Source/WebKit2/Shared/CoreIPCSupport/WebContextMessageKinds.h \
</span><span class="cx">         Source/WebKit2/Shared/DrawingAreaInfo.h \
</span><span class="cx">         Source/WebKit2/Shared/Downloads/Download.cpp \
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedContextMenuContextDatacpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp (0 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp                                (rev 0)
+++ trunk/Source/WebKit2/Shared/ContextMenuContextData.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+/*
+ * Copyright (C) 2014 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. ``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 COMPUTER, INC. OR
+ * 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;ContextMenuContextData.h&quot;
+
+#if ENABLE(CONTEXT_MENUS)
+
+#include &quot;WebCoreArgumentCoders.h&quot;
+#include &lt;WebCore/ContextMenuContext.h&gt;
+
+using namespace WebCore;
+
+namespace WebKit {
+
+ContextMenuContextData::ContextMenuContextData()
+#if ENABLE(IMAGE_CONTROLS)
+    : m_isImageControl(false)
+#endif
+{
+}
+
+ContextMenuContextData::ContextMenuContextData(const ContextMenuContext&amp; context)
+    : m_webHitTestResultData(WebHitTestResult::Data(context.hitTestResult()))
+#if ENABLE(IMAGE_CONTROLS)
+    , m_isImageControl(context.isImageControl())
+#endif
+{
+}
+
+void ContextMenuContextData::encode(IPC::ArgumentEncoder&amp; encoder) const
+{
+    encoder &lt;&lt; m_webHitTestResultData;
+#if ENABLE(IMAGE_CONTROLS)
+    encoder &lt;&lt; m_isImageControl;
+#endif
+}
+
+bool ContextMenuContextData::decode(IPC::ArgumentDecoder&amp; decoder, ContextMenuContextData&amp; contextMenuContextData)
+{
+    if (!decoder.decode(contextMenuContextData.m_webHitTestResultData))
+        return false;
+        
+#if ENABLE(IMAGE_CONTROLS)
+    if (!decoder.decode(contextMenuContextData.m_isImageControl))
+        return false;
+#endif
+
+    return true;
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTEXT_MENUS)
</ins></span></pre></div>
<a id="trunkSourceWebKit2SharedContextMenuContextDatah"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/Shared/ContextMenuContextData.h (0 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/ContextMenuContextData.h                                (rev 0)
+++ trunk/Source/WebKit2/Shared/ContextMenuContextData.h        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -0,0 +1,71 @@
</span><ins>+/*
+ * Copyright (C) 2014 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. ``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 COMPUTER, INC. OR
+ * 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 ContextMenuContextData_h
+#define ContextMenuContextData_h
+
+#if ENABLE(CONTEXT_MENUS)
+
+#include &quot;WebHitTestResult.h&quot;
+
+namespace IPC {
+class ArgumentDecoder;
+class ArgumentEncoder;
+}
+
+namespace WebCore {
+class ContextMenuContext;
+}
+
+namespace WebKit {
+
+class ContextMenuContextData {
+public:
+    ContextMenuContextData();
+    ContextMenuContextData(const WebCore::ContextMenuContext&amp;);
+    
+    const WebHitTestResult::Data&amp; webHitTestResultData() const { return m_webHitTestResultData; }
+
+#if ENABLE(IMAGE_CONTROLS)
+    bool isImageControl() const { return m_isImageControl; }
+#endif
+
+    void encode(IPC::ArgumentEncoder&amp;) const;
+    static bool decode(IPC::ArgumentDecoder&amp;, ContextMenuContextData&amp;);
+
+private:
+
+    WebHitTestResult::Data m_webHitTestResultData;
+
+#if ENABLE(IMAGE_CONTROLS)
+    bool m_isImageControl;
+#endif
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTEXT_MENUS)
+#endif // ContextMenuContextData_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -3251,22 +3251,22 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><del>-void WebPageProxy::showContextMenu(const IntPoint&amp; menuLocation, const WebHitTestResult::Data&amp; hitTestResultData, const Vector&lt;WebContextMenuItemData&gt;&amp; proposedItems, IPC::MessageDecoder&amp; decoder)
</del><ins>+void WebPageProxy::showContextMenu(const IntPoint&amp; menuLocation, const ContextMenuContextData&amp; contextMenuContextData, const Vector&lt;WebContextMenuItemData&gt;&amp; proposedItems, IPC::MessageDecoder&amp; decoder)
</ins><span class="cx"> {
</span><del>-    internalShowContextMenu(menuLocation, hitTestResultData, proposedItems, decoder);
</del><ins>+    internalShowContextMenu(menuLocation, contextMenuContextData, proposedItems, decoder);
</ins><span class="cx">     
</span><span class="cx">     // No matter the result of internalShowContextMenu, always notify the WebProcess that the menu is hidden so it starts handling mouse events again.
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::ContextMenuHidden(), m_pageID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebPageProxy::internalShowContextMenu(const IntPoint&amp; menuLocation, const WebHitTestResult::Data&amp; hitTestResultData, const Vector&lt;WebContextMenuItemData&gt;&amp; proposedItems, IPC::MessageDecoder&amp; decoder)
</del><ins>+void WebPageProxy::internalShowContextMenu(const IntPoint&amp; menuLocation, const ContextMenuContextData&amp; contextMenuContextData, const Vector&lt;WebContextMenuItemData&gt;&amp; proposedItems, IPC::MessageDecoder&amp; decoder)
</ins><span class="cx"> {
</span><span class="cx">     RefPtr&lt;API::Object&gt; userData;
</span><span class="cx">     WebContextUserMessageDecoder messageDecoder(userData, process());
</span><span class="cx">     if (!decoder.decode(messageDecoder))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_activeContextMenuHitTestResultData = hitTestResultData;
</del><ins>+    m_activeContextMenuContextData = contextMenuContextData;
</ins><span class="cx"> 
</span><span class="cx">     if (!m_contextMenuClient.hideContextMenu(this) &amp;&amp; m_activeContextMenu) {
</span><span class="cx">         m_activeContextMenu-&gt;hideContextMenu();
</span><span class="lines">@@ -3280,14 +3280,22 @@
</span><span class="cx">     // Since showContextMenu() can spin a nested run loop we need to turn off the responsiveness timer.
</span><span class="cx">     m_process-&gt;responsivenessTimer()-&gt;stop();
</span><span class="cx"> 
</span><del>-    // Give the PageContextMenuClient one last swipe at changing the menu.
</del><ins>+    // Unless this is an image control, give the PageContextMenuClient one last swipe at changing the menu.
</ins><span class="cx">     Vector&lt;WebContextMenuItemData&gt; items;
</span><del>-    if (!m_contextMenuClient.getContextMenuFromProposedMenu(this, proposedItems, items, hitTestResultData, userData.get())) {
-        if (!m_contextMenuClient.showContextMenu(this, menuLocation, proposedItems))
-            m_activeContextMenu-&gt;showContextMenu(menuLocation, proposedItems);
-    } else if (!m_contextMenuClient.showContextMenu(this, menuLocation, items))
-        m_activeContextMenu-&gt;showContextMenu(menuLocation, items);
</del><ins>+    bool useProposedItems = true;
+
+#if ENABLE(IMAGE_CONTROLS)
+    if (!contextMenuContextData.isImageControl() &amp;&amp; m_contextMenuClient.getContextMenuFromProposedMenu(this, proposedItems, items, contextMenuContextData.webHitTestResultData(), userData.get())) {
+#else
+    if (m_contextMenuClient.getContextMenuFromProposedMenu(this, proposedItems, items, contextMenuContextData.webHitTestResultData(), userData.get())) {
+#endif
+        useProposedItems = false;
+    }
</ins><span class="cx">     
</span><ins>+    const Vector&lt;WebContextMenuItemData&gt;&amp; itemsToShow = useProposedItems ? proposedItems : items;
+    if (!m_contextMenuClient.showContextMenu(this, menuLocation, itemsToShow))
+        m_activeContextMenu-&gt;showContextMenu(menuLocation, itemsToShow);
+    
</ins><span class="cx">     m_contextMenuClient.contextMenuDismissed(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -3335,15 +3343,15 @@
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx">     if (item.action() == ContextMenuItemTagDownloadImageToDisk) {
</span><del>-        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuHitTestResultData.absoluteImageURL));
</del><ins>+        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuContextData.webHitTestResultData().absoluteImageURL));
</ins><span class="cx">         return;    
</span><span class="cx">     }
</span><span class="cx">     if (item.action() == ContextMenuItemTagDownloadLinkToDisk) {
</span><del>-        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuHitTestResultData.absoluteLinkURL));
</del><ins>+        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuContextData.webHitTestResultData().absoluteLinkURL));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (item.action() == ContextMenuItemTagDownloadMediaToDisk) {
</span><del>-        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuHitTestResultData.absoluteMediaURL));
</del><ins>+        m_process-&gt;context().download(this, URL(URL(), m_activeContextMenuContextData.webHitTestResultData().absoluteMediaURL));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     if (item.action() == ContextMenuItemTagCheckSpellingWhileTyping) {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;AssistedNodeInformation.h&quot;
</span><span class="cx"> #include &quot;AutoCorrectionCallback.h&quot;
</span><span class="cx"> #include &quot;Connection.h&quot;
</span><ins>+#include &quot;ContextMenuContextData.h&quot;
</ins><span class="cx"> #include &quot;DragControllerAction.h&quot;
</span><span class="cx"> #include &quot;DrawingAreaProxy.h&quot;
</span><span class="cx"> #include &quot;EditorState.h&quot;
</span><span class="lines">@@ -52,7 +53,6 @@
</span><span class="cx"> #include &quot;WebFindClient.h&quot;
</span><span class="cx"> #include &quot;WebFormClient.h&quot;
</span><span class="cx"> #include &quot;WebFrameProxy.h&quot;
</span><del>-#include &quot;WebHitTestResult.h&quot;
</del><span class="cx"> #include &quot;WebPageContextMenuClient.h&quot;
</span><span class="cx"> #include &quot;WebPageCreationParameters.h&quot;
</span><span class="cx"> #include &quot;WebPreferences.h&quot;
</span><span class="lines">@@ -1073,8 +1073,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx">     // Context Menu.
</span><del>-    void showContextMenu(const WebCore::IntPoint&amp; menuLocation, const WebHitTestResult::Data&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, IPC::MessageDecoder&amp;);
-    void internalShowContextMenu(const WebCore::IntPoint&amp; menuLocation, const WebHitTestResult::Data&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, IPC::MessageDecoder&amp;);
</del><ins>+    void showContextMenu(const WebCore::IntPoint&amp; menuLocation, const ContextMenuContextData&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, IPC::MessageDecoder&amp;);
+    void internalShowContextMenu(const WebCore::IntPoint&amp; menuLocation, const ContextMenuContextData&amp;, const Vector&lt;WebContextMenuItemData&gt;&amp;, IPC::MessageDecoder&amp;);
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     // Search popup results
</span><span class="lines">@@ -1276,7 +1276,7 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;WebPopupMenuProxy&gt; m_activePopupMenu;
</span><span class="cx">     RefPtr&lt;WebContextMenuProxy&gt; m_activeContextMenu;
</span><del>-    WebHitTestResult::Data m_activeContextMenuHitTestResultData;
</del><ins>+    ContextMenuContextData m_activeContextMenuContextData;
</ins><span class="cx">     RefPtr&lt;WebOpenPanelResultListenerProxy&gt; m_openPanelResultListener;
</span><span class="cx">     GeolocationPermissionRequestManagerProxy m_geolocationPermissionRequestManager;
</span><span class="cx">     NotificationPermissionRequestManagerProxy m_notificationPermissionRequestManager;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -207,7 +207,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONTEXT_MENUS)
</span><span class="cx">     # ContextMenu messages
</span><del>-    ShowContextMenu(WebCore::IntPoint menuLocation, WebKit::WebHitTestResult::Data hitTestResultData, Vector&lt;WebKit::WebContextMenuItemData&gt; items, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</del><ins>+    ShowContextMenu(WebCore::IntPoint menuLocation, WebKit::ContextMenuContextData contextMenuContextData, Vector&lt;WebKit::WebContextMenuItemData&gt; items, WebKit::InjectedBundleUserMessageEncoder userData) Variadic
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     # Authentication messages
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -675,6 +675,10 @@
</span><span class="cx">                 51032F1E180F791700961BB7 /* DatabaseToWebProcessConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 51032F1C180F791700961BB7 /* DatabaseToWebProcessConnectionMessages.h */; };
</span><span class="cx">                 51064D35189781C4004B2FEB /* SQLiteIDBCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51064D33189781C4004B2FEB /* SQLiteIDBCursor.cpp */; };
</span><span class="cx">                 51064D36189781C4004B2FEB /* SQLiteIDBCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 51064D34189781C4004B2FEB /* SQLiteIDBCursor.h */; };
</span><ins>+                5106D7C118BDBE73000AB166 /* ContextMenuContextData.cpp in Copy Files */ = {isa = PBXBuildFile; fileRef = 5106D7BF18BDBE73000AB166 /* ContextMenuContextData.cpp */; };
+                5106D7C218BDBE73000AB166 /* ContextMenuContextData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5106D7BF18BDBE73000AB166 /* ContextMenuContextData.cpp */; };
+                5106D7C318BDBE73000AB166 /* ContextMenuContextData.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 5106D7C018BDBE73000AB166 /* ContextMenuContextData.h */; };
+                5106D7C418BDBE73000AB166 /* ContextMenuContextData.h in Headers */ = {isa = PBXBuildFile; fileRef = 5106D7C018BDBE73000AB166 /* ContextMenuContextData.h */; };
</ins><span class="cx">                 510AFFB916542048001BA05E /* WebResourceLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 510AFFB716542048001BA05E /* WebResourceLoader.cpp */; };
</span><span class="cx">                 510AFFBA16542048001BA05E /* WebResourceLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 510AFFB816542048001BA05E /* WebResourceLoader.h */; };
</span><span class="cx">                 510CC8491613C85C00D03ED3 /* NetworkProcess.app in Copy Files */ = {isa = PBXBuildFile; fileRef = 510CC80E1613C79900D03ED3 /* NetworkProcess.app */; };
</span><span class="lines">@@ -1654,10 +1658,12 @@
</span><span class="cx">                         dstPath = WebKit2.framework;
</span><span class="cx">                         dstSubfolderSpec = 1;
</span><span class="cx">                         files = (
</span><ins>+                                5106D7C118BDBE73000AB166 /* ContextMenuContextData.cpp in Copy Files */,
</ins><span class="cx">                                 510CC8491613C85C00D03ED3 /* NetworkProcess.app in Copy Files */,
</span><span class="cx">                                 BCDE0ABF13272708001259FB /* PluginProcess.app in Copy Files */,
</span><span class="cx">                                 51A60B2A180CCEB500F3BF50 /* DatabaseProcess.app in Copy Files */,
</span><span class="cx">                                 1A50DB66110A3D57000D3FE5 /* WebProcess.app in Copy Files */,
</span><ins>+                                5106D7C318BDBE73000AB166 /* ContextMenuContextData.h in Copy Files */,
</ins><span class="cx">                         );
</span><span class="cx">                         name = &quot;Copy Files&quot;;
</span><span class="cx">                         runOnlyForDeploymentPostprocessing = 0;
</span><span class="lines">@@ -2426,6 +2432,8 @@
</span><span class="cx">                 5105B0F31630872E00E27709 /* NetworkProcessProxy.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = NetworkProcessProxy.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51064D33189781C4004B2FEB /* SQLiteIDBCursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SQLiteIDBCursor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51064D34189781C4004B2FEB /* SQLiteIDBCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SQLiteIDBCursor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                5106D7BF18BDBE73000AB166 /* ContextMenuContextData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ContextMenuContextData.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                5106D7C018BDBE73000AB166 /* ContextMenuContextData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContextMenuContextData.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 510AFFB716542048001BA05E /* WebResourceLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebResourceLoader.cpp; path = Network/WebResourceLoader.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 510AFFB816542048001BA05E /* WebResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebResourceLoader.h; path = Network/WebResourceLoader.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 510AFFCE16542CBD001BA05E /* WebResourceLoader.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = WebResourceLoader.messages.in; path = Network/WebResourceLoader.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -3918,6 +3926,8 @@
</span><span class="cx">                                 1A6F9F8E11E13EFC00DB1371 /* CommandLine.h */,
</span><span class="cx">                                 5136183B163126DA00A99DDE /* ConnectionStack.cpp */,
</span><span class="cx">                                 5136183C163126DA00A99DDE /* ConnectionStack.h */,
</span><ins>+                                5106D7BF18BDBE73000AB166 /* ContextMenuContextData.cpp */,
+                                5106D7C018BDBE73000AB166 /* ContextMenuContextData.h */,
</ins><span class="cx">                                 BCE81D96131AE02000241910 /* DictionaryPopupInfo.cpp */,
</span><span class="cx">                                 BCE81D97131AE02100241910 /* DictionaryPopupInfo.h */,
</span><span class="cx">                                 C517388012DF8F4F00EE3F47 /* DragControllerAction.h */,
</span><span class="lines">@@ -6552,6 +6562,7 @@
</span><span class="cx">                                 1AB8A1EC1840080900E9AE69 /* WKPageLoaderClient.h in Headers */,
</span><span class="cx">                                 1A2D84A3127F6AD1001EB962 /* NPVariantData.h in Headers */,
</span><span class="cx">                                 BC8ACA1316670D89004C1941 /* ObjCObjectGraph.h in Headers */,
</span><ins>+                                5106D7C418BDBE73000AB166 /* ContextMenuContextData.h in Headers */,
</ins><span class="cx">                                 BC8ACA1516670D89004C1941 /* ObjCObjectGraphCoders.h in Headers */,
</span><span class="cx">                                 BCCF672D12C7EDF7008F9C35 /* OriginAndDatabases.h in Headers */,
</span><span class="cx">                                 1A5B1C511898606F004FCF9B /* WKNavigation.h in Headers */,
</span><span class="lines">@@ -8163,6 +8174,7 @@
</span><span class="cx">                                 CD73BA47131ACC9A00EEDED2 /* WebFullScreenManagerProxyMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 BC1BE1E112D54A410004A228 /* WebGeolocationClient.cpp in Sources */,
</span><span class="cx">                                 BC0E5FE612D697160012A72A /* WebGeolocationManager.cpp in Sources */,
</span><ins>+                                5106D7C218BDBE73000AB166 /* ContextMenuContextData.cpp in Sources */,
</ins><span class="cx">                                 BC0E606112D6BA910012A72A /* WebGeolocationManagerMessageReceiver.cpp in Sources */,
</span><span class="cx">                                 51064D35189781C4004B2FEB /* SQLiteIDBCursor.cpp in Sources */,
</span><span class="cx">                                 BC54CACC12D64291005C67B0 /* WebGeolocationManagerProxy.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebContextMenucpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp (164719 => 164720)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp        2014-02-26 18:00:41 UTC (rev 164719)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp        2014-02-26 18:02:44 UTC (rev 164720)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;WebContextMenu.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;ContextMenuContextData.h&quot;
</ins><span class="cx"> #include &quot;InjectedBundleHitTestResult.h&quot;
</span><span class="cx"> #include &quot;InjectedBundleUserMessageCoders.h&quot;
</span><span class="cx"> #include &quot;WebCoreArgumentCoders.h&quot;
</span><span class="lines">@@ -66,11 +67,11 @@
</span><span class="cx">     Vector&lt;WebContextMenuItemData&gt; menuItems;
</span><span class="cx">     RefPtr&lt;API::Object&gt; userData;
</span><span class="cx">     menuItemsWithUserData(menuItems, userData);
</span><del>-    WebHitTestResult::Data webHitTestResultData(controller.hitTestResult());
</del><ins>+    ContextMenuContextData contextMenuContextData(controller.context());
</ins><span class="cx"> 
</span><span class="cx">     // Mark the WebPage has having a shown context menu then notify the UIProcess.
</span><span class="cx">     m_page-&gt;contextMenuShowing();
</span><del>-    m_page-&gt;send(Messages::WebPageProxy::ShowContextMenu(view-&gt;contentsToWindow(controller.hitTestResult().roundedPointInInnerNodeFrame()), webHitTestResultData, menuItems, InjectedBundleUserMessageEncoder(userData.get())));
</del><ins>+    m_page-&gt;send(Messages::WebPageProxy::ShowContextMenu(view-&gt;contentsToWindow(controller.hitTestResult().roundedPointInInnerNodeFrame()), contextMenuContextData, menuItems, InjectedBundleUserMessageEncoder(userData.get())));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebContextMenu::itemSelected(const WebContextMenuItemData&amp; item)
</span></span></pre>
</div>
</div>

</body>
</html>