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