Reviewed by Darin.
authorap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Mar 2006 05:49:42 +0000 (05:49 +0000)
committerap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 9 Mar 2006 05:49:42 +0000 (05:49 +0000)
        - http://bugzilla.opendarwin.org/show_bug.cgi?id=7656
         Query string always appended to Flash URLs, instead of being replaced.

WebKit:
        * Misc/WebNSURLExtras.h: Added _webkit_URLByRemovingResourceSpecifier.
        * Misc/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:]): Call _webkit_URLByRemovingResourceSpecifier to
        work around CFURL not removing non-path components from base URLs in some cases.
        (-[NSURL _webkit_URLByRemovingComponent:]): New generic function for removing URL components.
        (-[NSURL _webkit_URLByRemovingFragment]): Moved implementation to the above method.
        (-[NSURL _webkit_URLByRemovingResourceSpecifier]): Added.

WebKitTools:
        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
        (pluginInvoke): Added a method to test getURL.

LayoutTests:
        * plugins/geturl-replace-query-expected.txt: Added.
        * plugins/geturl-replace-query.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13225 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/plugins/geturl-replace-query-expected.txt [new file with mode: 0644]
LayoutTests/plugins/geturl-replace-query.html [new file with mode: 0644]
WebKit/ChangeLog
WebKit/Misc/WebNSURLExtras.h
WebKit/Misc/WebNSURLExtras.m
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c

index c16ff66..dc65d69 100644 (file)
@@ -1,3 +1,13 @@
+2006-03-09  Alexey Proskuryakov  <ap@nypop.com>
+
+        Reviewed by Darin.
+
+        - Tests for http://bugzilla.opendarwin.org/show_bug.cgi?id=7656
+         Query string always appended to Flash URLs, instead of being replaced.
+
+        * plugins/geturl-replace-query-expected.txt: Added.
+        * plugins/geturl-replace-query.html: Added.
+
 2006-03-08  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by darin
diff --git a/LayoutTests/plugins/geturl-replace-query-expected.txt b/LayoutTests/plugins/geturl-replace-query-expected.txt
new file mode 100644 (file)
index 0000000..f89d0ab
--- /dev/null
@@ -0,0 +1,4 @@
+
+Test for bug 7656: Query string always appended to Flash URLs, instead of being replaced
+
+SUCCESS
diff --git a/LayoutTests/plugins/geturl-replace-query.html b/LayoutTests/plugins/geturl-replace-query.html
new file mode 100644 (file)
index 0000000..117f20b
--- /dev/null
@@ -0,0 +1,36 @@
+<html>
+<body>
+<embed name="plg" type="application/x-webkit-test-netscape"></embed>
+<p>Test for <a href="http://bugzilla.opendarwin.org/show_bug.cgi?id=7656">bug 7656<a/>:
+Query string always appended to Flash URLs, instead of being replaced</p>
+<script>
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+    
+    try {
+        
+        loc = window.location.href;
+        
+        if (loc.indexOf('?') == -1) {
+            window.location.href = loc + "?1";
+        } else {
+            
+            if (loc.substring(loc.indexOf('?'), loc.length) == "?1") {
+                plg.getURL("?2", "_self");
+            } else {
+                query = loc.substring(loc.indexOf('?'), loc.length);
+                document.write(query == "?2" ? 
+                    "SUCCESS" : "FAILURE: " + query);
+                
+                if (window.layoutTestController)
+                    layoutTestController.notifyDone();
+            }
+        }
+    } catch (ex) {
+        alert("Exception: " + ex.description);
+    }
+</script>
+</body>
+</html>
index a5c4eb0..44ae7a2 100644 (file)
@@ -1,3 +1,18 @@
+2006-03-09  Alexey Proskuryakov  <ap@nypop.com>
+
+        Reviewed by Darin.
+
+        - http://bugzilla.opendarwin.org/show_bug.cgi?id=7656
+         Query string always appended to Flash URLs, instead of being replaced.
+
+        * Misc/WebNSURLExtras.h: Added _webkit_URLByRemovingResourceSpecifier.
+        * Misc/WebNSURLExtras.m:
+        (+[NSURL _web_URLWithData:relativeToURL:]): Call _webkit_URLByRemovingResourceSpecifier to
+        work around CFURL not removing non-path components from base URLs in some cases.
+        (-[NSURL _webkit_URLByRemovingComponent:]): New generic function for removing URL components.
+        (-[NSURL _webkit_URLByRemovingFragment]): Moved implementation to the above method.
+        (-[NSURL _webkit_URLByRemovingResourceSpecifier]): Added.
+
 2006-03-07  Darin Adler  <darin@apple.com>
 
         Reviewed by Anders.
