165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 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#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebEditorClient.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "EditorState.h"
3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebCoreArgumentCoders.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrameLoaderClient.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPage.h"
332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "WebPageProxy.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxyMessages.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcess.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/ArchiveResource.h>
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/DocumentFragment.h>
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/EditCommand.h>
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/FocusController.h>
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Frame.h>
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTMLInputElement.h>
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTMLNames.h>
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTMLTextAreaElement.h>
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/KeyboardEvent.h>
4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/NotImplemented.h>
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Page.h>
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/UserTypingGestureIndicator.h>
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace HTMLNames;
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::pageDestroyed()
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    delete this;
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldDeleteRange(Range* range)
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldDeleteRange(m_page, range);
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldShowDeleteInterface(HTMLElement*)
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::smartInsertDeleteEnabled()
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Why isn't this Mac specific like toggleSmartInsertDeleteEnabled?
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_page->isSmartInsertDeleteEnabled();
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::isSelectTrailingWhitespaceEnabled()
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::isContinuousSpellCheckingEnabled()
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebProcess::shared().textCheckerState().isContinuousSpellCheckingEnabled;
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::toggleContinuousSpellChecking()
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::isGrammarCheckingEnabled()
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebProcess::shared().textCheckerState().isGrammarCheckingEnabled;
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::toggleGrammarChecking()
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint WebEditorClient::spellCheckerDocumentTag()
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::isEditable()
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldBeginEditing(Range* range)
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldBeginEditing(m_page, range);
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldEndEditing(Range* range)
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldEndEditing(m_page, range);
13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldInsertNode(Node* node, Range* rangeToReplace, EditorInsertAction action)
13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldInsertNode(m_page, node, rangeToReplace, action);
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldInsertText(const String& text, Range* rangeToReplace, EditorInsertAction action)
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldInsertText(m_page, text.impl(), rangeToReplace, action);
14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldChangeSelectedRange(Range* fromRange, Range* toRange, EAffinity affinity, bool stillSelecting)
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldChangeSelectedRange(m_page, fromRange, toRange, affinity, stillSelecting);
15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldApplyStyle(CSSStyleDeclaration* style, Range* range)
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool result = m_page->injectedBundleEditorClient().shouldApplyStyle(m_page, style, range);
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return result;
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::shouldMoveRangeAfterDelete(Range*, Range*)
16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::didBeginEditing()
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: What good is a notification name, if it's always the same?
17381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(String, WebViewDidBeginEditingNotification, ("WebViewDidBeginEditingNotification"));
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleEditorClient().didBeginEditing(m_page, WebViewDidBeginEditingNotification.impl());
17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::respondToChangedContents()
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(String, WebViewDidChangeNotification, ("WebViewDidChangeNotification"));
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleEditorClient().didChange(m_page, WebViewDidChangeNotification.impl());
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::respondToChangedSelection()
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(String, WebViewDidChangeSelectionNotification, ("WebViewDidChangeSelectionNotification"));
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleEditorClient().didChangeSelection(m_page, WebViewDidChangeSelectionNotification.impl());
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Frame* frame = m_page->corePage()->focusController()->focusedFrame();
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!frame)
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->send(Messages::WebPageProxy::EditorStateChanged(m_page->editorState()));
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: This should also go into the selection state.
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!frame->editor()->hasComposition() || frame->editor()->ignoreCompositionSelectionChange())
19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    unsigned start;
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    unsigned end;
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::DidChangeCompositionSelection(frame->editor()->getCompositionSelection(start, end)));
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::didEndEditing()
20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
20881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    DEFINE_STATIC_LOCAL(String, WebViewDidEndEditingNotification, ("WebViewDidEndEditingNotification"));
20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleEditorClient().didEndEditing(m_page, WebViewDidEndEditingNotification.impl());
21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::didWriteSelectionToPasteboard()
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::didSetSelectionTypesForPasteboard()
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::registerCommandForUndo(PassRefPtr<EditCommand> command)
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Add assertion that the command being reapplied is the same command that is
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // being passed to us.
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_page->isInRedo())
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebEditCommand> webCommand = WebEditCommand::create(command);
23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->addWebEditCommand(webCommand->commandID(), webCommand.get());
23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint32_t editAction = static_cast<uint32_t>(webCommand->command()->editingAction());
23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::RegisterEditCommandForUndo(webCommand->commandID(), editAction));
23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::registerCommandForRedo(PassRefPtr<EditCommand>)
23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::clearUndoRedoOperations()
24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::ClearAllEditCommands());
24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canCopyCut(bool defaultValue) const
24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return defaultValue;
24981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
25081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
25181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebEditorClient::canPaste(bool defaultValue) const
25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
25381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return defaultValue;
25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
25581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::canUndo() const
25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool result = false;
2592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::CanUndoRedo(static_cast<uint32_t>(WebPageProxy::Undo)), Messages::WebPageProxy::CanUndoRedo::Reply(result));
2602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return result;
26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::canRedo() const
26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool result = false;
2662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::CanUndoRedo(static_cast<uint32_t>(WebPageProxy::Redo)), Messages::WebPageProxy::CanUndoRedo::Reply(result));
2672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return result;
26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::undo()
27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool result = false;
2732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::ExecuteUndoRedo(static_cast<uint32_t>(WebPageProxy::Undo)), Messages::WebPageProxy::ExecuteUndoRedo::Reply(result));
27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::redo()
27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool result = false;
2792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::ExecuteUndoRedo(static_cast<uint32_t>(WebPageProxy::Redo)), Messages::WebPageProxy::ExecuteUndoRedo::Reply(result));
28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !PLATFORM(GTK) && !PLATFORM(MAC)
28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::handleKeyboardEvent(KeyboardEvent* event)
28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_page->handleEditingKeyboardEvent(event))
28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        event->setDefaultHandled();
28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::handleInputMethodKeydown(KeyboardEvent*)
29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::textFieldDidBeginEditing(Element* element)
29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(inputTag))
29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleFormClient().textFieldDidBeginEditing(m_page, static_cast<HTMLInputElement*>(element), webFrame);
30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::textFieldDidEndEditing(Element* element)
30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(inputTag))
30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleFormClient().textFieldDidEndEditing(m_page, static_cast<HTMLInputElement*>(element), webFrame);
31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::textDidChangeInTextField(Element* element)
31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(inputTag))
31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != element)
31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleFormClient().textDidChangeInTextField(m_page, static_cast<HTMLInputElement*>(element), webFrame);
32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::textDidChangeInTextArea(Element* element)
32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(textareaTag))
32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleFormClient().textDidChangeInTextArea(m_page, static_cast<HTMLTextAreaElement*>(element), webFrame);
33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic bool getActionTypeForKeyEvent(KeyboardEvent* event, WKInputFieldActionType& type)
33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String key = event->keyIdentifier();
33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (key == "Up")
33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        type = WKInputFieldActionTypeMoveUp;
33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    else if (key == "Down")
34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        type = WKInputFieldActionTypeMoveDown;
34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    else if (key == "U+001B")
34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        type = WKInputFieldActionTypeCancel;
34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    else if (key == "U+0009") {
34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (event->shiftKey())
34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            type = WKInputFieldActionTypeInsertBacktab;
34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        else
34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            type = WKInputFieldActionTypeInsertTab;
34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    } else if (key == "Enter")
34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        type = WKInputFieldActionTypeInsertNewline;
35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    else
35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::doTextFieldCommandFromEvent(Element* element, KeyboardEvent* event)
35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(inputTag))
35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WKInputFieldActionType actionType = static_cast<WKInputFieldActionType>(0);
36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!getActionTypeForKeyEvent(event, actionType))
36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, static_cast<HTMLInputElement*>(element), actionType, webFrame);
36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::textWillBeDeletedInTextField(Element* element)
37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!element->hasTagName(inputTag))
37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* webFrame =  static_cast<WebFrameLoaderClient*>(element->document()->frame()->loader()->client())->webFrame();
37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, static_cast<HTMLInputElement*>(element), WKInputFieldActionTypeInsertDelete, webFrame);
37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::ignoreWordInSpellDocument(const String& word)
37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::IgnoreWord(word));
38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::learnWord(const String& word)
38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::LearnWord(word));
38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength)
38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
3902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    int32_t resultLocation = -1;
3912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    int32_t resultLength = 0;
3922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: It would be nice if we wouldn't have to copy the text here.
3932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::CheckSpellingOfString(String(text, length)),
3942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        Messages::WebPageProxy::CheckSpellingOfString::Reply(resultLocation, resultLength));
3952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    *misspellingLocation = resultLocation;
3962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    *misspellingLength = resultLength;
39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebEditorClient::getAutoCorrectSuggestionForMisspelledWord(const String&)
40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return String();
40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebEditorClient::checkGrammarOfString(const UChar* text, int length, Vector<WebCore::GrammarDetail>& grammarDetails, int* badGrammarLocation, int* badGrammarLength)
40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    int32_t resultLocation = -1;
4082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    int32_t resultLength = 0;
4092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: It would be nice if we wouldn't have to copy the text here.
4102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::CheckGrammarOfString(String(text, length)),
4112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        Messages::WebPageProxy::CheckGrammarOfString::Reply(grammarDetails, resultLocation, resultLength));
4122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    *badGrammarLocation = resultLocation;
4132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    *badGrammarLength = resultLength;
41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebEditorClient::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
41881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_page->send(Messages::WebPageProxy::UpdateSpellingUIWithGrammarString(badGrammarPhrase, grammarDetail));
41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->send(Messages::WebPageProxy::UpdateSpellingUIWithMisspelledWord(misspelledWord));
42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::showSpellingUI(bool)
42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebEditorClient::spellingUIIsShowing()
43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool isShowing = false;
4342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::SpellingUIIsShowing(), Messages::WebPageProxy::SpellingUIIsShowing::Reply(isShowing));
4352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return isShowing;
43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses)
43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_page->sendSync(Messages::WebPageProxy::GetGuessesForWord(word, context), Messages::WebPageProxy::GetGuessesForWord::Reply(guesses));
44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::willSetInputMethodState()
44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebEditorClient::setInputMethodState(bool)
44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebEditorClient::requestCheckingOfString(WebCore::SpellChecker*, int, WebCore::TextCheckingTypeMask, const WTF::String&)
45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
459