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

📄 webchromeclient.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
📖 第 1 页 / 共 2 页
字号:
        result = (NSString *)CallUIDelegate(m_webView, selector, prompt, defaultText, kit(frame));        return !result.isNull();    }    // Call the old version of the delegate method if it is implemented.    selector = @selector(webView:runJavaScriptTextInputPanelWithPrompt:defaultText:);    if ([delegate respondsToSelector:selector]) {        result = (NSString *)CallUIDelegate(m_webView, selector, prompt, defaultText);        return !result.isNull();    }    result = [[WebDefaultUIDelegate sharedUIDelegate] webView:m_webView runJavaScriptTextInputPanelWithPrompt:prompt defaultText:defaultText initiatedByFrame:kit(frame)];    return !result.isNull();}bool WebChromeClient::shouldInterruptJavaScript(){    return CallUIDelegate(m_webView, @selector(webViewShouldInterruptJavaScript:));}void WebChromeClient::setStatusbarText(const String& status){    // We want the temporaries allocated here to be released even before returning to the     // event loop; see <http://bugs.webkit.org/show_bug.cgi?id=9880>.    NSAutoreleasePool* localPool = [[NSAutoreleasePool alloc] init];    CallUIDelegate(m_webView, @selector(webView:setStatusText:), (NSString *)status);    [localPool drain];}bool WebChromeClient::tabsToLinks() const{    return [[m_webView preferences] tabsToLinks];}IntRect WebChromeClient::windowResizerRect() const{    NSRect rect = [[m_webView window] _growBoxRect];    if ([m_webView _usesDocumentViews])        return enclosingIntRect(rect);    return enclosingIntRect([m_webView convertRect:rect fromView:nil]);}void WebChromeClient::repaint(const IntRect& rect, bool contentChanged, bool immediate, bool repaintContentOnly){    if ([m_webView _usesDocumentViews])        return;        if (contentChanged)        [m_webView setNeedsDisplayInRect:rect];        if (immediate) {        [[m_webView window] displayIfNeeded];        [[m_webView window] flushWindowIfNeeded];    }}void WebChromeClient::scroll(const IntSize&, const IntRect&, const IntRect&){}IntPoint WebChromeClient::screenToWindow(const IntPoint& p) const{    if ([m_webView _usesDocumentViews])        return p;    NSPoint windowCoord = [[m_webView window] convertScreenToBase:p];    return IntPoint([m_webView convertPoint:windowCoord fromView:nil]);}IntRect WebChromeClient::windowToScreen(const IntRect& r) const{    if ([m_webView _usesDocumentViews])        return r;    NSRect tempRect = r;    tempRect = [m_webView convertRect:tempRect toView:nil];    tempRect.origin = [[m_webView window] convertBaseToScreen:tempRect.origin];    return enclosingIntRect(tempRect);}PlatformWidget WebChromeClient::platformWindow() const{    if ([m_webView _usesDocumentViews])        return 0;    return m_webView;}void WebChromeClient::contentsSizeChanged(Frame*, const IntSize&) const{}void WebChromeClient::scrollRectIntoView(const IntRect& r, const ScrollView* scrollView) const{    // FIXME: This scrolling behavior should be under the control of the embedding client (rather than something    // we just do ourselves).        // We have to convert back to document view coordinates in order to let the flipping conversion take place.  It just    // doesn't make sense for the scrollRectIntoView API to take document view coordinates.    IntRect scrollRect = r;    scrollRect.move(scrollView->scrollOffset());    NSRect rect = scrollRect;    for (NSView *view = [[[m_webView mainFrame] frameView] documentView]; view; view = [view superview]) {         if ([view isKindOfClass:[NSClipView class]]) {             NSClipView *clipView = (NSClipView *)view;             NSView *documentView = [clipView documentView];             [documentView scrollRectToVisible:[documentView convertRect:rect fromView:[[[m_webView mainFrame] frameView] documentView]]];         }     }}// End host window methods.void WebChromeClient::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags){    WebElementDictionary *element = [[WebElementDictionary alloc] initWithHitTestResult:result];    [m_webView _mouseDidMoveOverElement:element modifierFlags:modifierFlags];    [element release];}void WebChromeClient::setToolTip(const String& toolTip){    [(WebHTMLView *)[[[m_webView mainFrame] frameView] documentView] _setToolTip:toolTip];}void WebChromeClient::print(Frame* frame){    WebFrameView* frameView = [kit(frame) frameView];    CallUIDelegate(m_webView, @selector(webView:printFrameView:), frameView);}void WebChromeClient::exceededDatabaseQuota(Frame* frame, const String& databaseName){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:frame->document()->securityOrigin()];    // FIXME: remove this workaround once shipping Safari has the necessary delegate implemented.    if (WKAppVersionCheckLessThan(@"com.apple.Safari", -1, 3.1)) {        const unsigned long long defaultQuota = 5 * 1024 * 1024; // 5 megabytes should hopefully be enough to test storage support.        [webOrigin setQuota:defaultQuota];    } else        CallUIDelegate(m_webView, @selector(webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:), kit(frame), webOrigin, (NSString *)databaseName);    [webOrigin release];    END_BLOCK_OBJC_EXCEPTIONS;}    void WebChromeClient::populateVisitedLinks(){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    [[WebHistory optionalSharedHistory] _addVisitedLinksToPageGroup:[m_webView page]->group()];    END_BLOCK_OBJC_EXCEPTIONS;}#if ENABLE(DASHBOARD_SUPPORT)void WebChromeClient::dashboardRegionsChanged(){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    NSMutableDictionary *regions = core([m_webView mainFrame])->dashboardRegionsDictionary();    [m_webView _addScrollerDashboardRegions:regions];    CallUIDelegate(m_webView, @selector(webView:dashboardRegionsChanged:), regions);    END_BLOCK_OBJC_EXCEPTIONS;}#endifFloatRect WebChromeClient::customHighlightRect(Node* node, const AtomicString& type, const FloatRect& lineRect){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    NSView *documentView = [[kit(node->document()->frame()) frameView] documentView];    if (![documentView isKindOfClass:[WebHTMLView class]])        return NSZeroRect;    WebHTMLView *webHTMLView = (WebHTMLView *)documentView;    id<WebHTMLHighlighter> highlighter = [webHTMLView _highlighterForType:type];    if ([(NSObject *)highlighter respondsToSelector:@selector(highlightRectForLine:representedNode:)])        return [highlighter highlightRectForLine:lineRect representedNode:kit(node)];    return [highlighter highlightRectForLine:lineRect];    END_BLOCK_OBJC_EXCEPTIONS;    return NSZeroRect;}void WebChromeClient::paintCustomHighlight(Node* node, const AtomicString& type, const FloatRect& boxRect, const FloatRect& lineRect,    bool behindText, bool entireLine){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    NSView *documentView = [[kit(node->document()->frame()) frameView] documentView];    if (![documentView isKindOfClass:[WebHTMLView class]])        return;    WebHTMLView *webHTMLView = (WebHTMLView *)documentView;    id<WebHTMLHighlighter> highlighter = [webHTMLView _highlighterForType:type];    if ([(NSObject *)highlighter respondsToSelector:@selector(paintHighlightForBox:onLine:behindText:entireLine:representedNode:)])        [highlighter paintHighlightForBox:boxRect onLine:lineRect behindText:behindText entireLine:entireLine representedNode:kit(node)];    else        [highlighter paintHighlightForBox:boxRect onLine:lineRect behindText:behindText entireLine:entireLine];    END_BLOCK_OBJC_EXCEPTIONS;}void WebChromeClient::runOpenPanel(Frame*, PassRefPtr<FileChooser> chooser){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    BOOL allowMultipleFiles = chooser->allowsMultipleFiles();    WebOpenPanelResultListener *listener = [[WebOpenPanelResultListener alloc] initWithChooser:chooser];    id delegate = [m_webView UIDelegate];    if ([delegate respondsToSelector:@selector(webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:)])        CallUIDelegate(m_webView, @selector(webView:runOpenPanelForFileButtonWithResultListener:allowMultipleFiles:), listener, allowMultipleFiles);    else        CallUIDelegate(m_webView, @selector(webView:runOpenPanelForFileButtonWithResultListener:), listener);    [listener release];    END_BLOCK_OBJC_EXCEPTIONS;}KeyboardUIMode WebChromeClient::keyboardUIMode(){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    return [m_webView _keyboardUIMode];    END_BLOCK_OBJC_EXCEPTIONS;    return KeyboardAccessDefault;}NSResponder *WebChromeClient::firstResponder(){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    return [[m_webView _UIDelegateForwarder] webViewFirstResponder:m_webView];    END_BLOCK_OBJC_EXCEPTIONS;    return nil;}void WebChromeClient::makeFirstResponder(NSResponder *responder){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    [m_webView _pushPerformingProgrammaticFocus];    [[m_webView _UIDelegateForwarder] webView:m_webView makeFirstResponder:responder];    [m_webView _popPerformingProgrammaticFocus];    END_BLOCK_OBJC_EXCEPTIONS;}void WebChromeClient::willPopUpMenu(NSMenu *menu){    BEGIN_BLOCK_OBJC_EXCEPTIONS;    CallUIDelegate(m_webView, @selector(webView:willPopupMenu:), menu);    END_BLOCK_OBJC_EXCEPTIONS;}bool WebChromeClient::shouldReplaceWithGeneratedFileForUpload(const String& path, String& generatedFilename){    NSString* filename;    if (![[m_webView _UIDelegateForwarder] webView:m_webView shouldReplaceUploadFile:path usingGeneratedFilename:&filename])        return false;    generatedFilename = filename;    return true;}String WebChromeClient::generateReplacementFile(const String& path){    return [[m_webView _UIDelegateForwarder] webView:m_webView generateReplacementFile:path];}void WebChromeClient::disableSuddenTermination(){#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)    [[NSProcessInfo processInfo] disableSuddenTermination];#endif}void WebChromeClient::enableSuddenTermination(){#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD)    [[NSProcessInfo processInfo] enableSuddenTermination];#endif}#if USE(ACCELERATED_COMPOSITING)void WebChromeClient::attachRootGraphicsLayer(Frame* frame, GraphicsLayer* graphicsLayer){    WebFrameView *frameView = [kit(frame) frameView];    WebHTMLView *docView = (WebHTMLView *)[frameView documentView];    if (graphicsLayer)        [docView attachRootLayer:graphicsLayer->nativeLayer()];    else        [docView detachRootLayer];}void WebChromeClient::setNeedsOneShotDrawingSynchronization(){    [m_webView _setNeedsOneShotDrawingSynchronization:YES];}#endifbool WebChromeClient::shouldAllowGeolocationForFrame(Frame* frame){    BOOL result = NO;    BEGIN_BLOCK_OBJC_EXCEPTIONS;    WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:frame->document()->securityOrigin()];    result = CallUIDelegateReturningBoolean(NO, m_webView, @selector(webView:shouldAllowLocationServicesForFrame:securityOrigin:), kit(frame), webOrigin);    [webOrigin release];    END_BLOCK_OBJC_EXCEPTIONS;    return result;}@implementation WebOpenPanelResultListener- (id)initWithChooser:(PassRefPtr<FileChooser>)chooser{    self = [super init];    if (!self)        return nil;    _chooser = chooser.releaseRef();    return self;}#ifndef NDEBUG- (void)dealloc{    ASSERT(!_chooser);    [super dealloc];}- (void)finalize{    ASSERT(!_chooser);    [super finalize];}#endif- (void)cancel{    ASSERT(_chooser);    if (!_chooser)        return;    _chooser->deref();    _chooser = 0;}- (void)chooseFilename:(NSString *)filename{    ASSERT(_chooser);    if (!_chooser)        return;    _chooser->chooseFile(filename);    _chooser->deref();    _chooser = 0;}- (void)chooseFilenames:(NSArray *)filenames{    ASSERT(_chooser);    if (!_chooser)        return;    int count = [filenames count];     Vector<String> names(count);    for (int i = 0; i < count; i++)        names[i] = [filenames objectAtIndex:i];    _chooser->chooseFiles(names);    _chooser->deref();    _chooser = 0;}@end

⌨️ 快捷键说明

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