Changeset 129099 in webkit
- Timestamp:
- Sep 20, 2012 12:16:09 AM (12 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r129097 r129099 1 2012-09-20 Christophe Dumez <christophe.dumez@intel.com> 2 3 [EFL][WK2] Same page navigation does not update view URI 4 https://bugs.webkit.org/show_bug.cgi?id=97094 5 6 Reviewed by Kenneth Rohde Christiansen. 7 8 Handle didSameDocumentNavigationForFrame callback in 9 WKPageLoaderClient in order to update the view URI. 10 This fixes issues with the view URI not being updated 11 in case of a same page navigation. 12 13 * UIProcess/API/efl/ewk_view_loader_client.cpp: 14 (didSameDocumentNavigationForFrame): 15 (ewk_view_loader_client_attach): 16 * UIProcess/API/efl/ewk_view_private.h: 17 * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp: 18 (CallbackDataTimer): 19 (EWK2UnitTest::CallbackDataTimer::CallbackDataTimer): 20 (EWK2UnitTest::CallbackDataTimer::~CallbackDataTimer): 21 (EWK2UnitTest::CallbackDataTimer::isDone): 22 (EWK2UnitTest::CallbackDataTimer::setDone): 23 (EWK2UnitTest::CallbackDataTimer::didTimeOut): 24 (EWK2UnitTest::CallbackDataTimer::setTimedOut): 25 (EWK2UnitTest): 26 (CallbackDataExpectedValue): 27 (EWK2UnitTest::CallbackDataExpectedValue::CallbackDataExpectedValue): 28 (EWK2UnitTest::CallbackDataExpectedValue::expectedValue): 29 (EWK2UnitTest::onLoadFinished): 30 (EWK2UnitTest::timeOutWhileWaitingUntilLoadFinished): 31 (EWK2UnitTest::EWK2UnitTestBase::waitUntilLoadFinished): 32 (EWK2UnitTest::onTitleChanged): 33 (EWK2UnitTest::timeOutWhileWaitingUntilTitleChangedTo): 34 (EWK2UnitTest::EWK2UnitTestBase::waitUntilTitleChangedTo): 35 (EWK2UnitTest::onURIChanged): 36 (EWK2UnitTest::timeOutWhileWaitingUntilURIChangedTo): 37 (EWK2UnitTest::EWK2UnitTestBase::waitUntilURIChangedTo): Add convenience function to test 38 framework in order to wait until the view URI changes to a given value. 39 * UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h: 40 (EWK2UnitTestBase): 41 * UIProcess/API/efl/tests/resources/same_page_navigation.html: Added. 42 * UIProcess/API/efl/tests/test_ewk2_view.cpp: 43 (TEST_F): Add corresponding unit test to verify fix and prevent regressions 44 in the future. 45 1 46 2012-09-19 Dan Bernstein <mitz@apple.com> 2 47 -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_loader_client.cpp
r129096 r129099 134 134 } 135 135 136 static void didSameDocumentNavigationForFrame(WKPageRef page, WKFrameRef frame, WKSameDocumentNavigationType, WKTypeRef, const void* clientInfo) 137 { 138 if (!WKFrameIsMainFrame(frame)) 139 return; 140 141 Evas_Object* ewkView = static_cast<Evas_Object*>(const_cast<void*>(clientInfo)); 142 ewk_view_uri_update(ewkView); 143 } 144 136 145 void ewk_view_loader_client_attach(WKPageRef pageRef, Evas_Object* ewkView) 137 146 { … … 156 165 loadClient.didFailProvisionalLoadWithErrorForFrame = didFailProvisionalLoadWithErrorForFrame; 157 166 loadClient.didChangeBackForwardList = didChangeBackForwardList; 167 loadClient.didSameDocumentNavigationForFrame = didSameDocumentNavigationForFrame; 158 168 WKPageSetPageLoaderClient(pageRef, &loadClient); 159 169 } -
trunk/Source/WebKit2/UIProcess/API/efl/ewk_view_private.h
r128967 r129099 83 83 void ewk_view_resource_request_sent(Evas_Object* ewkView, uint64_t resourceIdentifier, Ewk_Url_Request* request, Ewk_Url_Response* redirectResponse); 84 84 void ewk_view_text_found(Evas_Object* ewkView, unsigned int matchCount); 85 void ewk_view_uri_update(Evas_Object* ewkView); 85 86 void ewk_view_contents_size_changed(const Evas_Object* ewkView, const WebCore::IntSize&); 86 87 -
trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.cpp
r128975 r129099 81 81 } 82 82 83 struct LoadFinishedData { 84 LoadFinishedData(double timeoutSeconds, Ecore_Task_Cb callback) 85 : loadFinished(false) 86 , timer(0) 87 , didTimeOut(false) 88 { 89 if (timeoutSeconds >= 0) 90 timer = ecore_timer_add(timeoutSeconds, callback, this); 91 } 92 93 ~LoadFinishedData() 94 { 95 if (timer) 96 ecore_timer_del(timer); 97 } 98 99 bool loadFinished; 100 Ecore_Timer* timer; 101 bool didTimeOut; 83 class CallbackDataTimer { 84 public: 85 CallbackDataTimer(double timeoutSeconds, Ecore_Task_Cb callback) 86 : m_done(false) 87 , m_timer(timeoutSeconds >= 0 ? ecore_timer_add(timeoutSeconds, callback, this) : 0) 88 , m_didTimeOut(false) 89 { 90 } 91 92 virtual ~CallbackDataTimer() 93 { 94 if (m_timer) 95 ecore_timer_del(m_timer); 96 } 97 98 bool isDone() const { return m_done; } 99 100 bool setDone() 101 { 102 if (m_timer) { 103 ecore_timer_del(m_timer); 104 m_timer = 0; 105 } 106 m_done = true; 107 } 108 109 bool didTimeOut() const { return m_didTimeOut; } 110 111 void setTimedOut() 112 { 113 m_done = true; 114 m_timer = 0; 115 m_didTimeOut = true; 116 } 117 118 protected: 119 bool m_done; 120 Ecore_Timer* m_timer; 121 bool m_didTimeOut; 122 }; 123 124 template <class T> 125 class CallbackDataExpectedValue : public CallbackDataTimer { 126 public: 127 CallbackDataExpectedValue(const T& expectedValue, double timeoutSeconds, Ecore_Task_Cb callback) 128 : CallbackDataTimer(timeoutSeconds, callback) 129 , m_expectedValue(expectedValue) 130 { 131 } 132 133 const T& expectedValue() const { return m_expectedValue; } 134 135 private: 136 T m_expectedValue; 102 137 }; 103 138 … … 107 142 UNUSED_PARAM(eventInfo); 108 143 109 LoadFinishedData* data = static_cast<LoadFinishedData*>(userData); 110 data->loadFinished = true; 111 112 if (data->timer) { 113 ecore_timer_del(data->timer); 114 data->timer = 0; 115 } 144 CallbackDataTimer* data = static_cast<CallbackDataTimer*>(userData); 145 data->setDone(); 116 146 } 117 147 118 148 static bool timeOutWhileWaitingUntilLoadFinished(void* userData) 119 149 { 120 LoadFinishedData* data = static_cast<LoadFinishedData*>(userData); 121 122 data->timer = 0; 123 124 if (data->loadFinished) 125 return ECORE_CALLBACK_CANCEL; 126 127 data->loadFinished = true; 128 data->didTimeOut = true; 150 CallbackDataTimer* data = static_cast<CallbackDataTimer*>(userData); 151 data->setTimedOut(); 129 152 130 153 return ECORE_CALLBACK_CANCEL; … … 133 156 bool EWK2UnitTestBase::waitUntilLoadFinished(double timeoutSeconds) 134 157 { 135 LoadFinishedDatadata(timeoutSeconds, reinterpret_cast<Ecore_Task_Cb>(timeOutWhileWaitingUntilLoadFinished));158 CallbackDataTimer data(timeoutSeconds, reinterpret_cast<Ecore_Task_Cb>(timeOutWhileWaitingUntilLoadFinished)); 136 159 137 160 evas_object_smart_callback_add(m_webView, "load,finished", onLoadFinished, &data); 138 161 139 while (!data. loadFinished)162 while (!data.isDone()) 140 163 ecore_main_loop_iterate(); 141 164 142 165 evas_object_smart_callback_del(m_webView, "load,finished", onLoadFinished); 143 166 144 return !data.didTimeOut; 145 } 146 147 struct TitleChangedData { 148 TitleChangedData(const char* title, double timeoutSeconds, Ecore_Task_Cb callback) 149 : expectedTitle(title) 150 , done(false) 151 , timer(0) 152 , didTimeOut(false) 153 { 154 if (timeoutSeconds >= 0) 155 timer = ecore_timer_add(timeoutSeconds, callback, this); 156 } 157 158 ~TitleChangedData() 159 { 160 if (timer) 161 ecore_timer_del(timer); 162 } 163 164 CString expectedTitle; 165 bool done; 166 Ecore_Timer* timer; 167 bool didTimeOut; 168 }; 169 170 static void onTitleChanged(void* userData, Evas_Object* webView, void* eventInfo) 171 { 172 TitleChangedData* data = static_cast<TitleChangedData*>(userData); 173 174 if (strcmp(ewk_view_title_get(webView), data->expectedTitle.data())) 167 return !data.didTimeOut(); 168 } 169 170 static void onTitleChanged(void* userData, Evas_Object* webView, void*) 171 { 172 CallbackDataExpectedValue<CString>* data = static_cast<CallbackDataExpectedValue<CString>*>(userData); 173 174 if (strcmp(ewk_view_title_get(webView), data->expectedValue().data())) 175 175 return; 176 176 177 if (data->timer) { 178 ecore_timer_del(data->timer); 179 data->timer = 0; 180 } 181 182 data->done = true; 177 data->setDone(); 183 178 } 184 179 185 180 static bool timeOutWhileWaitingUntilTitleChangedTo(void* userData) 186 181 { 187 TitleChangedData* data = static_cast<TitleChangedData*>(userData); 188 189 data->timer = 0; 190 191 if (data->done) 192 return ECORE_CALLBACK_CANCEL; 193 194 data->done = true; 195 data->didTimeOut = true; 182 CallbackDataExpectedValue<CString>* data = static_cast<CallbackDataExpectedValue<CString>*>(userData); 183 data->setTimedOut(); 196 184 197 185 return ECORE_CALLBACK_CANCEL; … … 200 188 bool EWK2UnitTestBase::waitUntilTitleChangedTo(const char* expectedTitle, double timeoutSeconds) 201 189 { 202 TitleChangedDatadata(expectedTitle, timeoutSeconds, reinterpret_cast<Ecore_Task_Cb>(timeOutWhileWaitingUntilTitleChangedTo));190 CallbackDataExpectedValue<CString> data(expectedTitle, timeoutSeconds, reinterpret_cast<Ecore_Task_Cb>(timeOutWhileWaitingUntilTitleChangedTo)); 203 191 204 192 evas_object_smart_callback_add(m_webView, "title,changed", onTitleChanged, &data); 205 193 206 while (!data. done)194 while (!data.isDone()) 207 195 ecore_main_loop_iterate(); 208 196 209 197 evas_object_smart_callback_del(m_webView, "title,changed", onTitleChanged); 210 198 211 return !data.didTimeOut; 199 return !data.didTimeOut(); 200 } 201 202 static void onURIChanged(void* userData, Evas_Object* webView, void*) 203 { 204 CallbackDataExpectedValue<CString>* data = static_cast<CallbackDataExpectedValue<CString>*>(userData); 205 206 if (strcmp(ewk_view_uri_get(webView), data->expectedValue().data())) 207 return; 208 209 data->setDone(); 210 } 211 212 static bool timeOutWhileWaitingUntilURIChangedTo(void* userData) 213 { 214 CallbackDataExpectedValue<CString>* data = static_cast<CallbackDataExpectedValue<CString>*>(userData); 215 data->setTimedOut(); 216 217 return ECORE_CALLBACK_CANCEL; 218 } 219 220 bool EWK2UnitTestBase::waitUntilURIChangedTo(const char* expectedURI, double timeoutSeconds) 221 { 222 CallbackDataExpectedValue<CString> data(expectedURI, timeoutSeconds, reinterpret_cast<Ecore_Task_Cb>(timeOutWhileWaitingUntilURIChangedTo)); 223 224 evas_object_smart_callback_add(m_webView, "uri,changed", onURIChanged, &data); 225 226 while (!data.isDone()) 227 ecore_main_loop_iterate(); 228 229 evas_object_smart_callback_del(m_webView, "uri,changed", onURIChanged); 230 231 return !data.didTimeOut(); 212 232 } 213 233 -
trunk/Source/WebKit2/UIProcess/API/efl/tests/UnitTestUtils/EWK2UnitTestBase.h
r128975 r129099 44 44 bool waitUntilLoadFinished(double timeoutSeconds = -1); 45 45 bool waitUntilTitleChangedTo(const char* expectedTitle, double timeoutSeconds = -1); 46 bool waitUntilURIChangedTo(const char* expectedURI, double timeoutSeconds = -1); 46 47 void mouseClick(int x, int y); 47 48 -
trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_view.cpp
r128967 r129099 31 31 #include <wtf/UnusedParam.h> 32 32 #include <wtf/text/CString.h> 33 #include <wtf/text/WTFString.h> 33 34 34 35 using namespace EWK2UnitTest; … … 362 363 } 363 364 365 TEST_F(EWK2UnitTestBase, ewk_view_same_page_navigation) 366 { 367 // Tests that same page navigation updates the page URI. 368 String testUrl = environment->urlForResource("same_page_navigation.html").data(); 369 loadUrlSync(testUrl.utf8().data()); 370 ASSERT_STREQ(testUrl.utf8().data(), ewk_view_uri_get(webView())); 371 mouseClick(50, 50); 372 testUrl = testUrl + '#'; 373 ASSERT_TRUE(waitUntilURIChangedTo(testUrl.utf8().data(), 10)); 374 } 375 364 376 TEST_F(EWK2UnitTestBase, ewk_view_title_changed) 365 377 {
Note: See TracChangeset
for help on using the changeset viewer.