Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Aug 2004 20:41:15 +0000 (20:41 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 17 Aug 2004 20:41:15 +0000 (20:41 +0000)
        - fixed <rdar://problem/3689700> crash loading page; stoxx.com (works in IE and Firefox)

        * khtml/khtml_part.h: Make completeURL public.
        * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::KJavaAppletWidget): Complete the base URL
        before passing it across the bridge. This sidesteps the crashing bug in CFURL, filed as
        '<rdar://problem/3764632> CFURLCreateAbsoluteURLWithBytes crashes if passed the string "../.."'
        and also is obviously correct behavior that may fix other sites too.

        - fixed <rdar://problem/3547725> Crashes at csuohio.edu, list box vs. mouse event problem (Spoof No Fix)

        * kwq/KWQListBox.mm:
        (QListBox::~QListBox): Nil out the pointer from the KWQTableView back to the widget by calling
        a new detach method.
        (-[KWQTableView detach]): Set the pointer to the QListBox to 0. Also set the delegate and data
        source to nil, so we don't need nil checks in delegate and data source methods.
        (-[KWQTableView mouseDown:]): Add nil check.
        (-[KWQTableView keyDown:]): Add nil check.
        (-[KWQTableView keyUp:]): Add nil check.
        (-[KWQTableView becomeFirstResponder]): Add nil check.
        (-[KWQTableView resignFirstResponder]): Add nil check.
        (-[KWQTableView canBecomeKeyView]): Add nil check.
        (-[KWQTableView tableViewSelectionDidChange:]): Add nil checks, even though this is a delegate
        callback, to handle cases where calls to JavaScript result in the QListBox going away partway
        through.
        (-[KWQTableView drawRow:clipRect:]): Add nil check.
        (-[KWQTableView _accessibilityTableCell:tableColumn:]): Add nil check.

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

WebCore/ChangeLog-2005-08-23
WebCore/WebCore.pbproj/project.pbxproj
WebCore/khtml/khtml_part.h
WebCore/kwq/KWQKJavaAppletWidget.mm
WebCore/kwq/KWQListBox.mm

index 9eb481bbc379feca8f363e58c4402575d5744c86..5c41ffc56b3cb23184c8b08d922f9636eee45281 100644 (file)
@@ -1,3 +1,34 @@
+2004-08-17  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fixed <rdar://problem/3689700> crash loading page; stoxx.com (works in IE and Firefox)
+
+        * khtml/khtml_part.h: Make completeURL public.
+        * kwq/KWQKJavaAppletWidget.mm: (KJavaAppletWidget::KJavaAppletWidget): Complete the base URL
+        before passing it across the bridge. This sidesteps the crashing bug in CFURL, filed as
+        '<rdar://problem/3764632> CFURLCreateAbsoluteURLWithBytes crashes if passed the string "../.."'
+        and also is obviously correct behavior that may fix other sites too.
+
+        - fixed <rdar://problem/3547725> Crashes at csuohio.edu, list box vs. mouse event problem (Spoof No Fix)
+
+        * kwq/KWQListBox.mm:
+        (QListBox::~QListBox): Nil out the pointer from the KWQTableView back to the widget by calling
+        a new detach method.
+        (-[KWQTableView detach]): Set the pointer to the QListBox to 0. Also set the delegate and data
+        source to nil, so we don't need nil checks in delegate and data source methods.
+        (-[KWQTableView mouseDown:]): Add nil check.
+        (-[KWQTableView keyDown:]): Add nil check.
+        (-[KWQTableView keyUp:]): Add nil check.
+        (-[KWQTableView becomeFirstResponder]): Add nil check.
+        (-[KWQTableView resignFirstResponder]): Add nil check.
+        (-[KWQTableView canBecomeKeyView]): Add nil check.
+        (-[KWQTableView tableViewSelectionDidChange:]): Add nil checks, even though this is a delegate
+        callback, to handle cases where calls to JavaScript result in the QListBox going away partway
+        through.
+        (-[KWQTableView drawRow:clipRect:]): Add nil check.
+        (-[KWQTableView _accessibilityTableCell:tableColumn:]): Add nil check.
+
 2004-08-17  Trey Matteson  <trey@apple.com>
 
        Fix ASSERT in spelling marker management.
index 12449a49d9a8dc9e2ebdfd91a89f805b756e52a3..35bf2b3a2971a3595e7161fcc4f97aeb015635da 100644 (file)
                93F1D31A0558CC5C00821BC0 = {
                        isa = PBXFileReference;
                        lastKnownFileType = "compiled.mach-o.dylib";
-                       name = libicucore.A.dylib;
-                       path = /usr/lib/libicucore.A.dylib;
+                       name = libicucore.dylib;
+                       path = /usr/lib/libicucore.dylib;
                        refType = 0;
                        sourceTree = "<absolute>";
                };
index 1fba849ce4ffe39185a087146a4d864eb0c4de34..29dbc8a80ae10bd55b80e11d52aa2befdcaccc4c 100644 (file)
@@ -892,7 +892,7 @@ signals:
    */
   void nodeActivated(const DOM::Node &);
 
-protected:
+public:
 
   /**
    * returns a KURL object for the given url. Use when
@@ -900,6 +900,8 @@ protected:
    */
   KURL completeURL( const QString &url );
 
