| /* |
| * Copyright (C) 2005 Apple Computer, 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. |
| * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
| * its contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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 <WebKit/WebDOMOperationsPrivate.h> |
| |
| #import <WebKit/DOMExtensions.h> |
| #import <WebKit/DOMHTML.h> |
| #import <JavaScriptCore/Assertions.h> |
| #import <WebKit/WebFrameBridge.h> |
| #import <WebKit/WebDataSourcePrivate.h> |
| #import <WebKit/WebFramePrivate.h> |
| #import <WebKit/WebKitNSStringExtras.h> |
| #import <WebKit/WebArchiver.h> |
| |
| #if ENABLE(SVG) |
| #import <WebKit/DOMSVG.h> |
| #endif |
| |
| @implementation DOMNode (WebDOMNodeOperations) |
| |
| - (WebFrameBridge *)_bridge |
| { |
| return (WebFrameBridge *)[WebFrameBridge bridgeForDOMDocument:[self ownerDocument]]; |
| } |
| |
| - (WebArchive *)webArchive |
| { |
| return [WebArchiver archiveNode:self]; |
| } |
| |
| - (NSString *)markupString |
| { |
| return [[self _bridge] markupStringFromNode:self nodes:nil]; |
| } |
| |
| - (NSArray *)_URLsFromSelectors:(SEL)firstSel, ... |
| { |
| NSMutableArray *URLs = [NSMutableArray array]; |
| |
| va_list args; |
| va_start(args, firstSel); |
| |
| SEL selector = firstSel; |
| do { |
| #if ENABLE(SVG) |
| NSString *string; |
| id attributeValue = [self performSelector:selector]; |
| if ([attributeValue isKindOfClass:[DOMSVGAnimatedString class]]) |
| string = [(DOMSVGAnimatedString*)attributeValue animVal]; |
| else |
| string = attributeValue; |
| #else |
| NSString *string = [self performSelector:selector]; |
| #endif |
| if ([string length] > 0) |
| [URLs addObject:[[self ownerDocument] URLWithAttributeString:string]]; |
| } while ((selector = va_arg(args, SEL)) != nil); |
| |
| va_end(args); |
| |
| return URLs; |
| } |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return nil; |
| } |
| |
| @end |
| |
| @implementation DOMDocument (WebDOMDocumentOperations) |
| |
| - (WebFrame *)webFrame |
| { |
| return [[self _bridge] webFrame]; |
| } |
| |
| - (NSURL *)URLWithAttributeString:(NSString *)string |
| { |
| return [[self _bridge] URLWithAttributeString:string]; |
| } |
| |
| @end |
| |
| @implementation DOMDocument (WebDOMDocumentOperationsPrivate) |
| |
| - (DOMRange *)_createRangeWithNode:(DOMNode *)node |
| { |
| DOMRange *range = [self createRange]; |
| [range selectNode:node]; |
| return range; |
| } |
| |
| - (DOMRange *)_documentRange |
| { |
| return [self _createRangeWithNode:[self documentElement]]; |
| } |
| |
| @end |
| |
| @implementation DOMRange (WebDOMRangeOperations) |
| |
| - (WebFrameBridge *)_bridge |
| { |
| return [[self startContainer] _bridge]; |
| } |
| |
| - (WebArchive *)webArchive |
| { |
| return [WebArchiver archiveRange:self]; |
| } |
| |
| - (NSString *)markupString |
| { |
| return [[self _bridge] markupStringFromRange:self nodes:nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLBodyElement (WebDOMHTMLBodyElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(background), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLInputElement (WebDOMHTMLInputElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(src), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLLinkElement (WebDOMHTMLLinkElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| NSString *relName = [self rel]; |
| if ([relName _webkit_isCaseInsensitiveEqualToString:@"stylesheet"] || [relName _webkit_isCaseInsensitiveEqualToString:@"icon"]) { |
| return [self _URLsFromSelectors:@selector(href), nil]; |
| } |
| return nil; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLScriptElement (WebDOMHTMLScriptElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(src), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLImageElement (WebDOMHTMLImageElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap); |
| return [self _URLsFromSelectors:@selector(src), useMapSelector, nil]; |
| } |
| |
| @end |
| |
| #if ENABLE(SVG) |
| |
| @implementation DOMSVGImageElement (WebDOMSVGImageElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(href), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMSVGScriptElement (WebDOMSVGScriptElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(href), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMSVGCursorElement (WebDOMSVGCursorElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(href), nil]; |
| } |
| |
| @end |
| |
| #if ENABLE(SVG_FILTERS) |
| @implementation DOMSVGFEImageElement (WebDOMSVGFEImageElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(href), nil]; |
| } |
| |
| @end |
| #endif |
| |
| #endif |
| |
| @implementation DOMProcessingInstruction (WebDOMProcessingInstructionOperationsPrivate) |
| |
| - (NSString *)_stylesheetURL |
| { |
| DOMStyleSheet *styleSheet = [self sheet]; |
| if (styleSheet) |
| return [styleSheet href]; |
| return nil; |
| } |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(_stylesheetURL), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLEmbedElement (WebDOMHTMLEmbedElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(src), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| SEL useMapSelector = [[self useMap] hasPrefix:@"#"] ? nil : @selector(useMap); |
| return [self _URLsFromSelectors:@selector(data), useMapSelector, nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLParamElement (WebDOMHTMLParamElementOperationsPrivate) |
| |
| - (NSArray *)_subresourceURLs |
| { |
| NSString *paramName = [self name]; |
| if ([paramName _webkit_isCaseInsensitiveEqualToString:@"data"] || |
| [paramName _webkit_isCaseInsensitiveEqualToString:@"movie"] || |
| [paramName _webkit_isCaseInsensitiveEqualToString:@"src"]) { |
| return [self _URLsFromSelectors:@selector(value), nil]; |
| } |
| return nil; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLTableElement (WebDOMHTMLTableElementOperationsPrivate) |
| |
| - (NSString *)_web_background |
| { |
| return [self getAttribute:@"background"]; |
| } |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(_web_background), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLTableCellElement (WebDOMHTMLTableCellElementOperationsPrivate) |
| |
| - (NSString *)_web_background |
| { |
| return [self getAttribute:@"background"]; |
| } |
| |
| - (NSArray *)_subresourceURLs |
| { |
| return [self _URLsFromSelectors:@selector(_web_background), nil]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLFrameElement (WebDOMHTMLFrameElementOperations) |
| |
| - (WebFrame *)contentFrame |
| { |
| return [[self contentDocument] webFrame]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLIFrameElement (WebDOMHTMLIFrameElementOperations) |
| |
| - (WebFrame *)contentFrame |
| { |
| return [[self contentDocument] webFrame]; |
| } |
| |
| @end |
| |
| @implementation DOMHTMLObjectElement (WebDOMHTMLObjectElementOperations) |
| |
| - (WebFrame *)contentFrame |
| { |
| return [[self contentDocument] webFrame]; |
| } |
| |
| @end |