⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dominternal.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
字号:
/* * Copyright (C) 2004, 2006, 2007, 2008 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#import "config.h"#import "DOMInternal.h"#import "Document.h"#import "Event.h"#import "Frame.h"#import "JSNode.h"#import "Node.h"#import "PlatformString.h"#import "Range.h"#import "RangeException.h"#import "SVGException.h"#import "WebScriptObjectPrivate.h"#import "XPathEvaluator.h"#import "ScriptController.h"#import "runtime_root.h"//------------------------------------------------------------------------------------------// Wrapping WebCore implementation objectsnamespace WebCore {static NSMapTable* DOMWrapperCache;NSMapTable* createWrapperCache(){#ifdef BUILDING_ON_TIGER    return NSCreateMapTable(NSNonOwnedPointerMapKeyCallBacks, NSNonRetainedObjectMapValueCallBacks, 0);#else    // NSMapTable with zeroing weak pointers is the recommended way to build caches like this under garbage collection.    NSPointerFunctionsOptions keyOptions = NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality;    NSPointerFunctionsOptions valueOptions = NSPointerFunctionsZeroingWeakMemory | NSPointerFunctionsObjectPersonality;    return [[NSMapTable alloc] initWithKeyOptions:keyOptions valueOptions:valueOptions capacity:0];#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)        return nil;    return static_cast<NSObject*>(NSMapGet(DOMWrapperCache, impl));}void addDOMWrapper(NSObject* wrapper, DOMObjectInternal* impl){    if (!DOMWrapperCache)        DOMWrapperCache = createWrapperCache();    NSMapInsert(DOMWrapperCache, impl, wrapper);}void removeDOMWrapper(DOMObjectInternal* impl){    if (!DOMWrapperCache)        return;    NSMapRemove(DOMWrapperCache, impl);}} // namespace WebCore//------------------------------------------------------------------------------------------@implementation WebScriptObject (WebScriptObjectInternal)// Only called by DOMObject subclass.- (id)_init{    self = [super init];    if (![self isKindOfClass:[DOMObject class]]) {        [NSException raise:NSGenericException format:@"+%@: _init is an internal initializer", [self class]];        return nil;    }    _private = [[WebScriptObjectPrivate alloc] init];    _private->isCreatedByDOMWrapper = YES;        return self;}- (void)_initializeScriptDOMNodeImp{    ASSERT(_private->isCreatedByDOMWrapper);        if (![self isKindOfClass:[DOMNode class]]) {        // DOMObject can't map back to a document, and thus an interpreter,        // so for now only create wrappers for DOMNodes.        NSLog(@"%s:%d:  We don't know how to create ObjC JS wrappers from DOMObjects yet.", __FILE__, __LINE__);        return;    }        // Extract the WebCore::Node from the ObjectiveC wrapper.    DOMNode *n = (DOMNode *)self;    WebCore::Node *nodeImpl = [n _node];    // Dig up Interpreter and ExecState.    WebCore::Frame *frame = 0;    if (WebCore::Document* document = nodeImpl->document())        frame = document->frame();    if (!frame)        return;            JSC::ExecState *exec = frame->script()->globalObject()->globalExec();        // Get (or create) a cached JS object for the DOM node.    JSC::JSObject *scriptImp = asObject(WebCore::toJS(exec, nodeImpl));    JSC::Bindings::RootObject* rootObject = frame->script()->bindingRootObject();    [self _setImp:scriptImp originRootObject:rootObject rootObject:rootObject];}@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -