Title: [185866] trunk/Source/WebKit2
Revision
185866
Author
gyuyoung....@webkit.org
Date
2015-06-23 00:00:22 -0700 (Tue, 23 Jun 2015)

Log Message

[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):

Modified Paths

Diff

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);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to