Reviewed by Richard
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Aug 2003 14:45:59 +0000 (14:45 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 6 Aug 2003 14:45:59 +0000 (14:45 +0000)
Plugins in WebKit need to store URLs in the form of "C-style" strings.
Create and use a new, improved method to make these strings, and do
not traverse through the NSURL absoluteString method, since that can i
introduce errors.

        * Misc.subproj/WebNSURLExtras.h: Added _web_URLCString method.
        * Misc.subproj/WebNSURLExtras.m:
        (-[NSURL _web_URLCString]): Added.
        * Plugins.subproj/WebBaseNetscapePluginStream.m:
        (-[WebBaseNetscapePluginStream setResponse:]): Call new _web_URLCString method.
        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): Ditto.
        * Plugins.subproj/WebBaseNetscapePluginView.m:
        (-[WebBaseNetscapePluginView frameStateChanged:]): Ditto.
        (-[WebBaseNetscapePluginView loadPluginRequest:]): Ditto.

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

WebKit/ChangeLog
WebKit/Misc.subproj/WebNSURLExtras.h
WebKit/Misc.subproj/WebNSURLExtras.m
WebKit/Plugins.subproj/WebBaseNetscapePluginStream.m
WebKit/Plugins.subproj/WebBaseNetscapePluginView.m

index 8529650015bd77e108ebd20ad08542b4735e9467..1403cb4e11e50b76a3fbd2f2174193a2ea7ff6d9 100644 (file)
@@ -1,3 +1,22 @@
+2003-08-05  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Richard
+
+       Plugins in WebKit need to store URLs in the form of "C-style" strings. 
+       Create and use a new, improved method to make these strings, and do 
+       not traverse through the NSURL absoluteString method, since that can i
+       introduce errors.
+
+        * Misc.subproj/WebNSURLExtras.h: Added _web_URLCString method.
+        * Misc.subproj/WebNSURLExtras.m:
+        (-[NSURL _web_URLCString]): Added.
+        * Plugins.subproj/WebBaseNetscapePluginStream.m:
+        (-[WebBaseNetscapePluginStream setResponse:]): Call new _web_URLCString method.
+        (-[WebBaseNetscapePluginStream finishedLoadingWithData:]): Ditto.
+        * Plugins.subproj/WebBaseNetscapePluginView.m:
+        (-[WebBaseNetscapePluginView frameStateChanged:]): Ditto.
+        (-[WebBaseNetscapePluginView loadPluginRequest:]): Ditto.
+
 2003-08-05  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by John
index 69ed7060eeb970da4176d6fcabc26c3949ca41e0..f6717b5414309b50e20fdc7f540d612e30e99a48 100644 (file)
@@ -18,6 +18,7 @@
 
 - (NSString *)_web_displayableString;
 - (int)_web_URLStringLength;
+- (const char *)_web_URLCString;
 
 // FIXME: change these names back to _web_ when identically-named
 // methods are removed from Foundation
index 314b914120e379fe8ab58228b8491112d409a93f..86c6024bc2053fa7cab447cb3a2d1d1b749c0f37 100644 (file)
@@ -113,6 +113,14 @@ static inline void ReleaseIfNotNULL(CFTypeRef object)
     return length;
 }
 
+- (const char *)_web_URLCString
+{
+    NSMutableData *data = [NSMutableData data];
+    [data appendData:[self _web_originalData]];
+    [data appendBytes:"\0" length:1];
+    return (const char *)[data bytes];
+ }
+
 - (NSURL *)_webkit_canonicalize
 {
     NSURLRequest *request = [[NSURLRequest alloc] initWithURL:self];
index 1c91d69ce664dccbd193e3eb5016a6f1c1ef4abb..27d11b82a4c33941e364ceb0c269a570070970ac 100644 (file)
@@ -7,6 +7,7 @@
 #import <WebKit/WebBaseNetscapePluginView.h>
 #import <WebKit/WebKitLogging.h>
 #import <WebKit/WebNetscapePluginPackage.h>
+#import <WebKit/WebNSURLExtras.h>
 
 #import <Foundation/NSURLResponse.h>
 #import <Foundation/NSURLResponsePrivate.h>
     [URL release];
     URL = [[r URL] retain];
     
-    NSString *URLString = [URL absoluteString];
-    char *cURL = (char *)malloc([URLString cStringLength]+1);
-    [URLString getCString:cURL];
-
     stream.ndata = self;
-    stream.URL = cURL;
+    stream.URL = strdup([URL _web_URLCString]);
     stream.end = [r expectedContentLength];
     stream.lastmodified = [[r _lastModifiedDate] timeIntervalSince1970];
     stream.notifyData = notifyData;
     [self destroyStreamWithReason:NPRES_DONE];
     
     if (notifyData) {
-        NPP_URLNotify(instance, [[URL absoluteString] cString], NPRES_DONE, notifyData);
+        NPP_URLNotify(instance, [URL _web_URLCString], NPRES_DONE, notifyData);
         LOG(Plugins, "NPP_URLNotify");
     }
 }
index 0998843597a767fbd43ee793817fff39794d6f61..29e6f213bf3195c9b2ffe125a94e1f15ae380397 100644 (file)
@@ -945,7 +945,7 @@ typedef struct {
         cAttributes = (char **)malloc(([keys count] + 1) * sizeof(char *));
         cValues = (char **)malloc(([values count] + 1) * sizeof(char *));
         cAttributes[0] = strdup("DOCBASE");
-        cValues[0] = strdup([[baseURL absoluteString] UTF8String]);
+        cValues[0] = strdup([baseURL _web_URLCString]);
         argsCount++;
     } else {
         cAttributes = (char **)malloc([keys count] * sizeof(char *));
@@ -1169,7 +1169,7 @@ typedef struct {
     WebFrameState frameState = [[[notification userInfo] objectForKey:WebCurrentFrameState] intValue];
     if (frameState == WebFrameStateComplete) {
         if (isStarted) {
-            NPP_URLNotify(instance, [[URL absoluteString] cString], NPRES_DONE, notifyData);
+            NPP_URLNotify(instance, [URL _web_URLCString], NPRES_DONE, notifyData);
         }
         [streamNotifications removeObjectForKey:URL];
     }
@@ -1229,7 +1229,7 @@ typedef struct {
         // FIXME: If the result is a string, we probably want to put that string into the frame, just
         // like we do in KHTMLPartBrowserExtension::openURLRequest.
         if (notifyData && isStarted) {
-            NPP_URLNotify(instance, [[URL absoluteString] cString], NPRES_DONE, notifyData);
+            NPP_URLNotify(instance, [URL _web_URLCString], NPRES_DONE, notifyData);
         }
     } else {
         [frame loadRequest:request];