summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/objc
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/objc')
-rw-r--r--WebCore/bindings/objc/DOM.mm41
-rw-r--r--WebCore/bindings/objc/DOMCSS.mm3
-rw-r--r--WebCore/bindings/objc/DOMEvents.mm3
-rw-r--r--WebCore/bindings/objc/DOMHTML.mm14
-rw-r--r--WebCore/bindings/objc/DOMInternal.h1
-rw-r--r--WebCore/bindings/objc/DOMInternal.mm16
-rw-r--r--WebCore/bindings/objc/DOMPrivate.h6
-rw-r--r--WebCore/bindings/objc/DOMSVG.h2
-rw-r--r--WebCore/bindings/objc/ObjCEventListener.h11
-rw-r--r--WebCore/bindings/objc/ObjCEventListener.mm12
-rw-r--r--WebCore/bindings/objc/WebScriptObject.mm7
11 files changed, 66 insertions, 50 deletions
diff --git a/WebCore/bindings/objc/DOM.mm b/WebCore/bindings/objc/DOM.mm
index 62bf1de..907961f 100644
--- a/WebCore/bindings/objc/DOM.mm
+++ b/WebCore/bindings/objc/DOM.mm
@@ -29,21 +29,23 @@
#import "DOMInternal.h" // import first to make the private/public trick work
#import "DOM.h"
-#import "DOMRangeInternal.h"
#import "DOMElementInternal.h"
-#import "DOMNodeInternal.h"
#import "DOMHTMLCanvasElement.h"
+#import "DOMNodeInternal.h"
+#import "DOMPrivate.h"
+#import "DOMRangeInternal.h"
#import "Frame.h"
-#import "HTMLNames.h"
#import "HTMLElement.h"
-#import "RenderImage.h"
+#import "HTMLNames.h"
#import "NodeFilter.h"
+#import "RenderImage.h"
#import "WebScriptObjectPrivate.h"
#import <wtf/HashMap.h>
#if ENABLE(SVG_DOM_OBJC_BINDINGS)
#import "DOMSVG.h"
#import "SVGElementInstance.h"
+#import "SVGNames.h"
#endif
using namespace JSC;
@@ -154,9 +156,6 @@ static void createElementClassMap()
addElementClass(SVGNames::circleTag, [DOMSVGCircleElement class]);
addElementClass(SVGNames::clipPathTag, [DOMSVGClipPathElement class]);
addElementClass(SVGNames::cursorTag, [DOMSVGCursorElement class]);
-#if ENABLE(SVG_FONTS)
- addElementClass(SVGNames::definition_srcTag, [DOMSVGDefinitionSrcElement class]);
-#endif
addElementClass(SVGNames::defsTag, [DOMSVGDefsElement class]);
addElementClass(SVGNames::descTag, [DOMSVGDescElement class]);
addElementClass(SVGNames::ellipseTag, [DOMSVGEllipseElement class]);
@@ -177,6 +176,7 @@ static void createElementClassMap()
addElementClass(SVGNames::feImageTag, [DOMSVGFEImageElement class]);
addElementClass(SVGNames::feMergeTag, [DOMSVGFEMergeElement class]);
addElementClass(SVGNames::feMergeNodeTag, [DOMSVGFEMergeNodeElement class]);
+ addElementClass(SVGNames::feMorphologyTag, [DOMSVGFEMorphologyElement class]);
addElementClass(SVGNames::feOffsetTag, [DOMSVGFEOffsetElement class]);
addElementClass(SVGNames::fePointLightTag, [DOMSVGFEPointLightElement class]);
addElementClass(SVGNames::feSpecularLightingTag, [DOMSVGFESpecularLightingElement class]);
@@ -359,20 +359,6 @@ id <DOMEventTarget> kit(WebCore::EventTarget* eventTarget)
return renderer->absoluteBoundingBoxRect();
}
-- (NSArray *)textRects
-{
- // FIXME: Could we move this function to WebCore::Node and autogenerate?
- core(self)->document()->updateLayoutIgnorePendingStylesheets();
- if (!core(self)->renderer())
- return nil;
- RefPtr<Range> range = Range::create(core(self)->document());
- WebCore::ExceptionCode ec = 0;
- range->selectNodeContents(core(self), ec);
- Vector<WebCore::IntRect> rects;
- range->textRects(rects);
- return kit(rects);
-}
-
- (NSArray *)lineBoxRects
{
return [self textRects];
@@ -392,6 +378,19 @@ id <DOMEventTarget> kit(WebCore::EventTarget* eventTarget)
return frame->nodeImage(node);
}
+- (NSArray *)textRects
+{
+ // FIXME: Could we move this function to WebCore::Node and autogenerate?
+ core(self)->document()->updateLayoutIgnorePendingStylesheets();
+ if (!core(self)->renderer())
+ return nil;
+ RefPtr<Range> range = Range::create(core(self)->document());
+ WebCore::ExceptionCode ec = 0;
+ range->selectNodeContents(core(self), ec);
+ Vector<WebCore::IntRect> rects;
+ range->textRects(rects);
+ return kit(rects);
+}
@end
@implementation DOMRange (DOMRangeExtensions)
diff --git a/WebCore/bindings/objc/DOMCSS.mm b/WebCore/bindings/objc/DOMCSS.mm
index 0149273..22a9cb2 100644
--- a/WebCore/bindings/objc/DOMCSS.mm
+++ b/WebCore/bindings/objc/DOMCSS.mm
@@ -47,6 +47,7 @@
#import "DOMStyleSheetInternal.h"
#import "DOMWebKitCSSKeyframeRule.h"
#import "DOMWebKitCSSKeyframesRule.h"
+#import "DOMWebKitCSSTransformValue.h"
#if ENABLE(SVG_DOM_OBJC_BINDINGS)
#import "DOMSVGPaint.h"
@@ -102,6 +103,8 @@ Class kitClass(WebCore::CSSValue* impl)
case WebCore::CSSValue::CSS_PRIMITIVE_VALUE:
return [DOMCSSPrimitiveValue class];
case WebCore::CSSValue::CSS_VALUE_LIST:
+ if (impl->isWebKitCSSTransformValue())
+ return [DOMWebKitCSSTransformValue class];
return [DOMCSSValueList class];
case WebCore::CSSValue::CSS_INHERIT:
case WebCore::CSSValue::CSS_INITIAL:
diff --git a/WebCore/bindings/objc/DOMEvents.mm b/WebCore/bindings/objc/DOMEvents.mm
index c901e12..26dfe7b 100644
--- a/WebCore/bindings/objc/DOMEvents.mm
+++ b/WebCore/bindings/objc/DOMEvents.mm
@@ -28,6 +28,7 @@
#import "config.h"
#import "DOMEventInternal.h"
+#import "DOMBeforeLoadEvent.h"
#import "DOMKeyboardEvent.h"
#import "DOMMessageEvent.h"
#import "DOMMouseEvent.h"
@@ -67,5 +68,7 @@ Class kitClass(WebCore::Event* impl)
return [DOMMessageEvent class];
if (impl->isProgressEvent())
return [DOMProgressEvent class];
+ if (impl->isBeforeLoadEvent())
+ return [DOMBeforeLoadEvent class];
return [DOMEvent class];
}
diff --git a/WebCore/bindings/objc/DOMHTML.mm b/WebCore/bindings/objc/DOMHTML.mm
index 1043d8e..3488b35 100644
--- a/WebCore/bindings/objc/DOMHTML.mm
+++ b/WebCore/bindings/objc/DOMHTML.mm
@@ -140,7 +140,12 @@
return NSMakeRange(start, end - start);
}
return NSMakeRange(NSNotFound, 0);
-}
+}
+
+- (BOOL)_isAutofilled
+{
+ return core(self)->isAutofilled();
+}
- (void)_setAutofilled:(BOOL)filled
{
@@ -156,8 +161,9 @@
- (void)_activateItemAtIndex:(int)index
{
+ // Use the setSelectedIndexByUser function so a change event will be fired. <rdar://problem/6760590>
if (WebCore::HTMLSelectElement* select = core(self))
- select->setSelectedIndex(index);
+ select->setSelectedIndexByUser(index, true, true);
}
@end
@@ -167,7 +173,7 @@
- (BOOL)_isEdited
{
WebCore::RenderObject *renderer = core(self)->renderer();
- return renderer && [self _isTextField] && static_cast<WebCore::RenderTextControl *>(renderer)->isUserEdited();
+ return renderer && [self _isTextField] && static_cast<WebCore::RenderTextControl *>(renderer)->lastChangeWasUserEdit();
}
@end
@@ -177,7 +183,7 @@
- (BOOL)_isEdited
{
WebCore::RenderObject* renderer = core(self)->renderer();
- return renderer && static_cast<WebCore::RenderTextControl*>(renderer)->isUserEdited();
+ return renderer && static_cast<WebCore::RenderTextControl*>(renderer)->lastChangeWasUserEdit();
}
@end
diff --git a/WebCore/bindings/objc/DOMInternal.h b/WebCore/bindings/objc/DOMInternal.h
index 48f5d2f..72f63d2 100644
--- a/WebCore/bindings/objc/DOMInternal.h
+++ b/WebCore/bindings/objc/DOMInternal.h
@@ -61,7 +61,6 @@ namespace WebCore {
// Create an NSMapTable mapping from pointers to ObjC objects held with zeroing weak references.
NSMapTable* createWrapperCache();
-NSMapTable* createWrapperCacheWithIntegerKeys(); // Same, but from integers to ObjC objects.
id createDOMWrapper(JSC::JSObject*, PassRefPtr<JSC::Bindings::RootObject> origin, PassRefPtr<JSC::Bindings::RootObject> current);
diff --git a/WebCore/bindings/objc/DOMInternal.mm b/WebCore/bindings/objc/DOMInternal.mm
index 9b26e59..590d653 100644
--- a/WebCore/bindings/objc/DOMInternal.mm
+++ b/WebCore/bindings/objc/DOMInternal.mm
@@ -49,18 +49,6 @@ NSMapTable* createWrapperCache()
#endif
}
-NSMapTable* createWrapperCacheWithIntegerKeys()
-{
-#ifdef BUILDING_ON_TIGER
- return NSCreateMapTable(NSIntMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, 0);
-#else
- // NSMapTable with zeroing weak pointers is the recommended way to build caches like this under garbage collection.
- NSPointerFunctionsOptions keyOptions = NSPointerFunctionsOpaqueMemory | NSPointerFunctionsIntegerPersonality;
- NSPointerFunctionsOptions valueOptions = NSPointerFunctionsZeroingWeakMemory | NSPointerFunctionsObjectPersonality;
- return [[NSMapTable alloc] initWithKeyOptions:keyOptions valueOptions:valueOptions capacity:0];
-#endif
-}
-
NSObject* getDOMWrapper(DOMObjectInternal* impl)
{
if (!DOMWrapperCache)
@@ -124,8 +112,8 @@ void removeDOMWrapper(DOMObjectInternal* impl)
if (!frame)
return;
- // The global object which should own this node.
- WebCore::JSDOMGlobalObject* globalObject = frame->script()->globalObject();
+ // The global object which should own this node - FIXME: does this need to be isolated-world aware?
+ WebCore::JSDOMGlobalObject* globalObject = frame->script()->globalObject(WebCore::mainThreadNormalWorld());
JSC::ExecState *exec = globalObject->globalExec();
// Get (or create) a cached JS object for the DOM node.
diff --git a/WebCore/bindings/objc/DOMPrivate.h b/WebCore/bindings/objc/DOMPrivate.h
index 4291cbc..b8e4460 100644
--- a/WebCore/bindings/objc/DOMPrivate.h
+++ b/WebCore/bindings/objc/DOMPrivate.h
@@ -67,10 +67,10 @@
@end
// All the methods in this category are used by Safari forms autofill and should not be used for any other purpose.
-// They are stopgap measures until we finish transitioning form controls to not use NSView. Each one should become
-// replaceable by public DOM API, and when that happens Safari will switch to implementations using that public API,
-// and these will be deleted.
+// Each one should eventually be replaced by public DOM API, and when that happens Safari will switch to implementations
+// using that public API, and these will be deleted.
@interface DOMHTMLInputElement (FormsAutoFillTransition)
+- (BOOL)_isAutofilled;
- (BOOL)_isTextField;
- (NSRect)_rectOnScreen; // bounding box of the text field, in screen coordinates
- (void)_replaceCharactersInRange:(NSRange)targetRange withString:(NSString *)replacementString selectingFromIndex:(int)index;
diff --git a/WebCore/bindings/objc/DOMSVG.h b/WebCore/bindings/objc/DOMSVG.h
index f1321d8..c59532f 100644
--- a/WebCore/bindings/objc/DOMSVG.h
+++ b/WebCore/bindings/objc/DOMSVG.h
@@ -50,7 +50,6 @@
#import <WebCore/DOMSVGColor.h>
#import <WebCore/DOMSVGComponentTransferFunctionElement.h>
#import <WebCore/DOMSVGCursorElement.h>
-#import <WebCore/DOMSVGDefinitionSrcElement.h>
#import <WebCore/DOMSVGDefsElement.h>
#import <WebCore/DOMSVGDescElement.h>
#import <WebCore/DOMSVGDocument.h>
@@ -76,6 +75,7 @@
#import <WebCore/DOMSVGFEImageElement.h>
#import <WebCore/DOMSVGFEMergeElement.h>
#import <WebCore/DOMSVGFEMergeNodeElement.h>
+#import <WebCore/DOMSVGFEMorphologyElement.h>
#import <WebCore/DOMSVGFEOffsetElement.h>
#import <WebCore/DOMSVGFEPointLightElement.h>
#import <WebCore/DOMSVGFESpecularLightingElement.h>
diff --git a/WebCore/bindings/objc/ObjCEventListener.h b/WebCore/bindings/objc/ObjCEventListener.h
index 6056b01..434ef45 100644
--- a/WebCore/bindings/objc/ObjCEventListener.h
+++ b/WebCore/bindings/objc/ObjCEventListener.h
@@ -39,13 +39,22 @@ namespace WebCore {
public:
static PassRefPtr<ObjCEventListener> wrap(id <DOMEventListener>);
+ static const ObjCEventListener* cast(const EventListener* listener)
+ {
+ return listener->type() == ObjCEventListenerType
+ ? static_cast<const ObjCEventListener*>(listener)
+ : 0;
+ }
+
+ virtual bool operator==(const EventListener& other);
+
private:
static ObjCEventListener* find(id <DOMEventListener>);
ObjCEventListener(id <DOMEventListener>);
virtual ~ObjCEventListener();
- virtual void handleEvent(Event*, bool isWindowEvent);
+ virtual void handleEvent(ScriptExecutionContext*, Event*);
id <DOMEventListener> m_listener;
};
diff --git a/WebCore/bindings/objc/ObjCEventListener.mm b/WebCore/bindings/objc/ObjCEventListener.mm
index 77c6ad2..d73ac30 100644
--- a/WebCore/bindings/objc/ObjCEventListener.mm
+++ b/WebCore/bindings/objc/ObjCEventListener.mm
@@ -56,7 +56,8 @@ PassRefPtr<ObjCEventListener> ObjCEventListener::wrap(id <DOMEventListener> list
}
ObjCEventListener::ObjCEventListener(id <DOMEventListener> listener)
- : m_listener([listener retain])
+ : EventListener(ObjCEventListenerType)
+ , m_listener([listener retain])
{
ListenerMap* map = listenerMap;
if (!map) {
@@ -72,9 +73,16 @@ ObjCEventListener::~ObjCEventListener()
[m_listener release];
}
-void ObjCEventListener::handleEvent(Event* event, bool)
+void ObjCEventListener::handleEvent(ScriptExecutionContext*, Event* event)
{
[m_listener handleEvent:kit(event)];
}
+bool ObjCEventListener::operator==(const EventListener& listener)
+{
+ if (const ObjCEventListener* objCEventListener = ObjCEventListener::cast(&listener))
+ return m_listener == objCEventListener->m_listener;
+ return false;
+}
+
} // namespace WebCore
diff --git a/WebCore/bindings/objc/WebScriptObject.mm b/WebCore/bindings/objc/WebScriptObject.mm
index 1086204..1622a3c 100644
--- a/WebCore/bindings/objc/WebScriptObject.mm
+++ b/WebCore/bindings/objc/WebScriptObject.mm
@@ -299,7 +299,7 @@ static void getListFromNSArray(ExecState *exec, NSArray *array, RootObject* root
return nil;
[self _rootObject]->globalObject()->globalData()->timeoutChecker.start();
- JSValue result = call(exec, function, callType, callData, [self _imp], argList);
+ JSValue result = JSC::call(exec, function, callType, callData, [self _imp], argList);
[self _rootObject]->globalObject()->globalData()->timeoutChecker.stop();
if (exec->hadException()) {
@@ -328,7 +328,7 @@ static void getListFromNSArray(ExecState *exec, NSArray *array, RootObject* root
JSLock lock(SilenceAssertionsOnly);
[self _rootObject]->globalObject()->globalData()->timeoutChecker.start();
- Completion completion = JSC::evaluate([self _rootObject]->globalObject()->globalExec(), [self _rootObject]->globalObject()->globalScopeChain(), makeSource(String(script)));
+ Completion completion = JSC::evaluate([self _rootObject]->globalObject()->globalExec(), [self _rootObject]->globalObject()->globalScopeChain(), makeSource(String(script)), JSC::JSValue());
[self _rootObject]->globalObject()->globalData()->timeoutChecker.stop();
ComplType type = completion.complType();
@@ -529,7 +529,8 @@ static void getListFromNSArray(ExecState *exec, NSArray *array, RootObject* root
}
if (value.isString()) {
- const UString& u = asString(value)->value();
+ ExecState* exec = rootObject->globalObject()->globalExec();
+ const UString& u = asString(value)->value(exec);
return [NSString stringWithCharacters:u.data() length:u.size()];
}