Changeset 20858 in webkit


Ignore:
Timestamp:
Apr 11, 2007 11:42:45 PM (17 years ago)
Author:
oliver
Message:

2007-04-11 Oliver Hunt <oliver@apple.com>

Reviewed by Maciej.

WebCore:

Adding RetainPtr to the many global obj-c pointers we use in
C/C++ methods. This is necessary to prevent GC from collecting
globals we want to keep around.

We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
obj-c.

Also made the Pasteboard::m_pasteboard a RetainPtr although it
shouldn't be necessary as the only NSPasteboard instances that
should ever be inserted are the system clipboard and dragging
pasteboard. Neither of which should ever be collected.

  • page/mac/WebCoreFrameBridge.mm: (_getPreSmartSet): (_getPostSmartSet):
  • platform/Pasteboard.h:
  • platform/graphics/mac/ColorMac.mm: (WebCore::nsColor):
  • platform/graphics/mac/GraphicsContextMac.mm: (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
  • platform/mac/FontDataMac.mm: (WebCore::webFallbackFontFamily):
  • platform/mac/PasteboardMac.mm: (WebCore::writableTypesForURL): (WebCore::writableTypesForImage): (WebCore::Pasteboard::clear): (WebCore::Pasteboard::writeSelection): (WebCore::Pasteboard::writeURL): (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment): (WebCore::Pasteboard::writeImage): (WebCore::Pasteboard::canSmartReplace): (WebCore::Pasteboard::plainText): (WebCore::Pasteboard::documentFragment):

WebKit:

Adding RetainPtr to the many global obj-c pointers we use in
C/C++ methods. This is necessary to prevent GC from collecting
globals we want to keep around.

We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
obj-c.

This fixes <rdar://problem/5058731> -- Crash in
WebCore::DragData::containsCompatibleContent due to early release
of types array

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r20857 r20858  
     12007-04-11  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        Adding RetainPtr to the many global obj-c pointers we use in
     6        C/C++ methods.  This is necessary to prevent GC from collecting
     7        globals we want to keep around.
     8
     9        We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
     10        obj-c.
     11
     12        Also made the Pasteboard::m_pasteboard a RetainPtr although it
     13        shouldn't be necessary as the only NSPasteboard instances that
     14        should ever be inserted are the system clipboard and dragging
     15        pasteboard.  Neither of which should ever be collected.
     16
     17        * page/mac/WebCoreFrameBridge.mm:
     18        (_getPreSmartSet):
     19        (_getPostSmartSet):
     20        * platform/Pasteboard.h:
     21        * platform/graphics/mac/ColorMac.mm:
     22        (WebCore::nsColor):
     23        * platform/graphics/mac/GraphicsContextMac.mm:
     24        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
     25        * platform/mac/FontDataMac.mm:
     26        (WebCore::webFallbackFontFamily):
     27        * platform/mac/PasteboardMac.mm:
     28        (WebCore::writableTypesForURL):
     29        (WebCore::writableTypesForImage):
     30        (WebCore::Pasteboard::clear):
     31        (WebCore::Pasteboard::writeSelection):
     32        (WebCore::Pasteboard::writeURL):
     33        (WebCore::Pasteboard::writeFileWrapperAsRTFDAttachment):
     34        (WebCore::Pasteboard::writeImage):
     35        (WebCore::Pasteboard::canSmartReplace):
     36        (WebCore::Pasteboard::plainText):
     37        (WebCore::Pasteboard::documentFragment):
     38
    1392007-04-11  Mitz Pettel  <mitz@webkit.org>
    240
  • trunk/WebCore/page/mac/WebCoreFrameBridge.mm

    r20837 r20858  
    13471347static NSCharacterSet *_getPreSmartSet(void)
    13481348{
    1349     static NSMutableCharacterSet *_preSmartSet = nil;
     1349    static RetainPtr<NSMutableCharacterSet> _preSmartSet = nil;
    13501350    if (!_preSmartSet) {
    13511351        _preSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_preSmartString] retain];
    1352         [_preSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     1352        [_preSmartSet.get() formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    13531353        // Adding CJK ranges
    1354         [_preSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
    1355         [_preSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
    1356         [_preSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
    1357         [_preSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
    1358         [_preSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
    1359         [_preSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
    1360         [_preSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
    1361         [_preSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
    1362         [_preSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
    1363         [_preSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)
    1364     }
    1365     return _preSmartSet;
     1354        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
     1355        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
     1356        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
     1357        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
     1358        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
     1359        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
     1360        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
     1361        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
     1362        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
     1363        [_preSmartSet.get() addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)
     1364    }
     1365    return _preSmartSet.get();
    13661366}
    13671367
    13681368static NSCharacterSet *_getPostSmartSet(void)
    13691369{
    1370     static NSMutableCharacterSet *_postSmartSet = nil;
     1370    static RetainPtr<NSMutableCharacterSet> _postSmartSet = nil;
    13711371    if (!_postSmartSet) {
    13721372        _postSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_postSmartString] retain];
    1373         [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    1374         [_postSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
    1375         [_postSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
    1376         [_postSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
    1377         [_postSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
    1378         [_postSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
    1379         [_postSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
    1380         [_postSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
    1381         [_postSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
    1382         [_postSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
    1383         [_postSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)       
    1384         [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
    1385     }
    1386     return _postSmartSet;
     1373        [_postSmartSet.get() formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
     1374        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
     1375        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
     1376        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
     1377        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
     1378        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
     1379        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
     1380        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
     1381        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
     1382        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
     1383        [_postSmartSet.get() addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)       
     1384        [_postSmartSet.get() formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
     1385    }
     1386    return _postSmartSet.get();
    13871387}
    13881388
  • trunk/WebCore/platform/Pasteboard.h

    r20846 r20858  
    3030#include <wtf/HashSet.h>
    3131#include <wtf/Noncopyable.h>
     32
     33#if PLATFORM(MAC)
     34#include <wtf/RetainPtr.h>
     35#endif
    3236
    3337// FIXME: This class is too high-level to be in the platform directory, since it
     
    9195#if PLATFORM(MAC)
    9296    Pasteboard(NSPasteboard *);
    93     NSPasteboard *m_pasteboard;
     97    RetainPtr<NSPasteboard> m_pasteboard;
    9498#endif
    9599
  • trunk/WebCore/platform/graphics/mac/ColorMac.mm

    r17727 r20858  
    2828
    2929#import <wtf/Assertions.h>
     30#import <wtf/RetainPtr.h>
    3031
    3132@interface WebCoreControlTintObserver : NSObject
     
    4748        case 0: {
    4849            // Need this to avoid returning nil because cachedRGBAValues will default to 0.
    49             static NSColor* clearColor = [[NSColor clearColor] retain];
    50             return clearColor;
     50            static RetainPtr<NSColor> clearColor = [NSColor clearColor];
     51            return clearColor.get();
    5152        }
    5253        case Color::black: {
    53             static NSColor* blackColor = [[NSColor blackColor] retain];
    54             return blackColor;
     54            static RetainPtr<NSColor> blackColor = [NSColor blackColor];
     55            return blackColor.get();
    5556        }
    5657        case Color::white: {
    57             static NSColor* whiteColor = [[NSColor whiteColor] retain];
    58             return whiteColor;
     58            static RetainPtr<NSColor> whiteColor = [NSColor whiteColor];
     59            return whiteColor.get();
    5960        }
    6061        default: {
    6162            const int cacheSize = 32;
    6263            static unsigned cachedRGBAValues[cacheSize];
    63             static NSColor* cachedColors[cacheSize];
     64            static RetainPtr<NSColor> cachedColors[cacheSize];
    6465
    6566            for (int i = 0; i != cacheSize; ++i)
    6667                if (cachedRGBAValues[i] == c)
    67                     return cachedColors[i];
     68                    return cachedColors[i].get();
    6869
    6970#ifdef COLORMATCH_EVERYTHING
     
    8182            static int cursor;
    8283            cachedRGBAValues[cursor] = c;
    83             [cachedColors[cursor] autorelease];
    84             cachedColors[cursor] = [result retain];
     84            cachedColors[cursor] = result;
    8585            if (++cursor == cacheSize)
    8686                cursor = 0;
  • trunk/WebCore/platform/graphics/mac/GraphicsContextMac.mm

    r18315 r20858  
    106106       
    107107    // Constants for spelling pattern color
    108     static NSColor *spellingPatternColor = nil;
     108    static RetainPtr<NSColor> spellingPatternColor = nil;
    109109    static bool usingDotForSpelling = false;
    110110
    111111    // Constants for grammar pattern color
    112     static NSColor *grammarPatternColor = nil;
     112    static RetainPtr<NSColor> grammarPatternColor = nil;
    113113    static bool usingDotForGrammar = false;
    114114   
     
    126126        else
    127127            color = [NSColor redColor];
    128         spellingPatternColor = [color retain];
     128        spellingPatternColor = color;
    129129    }
    130130   
     
    137137        else
    138138            color = [NSColor greenColor];
    139         grammarPatternColor = [color retain];
     139        grammarPatternColor = color;
    140140    }
    141141   
     
    144144    if (grammar) {
    145145        usingDot = usingDotForGrammar;
    146         patternColor = grammarPatternColor;
     146        patternColor = grammarPatternColor.get();
    147147    } else {
    148148        usingDot = usingDotForSpelling;
    149         patternColor = spellingPatternColor;
     149        patternColor = spellingPatternColor.get();
    150150    }
    151151
  • trunk/WebCore/platform/mac/FontDataMac.mm

    r19407 r20858  
    4141#import <unicode/uchar.h>
    4242#import <wtf/Assertions.h>
     43#import <wtf/RetainPtr.h>
    4344
    4445@interface NSFont (WebAppKitSecretAPI)
     
    8586static NSString *webFallbackFontFamily(void)
    8687{
    87     static NSString *webFallbackFontFamily = nil;
     88    static RetainPtr<NSString> webFallbackFontFamily = nil;
    8889    if (!webFallbackFontFamily)
    89         webFallbackFontFamily = [[[NSFont systemFontOfSize:16.0] familyName] retain];
    90     return webFallbackFontFamily;
     90        webFallbackFontFamily = [[NSFont systemFontOfSize:16.0] familyName];
     91    return webFallbackFontFamily.get();
    9192}
    9293
  • trunk/WebCore/platform/mac/PasteboardMac.mm

    r20846 r20858  
    7777static NSArray* writableTypesForURL()
    7878{
    79     static NSArray *types = nil;
     79    static RetainPtr<NSArray> types = nil;
    8080    if (!types) {
    8181        types = [[NSArray alloc] initWithObjects:
     
    8787            nil];
    8888    }
    89     return types;
     89    return types.get();
    9090}
    9191
    9292static NSArray* writableTypesForImage()
    9393{
    94     static NSMutableArray *types = nil;
     94    static RetainPtr<NSMutableArray> types = nil;
    9595    if (!types) {
    9696        types = [[NSMutableArray alloc] initWithObjects:NSTIFFPboardType, nil];
    97         [types addObjectsFromArray:writableTypesForURL()];
    98         [types addObject:NSRTFDPboardType];
    99     }
    100     return types;
     97        [types.get() addObjectsFromArray:writableTypesForURL()];
     98        [types.get() addObject:NSRTFDPboardType];
     99    }
     100    return types.get();
    101101}
    102102
     
    119119void Pasteboard::clear()
    120120{
    121     [m_pasteboard declareTypes:[NSArray array] owner:nil];
     121    [m_pasteboard.get() declareTypes:[NSArray array] owner:nil];
    122122}
    123123
     
    200200void Pasteboard::writeSelection(Range* selectedRange, bool canSmartCopyOrDelete, Frame* frame)
    201201{
    202     Pasteboard::writeSelection(m_pasteboard, selectedRange, canSmartCopyOrDelete, frame);
     202    Pasteboard::writeSelection(m_pasteboard.get(), selectedRange, canSmartCopyOrDelete, frame);
    203203}
    204204
     
    242242void Pasteboard::writeURL(const KURL& url, const String& titleStr, Frame* frame)
    243243{
    244     Pasteboard::writeURL(m_pasteboard, nil, url, titleStr, frame);
     244    Pasteboard::writeURL(m_pasteboard.get(), nil, url, titleStr, frame);
    245245}
    246246
     
    267267   
    268268    NSData *RTFDData = [string RTFDFromRange:NSMakeRange(0, [string length]) documentAttributes:nil];
    269     [m_pasteboard setData:RTFDData forType:NSRTFDPboardType];
     269    [m_pasteboard.get() setData:RTFDData forType:NSRTFDPboardType];
    270270}
    271271
     
    279279
    280280    NSArray* types = writableTypesForImage();
    281     [m_pasteboard declareTypes:types owner:nil];
    282     writeURL(m_pasteboard, types, URL, nsStringNilIfEmpty(title), frame);
     281    [m_pasteboard.get() declareTypes:types owner:nil];
     282    writeURL(m_pasteboard.get(), types, URL, nsStringNilIfEmpty(title), frame);
    283283
    284284    ASSERT(node->renderer() && node->renderer()->isImage());
     
    289289    ASSERT(image);
    290290   
    291     [m_pasteboard setData:[image->getNSImage() TIFFRepresentation] forType:NSTIFFPboardType];
     291    [m_pasteboard.get() setData:[image->getNSImage() TIFFRepresentation] forType:NSTIFFPboardType];
    292292
    293293    String MIMEType = cachedImage->response().mimeType();
     
    299299bool Pasteboard::canSmartReplace()
    300300{
    301     return [[m_pasteboard types] containsObject:WebSmartPastePboardType];
     301    return [[m_pasteboard.get() types] containsObject:WebSmartPastePboardType];
    302302}
    303303
    304304String Pasteboard::plainText(Frame* frame)
    305305{
    306     NSArray *types = [m_pasteboard types];
     306    NSArray *types = [m_pasteboard.get() types];
    307307   
    308308    if ([types containsObject:NSStringPboardType])
    309         return [m_pasteboard stringForType:NSStringPboardType];
     309        return [m_pasteboard.get() stringForType:NSStringPboardType];
    310310   
    311311    NSAttributedString *attributedString = nil;
     
    313313
    314314    if ([types containsObject:NSRTFDPboardType])
    315         attributedString = [[NSAttributedString alloc] initWithRTFD:[m_pasteboard dataForType:NSRTFDPboardType] documentAttributes:NULL];
     315        attributedString = [[NSAttributedString alloc] initWithRTFD:[m_pasteboard.get() dataForType:NSRTFDPboardType] documentAttributes:NULL];
    316316    if (attributedString == nil && [types containsObject:NSRTFPboardType])
    317         attributedString = [[NSAttributedString alloc] initWithRTF:[m_pasteboard dataForType:NSRTFPboardType] documentAttributes:NULL];
     317        attributedString = [[NSAttributedString alloc] initWithRTF:[m_pasteboard.get() dataForType:NSRTFPboardType] documentAttributes:NULL];
    318318    if (attributedString != nil) {
    319319        string = [[attributedString string] copy];
     
    323323   
    324324    if ([types containsObject:NSFilenamesPboardType]) {
    325         string = [[m_pasteboard propertyListForType:NSFilenamesPboardType] componentsJoinedByString:@"\n"];
     325        string = [[m_pasteboard.get() propertyListForType:NSFilenamesPboardType] componentsJoinedByString:@"\n"];
    326326        if (string != nil)
    327327            return string;
     
    331331    NSURL *URL;
    332332   
    333     if ((URL = [NSURL URLFromPasteboard:m_pasteboard])) {
     333    if ((URL = [NSURL URLFromPasteboard:m_pasteboard.get()])) {
    334334        // FIXME: using the editorClient to call into webkit, for now, since
    335335        // calling [URL _web_userVisibleString] from WebCore involves migrating a sizable web of
     
    346346PassRefPtr<DocumentFragment> Pasteboard::documentFragment(Frame* frame, PassRefPtr<Range> context, bool allowPlainText, bool& chosePlainText)
    347347{
    348     NSArray *types = [m_pasteboard types];
     348    NSArray *types = [m_pasteboard.get() types];
    349349    chosePlainText = false;
    350350
    351351    if ([types containsObject:NSHTMLPboardType]) {
    352         NSString *HTMLString = [m_pasteboard stringForType:NSHTMLPboardType];
     352        NSString *HTMLString = [m_pasteboard.get() stringForType:NSHTMLPboardType];
    353353        // This is a hack to make Microsoft's HTML pasteboard data work. See 3778785.
    354354        if ([HTMLString hasPrefix:@"Version:"]) {
     
    367367    if (allowPlainText && [types containsObject:NSStringPboardType]) {
    368368        chosePlainText = true;
    369         RefPtr<DocumentFragment> fragment = createFragmentFromText(context.get(), [m_pasteboard stringForType:NSStringPboardType]);
     369        RefPtr<DocumentFragment> fragment = createFragmentFromText(context.get(), [m_pasteboard.get() stringForType:NSStringPboardType]);
    370370        if (fragment)
    371371            return fragment.release();
  • trunk/WebKit/ChangeLog

    r20856 r20858  
     12007-04-11  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Maciej.
     4
     5        Adding RetainPtr to the many global obj-c pointers we use in
     6        C/C++ methods.  This is necessary to prevent GC from collecting
     7        globals we want to keep around.
     8
     9        We use RetainPtr in obj-c++ and c++ files, and CFRetain/Release in pure
     10        obj-c.
     11
     12        This fixes <rdar://problem/5058731> -- Crash in
     13        WebCore::DragData::containsCompatibleContent due to early release
     14        of types array
     15
     16        * Misc/WebLocalizableStrings.m:
     17        (WebLocalizedString):
     18        * Misc/WebNSPasteboardExtras.mm:
     19        (+[NSPasteboard _web_writableTypesForURL]):
     20        (_writableTypesForImageWithoutArchive):
     21        (_writableTypesForImageWithArchive):
     22        * Misc/WebNSURLExtras.m:
     23        (applyHostNameFunctionToMailToURLString):
     24        (applyHostNameFunctionToURLString):
     25        * Misc/WebStringTruncator.m:
     26        (defaultMenuFont):
     27        (fontFromNSFont):
     28        * WebCoreSupport/WebPasteboardHelper.mm:
     29        (WebPasteboardHelper::insertablePasteboardTypes):
     30
     31=======
    1322007-04-11  MorganL  <morganl.webkit@yahoo.com>
    233
     
    1546        (WebChromeClient::createModalDialog):
    1647
     48>>>>>>> .r20857
    17492007-04-10  Brady Eidson  <beidson@apple.com>
    1850
  • trunk/WebKit/Misc/WebLocalizableStrings.m

    r14021 r20858  
    4141            mainBundle = [NSBundle mainBundle];
    4242            ASSERT(mainBundle);
     43            CFRetain(mainBundle);
    4344        }
    4445        bundle = mainBundle;
  • trunk/WebKit/Misc/WebNSPasteboardExtras.mm

    r19485 r20858  
    3838#import <WebCore/MimeTypeRegistry.h>
    3939#import <WebKit/DOMPrivate.h>
     40#import <WTF/RetainPtr.h>
    4041#import <WebKitSystemInterface.h>
    4142
     
    8586+ (NSArray *)_web_writableTypesForURL
    8687{
    87     static NSArray *types = nil;
     88    static RetainPtr<NSArray> types;
    8889    if (!types) {
    8990        types = [[NSArray alloc] initWithObjects:
     
    9596            nil];
    9697    }
    97     return types;
     98    return types.get();
    9899}
    99100
    100101static NSArray *_writableTypesForImageWithoutArchive (void)
    101102{
    102     static NSMutableArray *types = nil;
     103    static RetainPtr<NSMutableArray> types;
    103104    if (types == nil) {
    104105        types = [[NSMutableArray alloc] initWithObjects:NSTIFFPboardType, nil];
    105         [types addObjectsFromArray:[NSPasteboard _web_writableTypesForURL]];
    106     }
    107     return types;
     106        [types.get() addObjectsFromArray:[NSPasteboard _web_writableTypesForURL]];
     107    }
     108    return types.get();
    108109}
    109110
    110111static NSArray *_writableTypesForImageWithArchive (void)
    111112{
    112     static NSMutableArray *types = nil;
     113    static RetainPtr<NSMutableArray> types;
    113114    if (types == nil) {
    114115        types = [_writableTypesForImageWithoutArchive() mutableCopy];
    115         [types addObject:NSRTFDPboardType];
    116         [types addObject:WebArchivePboardType];
    117     }
    118     return types;
     116        [types.get() addObject:NSRTFDPboardType];
     117        [types.get() addObject:WebArchivePboardType];
     118    }
     119    return types.get();
    119120}
    120121
  • trunk/WebKit/Misc/WebNSURLExtras.m

    r19764 r20858  
    103103    static NSCharacterSet *hostNameOrStringStartCharacters;
    104104    if (hostNameOrStringStartCharacters == nil) {
    105         hostNameOrStringStartCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"\"@?"] retain];
     105        hostNameOrStringStartCharacters = [NSCharacterSet characterSetWithCharactersInString:@"\"@?"];
     106        CFRetain(hostNameOrStringStartCharacters);
    106107    }
    107108    static NSCharacterSet *hostNameEndCharacters;
    108109    if (hostNameEndCharacters == nil) {
    109         hostNameEndCharacters = [[NSCharacterSet characterSetWithCharactersInString:@">,?"] retain];
     110        hostNameEndCharacters = [NSCharacterSet characterSetWithCharactersInString:@">,?"];
     111        CFRetain(hostNameEndCharacters);
    110112    }
    111113    static NSCharacterSet *quotedStringCharacters;
    112114    if (quotedStringCharacters == nil) {
    113         quotedStringCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"\"\\"] retain];
     115        quotedStringCharacters = [NSCharacterSet characterSetWithCharactersInString:@"\"\\"];
     116        CFRetain(quotedStringCharacters);
    114117    }
    115118
     
    205208    static NSCharacterSet *nonSchemeCharacters;
    206209    if (nonSchemeCharacters == nil) {
    207         nonSchemeCharacters = [[[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-."] invertedSet] retain];
     210        nonSchemeCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-."] invertedSet];
     211        CFRetain(nonSchemeCharacters);
    208212    }
    209213    if ([string rangeOfCharacterFromSet:nonSchemeCharacters options:0 range:NSMakeRange(0, separatorRange.location)].location != NSNotFound) {
     
    215219    static NSCharacterSet *hostTerminators;
    216220    if (hostTerminators == nil) {
    217         hostTerminators = [[NSCharacterSet characterSetWithCharactersInString:@":/?#"] retain];
     221        hostTerminators = [NSCharacterSet characterSetWithCharactersInString:@":/?#"];
     222        CFRetain(hostTerminators);
    218223    }
    219224
  • trunk/WebKit/Misc/WebStringTruncator.m

    r19762 r20858  
    3939static NSFont *defaultMenuFont()
    4040{
    41     static NSFont *defaultMenuFont = [[NSFont menuFontOfSize:0] retain];
     41    static NSFont *defaultMenuFont = nil;
     42    if (!defaultMenuFont) {
     43        defaultMenuFont = [NSFont menuFontOfSize:0];
     44        CFRetain(defaultMenuFont);
     45    }
    4246    return defaultMenuFont;
    4347}
     
    5054    if ([font isEqual:currentFont])
    5155        return currentRenderer;
    52    
    53     [currentFont release];
    54     currentFont = [font retain];
     56    if (currentFont)
     57        CFRelease(currentFont);
     58    currentFont = font;
     59    CFRetain(currentFont);
    5560    FontPlatformData f(font);
    5661    currentRenderer = Font(f, ![[NSGraphicsContext currentContext] isDrawingToScreen]);
  • trunk/WebKit/WebCoreSupport/WebPasteboardHelper.mm

    r19480 r20858  
    3333#import <WebCore/DOMDocumentFragment.h>
    3434#import <WebCore/PlatformString.h>
     35#import <WTF/RetainPtr.h>
    3536
    3637using namespace WebCore;
     
    9091NSArray *WebPasteboardHelper::insertablePasteboardTypes() const
    9192{   
    92     static NSArray *types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType,
     93    static RetainPtr<NSArray> types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType,
    9394           NSFilenamesPboardType, NSTIFFPboardType, NSPICTPboardType, NSURLPboardType,
    9495           NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, nil];
    9596   
    96     return types;
     97    return types.get();
    9798}
Note: See TracChangeset for help on using the changeset viewer.