index adfb824..f8823b9 100644 (file)
@@ -57,6 +57,7 @@
 
 - (NSURL *)_webkit_canonicalize;
 - (NSURL *)_webkit_URLByRemovingFragment;
+- (NSURL *)_webkit_URLByRemovingResourceSpecifier;
 
 - (BOOL)_webkit_isJavaScriptURL;
 - (NSString *)_webkit_scriptIfJavaScriptURL;
index 718e26f..faadc81 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2005 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -364,6 +365,9 @@ static NSString *mapHostNames(NSString *string, BOOL encode)
     NSURL *result = nil;
     int length = [data length];
     if (length > 0) {
+        // work around <rdar://4470771>: CFURLCreateAbsoluteURLWithBytes(.., TRUE) doesn't remove non-path components.
+        baseURL = [baseURL _webkit_URLByRemovingResourceSpecifier];
+    
         const UInt8 *bytes = [data bytes];
         // NOTE: We use UTF-8 here since this encoding is used when computing strings when returning URL components
         // (e.g calls to NSURL -path). However, this function is not tolerant of illegal UTF-8 sequences, which
@@ -539,9 +543,9 @@ typedef struct {
 
 
 
-- (NSURL *)_webkit_URLByRemovingFragment
+- (NSURL *)_webkit_URLByRemovingComponent:(CFURLComponentType)component
 {
-    CFRange fragRg = CFURLGetByteRangeForComponent((CFURLRef)self, kCFURLComponentFragment, NULL);
+    CFRange fragRg = CFURLGetByteRangeForComponent((CFURLRef)self, component, NULL);
     // Check to see if a fragment exists before decomposing the URL.
     if (fragRg.location == kCFNotFound) {
         return self;
@@ -565,6 +569,16 @@ typedef struct {
     return result ? [result autorelease] : self;
 }
 
+- (NSURL *)_webkit_URLByRemovingFragment
+{
+    return [self _webkit_URLByRemovingComponent:kCFURLComponentFragment];
+}
+
+- (NSURL *)_webkit_URLByRemovingResourceSpecifier
+{
+    return [self _webkit_URLByRemovingComponent:kCFURLComponentResourceSpecifier];
+}
+
 - (BOOL)_webkit_isJavaScriptURL
 {
     return [[self _web_originalDataAsString] _webkit_isJavaScriptURL];
index 5c868bc..3412f48 100644 (file)
@@ -1,3 +1,10 @@
+2006-03-09  Alexey Proskuryakov  <ap@nypop.com>
+
+        Reviewed by Darin.
+
+        * DumpRenderTree/TestNetscapePlugIn.subproj/PluginObject.c:
+        (pluginInvoke): Added a method to test getURL.
+
 2006-03-08  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Eric.
index 65d6457..1612b0e 100644 (file)
@@ -71,11 +71,13 @@ static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
 };
 
 #define ID_TEST_CALLBACK_METHOD     0
-#define NUM_METHOD_IDENTIFIERS      1
+#define ID_TEST_GETURL              1
+#define NUM_METHOD_IDENTIFIERS      2
 
 static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
 static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
-    "testCallback"
+    "testCallback",
+    "getURL"
 };
 
 static void initializeIdentifiers()
@@ -138,8 +140,25 @@ void pluginInvoke (PluginObject *obj, NPIdentifier name, NPVariant *args, unsign
             NPIdentifier callbackMethodID = browser->getstringidentifier(callbackString);
             browser->invoke(obj->npp, windowScriptObject, callbackMethodID, 0, 0, &browserResult);
         }
+    } else if (name == pluginMethodIdentifiers[ID_TEST_GETURL]) {
+        if (argCount == 2 && args[0].type == NPVariantType_String && args[1].type == NPVariantType_String) {
+            NPString argString = args[0].value.stringValue;
+            int size = argString.UTF8Length + 1;
+            NPUTF8 urlString[size];
+            strncpy(urlString, argString.UTF8Characters, argString.UTF8Length);
+            urlString[size - 1] = '\0';
+
+            argString = args[1].value.stringValue;
+            size = argString.UTF8Length + 1;
+            NPUTF8 targetString[size];
+            strncpy(targetString, argString.UTF8Characters, argString.UTF8Length);
+            targetString[size - 1] = '\0';
+            
+            browser->geturl(obj->npp, urlString, targetString);
+        }
     }
 
+
     result->type = NPVariantType_Void;
 }