395347aae674e419b35ff17bd50548ba7a52da91
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebCoreSupport / WebEditorClient.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebEditorClient_h
27 #define WebEditorClient_h
28
29 #include <WebCore/EditorClient.h>
30 #include <WebCore/TextCheckerClient.h>
31
32 namespace WebKit {
33
34 class WebPage;
35
36 class WebEditorClient : public WebCore::EditorClient, public WebCore::TextCheckerClient {
37 public:
38     WebEditorClient(WebPage* page)
39         : m_page(page)
40     {
41     }
42
43 private:
44     virtual void pageDestroyed() override;
45
46     virtual bool shouldDeleteRange(WebCore::Range*) override;
47     virtual bool smartInsertDeleteEnabled() override;
48     virtual bool isSelectTrailingWhitespaceEnabled() override;
49     virtual bool isContinuousSpellCheckingEnabled() override;
50     virtual void toggleContinuousSpellChecking() override;
51     virtual bool isGrammarCheckingEnabled() override;
52     virtual void toggleGrammarChecking() override;
53     virtual int spellCheckerDocumentTag() override;
54     
55     virtual bool shouldBeginEditing(WebCore::Range*) override;
56     virtual bool shouldEndEditing(WebCore::Range*) override;
57     virtual bool shouldInsertNode(WebCore::Node*, WebCore::Range*, WebCore::EditorInsertAction) override;
58     virtual bool shouldInsertText(const String&, WebCore::Range*, WebCore::EditorInsertAction) override;
59     virtual bool shouldChangeSelectedRange(WebCore::Range* fromRange, WebCore::Range* toRange, WebCore::EAffinity, bool stillSelecting) override;
60     
61     virtual bool shouldApplyStyle(WebCore::StyleProperties*, WebCore::Range*) override;
62     virtual void didApplyStyle() override;
63     virtual bool shouldMoveRangeAfterDelete(WebCore::Range*, WebCore::Range*) override;
64
65     virtual void didBeginEditing() override;
66     virtual void respondToChangedContents() override;
67     virtual void respondToChangedSelection(WebCore::Frame*) override;
68     virtual void didChangeSelectionAndUpdateLayout() override;
69     virtual void discardedComposition(WebCore::Frame*) override;
70     virtual void didEndEditing() override;
71     virtual void willWriteSelectionToPasteboard(WebCore::Range*) override;
72     virtual void didWriteSelectionToPasteboard() override;
73     virtual void getClientPasteboardDataForRange(WebCore::Range*, Vector<String>& pasteboardTypes, Vector<RefPtr<WebCore::SharedBuffer>>& pasteboardData) override;
74     
75     virtual void registerUndoStep(PassRefPtr<WebCore::UndoStep>) override;
76     virtual void registerRedoStep(PassRefPtr<WebCore::UndoStep>) override;
77     virtual void clearUndoRedoOperations() override;
78
79     virtual bool canCopyCut(WebCore::Frame*, bool defaultValue) const override;
80     virtual bool canPaste(WebCore::Frame*, bool defaultValue) const override;
81     virtual bool canUndo() const override;
82     virtual bool canRedo() const override;
83     
84     virtual void undo() override;
85     virtual void redo() override;
86
87     virtual void handleKeyboardEvent(WebCore::KeyboardEvent*) override;
88     virtual void handleInputMethodKeydown(WebCore::KeyboardEvent*) override;
89     
90     virtual void textFieldDidBeginEditing(WebCore::Element*) override;
91     virtual void textFieldDidEndEditing(WebCore::Element*) override;
92     virtual void textDidChangeInTextField(WebCore::Element*) override;
93     virtual bool doTextFieldCommandFromEvent(WebCore::Element*, WebCore::KeyboardEvent*) override;
94     virtual void textWillBeDeletedInTextField(WebCore::Element*) override;
95     virtual void textDidChangeInTextArea(WebCore::Element*) override;
96     virtual void overflowScrollPositionChanged() override;
97
98 #if PLATFORM(COCOA)
99     virtual NSString *userVisibleString(NSURL *) override;
100     virtual WebCore::DocumentFragment* documentFragmentFromAttributedString(NSAttributedString *, Vector< RefPtr<WebCore::ArchiveResource>>&) override;
101     virtual void setInsertionPasteboard(const String& pasteboardName) override;
102     virtual NSURL* canonicalizeURL(NSURL*) override;
103     virtual NSURL* canonicalizeURLString(NSString*) override;
104 #endif
105
106 #if USE(APPKIT)
107     virtual void uppercaseWord() override;
108     virtual void lowercaseWord() override;
109     virtual void capitalizeWord() override;
110 #endif
111 #if USE(AUTOMATIC_TEXT_REPLACEMENT)
112     virtual void showSubstitutionsPanel(bool show) override;
113     virtual bool substitutionsPanelIsShowing() override;
114     virtual void toggleSmartInsertDelete() override;
115     virtual bool isAutomaticQuoteSubstitutionEnabled() override;
116     virtual void toggleAutomaticQuoteSubstitution() override;
117     virtual bool isAutomaticLinkDetectionEnabled() override;
118     virtual void toggleAutomaticLinkDetection() override;
119     virtual bool isAutomaticDashSubstitutionEnabled() override;
120     virtual void toggleAutomaticDashSubstitution() override;
121     virtual bool isAutomaticTextReplacementEnabled() override;
122     virtual void toggleAutomaticTextReplacement() override;
123     virtual bool isAutomaticSpellingCorrectionEnabled() override;
124     virtual void toggleAutomaticSpellingCorrection() override;
125 #endif
126
127 #if PLATFORM(GTK)
128     bool executePendingEditorCommands(WebCore::Frame*, const Vector<WTF::String>&, bool);
129     void getEditorCommandsForKeyEvent(const WebCore::KeyboardEvent*, Vector<WTF::String>&);
130     void updateGlobalSelection(WebCore::Frame*);
131 #endif
132
133     TextCheckerClient* textChecker()  override { return this; }
134
135     virtual bool shouldEraseMarkersAfterChangeSelection(WebCore::TextCheckingType) const override;
136     virtual void ignoreWordInSpellDocument(const String&) override;
137     virtual void learnWord(const String&) override;
138     virtual void checkSpellingOfString(StringView, int* misspellingLocation, int* misspellingLength) override;
139     virtual String getAutoCorrectSuggestionForMisspelledWord(const String& misspelledWord) override;
140     virtual void checkGrammarOfString(StringView, Vector<WebCore::GrammarDetail>&, int* badGrammarLocation, int* badGrammarLength) override;
141 #if USE(UNIFIED_TEXT_CHECKING)
142     virtual Vector<WebCore::TextCheckingResult> checkTextOfParagraph(StringView, WebCore::TextCheckingTypeMask checkingTypes) override;
143 #endif
144     virtual void updateSpellingUIWithGrammarString(const String&, const WebCore::GrammarDetail&) override;
145     virtual void updateSpellingUIWithMisspelledWord(const String&) override;
146     virtual void showSpellingUI(bool show) override;
147     virtual bool spellingUIIsShowing() override;
148     virtual void getGuessesForWord(const String& word, const String& context, Vector<String>& guesses) override;
149     virtual void willSetInputMethodState() override;
150     virtual void setInputMethodState(bool enabled) override;
151     virtual void requestCheckingOfString(WTF::PassRefPtr<WebCore::TextCheckingRequest>) override;
152 #if PLATFORM(GTK)
153     virtual bool shouldShowUnicodeMenu() override;
154 #endif
155 #if PLATFORM(IOS)
156     virtual void startDelayingAndCoalescingContentChangeNotifications() override;
157     virtual void stopDelayingAndCoalescingContentChangeNotifications() override;
158     virtual void writeDataToPasteboard(NSDictionary*) override;
159     virtual NSArray *supportedPasteboardTypesForCurrentSelection() override;
160     virtual NSArray *readDataFromPasteboard(NSString* type, int index) override;
161     virtual bool hasRichlyEditableSelection() override;
162     virtual int getPasteboardItemsCount() override;
163     virtual WebCore::DocumentFragment* documentFragmentFromDelegate(int index) override;
164     virtual bool performsTwoStepPaste(WebCore::DocumentFragment*) override;
165     virtual int pasteboardChangeCount() override;
166 #endif
167
168     virtual bool supportsGlobalSelection() override;
169
170     WebPage* m_page;
171 };
172
173 } // namespace WebKit
174
175 #endif // WebEditorClient_h