+protected:
+
   /**
    * presents a detailed error message to the user.
    * @p errorCode kio error code, eg KIO::ERR_SERVER_TIMEOUT.
index c56c4ef2799312a3413f1c6855a9f500b6d05132..b0c8c322bf29cb871fd408c25b8f2e30c3a10f7d 100644 (file)
@@ -46,12 +46,10 @@ KJavaAppletWidget::KJavaAppletWidget(const QSize &size, KJavaAppletContext *c, c
         ++it;
     }
     
-    KHTMLPart *part = c->part();
-    KURL baseURL = baseURLString.isNull() ? part->baseURL() : KURL(baseURLString);
-    
-    setView([KWQ(part)->bridge() viewForJavaAppletWithFrame:NSMakeRect(0, 0, size.width(), size.height())
-                                                 attributes:attributes
-                                                    baseURL:baseURL.getNSURL()]);
+    KWQKHTMLPart *part = KWQ(c->part());    
+    setView([part->bridge() viewForJavaAppletWithFrame:NSMakeRect(0, 0, size.width(), size.height())
+                                            attributes:attributes
+                                               baseURL:part->completeURL(baseURLString).getNSURL()]);
     [attributes release];
     part->view()->addChild(this);
     
index 2bfb5429a80f03bdd7af6b5a29b44dba94626254..daebeb86c408abce2d2403c683beeafe7a60856e 100644 (file)
@@ -56,6 +56,7 @@ const float rightMargin = 2;
     NSWritingDirection _direction;
 }
 - (id)initWithListBox:(QListBox *)b;
+- (void)detach;
 - (void)_KWQ_setKeyboardFocusRingNeedsDisplay;
 - (QWidget *)widget;
 - (void)setBaseWritingDirection:(NSWritingDirection)direction;
@@ -142,9 +143,8 @@ QListBox::~QListBox()
     NSScrollView *scrollView = getView();
     
     KWQ_BLOCK_EXCEPTIONS;
-    NSTableView *tableView = [scrollView documentView];
-    [tableView setDelegate:nil];
-    [tableView setDataSource:nil];
+    KWQTableView *tableView = [scrollView documentView];
+    [tableView detach];
     KWQ_UNBLOCK_EXCEPTIONS;
 }
 
@@ -366,6 +366,13 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
     return self;
 }
 
+- (void)detach
+{
+    _box = 0;
+    [self setDelegate:nil];
+    [self setDataSource:nil];
+}
+
 - (void)mouseDown:(NSEvent *)event
 {
     processingMouseEvent = TRUE;
@@ -374,13 +381,16 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 
     if (clickedDuringMouseEvent) {
        clickedDuringMouseEvent = false;
-    } else {
+    } else if (_box) {
        _box->sendConsumedMouseUp();
     }
 }
 
 - (void)keyDown:(NSEvent *)event
 {
+    if (!_box)  {
+        return;
+    }
     WebCoreBridge *bridge = KWQKHTMLPart::bridgeForWidget(_box);
     if (![bridge interceptKeyEvent:event toView:self]) {
        [super keyDown:event];
@@ -389,6 +399,9 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 
 - (void)keyUp:(NSEvent *)event
 {
+    if (!_box)  {
+        return;
+    }
     WebCoreBridge *bridge = KWQKHTMLPart::bridgeForWidget(_box);
     if (![bridge interceptKeyEvent:event toView:self]) {
        [super keyUp:event];
@@ -397,6 +410,10 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 
 - (BOOL)becomeFirstResponder
 {
+    if (!_box) {
+        return NO;
+    }
+
     BOOL become = [super becomeFirstResponder];
     
     if (become) {
@@ -414,20 +431,20 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 - (BOOL)resignFirstResponder
 {
     BOOL resign = [super resignFirstResponder];
-    if (resign) {
+    if (resign && _box) {
         QFocusEvent event(QEvent::FocusOut);
         const_cast<QObject *>(_box->eventFilterObject())->eventFilter(_box, &event);
     }
     return resign;
 }
 
-- (BOOL)canBecomeKeyView {
+- (BOOL)canBecomeKeyView
+{
     // Simplified method from NSView; overridden to replace NSView's way of checking
     // for full keyboard access with ours.
-    if (!KWQKHTMLPart::partForWidget(_box)->tabsToAllControls()) {
+    if (!_box || !KWQKHTMLPart::partForWidget(_box)->tabsToAllControls()) {
         return NO;
     }
-    
     return ([self window] != nil) && ![self isHiddenOrHasHiddenAncestor] && [self acceptsFirstResponder];
 }
 
@@ -474,12 +491,14 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 - (void)tableViewSelectionDidChange:(NSNotification *)notification
 {
     _box->selectionChanged();
-    if (!_box->changingSelection()) {
+    if (_box && !_box->changingSelection()) {
        if (processingMouseEvent) {
            clickedDuringMouseEvent = true;
            _box->sendConsumedMouseUp();
        }
-        _box->clicked();
+        if (_box) {
+            _box->clicked();
+        }
     }
 }
 
@@ -495,6 +514,10 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 
 - (void)drawRow:(int)row clipRect:(NSRect)clipRect
 {
+    if (!_box) {
+        return;
+    }
+
     const KWQListBoxItem &item = _box->itemAtIndex(row);
 
     NSColor *color;
@@ -562,7 +585,9 @@ void QListBox::setWritingDirection(QPainter::TextDirection d)
 - (NSCell *)_accessibilityTableCell:(int)row tableColumn:(NSTableColumn *)tableColumn
 {
     NSCell *cell = [super _accessibilityTableCell:row tableColumn:tableColumn];
-    [cell setStringValue:_box->itemAtIndex(row).string.getNSString()];
+    if (_box) {
+        [cell setStringValue:_box->itemAtIndex(row).string.getNSString()];
+    }
     return cell;
 }