WebCore:
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 Apr 2006 22:56:25 +0000 (22:56 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 24 Apr 2006 22:56:25 +0000 (22:56 +0000)
        Reviewed by Darin.

        - move more code from WebFrameBridge to WebCoreFrameBridge

        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge domain]):
        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
        (-[WebCoreFrameBridge fini]):
        (-[WebCoreFrameBridge dealloc]):
        (-[WebCoreFrameBridge finalize]):
        (_getPreSmartSet):
        (_getPostSmartSet):
        (-[WebCoreFrameBridge isCharacterSmartReplaceExempt:isPreviousCharacter:]):
        (-[WebCoreFrameBridge _retrieveKeyboardUIModeFromPreferences:]):
        (-[WebCoreFrameBridge keyboardUIMode]):

WebKit:

        Reviewed by Darin.

        - move more code from WebFrameBridge to WebCoreFrameBridge

        * WebCoreSupport/WebFrameBridge.h:
        * WebCoreSupport/WebFrameBridge.m:
        (-[WebFrameBridge fini]):
        (-[WebFrameBridge expiresTimeForResponse:]):
        (-[WebFrameBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):
        (-[WebFrameBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
        (-[WebFrameBridge valueForKey:keys:values:]):
        (-[WebFrameBridge _preferences]):

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

WebCore/ChangeLog
WebCore/bridge/mac/WebCoreFrameBridge.h
WebCore/bridge/mac/WebCoreFrameBridge.mm
WebKit/ChangeLog
WebKit/WebCoreSupport/WebFrameBridge.h
WebKit/WebCoreSupport/WebFrameBridge.m

index dd9e5160450f2f449f96f8732fef40939c7132c0..ca329b244d35025e3d15f74a11e048119295022e 100644 (file)
@@ -1,3 +1,22 @@
+2006-04-24  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+        - move more code from WebFrameBridge to WebCoreFrameBridge
+
+        * bridge/mac/WebCoreFrameBridge.h:
+        * bridge/mac/WebCoreFrameBridge.mm:
+        (-[WebCoreFrameBridge domain]):
+        (-[WebCoreFrameBridge canTargetLoadInFrame:]):
+        (-[WebCoreFrameBridge fini]):
+        (-[WebCoreFrameBridge dealloc]):
+        (-[WebCoreFrameBridge finalize]):
+        (_getPreSmartSet):
+        (_getPostSmartSet):
+        (-[WebCoreFrameBridge isCharacterSmartReplaceExempt:isPreviousCharacter:]):
+        (-[WebCoreFrameBridge _retrieveKeyboardUIModeFromPreferences:]):
+        (-[WebCoreFrameBridge keyboardUIMode]):
+
 2006-04-24  Adele Peterson  <adele@apple.com>
 
         Reviewed by Tim O.
index a2259bddb6a5f7983a0a7fbf33a6418bb0cd10d2..2ccf060787614e0192d8e60a48dd00269d4bf70d 100644 (file)
@@ -179,6 +179,8 @@ typedef enum {
 {
     WebCoreMacFrame *m_frame;
     BOOL _shouldCreateRenderers;
+    WebCoreKeyboardUIMode _keyboardUIMode;
+    BOOL _keyboardUIModeAccessed;
 }
 
 + (WebCoreFrameBridge *)bridgeForDOMDocument:(DOMDocument *)document;
@@ -228,6 +230,7 @@ typedef enum {
 - (void)didNotOpenURL:(NSURL *)URL pageCache:(NSDictionary *)pageCache;
 
 - (BOOL)canLoadURL:(NSURL *)URL fromReferrer:(NSString *)referrer hideReferrer:(BOOL *)hideReferrer;
+- (BOOL)canTargetLoadInFrame:(WebCoreFrameBridge *)targetFrame;
 
 - (void)saveDocumentState;
 - (void)restoreDocumentState;
@@ -244,7 +247,6 @@ typedef enum {
 - (NSURL *)URL;
 - (NSURL *)baseURL;
 - (NSString *)referrer;
-- (NSString *)domain;
 - (WebCoreFrameBridge *)opener;
 - (void)setOpener:(WebCoreFrameBridge *)bridge;
 
@@ -477,6 +479,8 @@ typedef enum {
 
 - (void)clear;
 
+- (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter;
+
 @end
 
 // The WebCoreFrameBridge protocol contains methods for use by the WebCore side of the bridge.
@@ -613,8 +617,6 @@ typedef enum {
 
 - (void)setHasBorder:(BOOL)hasBorder;
 
-- (WebCoreKeyboardUIMode)keyboardUIMode;
-
 - (NSFileWrapper *)fileWrapperForURL:(NSURL *)URL;
 
 - (void)print;
@@ -653,10 +655,10 @@ typedef enum {
 
 - (void)dashboardRegionsChanged:(NSMutableDictionary *)regions;
 
-- (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter;
-
 - (void)handledOnloadEvents;
 
+- (WebCoreKeyboardUIMode)keyboardUIMode;
+
 @end
 
 // This interface definition allows those who hold a WebCoreFrameBridge * to call all the methods
index f64cd94da52c14c26e13704be3ddcfacce0fd2db..233ede7501ab5e2597461ffe3e0db3947e2552b2 100644 (file)
@@ -275,6 +275,14 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     return bridge(m_frame->tree()->traversePreviousWithWrap(wrapFlag));
 }
 
+- (NSString *)domain
+{
+    Document *doc = m_frame->document();
+    if (doc && doc->isHTMLDocument())
+        return doc->domain();
+    return nil;
+}
+
 // FIXME: this is not getting called any more! security regression...
 - (BOOL)_shouldAllowAccessFrom:(WebCoreFrameBridge *)source
 {
@@ -315,6 +323,36 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     return NO;
 }
 
+- (BOOL)canTargetLoadInFrame:(WebCoreFrameBridge *)targetFrame
+{
+    // This method prevents this exploit:
+    // <rdar://problem/3715785> multiple frame injection vulnerability reported by Secunia, affects almost all browsers
+    
+    // don't mess with navigation within the same page/frameset
+    if ([self page] == [targetFrame page])
+        return YES;
+
+    // Normally, domain should be called on the DOMDocument since it is a DOM method, but this fix is needed for
+    // Jaguar as well where the DOM API doesn't exist.
+    NSString *thisDomain = [self domain];
+    if ([thisDomain length] == 0) {
+        // Allow if the request is made from a local file.
+        return YES;
+    }
+    
+    WebCoreFrameBridge *parentBridge = [targetFrame parent];
+    // Allow if target is an entire window.
+    if (!parentBridge)
+        return YES;
+    
+    NSString *parentDomain = [parentBridge domain];
+    // Allow if the domain of the parent of the targeted frame equals this domain.
+    if (parentDomain && isCaseSensitiveEqual(thisDomain, parentDomain))
+        return YES;
+
+    return NO;
+}
+
 - (WebCoreFrameBridge *)findFrameNamed:(NSString *)name
 {
     return bridge(m_frame->tree()->find(name));
@@ -390,9 +428,21 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     m_frame->setSettings([settings settings]);
 }
 
-- (void)dealloc
+- (void)fini
 {
+    if (_keyboardUIModeAccessed) {
+        [[NSDistributedNotificationCenter defaultCenter] 
+            removeObserver:self name:KeyboardUIModeDidChangeNotification object:nil];
+        [[NSNotificationCenter defaultCenter] 
+            removeObserver:self name:WebPreferencesChangedNotification object:nil];
+    }
+
     [self removeFromFrame];
+}
+
+- (void)dealloc
+{
+    [self fini];
     [super dealloc];
 }
 
@@ -400,7 +450,7 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
 {
     // FIXME: This work really should not be done at deallocation time.
     // We need to do it at some well-defined time instead.
-    [self removeFromFrame];        
+    [self fini];
     [super finalize];
 }
 
@@ -1300,14 +1350,6 @@ static HTMLFormElement *formElementFromDOMElement(DOMElement *element)
     return m_frame->referrer().getNSString();
 }
 
-- (NSString *)domain
-{
-    Document *doc = m_frame->document();
-    if (doc && doc->isHTMLDocument())
-        return doc->domain();
-    return nil;
-}
-
 - (WebCoreFrameBridge *)opener
 {
     Frame *openerPart = m_frame->opener();
@@ -2331,6 +2373,105 @@ static PlatformMouseEvent createMouseEventFromDraggingInfo(NSWindow* window, id
     return m_frame->dashboardRegionsDictionary();
 }
 
+// FIXME: The following 2 functions are copied from AppKit. It would be best share code.
+
+// MF:!!! For now we will use static character sets for the computation, but we should eventually probably make these keys in the language dictionaries.
+// MF:!!! The following characters (listed with their nextstep encoding values) were in the preSmartTable in the old text objet, but aren't yet in the new text object: NS_FIGSPACE (0x80), exclamdown (0xa1), sterling (0xa3), yen (0xa5), florin (0xa6) section (0xa7), currency (0xa8), quotesingle (0xa9), quotedblleft (0xaa), guillemotleft (0xab), guilsinglleft (0xac), endash (0xb1), quotesinglbase (0xb8), quotedblbase (0xb9), questiondown (0xbf), emdash (0xd0), plusminus (0xd1).
+// MF:!!! The following characters (listed with their nextstep encoding values) were in the postSmartTable in the old text objet, but aren't yet in the new text object: NS_FIGSPACE (0x80), cent (0xa2), guilsinglright (0xad), registered (0xb0), dagger (0xa2), daggerdbl (0xa3), endash (0xb1), quotedblright (0xba), guillemotright (0xbb), perthousand (0xbd), onesuperior (0xc0), twosuperior (0xc9), threesuperior (0xcc), emdash (0xd0), ordfeminine (0xe3), ordmasculine (0xeb).
+// MF:!!! Another difference in both of these sets from the old text object is we include all the whitespace in whitespaceAndNewlineCharacterSet.
+#define _preSmartString @"([\"\'#$/-`{"
+#define _postSmartString @")].,;:?\'!\"%*-/}"
+
+static NSCharacterSet *_getPreSmartSet(void)
+{
+    static NSMutableCharacterSet *_preSmartSet = nil;
+    if (!_preSmartSet) {
+        _preSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_preSmartString] retain];
+        [_preSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        // Adding CJK ranges
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
+        [_preSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)
+    }
+    return _preSmartSet;
+}
+
+static NSCharacterSet *_getPostSmartSet(void)
+{
+    static NSMutableCharacterSet *_postSmartSet = nil;
+    if (!_postSmartSet) {
+        _postSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_postSmartString] retain];
+        [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
+        [_postSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)        
+        [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
+    }
+    return _postSmartSet;
+}
+
+- (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter
+{
+    return [isPreviousCharacter ? _getPreSmartSet() : _getPostSmartSet() characterIsMember:c];
+}
+
+#define KeyboardUIModeDidChangeNotification @"com.apple.KeyboardUIModeDidChange"
+#define AppleKeyboardUIMode CFSTR("AppleKeyboardUIMode")
+#define UniversalAccessDomain CFSTR("com.apple.universalaccess")
+
+- (void)_retrieveKeyboardUIModeFromPreferences:(NSNotification *)notification
+{
+    CFPreferencesAppSynchronize(UniversalAccessDomain);
+
+    Boolean keyExistsAndHasValidFormat;
+    int mode = CFPreferencesGetAppIntegerValue(AppleKeyboardUIMode, UniversalAccessDomain, &keyExistsAndHasValidFormat);
+    
+    // The keyboard access mode is reported by two bits:
+    // Bit 0 is set if feature is on
+    // Bit 1 is set if full keyboard access works for any control, not just text boxes and lists
+    // We require both bits to be on.
+    // I do not know that we would ever get one bit on and the other off since
+    // checking the checkbox in system preferences which is marked as "Turn on full keyboard access"
+    // turns on both bits.
+    _keyboardUIMode = (mode & 0x2) ? WebCoreKeyboardAccessFull : WebCoreKeyboardAccessDefault;
+    
+    // check for tabbing to links
+    if ([[self _preferences] tabsToLinks]) {
+        _keyboardUIMode |= WebCoreKeyboardAccessTabsToLinks;
+    }
+}
+
+- (WebCoreKeyboardUIMode)keyboardUIMode
+{
+    if (!_keyboardUIModeAccessed) {
+        _keyboardUIModeAccessed = YES;
+        [self _retrieveKeyboardUIModeFromPreferences:nil];
+        
+        [[NSDistributedNotificationCenter defaultCenter] 
+            addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 
+            name:KeyboardUIModeDidChangeNotification object:nil];
+
+        [[NSNotificationCenter defaultCenter] 
+            addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 
+                   name:WebPreferencesChangedNotification object:nil];
+    }
+    return _keyboardUIMode;
+}
+
 @end
 
 @implementation WebCoreFrameBridge (WebCoreBridgeInternal)
index 0af489946f49206e890a456415231dc8a708b182..5481990f4742c96fff0b0032b2f26ad1277313b9 100644 (file)
@@ -1,3 +1,18 @@
+2006-04-24  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+        - move more code from WebFrameBridge to WebCoreFrameBridge
+
+        * WebCoreSupport/WebFrameBridge.h:
+        * WebCoreSupport/WebFrameBridge.m:
+        (-[WebFrameBridge fini]):
+        (-[WebFrameBridge expiresTimeForResponse:]):
+        (-[WebFrameBridge loadURL:referrer:reload:userGesture:target:triggeringEvent:form:formValues:]):
+        (-[WebFrameBridge postWithURL:referrer:target:data:contentType:triggeringEvent:form:formValues:]):
+        (-[WebFrameBridge valueForKey:keys:values:]):
+        (-[WebFrameBridge _preferences]):
+
 2006-04-24  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Anders.
index 0067cf39e6a79432d6ee9c4d07d75bc7970cc69e..12715118c80f6430c5e99f77ffdd0692ab31abbd 100644 (file)
@@ -39,8 +39,6 @@
 {
     WebFrame *_frame;
 
-    WebCoreKeyboardUIMode _keyboardUIMode;
-    BOOL _keyboardUIModeAccessed;
     BOOL _doingClientRedirect;
     BOOL _inNextKeyViewOutsideWebFrameViews;
     BOOL _haveUndoRedoOperations;
index b43003aee6c552775b53df11a8963ae448cf2dfd..93a92c321454f4c0de5b200fa12fd883458cd251 100644 (file)
 #import <WebCore/WebCoreFrameNamespaces.h>
 #import <WebKitSystemInterface.h>
 
-#define KeyboardUIModeDidChangeNotification @"com.apple.KeyboardUIModeDidChange"
-#define AppleKeyboardUIMode CFSTR("AppleKeyboardUIMode")
-#define UniversalAccessDomain CFSTR("com.apple.universalaccess")
-
 // For compatibility only with old SPI. 
 @interface NSObject (OldWebPlugin)
 - (void)setIsSelected:(BOOL)f;
@@ -150,14 +146,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
 - (void)fini
 {
     ASSERT(_frame == nil);
-
-    if (_keyboardUIModeAccessed) {
-        [[NSDistributedNotificationCenter defaultCenter] 
-            removeObserver:self name:KeyboardUIModeDidChangeNotification object:nil];
-        [[NSNotificationCenter defaultCenter] 
-            removeObserver:self name:WebPreferencesChangedNotification object:nil];
-    }
-
     --WebBridgeCount;
 }
 
@@ -583,22 +571,11 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
 {
     // This check can be removed when the new Foundation method
     // has been around long enough for everyone to have it.
-    if ([response respondsToSelector:@selector(_calculatedExpiration)]) {
-        NSTimeInterval expiration = [response _calculatedExpiration];
-        expiration += kCFAbsoluteTimeIntervalSince1970;
-        return expiration > MAX_TIME_T ? MAX_TIME_T : expiration;
-    }
+    ASSERT([response respondsToSelector:@selector(_calculatedExpiration)]);
 
-    // Fall back to the older calculation
-    time_t now = time(NULL);
-    NSTimeInterval lifetime = WKGetNSURLResponseFreshnessLifetime(response);
-    if (lifetime < 0)
-        lifetime = 0;
-    
-    if (now + lifetime > MAX_TIME_T)
-        return MAX_TIME_T;
-    
-    return now + lifetime;
+    NSTimeInterval expiration = [response _calculatedExpiration];
+    expiration += kCFAbsoluteTimeIntervalSince1970;
+    return expiration > MAX_TIME_T ? MAX_TIME_T : expiration;
 }
 
 - (void)reportClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date lockHistory:(BOOL)lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction
@@ -653,36 +630,6 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     [[self dataSource] _setIconURL:URL withType:type];
 }
 
-- (BOOL)canTargetLoadInFrame:(WebFrame *)targetFrame
-{
-    // This method prevents this exploit:
-    // <rdar://problem/3715785> multiple frame injection vulnerability reported by Secunia, affects almost all browsers
-    
-    // don't mess with navigation purely within the same frame
-    if ([[self webFrame] webView] == [targetFrame webView])
-        return YES;
-
-    // Normally, domain should be called on the DOMDocument since it is a DOM method, but this fix is needed for
-    // Jaguar as well where the DOM API doesn't exist.
-    NSString *thisDomain = [self domain];
-    if ([thisDomain length] == 0) {
-        // Allow if the request is made from a local file.
-        return YES;
-    }
-    
-    WebFrameBridge *parentBridge = (WebFrameBridge *)[[targetFrame _bridge] parent];
-    // Allow if target is an entire window.
-    if (!parentBridge)
-        return YES;
-    
-    NSString *parentDomain = [parentBridge domain];
-    // Allow if the domain of the parent of the targeted frame equals this domain.
-    if (parentDomain && [thisDomain _webkit_isCaseInsensitiveEqualToString:parentDomain])
-        return YES;
-
-    return NO;
-}
-
 - (void)loadURL:(NSURL *)URL referrer:(NSString *)referrer reload:(BOOL)reload userGesture:(BOOL)forUser target:(NSString *)target triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values
 {
     BOOL hideReferrer;
@@ -694,7 +641,7 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     }
 
     WebFrame *targetFrame = [_frame findFrameNamed:target];
-    if (![self canTargetLoadInFrame:targetFrame]) {
+    if (![self canTargetLoadInFrame:[targetFrame _bridge]]) {
         return;
     }
     
@@ -724,7 +671,7 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     }
 
     WebFrame *targetFrame = [_frame findFrameNamed:target];
-    if (![self canTargetLoadInFrame:targetFrame]) {
+    if (![self canTargetLoadInFrame:[targetFrame _bridge]]) {
         return;
     }
 
@@ -919,9 +866,8 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     unsigned count = [keys count];
     unsigned i;
     for (i = 0; i < count; i++) {
-        if ([[keys objectAtIndex:i] _webkit_isCaseInsensitiveEqualToString:key]) {
+        if ([[keys objectAtIndex:i] _webkit_isCaseInsensitiveEqualToString:key])
             return [values objectAtIndex:i];
-        }
     }
     return nil;
 }
@@ -1079,11 +1025,7 @@ static BOOL loggedObjectCacheSize = NO;
 
 - (WebPreferences *)_preferences
 {
-    WebPreferences *prefs = [[self webView] preferences];
-    if (prefs == nil) {
-        prefs = [WebPreferences standardPreferences];
-    }
-    return prefs;
+    return [[self webView] preferences];
 }
 
 -(int)getObjectCacheSize
@@ -1300,45 +1242,6 @@ static id <WebFormDelegate> formDelegate(WebFrameBridge *self)
     [[_frame frameView] _setHasBorder:hasBorder];
 }
 
-- (void)_retrieveKeyboardUIModeFromPreferences:(NSNotification *)notification
-{
-    CFPreferencesAppSynchronize(UniversalAccessDomain);
-
-    Boolean keyExistsAndHasValidFormat;
-    int mode = CFPreferencesGetAppIntegerValue(AppleKeyboardUIMode, UniversalAccessDomain, &keyExistsAndHasValidFormat);
-    
-    // The keyboard access mode is reported by two bits:
-    // Bit 0 is set if feature is on
-    // Bit 1 is set if full keyboard access works for any control, not just text boxes and lists
-    // We require both bits to be on.
-    // I do not know that we would ever get one bit on and the other off since
-    // checking the checkbox in system preferences which is marked as "Turn on full keyboard access"
-    // turns on both bits.
-    _keyboardUIMode = (mode & 0x2) ? WebCoreKeyboardAccessFull : WebCoreKeyboardAccessDefault;
-    
-    // check for tabbing to links
-    if ([[self _preferences] tabsToLinks]) {
-        _keyboardUIMode |= WebCoreKeyboardAccessTabsToLinks;
-    }
-}
-
-- (WebCoreKeyboardUIMode)keyboardUIMode
-{
-    if (!_keyboardUIModeAccessed) {
-        _keyboardUIModeAccessed = YES;
-        [self _retrieveKeyboardUIModeFromPreferences:nil];
-        
-        [[NSDistributedNotificationCenter defaultCenter] 
-            addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 
-            name:KeyboardUIModeDidChangeNotification object:nil];
-
-        [[NSNotificationCenter defaultCenter] 
-            addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 
-                   name:WebPreferencesChangedNotification object:nil];
-    }
-    return _keyboardUIMode;
-}
-
 - (NSFileWrapper *)fileWrapperForURL:(NSURL *)URL
 {
     return [[_frame dataSource] _fileWrapperForURL:URL];
@@ -1577,62 +1480,6 @@ static id <WebFormDelegate> formDelegate(WebFrameBridge *self)
     return nil;
 }
 
-// FIXME: The following 2 functions are copied from AppKit. It would be best share code.
-
-// MF:!!! For now we will use static character sets for the computation, but we should eventually probably make these keys in the language dictionaries.
-// MF:!!! The following characters (listed with their nextstep encoding values) were in the preSmartTable in the old text objet, but aren't yet in the new text object: NS_FIGSPACE (0x80), exclamdown (0xa1), sterling (0xa3), yen (0xa5), florin (0xa6) section (0xa7), currency (0xa8), quotesingle (0xa9), quotedblleft (0xaa), guillemotleft (0xab), guilsinglleft (0xac), endash (0xb1), quotesinglbase (0xb8), quotedblbase (0xb9), questiondown (0xbf), emdash (0xd0), plusminus (0xd1).
-// MF:!!! The following characters (listed with their nextstep encoding values) were in the postSmartTable in the old text objet, but aren't yet in the new text object: NS_FIGSPACE (0x80), cent (0xa2), guilsinglright (0xad), registered (0xb0), dagger (0xa2), daggerdbl (0xa3), endash (0xb1), quotedblright (0xba), guillemotright (0xbb), perthousand (0xbd), onesuperior (0xc0), twosuperior (0xc9), threesuperior (0xcc), emdash (0xd0), ordfeminine (0xe3), ordmasculine (0xeb).
-// MF:!!! Another difference in both of these sets from the old text object is we include all the whitespace in whitespaceAndNewlineCharacterSet.
-#define _preSmartString @"([\"\'#$/-`{"
-#define _postSmartString @")].,;:?\'!\"%*-/}"
-
-static NSCharacterSet *_getPreSmartSet(void)
-{
-    static NSMutableCharacterSet *_preSmartSet = nil;
-    if (!_preSmartSet) {
-        _preSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_preSmartString] retain];
-        [_preSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-        // Adding CJK ranges
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
-        [_preSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)
-    }
-    return _preSmartSet;
-}
-
-static NSCharacterSet *_getPostSmartSet(void)
-{
-    static NSMutableCharacterSet *_postSmartSet = nil;
-    if (!_postSmartSet) {
-        _postSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_postSmartString] retain];
-        [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x1100, 256)]; // Hangul Jamo (0x1100 - 0x11FF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x2E80, 352)]; // CJK & Kangxi Radicals (0x2E80 - 0x2FDF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x2FF0, 464)]; // Ideograph Descriptions, CJK Symbols, Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun, & Bopomofo Ext (0x2FF0 - 0x31BF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x3200, 29392)]; // Enclosed CJK, CJK Ideographs (Uni Han & Ext A), & Yi (0x3200 - 0xA4CF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0xAC00, 11183)]; // Hangul Syllables (0xAC00 - 0xD7AF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0xF900, 352)]; // CJK Compatibility Ideographs (0xF900 - 0xFA5F)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0xFE30, 32)]; // CJK Compatibility From (0xFE30 - 0xFE4F)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0xFF00, 240)]; // Half/Full Width Form (0xFF00 - 0xFFEF)
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x20000, 0xA6D7)]; // CJK Ideograph Exntension B
-        [_postSmartSet addCharactersInRange:NSMakeRange(0x2F800, 0x021E)]; // CJK Compatibility Ideographs (0x2F800 - 0x2FA1D)        
-        [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
-    }
-    return _postSmartSet;
-}
-
-- (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter
-{
-    return [isPreviousCharacter ? _getPreSmartSet() : _getPostSmartSet() characterIsMember:c];
-}
-
 - (WebCorePageBridge *)createModalDialogWithURL:(NSURL *)URL
 {
     ASSERT(_frame != nil);