Changeset 181076 in webkit


Ignore:
Timestamp:
Mar 5, 2015 6:05:12 AM (9 years ago)
Author:
commit-queue@webkit.org
Message:

[EFL][WK2] Crash when "Download Linked File" from MiniBrowser context menu is clicked
https://bugs.webkit.org/show_bug.cgi?id=131162

Patch by Lukasz Bialek <l.bialek@samsung.com> on 2015-03-05
Reviewed by Gyuyoung Kim.

Source/WebKit2:

"Download Linked File" 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

Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r181073 r181076  
     12015-03-05  Lukasz Bialek  <l.bialek@samsung.com>
     2
     3        [EFL][WK2] Crash when "Download Linked File" from MiniBrowser context menu is clicked
     4        https://bugs.webkit.org/show_bug.cgi?id=131162
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        "Download Linked File" crashes because of null-pointer exception of Download Job.
     9        Due to architectural difficulties, easy fix is not possible (EwkView is needed in
     10        DownloadManager to create DownloadJobs and it is only used to notify the client
     11        about download (finished, error, cancel) via smart callback using EwkView (Evas_Object).
     12
     13        Propose a new callbacks which are view independent and detach EFL's DownloadManager
     14        from EwkView. It makes DownloadManagerEFL consistent with WKContextDownload.
     15        Fix the crash and restore download functionality.
     16
     17        * PlatformEfl.cmake:
     18        Enable newly reimplemented tests
     19        * UIProcess/API/efl/EwkViewCallbacks.h:
     20        Remove old callback mechanism
     21        * UIProcess/API/efl/ewk_context.cpp:
     22        (ewk_context_download_callbacks_set):
     23        * UIProcess/API/efl/ewk_context.h:
     24        Declare new callback functions and registration functions
     25        * UIProcess/API/efl/ewk_download_job.cpp:
     26        (EwkDownloadJob::EwkDownloadJob):
     27        (EwkDownloadJob::view): Deleted.
     28        * UIProcess/API/efl/ewk_download_job.h:
     29        * UIProcess/API/efl/ewk_download_job_private.h:
     30        (EwkDownloadJob::create):
     31        Remove EwkView dependency
     32        * UIProcess/API/efl/ewk_view.h:
     33        * UIProcess/API/efl/tests/test_ewk2_download_job.cpp:
     34        Alter tests to new callback mechanism
     35        * UIProcess/efl/DownloadManagerEfl.cpp:
     36        (WebKit::DownloadManagerEfl::decideDestinationWithSuggestedFilename):
     37        (WebKit::DownloadManagerEfl::didStart):
     38        (WebKit::DownloadManagerEfl::didFail):
     39        (WebKit::DownloadManagerEfl::didCancel):
     40        (WebKit::DownloadManagerEfl::didFinish):
     41        (WebKit::DownloadManagerEfl::DownloadManagerEfl):
     42        (WebKit::DownloadManagerEfl::registerDownloadJob):
     43        (WebKit::DownloadManagerEfl::setCallbacks):
     44        * UIProcess/efl/DownloadManagerEfl.h:
     45        * UIProcess/efl/WebViewEfl.cpp:
     46        (WebKit::WebViewEfl::handleDownloadRequest):
     47        Add support of new callback mechanism
     48
    1492015-03-05  Michael Catanzaro  <mcatanzaro@igalia.com>
    250
  • trunk/Source/WebKit2/PlatformEfl.cmake

    r180553 r181076  
    508508    test_ewk2_cookie_manager
    509509    test_ewk2_database_manager
     510    test_ewk2_download_job
    510511    test_ewk2_eina_shared_string
    511512    test_ewk2_favicon_database
     
    525526# webkit.org/b/107422: test_ewk2_auth_request
    526527# webkit.org/b/132980: test_ewk2_context_menu
    527 # webkit.org/b/132981: test_ewk2_download_job
    528528# webkit.org/b/141249: test_ewk2_storage_manager
    529529
  • trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h

    r171182 r181076  
    4949    CancelVibration,
    5050    ContentsSizeChanged,
    51     DownloadJobCancelled,
    52     DownloadJobFailed,
    53     DownloadJobFinished,
    54     DownloadJobRequested,
    5551    FileChooserRequest,
    5652    FocusNotFound,
     
    177173DECLARE_EWK_VIEW_CALLBACK(CancelVibration, "cancel,vibration", void);
    178174DECLARE_EWK_VIEW_CALLBACK(ContentsSizeChanged, "contents,size,changed", Ewk_CSS_Size*);
    179 DECLARE_EWK_VIEW_CALLBACK(DownloadJobCancelled, "download,cancelled", Ewk_Download_Job*);
    180 DECLARE_EWK_VIEW_CALLBACK(DownloadJobFailed, "download,failed", Ewk_Download_Job_Error*);
    181 DECLARE_EWK_VIEW_CALLBACK(DownloadJobFinished, "download,finished", Ewk_Download_Job*);
    182 DECLARE_EWK_VIEW_CALLBACK(DownloadJobRequested, "download,request", Ewk_Download_Job*);
    183175DECLARE_EWK_VIEW_CALLBACK(FileChooserRequest, "file,chooser,request", Ewk_File_Chooser_Request*);
    184176DECLARE_EWK_VIEW_CALLBACK(FocusNotFound, "focus,notfound", Ewk_Focus_Direction);
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp

    r180553 r181076  
    489489}
    490490
     491void 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)
     492{
     493    EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl);
     494
     495    impl->downloadManager()->setClientCallbacks(requested, failed, cancelled, finished, data);
     496}
     497
    491498void ewk_context_visited_link_add(Ewk_Context* ewkContext, const char* visitedURL)
    492499{
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h

    r180553 r181076  
    4141#include "ewk_cookie_manager.h"
    4242#include "ewk_database_manager.h"
     43#include "ewk_download_job.h"
     44#include "ewk_error.h"
    4345#include "ewk_favicon_database.h"
    4446#include "ewk_navigation_data.h"
     
    5052extern "C" {
    5153#endif
     54
     55/// Creates a type name for Ewk_Download_Job_Error.
     56typedef struct Ewk_Download_Job_Error Ewk_Download_Job_Error;
     57
     58/**
     59 * @brief Structure containing details about a download failure.
     60 */
     61struct Ewk_Download_Job_Error {
     62    Ewk_Download_Job *download_job; /**< download that failed */
     63    Ewk_Error *error; /**< download error */
     64};
    5265
    5366/**
     
    130143 */
    131144typedef void (*Ewk_History_Title_Update_Cb)(const Evas_Object *view, const char *title, const char *url, void *user_data);
     145
     146/**
     147 * @typedef Ewk_Download_Requested_Cb Ewk_Download_Requested_Cb
     148 * @brief Type definition for a function that will be called back when new download job is requested.
     149 */
     150typedef void (*Ewk_Download_Requested_Cb)(Ewk_Download_Job *download, void *user_data);
     151
     152/**
     153 * @typedef Ewk_Download_Failed_Cb Ewk_Download_Failed_Cb
     154 * @brief Type definition for a function that will be called back when a download job has failed.
     155 */
     156typedef void (*Ewk_Download_Failed_Cb)(Ewk_Download_Job_Error *error, void *user_data);
     157
     158/**
     159 * @typedef Ewk_Download_Cancelled_Cb Ewk_Download_Cancelled_Cb
     160 * @brief Type definition for a function that will be called back when a download job is cancelled.
     161 */
     162typedef void (*Ewk_Download_Cancelled_Cb)(Ewk_Download_Job *download, void *user_data);
     163
     164/**
     165 * @typedef Ewk_Download_Finished_Cb Ewk_Download_Finished_Cb
     166 * @brief Type definition for a function that will be called back when a download job is finished.
     167 */
     168typedef void (*Ewk_Download_Finished_Cb)(Ewk_Download_Job *download, void *user_data);
    132169
    133170/**
     
    317354
    318355/**
     356 * Sets download callbacks for the given @a context.
     357 *
     358 * To stop listening for download events, you may call this function with @c
     359 * NULL for the callbacks.
     360 *
     361 * @param context context object to set download callbacks
     362 * @param download_requested_func the function to call when new download is requested (may be @c NULL).
     363 * @param download_failed_func the function to call when a download job has failed (may be @c NULL).
     364 * @param download_cancelled_func the function to call when a download job is cancelled (may be @c NULL).
     365 * @param download_finished_func the function to call when a download job is finished (may be @c NULL).
     366 * @param data User data (may be @c NULL).
     367 */
     368EAPI void ewk_context_download_callbacks_set(Ewk_Context *context,
     369                                             Ewk_Download_Requested_Cb download_requested_func,
     370                                             Ewk_Download_Failed_Cb download_failed_func,
     371                                             Ewk_Download_Cancelled_Cb download_cancelled_func,
     372                                             Ewk_Download_Finished_Cb download_finished_func,
     373                                             void* data);
     374
     375/**
    319376 * Registers the given @a visited_url as visited link in @a context visited link cache.
    320377 *
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp

    r170951 r181076  
    3737using namespace WebKit;
    3838
    39 EwkDownloadJob::EwkDownloadJob(WKDownloadRef download, EwkView* viewImpl)
     39EwkDownloadJob::EwkDownloadJob(WKDownloadRef download)
    4040    : m_download(download)
    41     , m_viewImpl(viewImpl)
    4241    , m_state(EWK_DOWNLOAD_JOB_STATE_NOT_STARTED)
    4342    , m_startTime(-1)
     
    5352{
    5453    return WKDownloadGetID(m_download.get());
    55 }
    56 
    57 /**
    58  * @internal
    59  * Returns the view this download is attached to.
    60  * The view is needed to send notification signals.
    61  */
    62 EwkView* EwkDownloadJob::view() const
    63 {
    64     return m_viewImpl;
    6554}
    6655
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h

    r170951 r181076  
    152152 * Cancels the download asynchronously.
    153153 *
    154  * When the ongoing download operation is effectively cancelled a "download,cancelled"
    155  * signal will be emitted on the view.
     154 * When the ongoing download operation is effectively cancelled, a "Ewk_Download_Cancelled_Cb"
     155 * will be called in DownloadManager.
    156156 *
    157157 * @param download a #Ewk_Download_Job to cancel.
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h

    r170951 r181076  
    4343    EWK_OBJECT_DECLARE(EwkDownloadJob)
    4444
    45     static PassRefPtr<EwkDownloadJob> create(WKDownloadRef download, EwkView* viewImpl)
     45    static PassRefPtr<EwkDownloadJob> create(WKDownloadRef download)
    4646    {
    47         return adoptRef(new EwkDownloadJob(download, viewImpl));
     47        return adoptRef(new EwkDownloadJob(download));
    4848    }
    4949
     
    7272
    7373private:
    74     EwkDownloadJob(WKDownloadRef download, EwkView* view);
     74    explicit EwkDownloadJob(WKDownloadRef download);
    7575
    7676    WKRetainPtr<WKDownloadRef> m_download;
    77     EwkView* m_viewImpl;
    7877    Ewk_Download_Job_State m_state;
    7978    mutable RefPtr<EwkUrlRequest> m_request;
  • trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h

    r175098 r181076  
    3232 * - "cancel,vibration", void: request to cancel the vibration.
    3333 * - "contents,size,changed", Ewk_CSS_Size*: reports that contents size was changed.
    34  * - "download,cancelled", Ewk_Download_Job*: reports that a download was effectively cancelled.
    35  * - "download,failed", Ewk_Download_Job_Error*: reports that a download failed with the given error.
    36  * - "download,finished", Ewk_Download_Job*: reports that a download completed successfully.
    37  * - "download,request", Ewk_Download_Job*: reports that a new download has been requested. The client should set the
    38  *   destination path by calling ewk_download_job_destination_set() or the download will fail.
    3934 * - "file,chooser,request", Ewk_File_Chooser_Request*: reports that a request has been made for the user to choose
    4035 *   a file (or several) on the file system. Call ewk_file_chooser_request_ref() on the request object to process it
     
    8075#include "ewk_context_menu.h"
    8176#include "ewk_download_job.h"
    82 #include "ewk_error.h"
    8377#include "ewk_page_group.h"
    8478#include "ewk_popup_menu.h"
     
    244238};
    245239
    246 /// Creates a type name for Ewk_Download_Job_Error.
    247 typedef struct Ewk_Download_Job_Error Ewk_Download_Job_Error;
    248 
    249 /**
    250  * @brief Structure containing details about a download failure.
    251  */
    252 struct Ewk_Download_Job_Error {
    253     Ewk_Download_Job *download_job; /**< download that failed */
    254     Ewk_Error *error; /**< download error */
    255 };
    256 
    257240/// Creates a type name for Ewk_CSS_Size.
    258241typedef struct Ewk_CSS_Size Ewk_CSS_Size;
  • trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp

    r170951 r181076  
    9797    }
    9898
    99     static void on_download_requested(void* userData, Evas_Object* webview, void* eventInfo)
     99    static void on_download_requested(EwkObject* eventInfo, void* userData)
    100100    {
    101101        DownloadTestData* testData = static_cast<DownloadTestData*>(userData);
     
    121121    }
    122122
    123     static void on_download_cancelled(void* userData, Evas_Object* webview, void* eventInfo)
     123    static void on_download_cancelled(EwkObject*, void*)
    124124    {
    125125        fprintf(stderr, "Download was cancelled.\n");
     
    128128    }
    129129
    130     static void on_download_failed(void* userData, Evas_Object* webview, void* eventInfo)
     130    static void on_download_failed(Ewk_Download_Job_Error* downloadError, void* userData)
    131131    {
    132         Ewk_Download_Job_Error* downloadError = static_cast<Ewk_Download_Job_Error*>(eventInfo);
    133132        fprintf(stderr, "Download error: %s\n", ewk_error_description_get(downloadError->error));
    134133        ecore_main_loop_quit();
     
    136135    }
    137136
    138     static void on_download_finished(void* userData, Evas_Object* webview, void* eventInfo)
     137    static void on_download_finished(EwkObject* eventInfo, void* userData)
    139138    {
    140139        DownloadTestData* testData = static_cast<DownloadTestData*>(userData);
     
    167166    ASSERT_FALSE(fileExists(destinationPath));
    168167
    169     evas_object_smart_callback_add(webView(), "download,request", on_download_requested, &userData);
    170     evas_object_smart_callback_add(webView(), "download,cancel", on_download_cancelled, &userData);
    171     evas_object_smart_callback_add(webView(), "download,failed", on_download_failed, &userData);
    172     evas_object_smart_callback_add(webView(), "download,finished", on_download_finished, &userData);
     168    Ewk_Context* context = ewk_view_context_get(webView());
     169    ewk_context_download_callbacks_set(context, on_download_requested, on_download_failed, on_download_cancelled, on_download_finished, &userData);
    173170
    174171    // Download test pdf
  • trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp

    r166155 r181076  
    4646WKStringRef DownloadManagerEfl::decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef wkDownload, WKStringRef filename, bool* /*allowOverwrite*/, const void* clientInfo)
    4747{
    48     EwkDownloadJob* download = toDownloadManagerEfl(clientInfo)->ewkDownloadJob(wkDownload);
     48    DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo);
     49    EwkDownloadJob* download = downloadManager->ewkDownloadJob(wkDownload);
    4950    ASSERT(download);
    5051
    5152    download->setSuggestedFileName(toImpl(filename)->string().utf8().data());
    5253
    53     // We send the new download signal on the Ewk_View only once we have received the response
     54    // We call DownloadRequested callback only once we have received the response
    5455    // and the suggested file name.
    55     download->view()->smartCallback<DownloadJobRequested>().call(download);
     56    if (downloadManager->m_clientCallbacks.m_requested)
     57        downloadManager->m_clientCallbacks.m_requested(download, downloadManager->m_clientCallbacks.m_userData);
    5658
    5759    // DownloadSoup expects the destination to be a URL.
     
    8385}
    8486
     87void DownloadManagerEfl::didStart(WKContextRef, WKDownloadRef wkDownload, const void* clientInfo)
     88{
     89    DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo);
     90    downloadManager->registerDownloadJob(wkDownload);
     91}
     92
    8593void DownloadManagerEfl::didFail(WKContextRef, WKDownloadRef wkDownload, WKErrorRef error, const void* clientInfo)
    8694{
     
    92100    download->setState(EWK_DOWNLOAD_JOB_STATE_FAILED);
    93101    Ewk_Download_Job_Error downloadError = { download, ewkError.get() };
    94     download->view()->smartCallback<DownloadJobFailed>().call(&downloadError);
     102    if (downloadManager->m_clientCallbacks.m_failed)
     103        downloadManager->m_clientCallbacks.m_failed(&downloadError, downloadManager->m_clientCallbacks.m_userData);
    95104    downloadManager->unregisterDownloadJob(wkDownload);
    96105}
     
    103112
    104113    download->setState(EWK_DOWNLOAD_JOB_STATE_CANCELLED);
    105     download->view()->smartCallback<DownloadJobCancelled>().call(download);
     114    if (downloadManager->m_clientCallbacks.m_cancelled)
     115        downloadManager->m_clientCallbacks.m_cancelled(download, downloadManager->m_clientCallbacks.m_userData);
    106116    downloadManager->unregisterDownloadJob(wkDownload);
    107117}
     
    114124
    115125    download->setState(EWK_DOWNLOAD_JOB_STATE_FINISHED);
    116     download->view()->smartCallback<DownloadJobFinished>().call(download);
     126    if (downloadManager->m_clientCallbacks.m_finished)
     127        downloadManager->m_clientCallbacks.m_finished(download, downloadManager->m_clientCallbacks.m_userData);
    117128    downloadManager->unregisterDownloadJob(wkDownload);
    118129}
     
    121132    : m_context(context)
    122133{
     134    memset(&m_clientCallbacks, 0, sizeof(ClientDownloadCallbacks));
     135
    123136    WKContextDownloadClientV0 wkDownloadClient;
    124137    memset(&wkDownloadClient, 0, sizeof(WKContextDownloadClient));
     
    131144    wkDownloadClient.didReceiveResponse = didReceiveResponse;
    132145    wkDownloadClient.didReceiveData = didReceiveData;
     146    wkDownloadClient.didStart = didStart;
    133147    wkDownloadClient.didFail = didFail;
    134148    wkDownloadClient.didFinish = didFinish;
     
    142156}
    143157
    144 void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download, EwkView* viewImpl)
     158void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download)
    145159{
    146160    uint64_t downloadId = WKDownloadGetID(download);
     
    148162        return;
    149163
    150     RefPtr<EwkDownloadJob> ewkDownload = EwkDownloadJob::create(download, viewImpl);
     164    RefPtr<EwkDownloadJob> ewkDownload = EwkDownloadJob::create(download);
    151165    m_downloadJobs.add(downloadId, ewkDownload);
    152166}
     
    162176}
    163177
     178void DownloadManagerEfl::setClientCallbacks(Ewk_Download_Requested_Cb requested, Ewk_Download_Failed_Cb failed, Ewk_Download_Cancelled_Cb cancelled,  Ewk_Download_Finished_Cb finished, void* userData)
     179{
     180    m_clientCallbacks.m_requested = requested;
     181    m_clientCallbacks.m_failed = failed;
     182    m_clientCallbacks.m_cancelled = cancelled;
     183    m_clientCallbacks.m_finished = finished;
     184    m_clientCallbacks.m_userData = userData;
     185}
     186
    164187} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h

    r168961 r181076  
    2727#define DownloadManagerEfl_h
    2828
     29#include "ewk_context.h"
    2930#include "ewk_download_job_private.h"
    3031#include <WebKit/WKRetainPtr.h>
     
    3435namespace WebKit {
    3536
     37struct ClientDownloadCallbacks {
     38    Ewk_Download_Requested_Cb m_requested;
     39    Ewk_Download_Failed_Cb m_failed;
     40    Ewk_Download_Cancelled_Cb m_cancelled;
     41    Ewk_Download_Finished_Cb m_finished;
     42    void* m_userData;
     43};
     44
    3645class DownloadManagerEfl {
    3746public:
     
    3948    ~DownloadManagerEfl();
    4049
    41     void registerDownloadJob(WKDownloadRef, EwkView*);
     50    void registerDownloadJob(WKDownloadRef);
     51    void setClientCallbacks(Ewk_Download_Requested_Cb, Ewk_Download_Failed_Cb, Ewk_Download_Cancelled_Cb, Ewk_Download_Finished_Cb, void* userData);
    4252
    4353private:
     
    5060    static void didReceiveData(WKContextRef, WKDownloadRef, uint64_t length, const void* clientInfo);
    5161    static void didFail(WKContextRef, WKDownloadRef, WKErrorRef, const void* clientInfo);
     62    static void didStart(WKContextRef, WKDownloadRef, const void* clientInfo);
    5263    static void didCancel(WKContextRef, WKDownloadRef, const void* clientInfo);
    5364    static void didFinish(WKContextRef, WKDownloadRef, const void* clientInfo);
     
    5566    WKRetainPtr<WKContextRef> m_context;
    5667    HashMap<uint64_t, RefPtr<EwkDownloadJob> > m_downloadJobs;
     68
     69    ClientDownloadCallbacks m_clientCallbacks;
    5770};
    5871
  • trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp

    r180411 r181076  
    115115{
    116116    EwkContext* context = m_ewkView->ewkContext();
    117     context->downloadManager()->registerDownloadJob(toAPI(download), m_ewkView);
     117    context->downloadManager()->registerDownloadJob(toAPI(download));
    118118}
    119119
  • trunk/Tools/ChangeLog

    r181075 r181076  
     12015-03-05  Lukasz Bialek  <l.bialek@samsung.com>
     2
     3        [EFL][WK2] Crash when "Download Linked File" from MiniBrowser context menu is clicked
     4        https://bugs.webkit.org/show_bug.cgi?id=131162
     5
     6        Reviewed by Gyuyoung Kim.
     7
     8        * MiniBrowser/efl/main.c:
     9        (on_download_request):
     10        (on_download_finished):
     11        (on_download_failed):
     12        (window_create):
     13        Adapt download callbacks to new callback mechanism
     14
    1152015-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>
    216
  • trunk/Tools/MiniBrowser/efl/main.c

    r180542 r181076  
    733733
    734734static void
    735 on_download_request(void *user_data, Evas_Object *ewk_view, void *event_info)
    736 {
    737     Ewk_Download_Job *download = (Ewk_Download_Job *)event_info;
     735on_download_request(Ewk_Download_Job *download, void *user_data)
     736{
    738737    Browser_Window *window = (Browser_Window *)user_data;
    739738
     
    843842
    844843static void
    845 on_download_finished(void *user_data, Evas_Object *ewk_view, void *event_info)
    846 {
    847     Ewk_Download_Job *download = (Ewk_Download_Job *)event_info;
     844on_download_finished(Ewk_Download_Job *download, void *user_data)
     845{
    848846    INFO("Download finished: %s",  ewk_download_job_destination_get(download));
    849847}
    850848
    851849static void
    852 on_download_failed(void *user_data, Evas_Object *ewk_view, void *event_info)
    853 {
    854     INFO("Download failed!");
     850on_download_failed(Ewk_Download_Job_Error *download_error, void *user_data)
     851{
     852    Ewk_Error *error = download_error->error;
     853
     854    INFO("Download failed! Error code: %d, Error description: %s, Error URL: %s", ewk_error_code_get(error), ewk_error_description_get(error), ewk_error_url_get(error));
    855855}
    856856
     
    22582258    ewk_text_checker_continuous_spell_checking_enabled_set(spell_checking_enabled);
    22592259    ewk_settings_web_security_enabled_set(settings, web_security_enabled);
    2260 
    22612260    evas_object_smart_callback_add(window->ewk_view, "authentication,request", on_authentication_request, window);
    2262     evas_object_smart_callback_add(window->ewk_view, "download,failed", on_download_failed, window);
    2263     evas_object_smart_callback_add(window->ewk_view, "download,finished", on_download_finished, window);
    2264     evas_object_smart_callback_add(window->ewk_view, "download,request", on_download_request, window);
    22652261    evas_object_smart_callback_add(window->ewk_view, "file,chooser,request", on_file_chooser_request, window);
    22662262    evas_object_smart_callback_add(window->ewk_view, "load,error", on_error, window);
     
    24282424        return quit(EINA_FALSE, "Could not create browser window.");
    24292425
     2426    // Set callbacks for download events.
     2427    ewk_context_download_callbacks_set(context, on_download_request, on_download_failed, 0, on_download_finished, window);
     2428
    24302429    if (args < argc) {
    24312430        char *url = url_from_user_input(argv[args]);
Note: See TracChangeset for help on using the changeset viewer.