Changeset 181076 in webkit
- Timestamp:
- Mar 5, 2015 6:05:12 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r181073 r181076 1 2015-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 1 49 2015-03-05 Michael Catanzaro <mcatanzaro@igalia.com> 2 50 -
trunk/Source/WebKit2/PlatformEfl.cmake
r180553 r181076 508 508 test_ewk2_cookie_manager 509 509 test_ewk2_database_manager 510 test_ewk2_download_job 510 511 test_ewk2_eina_shared_string 511 512 test_ewk2_favicon_database … … 525 526 # webkit.org/b/107422: test_ewk2_auth_request 526 527 # webkit.org/b/132980: test_ewk2_context_menu 527 # webkit.org/b/132981: test_ewk2_download_job528 528 # webkit.org/b/141249: test_ewk2_storage_manager 529 529 -
trunk/Source/WebKit2/UIProcess/API/efl/EwkViewCallbacks.h
r171182 r181076 49 49 CancelVibration, 50 50 ContentsSizeChanged, 51 DownloadJobCancelled,52 DownloadJobFailed,53 DownloadJobFinished,54 DownloadJobRequested,55 51 FileChooserRequest, 56 52 FocusNotFound, … … 177 173 DECLARE_EWK_VIEW_CALLBACK(CancelVibration, "cancel,vibration", void); 178 174 DECLARE_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*);183 175 DECLARE_EWK_VIEW_CALLBACK(FileChooserRequest, "file,chooser,request", Ewk_File_Chooser_Request*); 184 176 DECLARE_EWK_VIEW_CALLBACK(FocusNotFound, "focus,notfound", Ewk_Focus_Direction); -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp
r180553 r181076 489 489 } 490 490 491 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) 492 { 493 EWK_OBJ_GET_IMPL_OR_RETURN(EwkContext, ewkContext, impl); 494 495 impl->downloadManager()->setClientCallbacks(requested, failed, cancelled, finished, data); 496 } 497 491 498 void ewk_context_visited_link_add(Ewk_Context* ewkContext, const char* visitedURL) 492 499 { -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h
r180553 r181076 41 41 #include "ewk_cookie_manager.h" 42 42 #include "ewk_database_manager.h" 43 #include "ewk_download_job.h" 44 #include "ewk_error.h" 43 45 #include "ewk_favicon_database.h" 44 46 #include "ewk_navigation_data.h" … … 50 52 extern "C" { 51 53 #endif 54 55 /// Creates a type name for Ewk_Download_Job_Error. 56 typedef struct Ewk_Download_Job_Error Ewk_Download_Job_Error; 57 58 /** 59 * @brief Structure containing details about a download failure. 60 */ 61 struct Ewk_Download_Job_Error { 62 Ewk_Download_Job *download_job; /**< download that failed */ 63 Ewk_Error *error; /**< download error */ 64 }; 52 65 53 66 /** … … 130 143 */ 131 144 typedef 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 */ 150 typedef 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 */ 156 typedef 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 */ 162 typedef 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 */ 168 typedef void (*Ewk_Download_Finished_Cb)(Ewk_Download_Job *download, void *user_data); 132 169 133 170 /** … … 317 354 318 355 /** 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 */ 368 EAPI 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 /** 319 376 * Registers the given @a visited_url as visited link in @a context visited link cache. 320 377 * -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.cpp
r170951 r181076 37 37 using namespace WebKit; 38 38 39 EwkDownloadJob::EwkDownloadJob(WKDownloadRef download , EwkView* viewImpl)39 EwkDownloadJob::EwkDownloadJob(WKDownloadRef download) 40 40 : m_download(download) 41 , m_viewImpl(viewImpl)42 41 , m_state(EWK_DOWNLOAD_JOB_STATE_NOT_STARTED) 43 42 , m_startTime(-1) … … 53 52 { 54 53 return WKDownloadGetID(m_download.get()); 55 }56 57 /**58 * @internal59 * Returns the view this download is attached to.60 * The view is needed to send notification signals.61 */62 EwkView* EwkDownloadJob::view() const63 {64 return m_viewImpl;65 54 } 66 55 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job.h
r170951 r181076 152 152 * Cancels the download asynchronously. 153 153 * 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. 156 156 * 157 157 * @param download a #Ewk_Download_Job to cancel. -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_download_job_private.h
r170951 r181076 43 43 EWK_OBJECT_DECLARE(EwkDownloadJob) 44 44 45 static PassRefPtr<EwkDownloadJob> create(WKDownloadRef download , EwkView* viewImpl)45 static PassRefPtr<EwkDownloadJob> create(WKDownloadRef download) 46 46 { 47 return adoptRef(new EwkDownloadJob(download , viewImpl));47 return adoptRef(new EwkDownloadJob(download)); 48 48 } 49 49 … … 72 72 73 73 private: 74 EwkDownloadJob(WKDownloadRef download, EwkView* view);74 explicit EwkDownloadJob(WKDownloadRef download); 75 75 76 76 WKRetainPtr<WKDownloadRef> m_download; 77 EwkView* m_viewImpl;78 77 Ewk_Download_Job_State m_state; 79 78 mutable RefPtr<EwkUrlRequest> m_request; -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h
r175098 r181076 32 32 * - "cancel,vibration", void: request to cancel the vibration. 33 33 * - "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 the38 * destination path by calling ewk_download_job_destination_set() or the download will fail.39 34 * - "file,chooser,request", Ewk_File_Chooser_Request*: reports that a request has been made for the user to choose 40 35 * a file (or several) on the file system. Call ewk_file_chooser_request_ref() on the request object to process it … … 80 75 #include "ewk_context_menu.h" 81 76 #include "ewk_download_job.h" 82 #include "ewk_error.h"83 77 #include "ewk_page_group.h" 84 78 #include "ewk_popup_menu.h" … … 244 238 }; 245 239 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 257 240 /// Creates a type name for Ewk_CSS_Size. 258 241 typedef struct Ewk_CSS_Size Ewk_CSS_Size; -
trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download_job.cpp
r170951 r181076 97 97 } 98 98 99 static void on_download_requested( void* userData, Evas_Object* webview, void* eventInfo)99 static void on_download_requested(EwkObject* eventInfo, void* userData) 100 100 { 101 101 DownloadTestData* testData = static_cast<DownloadTestData*>(userData); … … 121 121 } 122 122 123 static void on_download_cancelled( void* userData, Evas_Object* webview, void* eventInfo)123 static void on_download_cancelled(EwkObject*, void*) 124 124 { 125 125 fprintf(stderr, "Download was cancelled.\n"); … … 128 128 } 129 129 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) 131 131 { 132 Ewk_Download_Job_Error* downloadError = static_cast<Ewk_Download_Job_Error*>(eventInfo);133 132 fprintf(stderr, "Download error: %s\n", ewk_error_description_get(downloadError->error)); 134 133 ecore_main_loop_quit(); … … 136 135 } 137 136 138 static void on_download_finished( void* userData, Evas_Object* webview, void* eventInfo)137 static void on_download_finished(EwkObject* eventInfo, void* userData) 139 138 { 140 139 DownloadTestData* testData = static_cast<DownloadTestData*>(userData); … … 167 166 ASSERT_FALSE(fileExists(destinationPath)); 168 167 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); 173 170 174 171 // Download test pdf -
trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.cpp
r166155 r181076 46 46 WKStringRef DownloadManagerEfl::decideDestinationWithSuggestedFilename(WKContextRef, WKDownloadRef wkDownload, WKStringRef filename, bool* /*allowOverwrite*/, const void* clientInfo) 47 47 { 48 EwkDownloadJob* download = toDownloadManagerEfl(clientInfo)->ewkDownloadJob(wkDownload); 48 DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo); 49 EwkDownloadJob* download = downloadManager->ewkDownloadJob(wkDownload); 49 50 ASSERT(download); 50 51 51 52 download->setSuggestedFileName(toImpl(filename)->string().utf8().data()); 52 53 53 // We send the new download signal on the Ewk_Viewonly once we have received the response54 // We call DownloadRequested callback only once we have received the response 54 55 // 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); 56 58 57 59 // DownloadSoup expects the destination to be a URL. … … 83 85 } 84 86 87 void DownloadManagerEfl::didStart(WKContextRef, WKDownloadRef wkDownload, const void* clientInfo) 88 { 89 DownloadManagerEfl* downloadManager = toDownloadManagerEfl(clientInfo); 90 downloadManager->registerDownloadJob(wkDownload); 91 } 92 85 93 void DownloadManagerEfl::didFail(WKContextRef, WKDownloadRef wkDownload, WKErrorRef error, const void* clientInfo) 86 94 { … … 92 100 download->setState(EWK_DOWNLOAD_JOB_STATE_FAILED); 93 101 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); 95 104 downloadManager->unregisterDownloadJob(wkDownload); 96 105 } … … 103 112 104 113 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); 106 116 downloadManager->unregisterDownloadJob(wkDownload); 107 117 } … … 114 124 115 125 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); 117 128 downloadManager->unregisterDownloadJob(wkDownload); 118 129 } … … 121 132 : m_context(context) 122 133 { 134 memset(&m_clientCallbacks, 0, sizeof(ClientDownloadCallbacks)); 135 123 136 WKContextDownloadClientV0 wkDownloadClient; 124 137 memset(&wkDownloadClient, 0, sizeof(WKContextDownloadClient)); … … 131 144 wkDownloadClient.didReceiveResponse = didReceiveResponse; 132 145 wkDownloadClient.didReceiveData = didReceiveData; 146 wkDownloadClient.didStart = didStart; 133 147 wkDownloadClient.didFail = didFail; 134 148 wkDownloadClient.didFinish = didFinish; … … 142 156 } 143 157 144 void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download , EwkView* viewImpl)158 void DownloadManagerEfl::registerDownloadJob(WKDownloadRef download) 145 159 { 146 160 uint64_t downloadId = WKDownloadGetID(download); … … 148 162 return; 149 163 150 RefPtr<EwkDownloadJob> ewkDownload = EwkDownloadJob::create(download , viewImpl);164 RefPtr<EwkDownloadJob> ewkDownload = EwkDownloadJob::create(download); 151 165 m_downloadJobs.add(downloadId, ewkDownload); 152 166 } … … 162 176 } 163 177 178 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) 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 164 187 } // namespace WebKit -
trunk/Source/WebKit2/UIProcess/efl/DownloadManagerEfl.h
r168961 r181076 27 27 #define DownloadManagerEfl_h 28 28 29 #include "ewk_context.h" 29 30 #include "ewk_download_job_private.h" 30 31 #include <WebKit/WKRetainPtr.h> … … 34 35 namespace WebKit { 35 36 37 struct 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 36 45 class DownloadManagerEfl { 37 46 public: … … 39 48 ~DownloadManagerEfl(); 40 49 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); 42 52 43 53 private: … … 50 60 static void didReceiveData(WKContextRef, WKDownloadRef, uint64_t length, const void* clientInfo); 51 61 static void didFail(WKContextRef, WKDownloadRef, WKErrorRef, const void* clientInfo); 62 static void didStart(WKContextRef, WKDownloadRef, const void* clientInfo); 52 63 static void didCancel(WKContextRef, WKDownloadRef, const void* clientInfo); 53 64 static void didFinish(WKContextRef, WKDownloadRef, const void* clientInfo); … … 55 66 WKRetainPtr<WKContextRef> m_context; 56 67 HashMap<uint64_t, RefPtr<EwkDownloadJob> > m_downloadJobs; 68 69 ClientDownloadCallbacks m_clientCallbacks; 57 70 }; 58 71 -
trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.cpp
r180411 r181076 115 115 { 116 116 EwkContext* context = m_ewkView->ewkContext(); 117 context->downloadManager()->registerDownloadJob(toAPI(download) , m_ewkView);117 context->downloadManager()->registerDownloadJob(toAPI(download)); 118 118 } 119 119 -
trunk/Tools/ChangeLog
r181075 r181076 1 2015-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 1 15 2015-03-05 Carlos Garcia Campos <cgarcia@igalia.com> 2 16 -
trunk/Tools/MiniBrowser/efl/main.c
r180542 r181076 733 733 734 734 static 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; 735 on_download_request(Ewk_Download_Job *download, void *user_data) 736 { 738 737 Browser_Window *window = (Browser_Window *)user_data; 739 738 … … 843 842 844 843 static 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; 844 on_download_finished(Ewk_Download_Job *download, void *user_data) 845 { 848 846 INFO("Download finished: %s", ewk_download_job_destination_get(download)); 849 847 } 850 848 851 849 static void 852 on_download_failed(void *user_data, Evas_Object *ewk_view, void *event_info) 853 { 854 INFO("Download failed!"); 850 on_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)); 855 855 } 856 856 … … 2258 2258 ewk_text_checker_continuous_spell_checking_enabled_set(spell_checking_enabled); 2259 2259 ewk_settings_web_security_enabled_set(settings, web_security_enabled); 2260 2261 2260 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);2265 2261 evas_object_smart_callback_add(window->ewk_view, "file,chooser,request", on_file_chooser_request, window); 2266 2262 evas_object_smart_callback_add(window->ewk_view, "load,error", on_error, window); … … 2428 2424 return quit(EINA_FALSE, "Could not create browser window."); 2429 2425 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 2430 2429 if (args < argc) { 2431 2430 char *url = url_from_user_input(argv[args]);
Note: See TracChangeset
for help on using the changeset viewer.