Modified: trunk/Source/WebKit2/ChangeLog (185865 => 185866)
--- trunk/Source/WebKit2/ChangeLog 2015-06-23 06:47:58 UTC (rev 185865)
+++ trunk/Source/WebKit2/ChangeLog 2015-06-23 07:00:22 UTC (rev 185866)
@@ -1,3 +1,30 @@
+2015-06-22 Gyuyoung Kim <gyuyoung....@webkit.org>
+
+ [EFL][CustomProtocol] Do not add duplicated custom scheme
+ https://bugs.webkit.org/show_bug.cgi?id=146199
+
+ Reviewed by Carlos Garcia Campos.
+
+ WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol generates
+ a crash when duplicated scheme is registered on debug mode, or just registers it on release mode.
+ However application can register duplicate scheme by mistake or on purpose. Thus it would be good
+ if we don't register it instead of registering it or generating a crash when trying to regiseter
+ duplicated scheme.
+
+ EFL port want to allow user to change registered callback, thus EWK2ContextTest::ewk_context_url_scheme_register()
+ is modified to test it.
+
+ Test: ewk_context_url_scheme_register() in test_ewk2_context.cpp.
+
+ * UIProcess/API/efl/ewk_context.h: Added a comment to replace registered callback.
+ * UIProcess/API/efl/tests/test_ewk2_context.cpp:
+ (EWK2ContextTest::schemeRequestCallback1):
+ (EWK2ContextTest::schemeRequestCallback2):
+ (TEST_F):
+ (EWK2ContextTest::schemeRequestCallback): Deleted.
+ * UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp:
+ (WebKit::WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol):
+
2015-06-22 Carlos Garcia Campos <cgar...@igalia.com>
Unreviewed. Update OptionsGTK.cmake and NEWS for 2.9.3 release.
Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h (185865 => 185866)
--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h 2015-06-23 06:47:58 UTC (rev 185865)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.h 2015-06-23 07:00:22 UTC (rev 185866)
@@ -304,6 +304,9 @@
* #Ewk_Url_Scheme_Request and calling ewk_url_scheme_request_finish() later when the data of
* the request is available.
*
+ * To replace registered callback with new callback, calls ewk_context_url_scheme_register()
+ * with new callback again.
+ *
* @param context a #Ewk_Context object.
* @param scheme the network scheme to register
* @param callback the function to be called when an URL request with @a scheme is made.
Modified: trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp (185865 => 185866)
--- trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp 2015-06-23 06:47:58 UTC (rev 185865)
+++ trunk/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context.cpp 2015-06-23 07:00:22 UTC (rev 185866)
@@ -44,7 +44,7 @@
class EWK2ContextTest : public EWK2UnitTestBase {
public:
- static void schemeRequestCallback(Ewk_Url_Scheme_Request* request, void* userData)
+ static void schemeRequestCallback1(Ewk_Url_Scheme_Request* request, void* userData)
{
const char* scheme = ewk_url_scheme_request_scheme_get(request);
ASSERT_STREQ("fooscheme", scheme);
@@ -56,6 +56,19 @@
finishTest = true;
}
+
+ static void schemeRequestCallback2(Ewk_Url_Scheme_Request* request, void* userData)
+ {
+ const char* scheme = ewk_url_scheme_request_scheme_get(request);
+ ASSERT_STREQ("fooscheme", scheme);
+ const char* url = ""
+ ASSERT_STREQ("fooscheme:MyNewPath", url);
+ const char* path = ewk_url_scheme_request_path_get(request);
+ ASSERT_STREQ("MyNewPath", path);
+ ASSERT_TRUE(ewk_url_scheme_request_finish(request, htmlReply, strlen(htmlReply), "text/html"));
+
+ finishTest = true;
+ }
};
class EWK2ContextTestMultipleProcesses : public EWK2UnitTestBase {
@@ -132,9 +145,13 @@
TEST_F(EWK2ContextTest, ewk_context_url_scheme_register)
{
- ewk_context_url_scheme_register(ewk_view_context_get(webView()), "fooscheme", schemeRequestCallback, nullptr);
+ ewk_context_url_scheme_register(ewk_view_context_get(webView()), "fooscheme", schemeRequestCallback1, nullptr);
ewk_view_url_set(webView(), "fooscheme:MyPath");
+ ASSERT_TRUE(waitUntilTrue(finishTest, testTimeoutSeconds));
+ finishTest = false;
+ ewk_context_url_scheme_register(ewk_view_context_get(webView()), "fooscheme", schemeRequestCallback2, nullptr);
+ ewk_view_url_set(webView(), "fooscheme:MyNewPath");
ASSERT_TRUE(waitUntilTrue(finishTest, testTimeoutSeconds));
}
Modified: trunk/Source/WebKit2/UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp (185865 => 185866)
--- trunk/Source/WebKit2/UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp 2015-06-23 06:47:58 UTC (rev 185865)
+++ trunk/Source/WebKit2/UIProcess/Network/CustomProtocols/soup/WebSoupCustomProtocolRequestManager.cpp 2015-06-23 07:00:22 UTC (rev 185866)
@@ -80,12 +80,15 @@
void WebSoupCustomProtocolRequestManager::registerSchemeForCustomProtocol(const String& scheme)
{
+ ASSERT(!scheme.isNull());
+ if (m_registeredSchemes.contains(scheme))
+ return;
+
if (!processPool())
return;
processPool()->registerSchemeForCustomProtocol(scheme);
- ASSERT(!m_registeredSchemes.contains(scheme));
m_registeredSchemes.append(scheme);
}