165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "PageClientImpl.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "DataReference.h"
3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import "DictionaryPopupInfo.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "FindIndicator.h"
322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "NativeWebKeyboardEvent.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKAPICast.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKStringCF.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WKViewInternal.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebContextMenuProxyMac.h"
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebEditCommandProxy.h"
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "WebPopupMenuProxyMac.h"
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/Cursor.h>
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/FloatRect.h>
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/FoundationExtras.h>
42ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#import <WebCore/GraphicsContext.h>
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/KeyboardEvent.h>
4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import <WebCore/NotImplemented.h>
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <wtf/PassOwnPtr.h>
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <wtf/text/CString.h>
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <wtf/text/WTFString.h>
482bde8e466a4451c7319e3a072d118917957d6554Steve Block#import <WebKitSystemInterface.h>
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block@interface NSApplication (WebNSApplicationDetails)
512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block- (NSCursor *)_cursorRectCursor;
522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block@end
532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochusing namespace WebKit;
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@interface WKEditCommandObjC : NSObject
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RefPtr<WebEditCommandProxy> m_command;
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (id)initWithWebEditCommandProxy:(PassRefPtr<WebEditCommandProxy>)command;
622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (WebEditCommandProxy*)command;
632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@end
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@interface WKEditorUndoTargetObjC : NSObject
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (void)undoEditing:(id)sender;
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (void)redoEditing:(id)sender;
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@implementation WKEditCommandObjC
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (id)initWithWebEditCommandProxy:(PassRefPtr<WebEditCommandProxy>)command
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    self = [super init];
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!self)
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return nil;
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_command = command;
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return self;
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (WebEditCommandProxy*)command
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_command.get();
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@implementation WKEditorUndoTargetObjC
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)undoEditing:(id)sender
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    ASSERT([sender isKindOfClass:[WKEditCommandObjC class]]);
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [sender command]->unapply();
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)redoEditing:(id)sender
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    ASSERT([sender isKindOfClass:[WKEditCommandObjC class]]);
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [sender command]->reapply();
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNSString* nsStringFromWebCoreString(const String& string)
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return string.impl() ? HardAutorelease(WKStringCopyCFString(0, toAPI(string.impl()))) : @"";
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassOwnPtr<PageClientImpl> PageClientImpl::create(WKView* wkView)
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return adoptPtr(new PageClientImpl(wkView));
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPageClientImpl::PageClientImpl(WKView* wkView)
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    : m_wkView(wkView)
1192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    , m_undoTarget(AdoptNS, [[WKEditorUndoTargetObjC alloc] init])
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPageClientImpl::~PageClientImpl()
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassOwnPtr<DrawingAreaProxy> PageClientImpl::createDrawingAreaProxy()
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView _createDrawingAreaProxy];
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setViewNeedsDisplay(const WebCore::IntRect& rect)
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView setNeedsDisplayInRect:rect];
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::displayView()
13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView displayIfNeeded];
14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
142ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid PageClientImpl::scrollView(const IntRect& scrollRect, const IntSize& scrollOffset)
143ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
144ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    NSRect clippedScrollRect = NSIntersectionRect(scrollRect, NSOffsetRect(scrollRect, -scrollOffset.width(), -scrollOffset.height()));
145ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
146ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    [m_wkView translateRectsNeedingDisplayInRect:clippedScrollRect by:scrollOffset];
147ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    [m_wkView scrollRect:clippedScrollRect by:scrollOffset];
148ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
149ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochIntSize PageClientImpl::viewSize()
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return IntSize([m_wkView bounds].size);
15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PageClientImpl::isViewWindowActive()
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
1572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return [[m_wkView window] isKeyWindow] || [NSApp keyWindow] == [m_wkView window];
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PageClientImpl::isViewFocused()
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView _isFocused];
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PageClientImpl::isViewVisible()
16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (![m_wkView window])
16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (![[m_wkView window] isVisible])
1712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return false;
1722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if ([m_wkView isHiddenOrHasHiddenAncestor])
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PageClientImpl::isViewInWindow()
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView window];
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::processDidCrash()
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _processDidCrash];
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::pageClosed()
1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    [m_wkView _pageClosed];
1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::didRelaunchProcess()
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _didRelaunchProcess];
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::toolTipChanged(const String& oldToolTip, const String& newToolTip)
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _toolTipChangedFrom:nsStringFromWebCoreString(oldToolTip) to:nsStringFromWebCoreString(newToolTip)];
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setCursor(const WebCore::Cursor& cursor)
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (![NSApp _cursorRectCursor])
2072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        [m_wkView _setCursor:cursor.platformCursor()];
20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setViewportArguments(const WebCore::ViewportArguments&)
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::registerEditCommand(PassRefPtr<WebEditCommandProxy> prpCommand, WebPageProxy::UndoOrRedo undoOrRedo)
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebEditCommandProxy> command = prpCommand;
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RetainPtr<WKEditCommandObjC> commandObjC(AdoptNS, [[WKEditCommandObjC alloc] initWithWebEditCommandProxy:command]);
2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    String actionName = WebEditCommandProxy::nameForEditAction(command->editAction());
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    NSUndoManager *undoManager = [m_wkView undoManager];
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [undoManager registerUndoWithTarget:m_undoTarget.get() selector:((undoOrRedo == WebPageProxy::Undo) ? @selector(undoEditing:) : @selector(redoEditing:)) object:commandObjC.get()];
2232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!actionName.isEmpty())
2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        [undoManager setActionName:(NSString *)actionName];
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::clearAllEditCommands()
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [[m_wkView undoManager] removeAllActionsWithTarget:m_undoTarget.get()];
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool PageClientImpl::canUndoRedo(WebPageProxy::UndoOrRedo undoOrRedo)
23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return (undoOrRedo == WebPageProxy::Undo) ? [[m_wkView undoManager] canUndo] : [[m_wkView undoManager] canRedo];
2352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PageClientImpl::executeUndoRedo(WebPageProxy::UndoOrRedo undoOrRedo)
2382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return (undoOrRedo == WebPageProxy::Undo) ? [[m_wkView undoManager] undo] : [[m_wkView undoManager] redo];
2402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool PageClientImpl::interpretKeyEvent(const NativeWebKeyboardEvent& event, Vector<WebCore::KeypressCommand>& commands)
2432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return [m_wkView _interpretKeyEvent:event.nativeEvent() savingCommandsTo:commands];
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2472bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid PageClientImpl::setDragImage(const IntPoint& clientPosition, PassRefPtr<ShareableBitmap> dragImage, bool isLinkDrag)
248ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
2492bde8e466a4451c7319e3a072d118917957d6554Steve Block    RetainPtr<CGImageRef> dragCGImage = dragImage->makeCGImage();
2502bde8e466a4451c7319e3a072d118917957d6554Steve Block    RetainPtr<NSImage> dragNSImage(AdoptNS, [[NSImage alloc] initWithCGImage:dragCGImage.get() size:dragImage->size()]);
2512bde8e466a4451c7319e3a072d118917957d6554Steve Block
252ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    [m_wkView _setDragImage:dragNSImage.get() at:clientPosition linkDrag:isLinkDrag];
253ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PageClientImpl::updateSecureInputState()
2562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    [m_wkView _updateSecureInputState];
2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochFloatRect PageClientImpl::convertToDeviceSpace(const FloatRect& rect)
26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView _convertToDeviceSpace:rect];
26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochFloatRect PageClientImpl::convertToUserSpace(const FloatRect& rect)
26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView _convertToUserSpace:rect];
26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
2692bde8e466a4451c7319e3a072d118917957d6554Steve Block
2702bde8e466a4451c7319e3a072d118917957d6554Steve BlockIntRect PageClientImpl::windowToScreen(const IntRect& rect)
2712bde8e466a4451c7319e3a072d118917957d6554Steve Block{
2722bde8e466a4451c7319e3a072d118917957d6554Steve Block    NSRect tempRect = rect;
2732bde8e466a4451c7319e3a072d118917957d6554Steve Block    tempRect = [m_wkView convertRect:tempRect toView:nil];
2742bde8e466a4451c7319e3a072d118917957d6554Steve Block    tempRect.origin = [[m_wkView window] convertBaseToScreen:tempRect.origin];
2752bde8e466a4451c7319e3a072d118917957d6554Steve Block    return enclosingIntRect(tempRect);
2762bde8e466a4451c7319e3a072d118917957d6554Steve Block}
27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2782fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::doneWithKeyEvent(const NativeWebKeyboardEvent& event, bool wasEventHandled)
27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    NSEvent* nativeEvent = event.nativeEvent();
2812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if ([nativeEvent type] != NSKeyDown)
2822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
2832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (wasEventHandled)
2842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        [NSCursor setHiddenUntilMouseMoves:YES];
2852bde8e466a4451c7319e3a072d118917957d6554Steve Block    else
2862bde8e466a4451c7319e3a072d118917957d6554Steve Block        [m_wkView _resendKeyDownEvent:nativeEvent];
28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<WebPopupMenuProxy> PageClientImpl::createPopupMenuProxy(WebPageProxy* page)
29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebPopupMenuProxyMac::create(m_wkView, page);
29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<WebContextMenuProxy> PageClientImpl::createContextMenuProxy(WebPageProxy* page)
29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebContextMenuProxyMac::create(m_wkView, page);
29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setFindIndicator(PassRefPtr<FindIndicator> findIndicator, bool fadeOut)
30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _setFindIndicator:findIndicator fadeOut:fadeOut];
30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3042fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::accessibilityWebProcessTokenReceived(const CoreIPC::DataReference& data)
30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    NSData* remoteToken = [NSData dataWithBytes:data.data() length:data.size()];
3072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    [m_wkView _setAccessibilityWebProcessToken:remoteToken];
30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING)
3112fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
3122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
3132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    [m_wkView _enterAcceleratedCompositingMode:layerTreeContext];
3142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
3162fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::exitAcceleratedCompositingMode()
3172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
3182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    [m_wkView _exitAcceleratedCompositingMode];
3192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // USE(ACCELERATED_COMPOSITING)
32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setComplexTextInputEnabled(uint64_t pluginComplexTextInputIdentifier, bool complexTextInputEnabled)
32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _setComplexTextInputEnabled:complexTextInputEnabled pluginComplexTextInputIdentifier:pluginComplexTextInputIdentifier];
32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
327ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochCGContextRef PageClientImpl::containingWindowGraphicsContext()
328ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
32981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    NSWindow *window = [m_wkView window];
33081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
33181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Don't try to get the graphics context if the NSWindow doesn't have a window device.
33281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if ([window windowNumber] <= 0)
33381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return 0;
33481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
33581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return static_cast<CGContextRef>([[window graphicsContext] graphicsPort]);
336ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
337ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
3382fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid PageClientImpl::didChangeScrollbarsForMainFrame() const
3392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
3402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    [m_wkView _didChangeScrollbarsForMainFrame];
3412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::didCommitLoadForMainFrame(bool useCustomRepresentation)
34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _setPageHasCustomRepresentation:useCustomRepresentation];
34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PageClientImpl::didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference& dataReference)
34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
35081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    [m_wkView _didFinishLoadingDataForCustomRepresentationWithSuggestedFilename:suggestedFilename dataReference:dataReference];
35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochdouble PageClientImpl::customRepresentationZoomFactor()
35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return [m_wkView _customRepresentationZoomFactor];
35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PageClientImpl::setCustomRepresentationZoomFactor(double zoomFactor)
35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    [m_wkView _setCustomRepresentationZoomFactor:zoomFactor];
36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PageClientImpl::findStringInCustomRepresentation(const String& string, FindOptions options, unsigned maxMatchCount)
3642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
3652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    [m_wkView _findStringInCustomRepresentation:string withFindOptions:options maxMatchCount:maxMatchCount];
3662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
3672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PageClientImpl::countStringMatchesInCustomRepresentation(const String& string, FindOptions options, unsigned maxMatchCount)
3692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
3702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    [m_wkView _countStringMatchesInCustomRepresentation:string withFindOptions:options maxMatchCount:maxMatchCount];
3712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
3722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
37381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PageClientImpl::flashBackingStoreUpdates(const Vector<IntRect>&)
37481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
37581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    notImplemented();
37681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
37781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
37881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid PageClientImpl::didPerformDictionaryLookup(const String& text, double scaleFactor, const DictionaryPopupInfo& dictionaryPopupInfo)
37981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
38081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    NSFontDescriptor *fontDescriptor = [NSFontDescriptor fontDescriptorWithFontAttributes:(NSDictionary *)dictionaryPopupInfo.fontInfo.fontAttributeDictionary.get()];
38181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    NSFont *font = [NSFont fontWithDescriptor:fontDescriptor size:((scaleFactor != 1) ? [fontDescriptor pointSize] * scaleFactor : 0)];
38281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
38381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RetainPtr<NSMutableAttributedString> attributedString(AdoptNS, [[NSMutableAttributedString alloc] initWithString:nsStringFromWebCoreString(text)]);
38481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    [attributedString.get() addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [attributedString.get() length])];
38581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
38681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    NSPoint textBaselineOrigin = dictionaryPopupInfo.origin;
38781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    textBaselineOrigin.y += [font ascender];
38881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3892bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
3902bde8e466a4451c7319e3a072d118917957d6554Steve Block    // Convert to screen coordinates.
3912bde8e466a4451c7319e3a072d118917957d6554Steve Block    textBaselineOrigin = [m_wkView convertPoint:textBaselineOrigin toView:nil];
3922bde8e466a4451c7319e3a072d118917957d6554Steve Block    textBaselineOrigin = [m_wkView.window convertRectToScreen:NSMakeRect(textBaselineOrigin.x, textBaselineOrigin.y, 0, 0)].origin;
3932bde8e466a4451c7319e3a072d118917957d6554Steve Block
3942bde8e466a4451c7319e3a072d118917957d6554Steve Block    WKShowWordDefinitionWindow(attributedString.get(), textBaselineOrigin, (NSDictionary *)dictionaryPopupInfo.options.get());
3952bde8e466a4451c7319e3a072d118917957d6554Steve Block#else
39681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // If the dictionary lookup is being triggered by a hot key, force the overlay style.
39781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    NSDictionary *options = (dictionaryPopupInfo.type == DictionaryPopupInfo::HotKey) ? [NSDictionary dictionaryWithObject:NSDefinitionPresentationTypeOverlay forKey:NSDefinitionPresentationTypeKey] : 0;
39881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    [m_wkView showDefinitionForAttributedString:attributedString.get() range:NSMakeRange(0, [attributedString.get() length]) options:options baselineOriginProvider:^(NSRange adjustedRange) { return (NSPoint)textBaselineOrigin; }];
3992bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4002bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4012bde8e466a4451c7319e3a072d118917957d6554Steve Block
4022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid PageClientImpl::dismissDictionaryLookupPanel()
4032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !defined(BUILDING_ON_SNOW_LEOPARD)
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WKHideWordDefinitionWindow();
4062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
4072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4092bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid PageClientImpl::showCorrectionPanel(CorrectionPanelInfo::PanelType type, const FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings)
4102bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4112bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
4122bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isViewVisible() || !isViewInWindow())
4132bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
4142bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_correctionPanel.show(m_wkView, type, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings);
4152bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4162bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4172bde8e466a4451c7319e3a072d118917957d6554Steve Block
4182bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid PageClientImpl::dismissCorrectionPanel(ReasonForDismissingCorrectionPanel reason)
4192bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4202bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
4212bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_correctionPanel.dismiss(reason);
4222bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4232bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4242bde8e466a4451c7319e3a072d118917957d6554Steve Block
4252bde8e466a4451c7319e3a072d118917957d6554Steve BlockString PageClientImpl::dismissCorrectionPanelSoon(WebCore::ReasonForDismissingCorrectionPanel reason)
4262bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4272bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
4282bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_correctionPanel.dismissSoon(reason);
4292bde8e466a4451c7319e3a072d118917957d6554Steve Block#else
4302bde8e466a4451c7319e3a072d118917957d6554Steve Block    return String();
4312bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4322bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4332bde8e466a4451c7319e3a072d118917957d6554Steve Block
4342bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid PageClientImpl::recordAutocorrectionResponse(EditorClient::AutocorrectionResponseType responseType, const String& replacedString, const String& replacementString)
4352bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4362bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
4372bde8e466a4451c7319e3a072d118917957d6554Steve Block    NSCorrectionResponse response = responseType == EditorClient::AutocorrectionReverted ? NSCorrectionResponseReverted : NSCorrectionResponseEdited;
4382bde8e466a4451c7319e3a072d118917957d6554Steve Block    CorrectionPanel::recordAutocorrectionResponse(m_wkView, response, replacedString, replacementString);
4392bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
4402bde8e466a4451c7319e3a072d118917957d6554Steve Block}
4412bde8e466a4451c7319e3a072d118917957d6554Steve Block
4422bde8e466a4451c7319e3a072d118917957d6554Steve Blockfloat PageClientImpl::userSpaceScaleFactor() const
4432bde8e466a4451c7319e3a072d118917957d6554Steve Block{
4442bde8e466a4451c7319e3a072d118917957d6554Steve Block    NSWindow *window = [m_wkView window];
4452bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
4462bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (window)
4472bde8e466a4451c7319e3a072d118917957d6554Steve Block        return [window backingScaleFactor];
4482bde8e466a4451c7319e3a072d118917957d6554Steve Block    return [[NSScreen mainScreen] backingScaleFactor];
4492bde8e466a4451c7319e3a072d118917957d6554Steve Block#else
4502bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (window)
4512bde8e466a4451c7319e3a072d118917957d6554Steve Block        return [window userSpaceScaleFactor];
4522bde8e466a4451c7319e3a072d118917957d6554Steve Block    return [[NSScreen mainScreen] userSpaceScaleFactor];
4532bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
45481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
45581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool PageClientImpl::executeSavedCommandBySelector(const String& selectorString)
4572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return [m_wkView _executeSavedCommandBySelector:NSSelectorFromString(selectorString)];
4592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
462