WebKit2: Implement TextChecker on Windows
authorjberlin@webkit.org <jberlin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 18:00:07 +0000 (18:00 +0000)
committerjberlin@webkit.org <jberlin@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Apr 2011 18:00:07 +0000 (18:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=57862

Reviewed by Anders Carlsson.

Part 6: Update the Spelling UI with the spelling and grammar mistakes.

* UIProcess/API/C/win/WKAPICastWin.h:
(WebKit::toAPI):
Make it possible to go from a WebCore::GrammarDetail to a WebGrammarDetail.

* UIProcess/API/C/win/WKGrammarDetail.cpp:
(WKGrammarDetailCreate):
(WKGrammarDetailGetLocation):
(WKGrammarDetailGetLength):
(WKGrammarDetailCopyGuesses):
(WKGrammarDetailCopyUserDescription):
* UIProcess/API/C/win/WKGrammarDetail.h:

* UIProcess/API/C/win/WKTextChecker.cpp:
(WKTextCheckerCheckSpelling):
Tell the WebTextChecker.
* UIProcess/API/C/win/WKTextChecker.h:

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::contextMenuItemSelected):
If the show/hide spelling UI is selected and the spelling UI is not showing, make sure to
advance to the next misspelling (in this case, the first).
This behavior matches that in WebCore and WKView.mm.
(WebKit::WebPageProxy::advanceToNextMisspelling):
Make this function const since it does not modify the WebPageProxy and making it const
allows WebTextChecker::checkSpelling to take a const WebPageProxy.
(WebKit::WebPageProxy::spellDocumentTag):
(WebKit::WebPageProxy::updateSpellingUIWithMisspelledWord):
(WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
* UIProcess/WebPageProxy.h:

* UIProcess/TextChecker.h:
* UIProcess/win/TextCheckerWin.cpp:
(WebKit::TextChecker::uniqueSpellDocumentTag):
Tell the TextCheckerClient which WebPageProxy this tag is for.
(WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
Tell the TextCheckerClient.
(WebKit::TextChecker::updateSpellingUIWithGrammarString):
Ditto.
* UIProcess/mac/TextCheckerMac.mm:
(WebKit::TextChecker::uniqueSpellDocumentTag):
Add the new argument that is unused by this port.
(WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
Ditto.
(WebKit::TextChecker::updateSpellingUIWithGrammarString):
Ditto.
* UIProcess/gtk/TextCheckerGtk.cpp:
(WebKit::TextChecker::uniqueSpellDocumentTag):
Ditto.
(WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
Ditto.
(WebKit::TextChecker::updateSpellingUIWithGrammarString):
Ditto.
* UIProcess/qt/TextCheckerQt.cpp:
(WebKit::TextChecker::uniqueSpellDocumentTag):
Ditto.
(WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
Ditto.
(WebKit::TextChecker::updateSpellingUIWithGrammarString):
Ditto.

* UIProcess/win/WebGrammarDetail.cpp:
(WebKit::WebGrammarDetail::create):
(WebKit::WebGrammarDetail::WebGrammarDetail):
(WebKit::WebGrammarDetail::guesses):
* UIProcess/win/WebGrammarDetail.h:
(WebKit::WebGrammarDetail::location):
(WebKit::WebGrammarDetail::length):
(WebKit::WebGrammarDetail::userDescription):

* UIProcess/win/WebTextChecker.cpp:
(WebKit::WebTextChecker::checkSpelling):
Tell the page to advance to the next misspelling. This matches the WK1 WebView.cpp logic.

* UIProcess/win/WebTextChecker.h:
* UIProcess/win/WebTextCheckerClient.cpp:
(WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
(WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
(WebKit::WebTextCheckerClient::updateSpellingUIWithMisspelledWord):
(WebKit::WebTextCheckerClient::updateSpellingUIWithGrammarString):
* UIProcess/win/WebTextCheckerClient.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@83452 268f45cc-cd09-0410-ab3c-d52691b4dbfc

19 files changed:
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/API/C/win/WKAPICastWin.h
Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.cpp
Source/WebKit2/UIProcess/API/C/win/WKGrammarDetail.h
Source/WebKit2/UIProcess/API/C/win/WKTextChecker.cpp
Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h
Source/WebKit2/UIProcess/TextChecker.h
Source/WebKit2/UIProcess/WebPageProxy.cpp
Source/WebKit2/UIProcess/WebPageProxy.h
Source/WebKit2/UIProcess/gtk/TextCheckerGtk.cpp
Source/WebKit2/UIProcess/mac/TextCheckerMac.mm
Source/WebKit2/UIProcess/qt/TextCheckerQt.cpp
Source/WebKit2/UIProcess/win/TextCheckerWin.cpp
Source/WebKit2/UIProcess/win/WebGrammarDetail.cpp
Source/WebKit2/UIProcess/win/WebGrammarDetail.h
Source/WebKit2/UIProcess/win/WebTextChecker.cpp
Source/WebKit2/UIProcess/win/WebTextChecker.h
Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp
Source/WebKit2/UIProcess/win/WebTextCheckerClient.h

index b1b29ff..89214cd 100644 (file)
@@ -1,3 +1,93 @@
+2011-04-11  Jessie Berlin  <jberlin@apple.com>
+
+        Reviewed by Anders Carlsson.
+
+        WebKit2: Implement TextChecker on Windows
+        https://bugs.webkit.org/show_bug.cgi?id=57862
+
+        Part 6: Update the Spelling UI with the spelling and grammar mistakes.
+
+        * UIProcess/API/C/win/WKAPICastWin.h:
+        (WebKit::toAPI):
+        Make it possible to go from a WebCore::GrammarDetail to a WebGrammarDetail.
+        * UIProcess/API/C/win/WKGrammarDetail.cpp:
+        (WKGrammarDetailCreate):
+        (WKGrammarDetailGetLocation):
+        (WKGrammarDetailGetLength):
+        (WKGrammarDetailCopyGuesses):
+        (WKGrammarDetailCopyUserDescription):
+        * UIProcess/API/C/win/WKGrammarDetail.h:
+
+        * UIProcess/API/C/win/WKTextChecker.cpp:
+        (WKTextCheckerCheckSpelling):
+        Tell the WebTextChecker.
+        * UIProcess/API/C/win/WKTextChecker.h:
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::contextMenuItemSelected):
+        If the show/hide spelling UI is selected and the spelling UI is not showing, make sure to
+        advance to the next misspelling (in this case, the first).
+        This behavior matches that in WebCore and WKView.mm.
+        (WebKit::WebPageProxy::advanceToNextMisspelling):
+        Make this function const since it does not modify the WebPageProxy and making it const
+        allows WebTextChecker::checkSpelling to take a const WebPageProxy.
+        (WebKit::WebPageProxy::spellDocumentTag):
+        (WebKit::WebPageProxy::updateSpellingUIWithMisspelledWord):
+        (WebKit::WebPageProxy::updateSpellingUIWithGrammarString):
+        * UIProcess/WebPageProxy.h:
+
+        * UIProcess/TextChecker.h:
+        * UIProcess/win/TextCheckerWin.cpp:
+        (WebKit::TextChecker::uniqueSpellDocumentTag):
+        Tell the TextCheckerClient which WebPageProxy this tag is for.
+        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
+        Tell the TextCheckerClient.
+        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
+        Ditto.
+        * UIProcess/mac/TextCheckerMac.mm:
+        (WebKit::TextChecker::uniqueSpellDocumentTag):
+        Add the new argument that is unused by this port.
+        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
+        Ditto.
+        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
+        Ditto.
+        * UIProcess/gtk/TextCheckerGtk.cpp:
+        (WebKit::TextChecker::uniqueSpellDocumentTag):
+        Ditto.
+        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
+        Ditto.
+        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
+        Ditto.
+        * UIProcess/qt/TextCheckerQt.cpp:
+        (WebKit::TextChecker::uniqueSpellDocumentTag):
+        Ditto.
+        (WebKit::TextChecker::updateSpellingUIWithMisspelledWord):
+        Ditto.
+        (WebKit::TextChecker::updateSpellingUIWithGrammarString):
+        Ditto.
+
+        * UIProcess/win/WebGrammarDetail.cpp:
+        (WebKit::WebGrammarDetail::create):
+        (WebKit::WebGrammarDetail::WebGrammarDetail):
+        (WebKit::WebGrammarDetail::guesses):
+        * UIProcess/win/WebGrammarDetail.h:
+        (WebKit::WebGrammarDetail::location):
+        (WebKit::WebGrammarDetail::length):
+        (WebKit::WebGrammarDetail::userDescription):
+
+        * UIProcess/win/WebTextChecker.cpp:
+        (WebKit::WebTextChecker::checkSpelling):
+        Tell the page to advance to the next misspelling. This matches the WK1 WebView.cpp logic.
+
+        * UIProcess/win/WebTextChecker.h:
+        * UIProcess/win/WebTextCheckerClient.cpp:
+        (WebKit::WebTextCheckerClient::uniqueSpellDocumentTag):
+        (WebKit::WebTextCheckerClient::toggleSpellingUIIsShowing):
+        (WebKit::WebTextCheckerClient::updateSpellingUIWithMisspelledWord):
+        (WebKit::WebTextCheckerClient::updateSpellingUIWithGrammarString):
+        * UIProcess/win/WebTextCheckerClient.h:
+
 2011-04-10  Maciej Stachowiak  <mjs@apple.com>
 
         Not reviewed.
index 5a09172..24891f5 100644 (file)
 #error "Please #include \"WKAPICast.h\" instead of this file directly."
 #endif
 
+#include "WebGrammarDetail.h"
+#include <WebCore/TextCheckerClient.h>
+
 namespace WebKit {
 
 class WebView;
 class WebEditCommandProxy;
 class WebTextChecker;
-class WebGrammarDetail;
 
 WK_ADD_API_MAPPING(WKViewRef, WebView)
 WK_ADD_API_MAPPING(WKEditCommandRef, WebEditCommandProxy)
 WK_ADD_API_MAPPING(WKTextCheckerRef, WebTextChecker)
 WK_ADD_API_MAPPING(WKGrammarDetailRef, WebGrammarDetail)
 
+inline ProxyingRefPtr<WebGrammarDetail> toAPI(const WebCore::GrammarDetail& grammarDetail)
+{
+    return ProxyingRefPtr<WebGrammarDetail>(WebGrammarDetail::create(grammarDetail));
 }
 
+} // namespace WebKit
+
 #endif // WKAPICastWin_h
index d45de6d..5ab0fc4 100644 (file)
@@ -27,6 +27,7 @@
 #include "WKGrammarDetail.h"
 
 #include "APIObject.h"
+#include "ImmutableArray.h"
 #include "WKAPICast.h"
 #include "WebGrammarDetail.h"
 
@@ -42,3 +43,23 @@ WKGrammarDetailRef WKGrammarDetailCreate(int location, int length, WKArrayRef gu
     RefPtr<WebGrammarDetail> detail = WebGrammarDetail::create(location, length, toImpl(guesses), toWTFString(userDescription));
     return toAPI(detail.release().releaseRef());
 }
+
+int WKGrammarDetailGetLocation(WKGrammarDetailRef grammarDetailRef)
+{
+    return toImpl(grammarDetailRef)->location();
+}
+
+int WKGrammarDetailGetLength(WKGrammarDetailRef grammarDetailRef)
+{
+    return toImpl(grammarDetailRef)->length();
+}
+
+WKArrayRef WKGrammarDetailCopyGuesses(WKGrammarDetailRef grammarDetailRef)
+{
+    return toAPI(toImpl(grammarDetailRef)->guesses().leakRef());
+}
+
+WKStringRef WKGrammarDetailCopyUserDescription(WKGrammarDetailRef grammarDetailRef)
+{
+    return toCopiedAPI(toImpl(grammarDetailRef)->userDescription());
+}
index 1a03e2b..c187ce6 100644 (file)
@@ -35,6 +35,11 @@ extern "C" {
 WK_EXPORT WKTypeID WKGrammarDetailGetTypeID();
 WK_EXPORT WKGrammarDetailRef WKGrammarDetailCreate(int location, int length, WKArrayRef guesses, WKStringRef userDescription);
 
+WK_EXPORT int WKGrammarDetailGetLocation(WKGrammarDetailRef grammarDetailRef);
+WK_EXPORT int WKGrammarDetailGetLength(WKGrammarDetailRef grammarDetailRef);
+WK_EXPORT WKArrayRef WKGrammarDetailCopyGuesses(WKGrammarDetailRef grammarDetailRef);
+WK_EXPORT WKStringRef WKGrammarDetailCopyUserDescription(WKGrammarDetailRef grammarDetailRef);
+
 #ifdef __cplusplus
 }
 #endif
index a0c2ffe..497e931 100644 (file)
@@ -27,6 +27,7 @@
 #include "WKTextChecker.h"
 
 #include "WKAPICast.h"
+#include "WebPageProxy.h"
 #include "WebTextChecker.h"
 
 using namespace WebKit;
@@ -47,3 +48,8 @@ void WKTextCheckerGrammarCheckingEnabledStateChanged(bool enabled)
 {
     WebTextChecker::shared()->grammarCheckingEnabledStateChanged(enabled);
 }
+
+void WKTextCheckerCheckSpelling(WKPageRef page, bool startBeforeSelection)
+{
+    WebTextChecker::shared()->checkSpelling(toImpl(page), startBeforeSelection);
+}
index 0fd5443..e6ca89a 100644 (file)
@@ -38,12 +38,14 @@ typedef bool (*WKTextCheckerContinousSpellCheckingEnabled)(const void *clientInf
 typedef void (*WKTextCheckerSetContinousSpellCheckingEnabled)(bool enabled, const void *clientInfo);
 typedef bool (*WKTextCheckerGrammarCheckingEnabled)(const void *clientInfo);
 typedef void (*WKTextCheckerSetGrammarCheckingEnabled)(bool enabled, const void *clientInfo);
-typedef uint64_t (*WKTextCheckerUniqueSpellDocumentTag)(const void *clientInfo);
+typedef uint64_t (*WKTextCheckerUniqueSpellDocumentTag)(WKPageRef page, const void *clientInfo);
 typedef void (*WKTextCheckerCloseSpellDocumentWithTag)(uint64_t tag, const void *clientInfo);
 typedef void (*WKTextCheckerCheckSpellingOfString)(uint64_t tag, WKStringRef text, int32_t* misspellingLocation, int32_t* misspellingLength, const void *clientInfo);
 typedef void (*WKTextCheckerCheckGrammarOfString)(uint64_t tag, WKStringRef text, WKArrayRef* grammarDetails, int32_t* badGrammarLocation, int32_t* badGrammarLength, const void *clientInfo);
 typedef bool (*WKTextCheckerSpellingUIIsShowing)(const void *clientInfo);
 typedef void (*WKTextCheckerToggleSpellingUIIsShowing)(const void *clientInfo);
+typedef void (*WKTextCheckerUpdateSpellingUIWithMisspelledWord)(uint64_t tag, WKStringRef misspelledWord, const void *clientInfo);
+typedef void (*WKTextCheckerUpdateSpellingUIWithGrammarString)(uint64_t tag, WKStringRef badGrammarPhrase, WKGrammarDetailRef grammarDetail, const void *clientInfo);
 
 struct WKTextCheckerClient {
     int                                                                     version;
@@ -59,6 +61,8 @@ struct WKTextCheckerClient {
     WKTextCheckerCheckGrammarOfString                                       checkGrammarOfString;
     WKTextCheckerSpellingUIIsShowing                                        spellingUIIsShowing;
     WKTextCheckerToggleSpellingUIIsShowing                                  toggleSpellingUIIsShowing;
+    WKTextCheckerUpdateSpellingUIWithMisspelledWord                         updateSpellingUIWithMisspelledWord;
+    WKTextCheckerUpdateSpellingUIWithGrammarString                          updateSpellingUIWithGrammarString;
 };
 typedef struct WKTextCheckerClient WKTextCheckerClient;
 
@@ -67,6 +71,8 @@ WK_EXPORT void WKTextCheckerSetClient(const WKTextCheckerClient* client);
 WK_EXPORT void WKTextCheckerContinuousSpellCheckingEnabledStateChanged(bool);
 WK_EXPORT void WKTextCheckerGrammarCheckingEnabledStateChanged(bool);
 
+WK_EXPORT void WKTextCheckerCheckSpelling(WKPageRef page, bool startBeforeSelection);
+
 #ifdef __cplusplus
 }
 #endif
index 12af936..99dbacc 100644 (file)
@@ -31,6 +31,7 @@
 
 namespace WebKit {
 
+class WebPageProxy;
 struct TextCheckerState;
 
 class TextChecker {
@@ -58,7 +59,7 @@ public:
     static void grammarCheckingEnabledStateChanged(bool);
 #endif
 
-    static int64_t uniqueSpellDocumentTag();
+    static int64_t uniqueSpellDocumentTag(WebPageProxy*);
     static void closeSpellDocumentWithTag(int64_t);
 #if USE(UNIFIED_TEXT_CHECKING)
     static Vector<WebCore::TextCheckingResult> checkTextOfParagraph(int64_t spellDocumentTag, const UChar* text, int length, uint64_t checkingTypes);
@@ -67,8 +68,8 @@ public:
     static void checkGrammarOfString(int64_t spellDocumentTag, const UChar* text, uint32_t length, Vector<WebCore::GrammarDetail>&, int32_t& badGrammarLocation, int32_t& badGrammarLength);
     static bool spellingUIIsShowing();
     static void toggleSpellingUIIsShowing();
-    static void updateSpellingUIWithMisspelledWord(const String& misspelledWord);
-    static void updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const WebCore::GrammarDetail&);
+    static void updateSpellingUIWithMisspelledWord(int64_t spellDocumentTag, const String& misspelledWord);
+    static void updateSpellingUIWithGrammarString(int64_t spellDocumentTag, const String& badGrammarPhrase, const WebCore::GrammarDetail&);
     static void getGuessesForWord(int64_t spellDocumentTag, const String& word, const String& context, Vector<String>& guesses);
     static void learnWord(const String& word);
     static void ignoreWord(int64_t spellDocumentTag, const String& word);
index 05104d0..376070c 100644 (file)
@@ -2307,6 +2307,8 @@ void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
         return;
     }
     if (item.action() == ContextMenuItemTagShowSpellingPanel) {
+        if (!TextChecker::spellingUIIsShowing())
+            advanceToNextMisspelling(true);
         TextChecker::toggleSpellingUIIsShowing();
         return;
     }
@@ -2348,7 +2350,7 @@ void WebPageProxy::didCancelForOpenPanel()
     m_openPanelResultListener = 0;
 }
 
-void WebPageProxy::advanceToNextMisspelling(bool startBeforeSelection)
+void WebPageProxy::advanceToNextMisspelling(bool startBeforeSelection) const
 {
     process()->send(Messages::WebPage::AdvanceToNextMisspelling(startBeforeSelection), m_pageID);
 }
@@ -2398,7 +2400,7 @@ bool WebPageProxy::isValidEditCommand(WebEditCommandProxy* command)
 int64_t WebPageProxy::spellDocumentTag()
 {
     if (!m_hasSpellDocumentTag) {
-        m_spellDocumentTag = TextChecker::uniqueSpellDocumentTag();
+        m_spellDocumentTag = TextChecker::uniqueSpellDocumentTag(this);
         m_hasSpellDocumentTag = true;
     }
 
@@ -2431,12 +2433,12 @@ void WebPageProxy::spellingUIIsShowing(bool& isShowing)
 
 void WebPageProxy::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
 {
-    TextChecker::updateSpellingUIWithMisspelledWord(misspelledWord);
+    TextChecker::updateSpellingUIWithMisspelledWord(spellDocumentTag(), misspelledWord);
 }
 
 void WebPageProxy::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
 {
-    TextChecker::updateSpellingUIWithGrammarString(badGrammarPhrase, grammarDetail);
+    TextChecker::updateSpellingUIWithGrammarString(spellDocumentTag(), badGrammarPhrase, grammarDetail);
 }
 
 void WebPageProxy::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses)
index 1e1d8ee..ec3e96f 100644 (file)
@@ -446,7 +446,7 @@ public:
     void findZoomableAreaForPoint(const WebCore::IntPoint&);
 #endif
 
-    void advanceToNextMisspelling(bool startBeforeSelection);
+    void advanceToNextMisspelling(bool startBeforeSelection) const;
     void changeSpellingToWord(const String& word);
     void unmarkAllMisspellings();
     void unmarkAllBadGrammar();
index 8f63e83..11077b7 100644 (file)
@@ -58,7 +58,7 @@ void TextChecker::setGrammarCheckingEnabled(bool isGrammarCheckingEnabled)
     notImplemented();
 }
 
-int64_t TextChecker::uniqueSpellDocumentTag()
+int64_t TextChecker::uniqueSpellDocumentTag(WebPageProxy*)
 {
     notImplemented();
     return 0;
@@ -90,12 +90,12 @@ void TextChecker::toggleSpellingUIIsShowing()
     notImplemented();
 }
 
-void TextChecker::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
+void TextChecker::updateSpellingUIWithMisspelledWord(int64_t, const String&)
 {
     notImplemented();
 }
 
-void TextChecker::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
+void TextChecker::updateSpellingUIWithGrammarString(int64_t, const String&, const GrammarDetail&)
 {
     notImplemented();
 }
index c48f8d3..a9c3455 100644 (file)
@@ -211,7 +211,7 @@ void TextChecker::toggleSubstitutionsPanelIsShowing()
     [substitutionsPanel orderFront:nil];
 }
 
-int64_t TextChecker::uniqueSpellDocumentTag()
+int64_t TextChecker::uniqueSpellDocumentTag(WebPageProxy*)
 {
     return [NSSpellChecker uniqueSpellDocumentTag];
 }
@@ -338,12 +338,12 @@ void TextChecker::toggleSpellingUIIsShowing()
         [spellingPanel orderFront:nil];
 }
 
-void TextChecker::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
+void TextChecker::updateSpellingUIWithMisspelledWord(int64_t, const String& misspelledWord)
 {
     [[NSSpellChecker sharedSpellChecker] updateSpellingPanelWithMisspelledWord:misspelledWord];
 }
 
-void TextChecker::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
+void TextChecker::updateSpellingUIWithGrammarString(int64_t, const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
 {
     RetainPtr<NSMutableArray> corrections(AdoptNS, [[NSMutableArray alloc] init]);
     for (size_t i = 0; i < grammarDetail.guesses.size(); ++i) {
index 6bb7eaf..322448b 100644 (file)
@@ -59,7 +59,7 @@ void TextChecker::setGrammarCheckingEnabled(bool isGrammarCheckingEnabled)
     notImplemented();
 }
 
-int64_t TextChecker::uniqueSpellDocumentTag()
+int64_t TextChecker::uniqueSpellDocumentTag(WebPageProxy*)
 {
     notImplemented();
     return 0;
@@ -91,12 +91,12 @@ void TextChecker::toggleSpellingUIIsShowing()
     notImplemented();
 }
 
-void TextChecker::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
+void TextChecker::updateSpellingUIWithMisspelledWord(int64_t, const String&)
 {
     notImplemented();
 }
 
-void TextChecker::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
+void TextChecker::updateSpellingUIWithGrammarString(int64_t, const String&, const GrammarDetail&)
 {
     notImplemented();
 }
index cfe1a96..afdf199 100644 (file)
@@ -82,9 +82,9 @@ void TextChecker::grammarCheckingEnabledStateChanged(bool enabled)
     textCheckerState.isGrammarCheckingEnabled = enabled;
 }
 
-int64_t TextChecker::uniqueSpellDocumentTag()
+int64_t TextChecker::uniqueSpellDocumentTag(WebPageProxy* page)
 {
-    return WebTextChecker::shared()->client().uniqueSpellDocumentTag();
+    return WebTextChecker::shared()->client().uniqueSpellDocumentTag(page);
 }
 
 void TextChecker::closeSpellDocumentWithTag(int64_t tag)
@@ -112,14 +112,14 @@ void TextChecker::toggleSpellingUIIsShowing()
     WebTextChecker::shared()->client().toggleSpellingUIIsShowing();
 }
 
-void TextChecker::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
+void TextChecker::updateSpellingUIWithMisspelledWord(int64_t spellDocumentTag, const String& misspelledWord)
 {
-    notImplemented();
+    WebTextChecker::shared()->client().updateSpellingUIWithMisspelledWord(spellDocumentTag, misspelledWord);
 }
 
-void TextChecker::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
+void TextChecker::updateSpellingUIWithGrammarString(int64_t spellDocumentTag, const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
 {
-    notImplemented();
+    WebTextChecker::shared()->client().updateSpellingUIWithGrammarString(spellDocumentTag, badGrammarPhrase, grammarDetail);
 }
 
 void TextChecker::getGuessesForWord(int64_t spellDocumentTag, const String& word, const String& context, Vector<String>& guesses)
index 2280438..8df528c 100644 (file)
@@ -37,6 +37,11 @@ PassRefPtr<WebGrammarDetail> WebGrammarDetail::create(int location, int length,
     return adoptRef(new WebGrammarDetail(location, length, guesses, userDescription));
 }
 
+PassRefPtr<WebGrammarDetail> WebGrammarDetail::create(const WebCore::GrammarDetail& grammarDetail)
+{
+    return adoptRef(new WebGrammarDetail(grammarDetail));
+}
+
 WebGrammarDetail::WebGrammarDetail(int location, int length, ImmutableArray* guesses, const String& userDescription)
 {
     m_grammarDetail.location = location;
@@ -50,4 +55,18 @@ WebGrammarDetail::WebGrammarDetail(int location, int length, ImmutableArray* gue
     m_grammarDetail.userDescription = userDescription;
 }
 
+PassRefPtr<ImmutableArray> WebGrammarDetail::guesses() const
+{
+    size_t numGuesses = m_grammarDetail.guesses.size();
+    Vector<RefPtr<APIObject> > wkGuesses(numGuesses);
+    for (unsigned i = 0; i < numGuesses; ++i)
+        wkGuesses[i] = WebString::create(m_grammarDetail.guesses[i]);
+    return ImmutableArray::adopt(wkGuesses);
+}
+
+WebGrammarDetail::WebGrammarDetail(const WebCore::GrammarDetail& grammarDetail)
+    : m_grammarDetail(grammarDetail)
+{
+}
+
 } // namespace WebKit
index 6fc2256..ff79b5c 100644 (file)
@@ -39,11 +39,18 @@ class WebGrammarDetail : public APIObject {
 public:
     static const Type APIType = TypeGrammarDetail;
     static PassRefPtr<WebGrammarDetail> create(int location, int length, ImmutableArray* guesses, const String& userDescription);
+    static PassRefPtr<WebGrammarDetail> create(const WebCore::GrammarDetail&);
+
+    int location() const { return m_grammarDetail.location; }
+    int length() const { return m_grammarDetail.length; }
+    PassRefPtr<ImmutableArray> guesses() const;
+    const String& userDescription() const { return m_grammarDetail.userDescription; }
 
     const WebCore::GrammarDetail& grammarDetail() { return m_grammarDetail; }
 
 private:
     WebGrammarDetail(int location, int length, ImmutableArray* guesses, const String& userDescription);
+    WebGrammarDetail(const WebCore::GrammarDetail&);
 
     virtual Type type() const { return APIType; }
 
index d06a78f..52d3b1a 100644 (file)
@@ -70,4 +70,9 @@ void WebTextChecker::grammarCheckingEnabledStateChanged(bool enabled)
     updateStateForAllWebProcesses();
 }
 
+void WebTextChecker::checkSpelling(const WebPageProxy* page, bool startBeforeSelection)
+{
+    page->advanceToNextMisspelling(startBeforeSelection);
+}
+
 } // namespace WebKit
index b0e396f..090158c 100644 (file)
@@ -33,6 +33,8 @@
 
 namespace WebKit {
 
+class WebPageProxy;
+
 class WebTextChecker : public APIObject {
 public:
     static const Type APIType = TypeTextChecker;
@@ -45,6 +47,8 @@ public:
     void continuousSpellCheckingEnabledStateChanged(bool);
     void grammarCheckingEnabledStateChanged(bool);
 
+    void checkSpelling(const WebPageProxy*, bool startBeforeSelection);
+
 private:
     WebTextChecker();
 
index 818cdc7..0608ccf 100644 (file)
@@ -30,6 +30,7 @@
 #include "WKAPICast.h"
 #include "WKSharedAPICast.h"
 #include "WebGrammarDetail.h"
+#include "WebPageProxy.h"
 #include <wtf/text/WTFString.h>
 
 namespace WebKit {
@@ -74,12 +75,12 @@ void WebTextCheckerClient::setGrammarCheckingEnabled(bool enabled)
     m_client.setGrammarCheckingEnabled(enabled, m_client.clientInfo);
 }
 
-uint64_t WebTextCheckerClient::uniqueSpellDocumentTag()
+uint64_t WebTextCheckerClient::uniqueSpellDocumentTag(WebPageProxy* page)
 {
     if (!m_client.uniqueSpellDocumentTag)
         return 0;
 
-    return m_client.uniqueSpellDocumentTag(m_client.clientInfo);
+    return m_client.uniqueSpellDocumentTag(toAPI(page), m_client.clientInfo);
 }
 
 void WebTextCheckerClient::closeSpellDocumentWithTag(uint64_t tag)
@@ -128,4 +129,20 @@ void WebTextCheckerClient::toggleSpellingUIIsShowing()
     return m_client.toggleSpellingUIIsShowing(m_client.clientInfo);
 }
 
+void WebTextCheckerClient::updateSpellingUIWithMisspelledWord(uint64_t tag, const String& misspelledWord)
+{
+    if (!m_client.updateSpellingUIWithMisspelledWord)
+        return;
+
+    m_client.updateSpellingUIWithMisspelledWord(tag, toAPI(misspelledWord.impl()), m_client.clientInfo);
+}
+
+void WebTextCheckerClient::updateSpellingUIWithGrammarString(uint64_t tag, const String& badGrammarPhrase, const WebCore::GrammarDetail& grammarDetail)
+{
+    if (!m_client.updateSpellingUIWithGrammarString)
+        return;
+
+    m_client.updateSpellingUIWithGrammarString(tag, toAPI(badGrammarPhrase.impl()), toAPI(grammarDetail), m_client.clientInfo);
+}
+
 } // namespace WebKit
index 21bedae..70448c4 100644 (file)
@@ -34,6 +34,8 @@
 
 namespace WebKit {
 
+class WebPageProxy;
+
 class WebTextCheckerClient : public APIClient<WKTextCheckerClient> {
 public:
     bool continuousSpellCheckingAllowed();
@@ -41,12 +43,14 @@ public:
     void setContinuousSpellCheckingEnabled(bool);
     bool grammarCheckingEnabled();
     void setGrammarCheckingEnabled(bool);
-    uint64_t uniqueSpellDocumentTag();
+    uint64_t uniqueSpellDocumentTag(WebPageProxy*);
     void closeSpellDocumentWithTag(uint64_t);
     void checkSpellingOfString(uint64_t tag, const String& text, int32_t& misspellingLocation, int32_t& misspellingLength);
     void checkGrammarOfString(uint64_t tag, const String& text, Vector<WebCore::GrammarDetail>&, int32_t& badGrammarLocation, int32_t& badGrammarLength);
     bool spellingUIIsShowing();
     void toggleSpellingUIIsShowing();
+    void updateSpellingUIWithMisspelledWord(uint64_t tag, const String& misspelledWord);
+    void updateSpellingUIWithGrammarString(uint64_t tag, const String& badGrammarPhrase, const WebCore::GrammarDetail&);
 };
 
 } // namespace WebKit