<!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>[181076] trunk</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/181076">181076</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-03-05 06:05:12 -0800 (Thu, 05 Mar 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[EFL][WK2] Crash when &quot;Download Linked File&quot; from MiniBrowser context menu is clicked
https://bugs.webkit.org/show_bug.cgi?id=131162

Patch by Lukasz Bialek &lt;l.bialek@samsung.com&gt; on 2015-03-05
Reviewed by Gyuyoung Kim.

Source/WebKit2:

&quot;Download Linked File&quot; crashes because of null-pointer exception of Download Job.
Due to architectural difficulties, easy fix is not possible (EwkView is needed in
DownloadManager to create DownloadJobs and it is only used to notify the client
about download (finished, error, cancel) via smart callback using EwkView (Evas_Object).

Propose a new callbacks which are view independent and detach EFL's DownloadManager
from EwkView. It makes DownloadManagerEFL consistent with WKContextDownload.
Fix the crash and restore download functionality.

* PlatformEfl.cmake:
Enable newly reimplemented tests
* UIProcess/API/efl/EwkViewCallbacks.h:
Remove old callback mechanism
* UIProcess/API/efl/ewk_context.cpp:
(ewk_context_download_callbacks_set):
* UIProcess/API/efl/ewk_context.h:
Declare new callback functions and registration functions
* UIProcess/API/efl/ewk_download_job.cpp:
(EwkDownloadJob::EwkDownloadJob):
(EwkDownloadJob::view): Deleted.
* UIProcess/API/efl/ewk_download_job.h:
* UIProcess/API/efl/ewk_download_job_private.h:
(EwkDownloadJob::create):
Remove EwkView dependency
* UIProcess/API/efl/ewk_view.h:
* UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
Alter tests to new callback mechanism
* UIProcess/efl/DownloadManagerEfl.cpp:
(WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
(WebKit::DownloadManagerEfl::didStart):
(WebKit::DownloadManagerEfl::didFail):
(WebKit::DownloadManagerEfl::didCancel):
(WebKit::DownloadManagerEfl::didFinish):
(WebKit::DownloadManagerEfl::DownloadManagerEfl):
(WebKit::DownloadManagerEfl::registerDownloadJob):
(WebKit::DownloadManagerEfl::setCallbacks):
* UIProcess/efl/DownloadManagerEfl.h:
* UIProcess/efl/WebViewEfl.cpp:
(WebKit::WebViewEfl::handleDownloadRequest):
Add support of new callback mechanism

Tools:

* MiniBrowser/efl/main.c:
(on_download_request):
(on_download_finished):
(on_download_failed):
(window_create):
Adapt download callbacks to new callback mechanism</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformEflcmake">trunk/Source/WebKit2/PlatformEfl.cmake</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflEwkViewCallbacksh">trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_contextcpp">trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_contexth">trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_download_jobcpp">trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_download_jobh">trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_download_job_privateh">trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_viewh">trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflteststest_ewk2_download_jobcpp">trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflDownloadManagerEflcpp">trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflDownloadManagerEflh">trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflWebViewEflcpp">trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowsereflmainc">trunk/Tools/MiniBrowser/efl/main.c</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/ChangeLog        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2015-03-05  Lukasz Bialek  &lt;l.bialek@samsung.com&gt;
+
+        [EFL][WK2] Crash when &quot;Download Linked File&quot; from MiniBrowser context menu is clicked
+        https://bugs.webkit.org/show_bug.cgi?id=131162
+
+        Reviewed by Gyuyoung Kim.
+
+        &quot;Download Linked File&quot; crashes because of null-pointer exception of Download Job.
+        Due to architectural difficulties, easy fix is not possible (EwkView is needed in
+        DownloadManager to create DownloadJobs and it is only used to notify the client 
+        about download (finished, error, cancel) via smart callback using EwkView (Evas_Object).
+
+        Propose a new callbacks which are view independent and detach EFL's DownloadManager
+        from EwkView. It makes DownloadManagerEFL consistent with WKContextDownload.
+        Fix the crash and restore download functionality.
+
+        * PlatformEfl.cmake:
+        Enable newly reimplemented tests
+        * UIProcess/API/efl/EwkViewCallbacks.h:
+        Remove old callback mechanism
+        * UIProcess/API/efl/ewk_context.cpp:
+        (ewk_context_download_callbacks_set):
+        * UIProcess/API/efl/ewk_context.h:
+        Declare new callback functions and registration functions
+        * UIProcess/API/efl/ewk_download_job.cpp:
+        (EwkDownloadJob::EwkDownloadJob):
+        (EwkDownloadJob::view): Deleted.
+        * UIProcess/API/efl/ewk_download_job.h:
+        * UIProcess/API/efl/ewk_download_job_private.h:
+        (EwkDownloadJob::create):
+        Remove EwkView dependency
+        * UIProcess/API/efl/ewk_view.h:
+        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
+        Alter tests to new callback mechanism
+        * UIProcess/efl/DownloadManagerEfl.cpp:
+        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
+        (WebKit::DownloadManagerEfl::didStart):
+        (WebKit::DownloadManagerEfl::didFail):
+        (WebKit::DownloadManagerEfl::didCancel):
+        (WebKit::DownloadManagerEfl::didFinish):
+        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
+        (WebKit::DownloadManagerEfl::registerDownloadJob):
+        (WebKit::DownloadManagerEfl::setCallbacks):
+        * UIProcess/efl/DownloadManagerEfl.h:
+        * UIProcess/efl/WebViewEfl.cpp:
+        (WebKit::WebViewEfl::handleDownloadRequest):
+        Add support of new callback mechanism
+
</ins><span class="cx"> 2015-03-05  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SOUP] Disable RC4
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformEflcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformEfl.cmake (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformEfl.cmake        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/PlatformEfl.cmake        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -507,6 +507,7 @@
</span><span class="cx">     test_ewk2_context_history_callbacks
</span><span class="cx">     test_ewk2_cookie_manager
</span><span class="cx">     test_ewk2_database_manager
</span><ins>+    test_ewk2_download_job
</ins><span class="cx">     test_ewk2_eina_shared_string
</span><span class="cx">     test_ewk2_favicon_database
</span><span class="cx">     test_ewk2_file_chooser_request
</span><span class="lines">@@ -524,7 +525,6 @@
</span><span class="cx"> #
</span><span class="cx"> # webkit.org/b/107422: test_ewk2_auth_request
</span><span class="cx"> # webkit.org/b/132980: test_ewk2_context_menu
</span><del>-# webkit.org/b/132981: test_ewk2_download_job
</del><span class="cx"> # webkit.org/b/141249: test_ewk2_storage_manager
</span><span class="cx"> 
</span><span class="cx"> if (ENABLE_API_TESTS)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflEwkViewCallbacksh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -48,10 +48,6 @@
</span><span class="cx">     BackForwardListChange,
</span><span class="cx">     CancelVibration,
</span><span class="cx">     ContentsSizeChanged,
</span><del>-    DownloadJobCancelled,
-    DownloadJobFailed,
-    DownloadJobFinished,
-    DownloadJobRequested,
</del><span class="cx">     FileChooserRequest,
</span><span class="cx">     FocusNotFound,
</span><span class="cx">     NewFormSubmissionRequest,
</span><span class="lines">@@ -176,10 +172,6 @@
</span><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(BackForwardListChange, &quot;back,forward,list,changed&quot;, void);
</span><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(CancelVibration, &quot;cancel,vibration&quot;, void);
</span><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(ContentsSizeChanged, &quot;contents,size,changed&quot;, Ewk_CSS_Size*);
</span><del>-DECLARE_EWK_VIEW_CALLBACK(DownloadJobCancelled, &quot;download,cancelled&quot;, Ewk_Download_Job*);
-DECLARE_EWK_VIEW_CALLBACK(DownloadJobFailed, &quot;download,failed&quot;, Ewk_Download_Job_Error*);
-DECLARE_EWK_VIEW_CALLBACK(DownloadJobFinished, &quot;download,finished&quot;, Ewk_Download_Job*);
-DECLARE_EWK_VIEW_CALLBACK(DownloadJobRequested, &quot;download,request&quot;, Ewk_Download_Job*);
</del><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(FileChooserRequest, &quot;file,chooser,request&quot;, Ewk_File_Chooser_Request*);
</span><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(FocusNotFound, &quot;focus,notfound&quot;, Ewk_Focus_Direction);
</span><span class="cx"> DECLARE_EWK_VIEW_CALLBACK(NewFormSubmissionRequest, &quot;form,submission,request&quot;, Ewk_Form_Submission_Request*);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_contextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -488,6 +488,13 @@
</span><span class="cx">     impl-&gt;historyClient()-&gt;setCallbacks(navigate, clientRedirect, serverRedirect, titleUpdate, populateVisitedLinks, data);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ewk_context_download_callbacks_set(Ewk_Context* ewkContext, Ewk_Download_Requested_Cb requested, Ewk_Download_Failed_Cb failed, Ewk_Download_Cancelled_Cb cancelled,  Ewk_Download_Finished_Cb finished, void* data)
+{
+    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl);
+
+    impl-&gt;downloadManager()-&gt;setClientCallbacks(requested, failed, cancelled, finished, data);
+}
+
</ins><span class="cx"> void ewk_context_visited_link_add(Ewk_Context* ewkContext, const char* visitedURL)
</span><span class="cx"> {
</span><span class="cx">     EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_contexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -40,6 +40,8 @@
</span><span class="cx"> #include &quot;ewk_application_cache_manager.h&quot;
</span><span class="cx"> #include &quot;ewk_cookie_manager.h&quot;
</span><span class="cx"> #include &quot;ewk_database_manager.h&quot;
</span><ins>+#include &quot;ewk_download_job.h&quot;
+#include &quot;ewk_error.h&quot;
</ins><span class="cx"> #include &quot;ewk_favicon_database.h&quot;
</span><span class="cx"> #include &quot;ewk_navigation_data.h&quot;
</span><span class="cx"> #include &quot;ewk_storage_manager.h&quot;
</span><span class="lines">@@ -50,7 +52,18 @@
</span><span class="cx"> extern &quot;C&quot; {
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+/// Creates a type name for Ewk_Download_Job_Error.
+typedef struct Ewk_Download_Job_Error Ewk_Download_Job_Error;
+
</ins><span class="cx"> /**
</span><ins>+ * @brief Structure containing details about a download failure.
+ */
+struct Ewk_Download_Job_Error {
+    Ewk_Download_Job *download_job; /**&lt; download that failed */
+    Ewk_Error *error; /**&lt; download error */
+};
+
+/**
</ins><span class="cx">  * Declare Ewk_Context as Ewk_Object.
</span><span class="cx">  *
</span><span class="cx">  * @see Ewk_Object
</span><span class="lines">@@ -131,6 +144,30 @@
</span><span class="cx"> typedef void (*Ewk_History_Title_Update_Cb)(const Evas_Object *view, const char *title, const char *url, void *user_data);
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * @typedef Ewk_Download_Requested_Cb Ewk_Download_Requested_Cb
+ * @brief Type definition for a function that will be called back when new download job is requested.
+ */
+typedef void (*Ewk_Download_Requested_Cb)(Ewk_Download_Job *download, void *user_data);
+
+/**
+ * @typedef Ewk_Download_Failed_Cb Ewk_Download_Failed_Cb
+ * @brief Type definition for a function that will be called back when a download job has failed.
+ */
+typedef void (*Ewk_Download_Failed_Cb)(Ewk_Download_Job_Error *error, void *user_data);
+
+/**
+ * @typedef Ewk_Download_Cancelled_Cb Ewk_Download_Cancelled_Cb
+ * @brief Type definition for a function that will be called back when a download job is cancelled.
+ */
+typedef void (*Ewk_Download_Cancelled_Cb)(Ewk_Download_Job *download, void *user_data);
+
+/**
+ * @typedef Ewk_Download_Finished_Cb Ewk_Download_Finished_Cb
+ * @brief Type definition for a function that will be called back when a download job is finished.
+ */
+typedef void (*Ewk_Download_Finished_Cb)(Ewk_Download_Job *download, void *user_data);
+
+/**
</ins><span class="cx">  * @typedef Ewk_Context_History_Client_Visited_Links_Populate_Cb Ewk_Context_History_Client_Visited_Links_Populate_Cb
</span><span class="cx">  * @brief Type definition for a function that will be called back when client is asked to provide visited links from a client-managed storage.
</span><span class="cx">  *
</span><span class="lines">@@ -316,6 +353,26 @@
</span><span class="cx">                                             void *data);
</span><span class="cx"> 
</span><span class="cx"> /**
</span><ins>+ * Sets download callbacks for the given @a context.
+ *
+ * To stop listening for download events, you may call this function with @c
+ * NULL for the callbacks.
+ *
+ * @param context context object to set download callbacks
+ * @param download_requested_func the function to call when new download is requested (may be @c NULL).
+ * @param download_failed_func the function to call when a download job has failed (may be @c NULL).
+ * @param download_cancelled_func the function to call when a download job is cancelled (may be @c NULL).
+ * @param download_finished_func the function to call when a download job is finished (may be @c NULL).
+ * @param data User data (may be @c NULL).
+ */
+EAPI void ewk_context_download_callbacks_set(Ewk_Context *context,
+                                             Ewk_Download_Requested_Cb download_requested_func,
+                                             Ewk_Download_Failed_Cb download_failed_func,
+                                             Ewk_Download_Cancelled_Cb download_cancelled_func,
+                                             Ewk_Download_Finished_Cb download_finished_func,
+                                             void* data);
+
+/**
</ins><span class="cx">  * Registers the given @a visited_url as visited link in @a context visited link cache.
</span><span class="cx">  *
</span><span class="cx">  * This function shall be invoked as a response to @c populateVisitedLinks callback of the history cient.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_download_jobcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -36,9 +36,8 @@
</span><span class="cx"> 
</span><span class="cx"> using namespace WebKit;
</span><span class="cx"> 
</span><del>-EwkDownloadJob::EwkDownloadJob(WKDownloadRef download, EwkView* viewImpl)
</del><ins>+EwkDownloadJob::EwkDownloadJob(WKDownloadRef download)
</ins><span class="cx">     : m_download(download)
</span><del>-    , m_viewImpl(viewImpl)
</del><span class="cx">     , m_state(EWK_DOWNLOAD_JOB_STATE_NOT_STARTED)
</span><span class="cx">     , m_startTime(-1)
</span><span class="cx">     , m_endTime(-1)
</span><span class="lines">@@ -54,16 +53,6 @@
</span><span class="cx">     return WKDownloadGetID(m_download.get());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-/**
- * @internal
- * Returns the view this download is attached to.
- * The view is needed to send notification signals.
- */
-EwkView* EwkDownloadJob::view() const
-{
-    return m_viewImpl;
-}
-
</del><span class="cx"> Ewk_Download_Job_State ewk_download_job_state_get(const Ewk_Download_Job* download)
</span><span class="cx"> {
</span><span class="cx">     EWK_OBJ_GET_IMPL_OR_RETURN(const EwkDownloadJob, download, impl, EWK_DOWNLOAD_JOB_STATE_UNKNOWN);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_download_jobh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -151,8 +151,8 @@
</span><span class="cx"> /**
</span><span class="cx">  * Cancels the download asynchronously.
</span><span class="cx">  *
</span><del>- * When the ongoing download operation is effectively cancelled a &quot;download,cancelled&quot;
- * signal will be emitted on the view.
</del><ins>+ * When the ongoing download operation is effectively cancelled, a &quot;Ewk_Download_Cancelled_Cb&quot;
+ * will be called in DownloadManager.
</ins><span class="cx">  *
</span><span class="cx">  * @param download a #Ewk_Download_Job to cancel.
</span><span class="cx">  *
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_download_job_privateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -42,9 +42,9 @@
</span><span class="cx"> public:
</span><span class="cx">     EWK_OBJECT_DECLARE(EwkDownloadJob)
</span><span class="cx"> 
</span><del>-    static PassRefPtr&lt;EwkDownloadJob&gt; create(WKDownloadRef download, EwkView* viewImpl)
</del><ins>+    static PassRefPtr&lt;EwkDownloadJob&gt; create(WKDownloadRef download)
</ins><span class="cx">     {
</span><del>-        return adoptRef(new EwkDownloadJob(download, viewImpl));
</del><ins>+        return adoptRef(new EwkDownloadJob(download));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     uint64_t id() const;
</span><span class="lines">@@ -71,10 +71,9 @@
</span><span class="cx">     uint64_t receivedDataSize() const;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    EwkDownloadJob(WKDownloadRef download, EwkView* view);
</del><ins>+    explicit EwkDownloadJob(WKDownloadRef download);
</ins><span class="cx"> 
</span><span class="cx">     WKRetainPtr&lt;WKDownloadRef&gt; m_download;
</span><del>-    EwkView* m_viewImpl;
</del><span class="cx">     Ewk_Download_Job_State m_state;
</span><span class="cx">     mutable RefPtr&lt;EwkUrlRequest&gt; m_request;
</span><span class="cx">     RefPtr&lt;EwkUrlResponse&gt; m_response;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_viewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -31,11 +31,6 @@
</span><span class="cx">  * - &quot;back,forward,list,changed&quot;, void: reports that the view's back / forward list had changed.
</span><span class="cx">  * - &quot;cancel,vibration&quot;, void: request to cancel the vibration.
</span><span class="cx">  * - &quot;contents,size,changed&quot;, Ewk_CSS_Size*: reports that contents size was changed.
</span><del>- * - &quot;download,cancelled&quot;, Ewk_Download_Job*: reports that a download was effectively cancelled.
- * - &quot;download,failed&quot;, Ewk_Download_Job_Error*: reports that a download failed with the given error.
- * - &quot;download,finished&quot;, Ewk_Download_Job*: reports that a download completed successfully.
- * - &quot;download,request&quot;, Ewk_Download_Job*: reports that a new download has been requested. The client should set the
- *   destination path by calling ewk_download_job_destination_set() or the download will fail.
</del><span class="cx">  * - &quot;file,chooser,request&quot;, Ewk_File_Chooser_Request*: reports that a request has been made for the user to choose
</span><span class="cx">  *   a file (or several) on the file system. Call ewk_file_chooser_request_ref() on the request object to process it
</span><span class="cx">  *   asynchronously.
</span><span class="lines">@@ -79,7 +74,6 @@
</span><span class="cx"> #include &quot;ewk_context.h&quot;
</span><span class="cx"> #include &quot;ewk_context_menu.h&quot;
</span><span class="cx"> #include &quot;ewk_download_job.h&quot;
</span><del>-#include &quot;ewk_error.h&quot;
</del><span class="cx"> #include &quot;ewk_page_group.h&quot;
</span><span class="cx"> #include &quot;ewk_popup_menu.h&quot;
</span><span class="cx"> #include &quot;ewk_security_origin.h&quot;
</span><span class="lines">@@ -243,17 +237,6 @@
</span><span class="cx">     } changed;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-/// Creates a type name for Ewk_Download_Job_Error.
-typedef struct Ewk_Download_Job_Error Ewk_Download_Job_Error;
-
-/**
- * @brief Structure containing details about a download failure.
- */
-struct Ewk_Download_Job_Error {
-    Ewk_Download_Job *download_job; /**&lt; download that failed */
-    Ewk_Error *error; /**&lt; download error */
-};
-
</del><span class="cx"> /// Creates a type name for Ewk_CSS_Size.
</span><span class="cx"> typedef struct Ewk_CSS_Size Ewk_CSS_Size;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflteststest_ewk2_download_jobcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">         eina_file_close(f);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void on_download_requested(void* userData, Evas_Object* webview, void* eventInfo)
</del><ins>+    static void on_download_requested(EwkObject* eventInfo, void* userData)
</ins><span class="cx">     {
</span><span class="cx">         DownloadTestData* testData = static_cast&lt;DownloadTestData*&gt;(userData);
</span><span class="cx">         Ewk_Download_Job* download = static_cast&lt;Ewk_Download_Job*&gt;(eventInfo);
</span><span class="lines">@@ -120,22 +120,21 @@
</span><span class="cx">         EXPECT_STREQ(testData-&gt;destinationPath, ewk_download_job_destination_get(download));
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void on_download_cancelled(void* userData, Evas_Object* webview, void* eventInfo)
</del><ins>+    static void on_download_cancelled(EwkObject*, void*)
</ins><span class="cx">     {
</span><span class="cx">         fprintf(stderr, &quot;Download was cancelled.\n&quot;);
</span><span class="cx">         ecore_main_loop_quit();
</span><span class="cx">         FAIL();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void on_download_failed(void* userData, Evas_Object* webview, void* eventInfo)
</del><ins>+    static void on_download_failed(Ewk_Download_Job_Error* downloadError, void* userData)
</ins><span class="cx">     {
</span><del>-        Ewk_Download_Job_Error* downloadError = static_cast&lt;Ewk_Download_Job_Error*&gt;(eventInfo);
</del><span class="cx">         fprintf(stderr, &quot;Download error: %s\n&quot;, ewk_error_description_get(downloadError-&gt;error));
</span><span class="cx">         ecore_main_loop_quit();
</span><span class="cx">         FAIL();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    static void on_download_finished(void* userData, Evas_Object* webview, void* eventInfo)
</del><ins>+    static void on_download_finished(EwkObject* eventInfo, void* userData)
</ins><span class="cx">     {
</span><span class="cx">         DownloadTestData* testData = static_cast&lt;DownloadTestData*&gt;(userData);
</span><span class="cx">         Ewk_Download_Job* download = static_cast&lt;Ewk_Download_Job*&gt;(eventInfo);
</span><span class="lines">@@ -166,10 +165,8 @@
</span><span class="cx">     DownloadTestData userData = { fileUrl.data(), destinationPath };
</span><span class="cx">     ASSERT_FALSE(fileExists(destinationPath));
</span><span class="cx"> 
</span><del>-    evas_object_smart_callback_add(webView(), &quot;download,request&quot;, on_download_requested, &amp;userData);
-    evas_object_smart_callback_add(webView(), &quot;download,cancel&quot;, on_download_cancelled, &amp;userData);
-    evas_object_smart_callback_add(webView(), &quot;download,failed&quot;, on_download_failed, &amp;userData);
-    evas_object_smart_callback_add(webView(), &quot;download,finished&quot;, on_download_finished, &amp;userData);
</del><ins>+    Ewk_Context* context = ewk_view_context_get(webView());
+    ewk_context_download_callbacks_set(context, on_download_requested, on_download_failed, on_download_cancelled, on_download_finished, &amp;userData);
</ins><span class="cx"> 
</span><span class="cx">     // Download test pdf
</span><span class="cx">     ewk_view_url_set(webView(), fileUrl.data());
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflDownloadManagerEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -45,14 +45,16 @@
</span><span class="cx"> 
</span><span class="cx"> WKStringRef DownloadManagerEfl::decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef wkDownload, WKStringRef filename, bool* /*allowOverwrite*/, const void* clientInfo)
</span><span class="cx"> {
</span><del>-    EwkDownloadJob* download = toDownloadManagerEfl(clientInfo)-&gt;ewkDownloadJob(wkDownload);
</del><ins>+    DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo);
+    EwkDownloadJob* download = downloadManager-&gt;ewkDownloadJob(wkDownload);
</ins><span class="cx">     ASSERT(download);
</span><span class="cx"> 
</span><span class="cx">     download-&gt;setSuggestedFileName(toImpl(filename)-&gt;string().utf8().data());
</span><span class="cx"> 
</span><del>-    // We send the new download signal on the Ewk_View only once we have received the response
</del><ins>+    // We call DownloadRequested callback only once we have received the response
</ins><span class="cx">     // and the suggested file name.
</span><del>-    download-&gt;view()-&gt;smartCallback&lt;DownloadJobRequested&gt;().call(download);
</del><ins>+    if (downloadManager-&gt;m_clientCallbacks.m_requested)
+        downloadManager-&gt;m_clientCallbacks.m_requested(download, downloadManager-&gt;m_clientCallbacks.m_userData);
</ins><span class="cx"> 
</span><span class="cx">     // DownloadSoup expects the destination to be a URL.
</span><span class="cx">     String destination = ASCIILiteral(&quot;file://&quot;) + String::fromUTF8(download-&gt;destination());
</span><span class="lines">@@ -82,6 +84,12 @@
</span><span class="cx">     download-&gt;incrementReceivedData(length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void DownloadManagerEfl::didStart(WKContextRef, WKDownloadRef wkDownload, const void* clientInfo)
+{
+    DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo);
+    downloadManager-&gt;registerDownloadJob(wkDownload);
+}
+
</ins><span class="cx"> void DownloadManagerEfl::didFail(WKContextRef, WKDownloadRef wkDownload, WKErrorRef error, const void* clientInfo)
</span><span class="cx"> {
</span><span class="cx">     DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo);
</span><span class="lines">@@ -91,7 +99,8 @@
</span><span class="cx">     auto ewkError = std::make_unique&lt;EwkError&gt;(error);
</span><span class="cx">     download-&gt;setState(EWK_DOWNLOAD_JOB_STATE_FAILED);
</span><span class="cx">     Ewk_Download_Job_Error downloadError = { download, ewkError.get() };
</span><del>-    download-&gt;view()-&gt;smartCallback&lt;DownloadJobFailed&gt;().call(&amp;downloadError);
</del><ins>+    if (downloadManager-&gt;m_clientCallbacks.m_failed)
+        downloadManager-&gt;m_clientCallbacks.m_failed(&amp;downloadError, downloadManager-&gt;m_clientCallbacks.m_userData);
</ins><span class="cx">     downloadManager-&gt;unregisterDownloadJob(wkDownload);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -102,7 +111,8 @@
</span><span class="cx">     ASSERT(download);
</span><span class="cx"> 
</span><span class="cx">     download-&gt;setState(EWK_DOWNLOAD_JOB_STATE_CANCELLED);
</span><del>-    download-&gt;view()-&gt;smartCallback&lt;DownloadJobCancelled&gt;().call(download);
</del><ins>+    if (downloadManager-&gt;m_clientCallbacks.m_cancelled)
+        downloadManager-&gt;m_clientCallbacks.m_cancelled(download, downloadManager-&gt;m_clientCallbacks.m_userData);
</ins><span class="cx">     downloadManager-&gt;unregisterDownloadJob(wkDownload);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -113,13 +123,16 @@
</span><span class="cx">     ASSERT(download);
</span><span class="cx"> 
</span><span class="cx">     download-&gt;setState(EWK_DOWNLOAD_JOB_STATE_FINISHED);
</span><del>-    download-&gt;view()-&gt;smartCallback&lt;DownloadJobFinished&gt;().call(download);
</del><ins>+    if (downloadManager-&gt;m_clientCallbacks.m_finished)
+        downloadManager-&gt;m_clientCallbacks.m_finished(download, downloadManager-&gt;m_clientCallbacks.m_userData);
</ins><span class="cx">     downloadManager-&gt;unregisterDownloadJob(wkDownload);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> DownloadManagerEfl::DownloadManagerEfl(WKContextRef context)
</span><span class="cx">     : m_context(context)
</span><span class="cx"> {
</span><ins>+    memset(&amp;m_clientCallbacks, 0, sizeof(ClientDownloadCallbacks));
+
</ins><span class="cx">     WKContextDownloadClientV0 wkDownloadClient;
</span><span class="cx">     memset(&amp;wkDownloadClient, 0, sizeof(WKContextDownloadClient));
</span><span class="cx"> 
</span><span class="lines">@@ -130,6 +143,7 @@
</span><span class="cx">     wkDownloadClient.didCreateDestination = didCreateDestination;
</span><span class="cx">     wkDownloadClient.didReceiveResponse = didReceiveResponse;
</span><span class="cx">     wkDownloadClient.didReceiveData = didReceiveData;
</span><ins>+    wkDownloadClient.didStart = didStart;
</ins><span class="cx">     wkDownloadClient.didFail = didFail;
</span><span class="cx">     wkDownloadClient.didFinish = didFinish;
</span><span class="cx"> 
</span><span class="lines">@@ -141,13 +155,13 @@
</span><span class="cx">     WKContextSetDownloadClient(m_context.get(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download, EwkView* viewImpl)
</del><ins>+void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download)
</ins><span class="cx"> {
</span><span class="cx">     uint64_t downloadId = WKDownloadGetID(download);
</span><span class="cx">     if (m_downloadJobs.contains(downloadId))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    RefPtr&lt;EwkDownloadJob&gt; ewkDownload = EwkDownloadJob::create(download, viewImpl);
</del><ins>+    RefPtr&lt;EwkDownloadJob&gt; ewkDownload = EwkDownloadJob::create(download);
</ins><span class="cx">     m_downloadJobs.add(downloadId, ewkDownload);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -161,4 +175,13 @@
</span><span class="cx">     m_downloadJobs.remove(WKDownloadGetID(wkDownload));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void DownloadManagerEfl::setClientCallbacks(Ewk_Download_Requested_Cb requested, Ewk_Download_Failed_Cb failed, Ewk_Download_Cancelled_Cb cancelled,  Ewk_Download_Finished_Cb finished, void* userData)
+{
+    m_clientCallbacks.m_requested = requested;
+    m_clientCallbacks.m_failed = failed;
+    m_clientCallbacks.m_cancelled = cancelled;
+    m_clientCallbacks.m_finished = finished;
+    m_clientCallbacks.m_userData = userData;
+}
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflDownloadManagerEflh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #ifndef DownloadManagerEfl_h
</span><span class="cx"> #define DownloadManagerEfl_h
</span><span class="cx"> 
</span><ins>+#include &quot;ewk_context.h&quot;
</ins><span class="cx"> #include &quot;ewk_download_job_private.h&quot;
</span><span class="cx"> #include &lt;WebKit/WKRetainPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="lines">@@ -33,12 +34,21 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><ins>+struct ClientDownloadCallbacks {
+    Ewk_Download_Requested_Cb m_requested;
+    Ewk_Download_Failed_Cb m_failed;
+    Ewk_Download_Cancelled_Cb m_cancelled;
+    Ewk_Download_Finished_Cb m_finished;
+    void* m_userData;
+};
+
</ins><span class="cx"> class DownloadManagerEfl {
</span><span class="cx"> public:
</span><span class="cx">     explicit DownloadManagerEfl(WKContextRef);
</span><span class="cx">     ~DownloadManagerEfl();
</span><span class="cx"> 
</span><del>-    void registerDownloadJob(WKDownloadRef, EwkView*);
</del><ins>+    void registerDownloadJob(WKDownloadRef);
+    void setClientCallbacks(Ewk_Download_Requested_Cb, Ewk_Download_Failed_Cb, Ewk_Download_Cancelled_Cb, Ewk_Download_Finished_Cb, void* userData);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     EwkDownloadJob* ewkDownloadJob(WKDownloadRef);
</span><span class="lines">@@ -49,11 +59,14 @@
</span><span class="cx">     static void didCreateDestination(WKContextRef, WKDownloadRef, WKStringRef path, const void* clientInfo);
</span><span class="cx">     static void didReceiveData(WKContextRef, WKDownloadRef, uint64_t length, const void* clientInfo);
</span><span class="cx">     static void didFail(WKContextRef, WKDownloadRef, WKErrorRef, const void* clientInfo);
</span><ins>+    static void didStart(WKContextRef, WKDownloadRef, const void* clientInfo);
</ins><span class="cx">     static void didCancel(WKContextRef, WKDownloadRef, const void* clientInfo);
</span><span class="cx">     static void didFinish(WKContextRef, WKDownloadRef, const void* clientInfo);
</span><span class="cx"> 
</span><span class="cx">     WKRetainPtr&lt;WKContextRef&gt; m_context;
</span><span class="cx">     HashMap&lt;uint64_t, RefPtr&lt;EwkDownloadJob&gt; &gt; m_downloadJobs;
</span><ins>+
+    ClientDownloadCallbacks m_clientCallbacks;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflWebViewEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx"> void WebViewEfl::handleDownloadRequest(DownloadProxy* download)
</span><span class="cx"> {
</span><span class="cx">     EwkContext* context = m_ewkView-&gt;ewkContext();
</span><del>-    context-&gt;downloadManager()-&gt;registerDownloadJob(toAPI(download), m_ewkView);
</del><ins>+    context-&gt;downloadManager()-&gt;registerDownloadJob(toAPI(download));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebViewEfl::setThemePath(const String&amp; theme)
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Tools/ChangeLog        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2015-03-05  Lukasz Bialek  &lt;l.bialek@samsung.com&gt;
+
+        [EFL][WK2] Crash when &quot;Download Linked File&quot; from MiniBrowser context menu is clicked
+        https://bugs.webkit.org/show_bug.cgi?id=131162
+
+        Reviewed by Gyuyoung Kim.
+
+        * MiniBrowser/efl/main.c:
+        (on_download_request):
+        (on_download_finished):
+        (on_download_failed):
+        (window_create):
+        Adapt download callbacks to new callback mechanism
+
</ins><span class="cx"> 2015-03-05  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed. Fix /webkit2/WebKitWebResource/mime-type after r180927.
</span></span></pre></div>
<a id="trunkToolsMiniBrowsereflmainc"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/efl/main.c (181075 => 181076)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/efl/main.c        2015-03-05 10:45:23 UTC (rev 181075)
+++ trunk/Tools/MiniBrowser/efl/main.c        2015-03-05 14:05:12 UTC (rev 181076)
</span><span class="lines">@@ -732,9 +732,8 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void
</span><del>-on_download_request(void *user_data, Evas_Object *ewk_view, void *event_info)
</del><ins>+on_download_request(Ewk_Download_Job *download, void *user_data)
</ins><span class="cx"> {
</span><del>-    Ewk_Download_Job *download = (Ewk_Download_Job *)event_info;
</del><span class="cx">     Browser_Window *window = (Browser_Window *)user_data;
</span><span class="cx"> 
</span><span class="cx">     Eina_Strbuf *destination_path = eina_strbuf_new();
</span><span class="lines">@@ -842,16 +841,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void
</span><del>-on_download_finished(void *user_data, Evas_Object *ewk_view, void *event_info)
</del><ins>+on_download_finished(Ewk_Download_Job *download, void *user_data)
</ins><span class="cx"> {
</span><del>-    Ewk_Download_Job *download = (Ewk_Download_Job *)event_info;
</del><span class="cx">     INFO(&quot;Download finished: %s&quot;,  ewk_download_job_destination_get(download));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void
</span><del>-on_download_failed(void *user_data, Evas_Object *ewk_view, void *event_info)
</del><ins>+on_download_failed(Ewk_Download_Job_Error *download_error, void *user_data)
</ins><span class="cx"> {
</span><del>-    INFO(&quot;Download failed!&quot;);
</del><ins>+    Ewk_Error *error = download_error-&gt;error;
+
+    INFO(&quot;Download failed! Error code: %d, Error description: %s, Error URL: %s&quot;, ewk_error_code_get(error), ewk_error_description_get(error), ewk_error_url_get(error));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void
</span><span class="lines">@@ -2257,11 +2257,7 @@
</span><span class="cx">     ewk_settings_preferred_minimum_contents_width_set(settings, 0);
</span><span class="cx">     ewk_text_checker_continuous_spell_checking_enabled_set(spell_checking_enabled);
</span><span class="cx">     ewk_settings_web_security_enabled_set(settings, web_security_enabled);
</span><del>-
</del><span class="cx">     evas_object_smart_callback_add(window-&gt;ewk_view, &quot;authentication,request&quot;, on_authentication_request, window);
</span><del>-    evas_object_smart_callback_add(window-&gt;ewk_view, &quot;download,failed&quot;, on_download_failed, window);
-    evas_object_smart_callback_add(window-&gt;ewk_view, &quot;download,finished&quot;, on_download_finished, window);
-    evas_object_smart_callback_add(window-&gt;ewk_view, &quot;download,request&quot;, on_download_request, window);
</del><span class="cx">     evas_object_smart_callback_add(window-&gt;ewk_view, &quot;file,chooser,request&quot;, on_file_chooser_request, window);
</span><span class="cx">     evas_object_smart_callback_add(window-&gt;ewk_view, &quot;load,error&quot;, on_error, window);
</span><span class="cx">     evas_object_smart_callback_add(window-&gt;ewk_view, &quot;load,provisional,failed&quot;, on_error, window);
</span><span class="lines">@@ -2427,6 +2423,9 @@
</span><span class="cx">     if (!window)
</span><span class="cx">         return quit(EINA_FALSE, &quot;Could not create browser window.&quot;);
</span><span class="cx"> 
</span><ins>+    // Set callbacks for download events.
+    ewk_context_download_callbacks_set(context, on_download_request, on_download_failed, 0, on_download_finished, window);
+
</ins><span class="cx">     if (args &lt; argc) {
</span><span class="cx">         char *url = url_from_user_input(argv[args]);
</span><span class="cx">         ewk_view_url_set(window-&gt;ewk_view, url);
</span></span></pre>
</div>
</div>

</body>
</html>