Changeset 122411 in webkit
- Timestamp:
- Jul 11, 2012 8:22:03 PM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r122407 r122411 1 2012-07-11 Christophe Dumez <christophe.dumez@intel.com> 2 3 [WK2][EFL] Ewk_View should provide more resource loading notifications 4 https://bugs.webkit.org/show_bug.cgi?id=90601 5 6 Reviewed by Antonio Gomes. 7 8 Add new "resource,request,sent", "resource,request,response", 9 "resource,request,failed" and "resource,request,finished" to 10 Ewk_View in order to notify the clients of the main resource 11 load state changes. 12 13 Introduce new Ewk_Url_Response type that is used to provide 14 information to the clients regarding the resource load 15 responses that are received. 16 17 * PlatformEfl.cmake: 18 * UIProcess/API/efl/EWebKit2.h: 19 * UIProcess/API/efl/ewk_url_response.cpp: Added. 20 (_Ewk_Url_Response): 21 (ewk_url_response_ref): 22 (ewk_url_response_unref): 23 (ewk_url_response_url_get): 24 (ewk_url_response_status_code_get): 25 (ewk_url_response_mime_type_get): 26 (ewk_url_response_new): 27 * UIProcess/API/efl/ewk_url_response.h: Added. 28 * UIProcess/API/efl/ewk_url_response_private.h: Added. 29 * UIProcess/API/efl/ewk_view.cpp: 30 (_Ewk_View_Private_Data): 31 (ewk_view_resource_load_initiated): 32 (ewk_view_resource_load_response): 33 (ewk_view_resource_load_failed): 34 (ewk_view_resource_load_finished): 35 (ewk_view_resource_request_sent): 36 (ewk_view_load_provisional_started): 37 * UIProcess/API/efl/ewk_view.h: 38 * UIProcess/API/efl/ewk_view_private.h: 39 * UIProcess/API/efl/ewk_view_resource_load_client.cpp: 40 (toEwkView): 41 (didInitiateLoadForResource): 42 (didSendRequestForResource): 43 (didReceiveResponseForResource): 44 (didFinishLoadForResource): 45 (didFailLoadForResource): 46 (ewk_view_resource_load_client_attach): 47 1 48 2012-07-11 Mark Rowe <mrowe@apple.com> 2 49 -
trunk/Source/WebKit2/PlatformEfl.cmake
r122299 r122411 39 39 UIProcess/API/efl/ewk_intent_service.cpp 40 40 UIProcess/API/efl/ewk_url_request.cpp 41 UIProcess/API/efl/ewk_url_response.cpp 41 42 UIProcess/API/efl/ewk_view.cpp 42 43 UIProcess/API/efl/ewk_view_loader_client.cpp -
trunk/Source/WebKit2/UIProcess/API/efl/EWebKit2.h
r121889 r122411 32 32 #include "ewk_intent_service.h" 33 33 #include "ewk_url_request.h" 34 #include "ewk_url_response.h" 34 35 #include "ewk_view.h" 35 36 #include "ewk_web_error.h" -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.cpp
r121944 r122411 35 35 #include "ewk_view_private.h" 36 36 #include "ewk_view_resource_load_client_private.h" 37 #include "ewk_web_resource.h" 37 38 #include <wtf/text/CString.h> 38 39 … … 41 42 42 43 static const char EWK_VIEW_TYPE_STR[] = "EWK2_View"; 44 45 typedef HashMap<uint64_t, Ewk_Web_Resource*> LoadingResourcesMap; 43 46 44 47 struct _Ewk_View_Private_Data { … … 46 49 const char* uri; 47 50 const char* title; 51 LoadingResourcesMap loadingResourcesMap; 48 52 }; 49 53 … … 568 572 void ewk_view_resource_load_initiated(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Web_Resource* resource, Ewk_Url_Request* request) 569 573 { 570 Ewk_Web_Resource_Request resourceRequest = {resource, request}; 571 // FIXME: We will need to store the resource and its identifier at some point 572 // to get the resource back from the identifier on resource load finish. 574 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 575 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 576 577 Ewk_Web_Resource_Request resourceRequest = {resource, request, 0}; 578 579 // Keep the resource internally to reuse it later. 580 ewk_web_resource_ref(resource); 581 priv->loadingResourcesMap.add(resourceIdentifier, resource); 582 573 583 evas_object_smart_callback_call(ewkView, "resource,request,new", &resourceRequest); 584 } 585 586 /** 587 * @internal 588 * Received a response to a resource load request in the view. 589 * 590 * Emits signal: "resource,request,response" with pointer to resource response. 591 */ 592 void ewk_view_resource_load_response(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Url_Response* response) 593 { 594 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 595 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 596 597 if (!priv->loadingResourcesMap.contains(resourceIdentifier)) 598 return; 599 600 Ewk_Web_Resource* resource = priv->loadingResourcesMap.get(resourceIdentifier); 601 Ewk_Web_Resource_Load_Response resourceLoadResponse = {resource, response}; 602 evas_object_smart_callback_call(ewkView, "resource,request,response", &resourceLoadResponse); 603 } 604 605 /** 606 * @internal 607 * Failed loading a resource in the view. 608 * 609 * Emits signal: "resource,request,finished" with pointer to the resource load error. 610 */ 611 void ewk_view_resource_load_failed(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Web_Error* error) 612 { 613 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 614 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 615 616 if (!priv->loadingResourcesMap.contains(resourceIdentifier)) 617 return; 618 619 Ewk_Web_Resource* resource = priv->loadingResourcesMap.get(resourceIdentifier); 620 Ewk_Web_Resource_Load_Error resourceLoadError = {resource, error}; 621 evas_object_smart_callback_call(ewkView, "resource,request,failed", &resourceLoadError); 622 } 623 624 /** 625 * @internal 626 * Finished loading a resource in the view. 627 * 628 * Emits signal: "resource,request,finished" with pointer to the resource. 629 */ 630 void ewk_view_resource_load_finished(Evas_Object* ewkView, uint64_t resourceIdentifier) 631 { 632 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 633 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 634 635 if (!priv->loadingResourcesMap.contains(resourceIdentifier)) 636 return; 637 638 Ewk_Web_Resource* resource = priv->loadingResourcesMap.take(resourceIdentifier); 639 evas_object_smart_callback_call(ewkView, "resource,request,finished", resource); 640 641 ewk_web_resource_unref(resource); 642 } 643 644 /** 645 * @internal 646 * Request was sent for a resource in the view. 647 * 648 * Emits signal: "resource,request,sent" with pointer to resource request and possible redirect response. 649 */ 650 void ewk_view_resource_request_sent(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Url_Request* request, Ewk_Url_Response* redirectResponse) 651 { 652 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 653 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 654 655 if (!priv->loadingResourcesMap.contains(resourceIdentifier)) 656 return; 657 658 Ewk_Web_Resource* resource = priv->loadingResourcesMap.get(resourceIdentifier); 659 Ewk_Web_Resource_Request resourceRequest = {resource, request, redirectResponse}; 660 661 evas_object_smart_callback_call(ewkView, "resource,request,sent", &resourceRequest); 574 662 } 575 663 … … 774 862 void ewk_view_load_provisional_started(Evas_Object* ewkView) 775 863 { 864 EWK_VIEW_SD_GET_OR_RETURN(ewkView, smartData); 865 EWK_VIEW_PRIV_GET_OR_RETURN(smartData, priv); 866 867 // The main frame started provisional load, we should clear 868 // the loadingResources HashMap to start clean. 869 LoadingResourcesMap::iterator it = priv->loadingResourcesMap.begin(); 870 LoadingResourcesMap::iterator end = priv->loadingResourcesMap.end(); 871 for ( ; it != end; ++it) 872 ewk_web_resource_unref(it->second); 873 priv->loadingResourcesMap.clear(); 874 776 875 evas_object_smart_callback_call(ewkView, "load,provisional,started", 0); 777 876 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view.h
r121969 r122411 35 35 * - "load,provisional,redirect", void: view received redirect for provisional load. 36 36 * - "load,provisional,started", void: view started provisional load. 37 * - "resource,request,failed", const Ewk_Web_Resource_Load_Error*: a resource failed loading. 38 * - "resource,request,finished", const Ewk_Web_Resource*: a resource finished loading. 37 39 * - "resource,request,new", const Ewk_Web_Resource_Request*: a resource request was initiated. 40 * - "resource,request,response", Ewk_Web_Resource_Load_Response*: a response to a resource request was received. 41 * - "resource,request,sent", const Ewk_Web_Resource_Request*: a resource request was sent. 38 42 * - "title,changed", const char*: title of the main frame was changed. 39 43 */ … … 45 49 #include "ewk_intent.h" 46 50 #include "ewk_url_request.h" 51 #include "ewk_url_response.h" 52 #include "ewk_web_error.h" 47 53 #include "ewk_web_resource.h" 48 54 #include <Evas.h> … … 146 152 /** 147 153 * @brief Structure containing details about a resource request. 148 *149 * Details given about a resource is loaded.150 154 */ 151 155 struct _Ewk_Web_Resource_Request { 152 156 Ewk_Web_Resource *resource; /**< resource being requested */ 153 157 Ewk_Url_Request *request; /**< URL request for the resource */ 158 Ewk_Url_Response *redirect_response; /**< Possible redirect response for the resource */ 159 }; 160 161 /// Creates a type name for _Ewk_Web_Resource_Load_Response. 162 typedef struct _Ewk_Web_Resource_Load_Response Ewk_Web_Resource_Load_Response; 163 164 /** 165 * @brief Structure containing details about a response to a resource request. 166 */ 167 struct _Ewk_Web_Resource_Load_Response { 168 Ewk_Web_Resource *resource; /**< resource requested */ 169 Ewk_Url_Response *response; /**< resource load response */ 170 }; 171 172 /// Creates a type name for _Ewk_Web_Resource_Load_Error. 173 typedef struct _Ewk_Web_Resource_Load_Error Ewk_Web_Resource_Load_Error; 174 175 /** 176 * @brief Structure containing details about a resource load error. 177 * 178 * Details given about a resource load failure. 179 */ 180 struct _Ewk_Web_Resource_Load_Error { 181 Ewk_Web_Resource *resource; /**< resource that failed loading */ 182 Ewk_Web_Error *error; /**< load error */ 154 183 }; 155 184 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h
r121944 r122411 32 32 33 33 typedef struct _Ewk_Url_Request Ewk_Url_Request; 34 typedef struct _Ewk_Url_Response Ewk_Url_Response; 34 35 typedef struct _Ewk_Web_Error Ewk_Web_Error; 35 36 typedef struct _Ewk_Web_Resource Ewk_Web_Resource; … … 50 51 void ewk_view_load_provisional_started(Evas_Object* ewkView); 51 52 void ewk_view_title_changed(Evas_Object* ewkView, const char* title); 53 void ewk_view_resource_load_failed(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Web_Error* error); 54 void ewk_view_resource_load_finished(Evas_Object* ewkView, uint64_t resourceIdentifier); 52 55 void ewk_view_resource_load_initiated(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Web_Resource* resource, Ewk_Url_Request* request); 56 void ewk_view_resource_load_response(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Url_Response* response); 57 void ewk_view_resource_request_sent(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Url_Request* request, Ewk_Url_Response* redirectResponse); 53 58 54 59 Evas_Object* ewk_view_base_add(Evas* canvas, WKContextRef, WKPageGroupRef); -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_resource_load_client.cpp
r121889 r122411 32 32 #include "WKURL.h" 33 33 #include "WKURLRequest.h" 34 #include "WKURLResponse.h" 34 35 #include "ewk_url_request.h" 35 36 #include "ewk_url_request_private.h" 37 #include "ewk_url_response.h" 38 #include "ewk_url_response_private.h" 36 39 #include "ewk_view_private.h" 37 40 #include "ewk_view_resource_load_client_private.h" 41 #include "ewk_web_error.h" 42 #include "ewk_web_error_private.h" 38 43 #include "ewk_web_resource.h" 39 44 #include "ewk_web_resource_private.h" … … 42 47 using namespace WebKit; 43 48 49 static inline Evas_Object* toEwkView(const void* clientInfo) 50 { 51 return static_cast<Evas_Object*>(const_cast<void*>(clientInfo)); 52 } 53 44 54 static void didInitiateLoadForResource(WKPageRef, WKFrameRef wkFrame, uint64_t resourceIdentifier, WKURLRequestRef wkRequest, bool pageIsProvisionallyLoading, const void* clientInfo) 45 55 { 46 Evas_Object* ewkView = static_cast<Evas_Object*>(const_cast<void*>(clientInfo));47 56 bool isMainResource = (WKFrameIsMainFrame(wkFrame) && pageIsProvisionallyLoading); 48 57 WKRetainPtr<WKURLRef> wkUrl(AdoptWK, WKURLRequestCopyURL(wkRequest)); … … 50 59 Ewk_Web_Resource* resource = ewk_web_resource_new(toImpl(wkUrl.get())->string().utf8().data(), isMainResource); 51 60 Ewk_Url_Request* request = ewk_url_request_new(wkRequest); 52 ewk_view_resource_load_initiated( ewkView, resourceIdentifier, resource, request);61 ewk_view_resource_load_initiated(toEwkView(clientInfo), resourceIdentifier, resource, request); 53 62 ewk_web_resource_unref(resource); 54 63 ewk_url_request_unref(request); 64 } 65 66 static void didSendRequestForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, WKURLRequestRef wkRequest, WKURLResponseRef wkRedirectResponse, const void* clientInfo) 67 { 68 Ewk_Url_Request* request = ewk_url_request_new(wkRequest); 69 Ewk_Url_Response* redirectResponse = ewk_url_response_new(toImpl(wkRedirectResponse)->resourceResponse()); 70 ewk_view_resource_request_sent(toEwkView(clientInfo), resourceIdentifier, request, redirectResponse); 71 ewk_url_request_unref(request); 72 ewk_url_response_unref(redirectResponse); 73 } 74 75 static void didReceiveResponseForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, WKURLResponseRef wkResponse, const void* clientInfo) 76 { 77 Ewk_Url_Response* response = ewk_url_response_new(toImpl(wkResponse)->resourceResponse()); 78 ewk_view_resource_load_response(toEwkView(clientInfo), resourceIdentifier, response); 79 ewk_url_response_unref(response); 80 } 81 82 static void didFinishLoadForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, const void* clientInfo) 83 { 84 ewk_view_resource_load_finished(toEwkView(clientInfo), resourceIdentifier); 85 } 86 87 static void didFailLoadForResource(WKPageRef, WKFrameRef, uint64_t resourceIdentifier, WKErrorRef wkError, const void* clientInfo) 88 { 89 Ewk_Web_Error* ewkError = ewk_web_error_new(wkError); 90 ewk_view_resource_load_failed(toEwkView(clientInfo), resourceIdentifier, ewkError); 91 ewk_view_resource_load_finished(toEwkView(clientInfo), resourceIdentifier); 92 ewk_web_error_free(ewkError); 55 93 } 56 94 … … 62 100 wkResourceLoadClient.clientInfo = ewkView; 63 101 wkResourceLoadClient.didInitiateLoadForResource = didInitiateLoadForResource; 102 wkResourceLoadClient.didSendRequestForResource = didSendRequestForResource; 103 wkResourceLoadClient.didReceiveResponseForResource = didReceiveResponseForResource; 104 wkResourceLoadClient.didFinishLoadForResource = didFinishLoadForResource; 105 wkResourceLoadClient.didFailLoadForResource = didFailLoadForResource; 64 106 65 107 WKPageSetPageResourceLoadClient(pageRef, &wkResourceLoadClient);
Note: See TracChangeset
for help on using the changeset viewer.