Title: [178536] trunk/Source/WebKit2
Revision
178536
Author
[email protected]
Date
2015-01-15 15:42:11 -0800 (Thu, 15 Jan 2015)

Log Message

[WK2] Add support for fully editable WKWebView.
https://bugs.webkit.org/show_bug.cgi?id=140515

Reviewed by Anders Carlsson.

WKWebView has now a new property (_editable) to control
the editability of the entire content.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode):
(WebKit::WebPageCreationParameters::decode):
* Shared/WebPageCreationParameters.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _isEditable]):
(-[WKWebView _setEditable:]):
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/API/mac/WKView.mm:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::setEditable):
(WebKit::WebPageProxy::creationParameters):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::isEditable):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::setEditable):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (178535 => 178536)


--- trunk/Source/WebKit2/ChangeLog	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/ChangeLog	2015-01-15 23:42:11 UTC (rev 178536)
@@ -1,3 +1,33 @@
+2015-01-15  Enrica Casucci  <[email protected]>
+
+        [WK2] Add support for fully editable WKWebView.
+        https://bugs.webkit.org/show_bug.cgi?id=140515
+
+        Reviewed by Anders Carlsson.
+
+        WKWebView has now a new property (_editable) to control
+        the editability of the entire content.
+
+        * Shared/WebPageCreationParameters.cpp:
+        (WebKit::WebPageCreationParameters::encode):
+        (WebKit::WebPageCreationParameters::decode):
+        * Shared/WebPageCreationParameters.h:
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView _isEditable]):
+        (-[WKWebView _setEditable:]):
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/API/mac/WKView.mm:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy):
+        (WebKit::WebPageProxy::setEditable):
+        (WebKit::WebPageProxy::creationParameters):
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::isEditable):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::setEditable):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2015-01-15  Anders Carlsson  <[email protected]>
 
         Clearing the website data store should clear local storage

Modified: trunk/Source/WebKit2/Shared/WebPageCreationParameters.cpp (178535 => 178536)


--- trunk/Source/WebKit2/Shared/WebPageCreationParameters.cpp	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/Shared/WebPageCreationParameters.cpp	2015-01-15 23:42:11 UTC (rev 178536)
@@ -39,6 +39,7 @@
     encoder.encodeEnum(drawingAreaType);
     encoder << pageGroupData;
     encoder << drawsBackground;
+    encoder << isEditable;
     encoder << drawsTransparentBackground;
     encoder << underlayColor;
     encoder << useFixedLayout;
@@ -95,6 +96,8 @@
         return false;
     if (!decoder.decode(parameters.drawsBackground))
         return false;
+    if (!decoder.decode(parameters.isEditable))
+        return false;
     if (!decoder.decode(parameters.drawsTransparentBackground))
         return false;
     if (!decoder.decode(parameters.underlayColor))

Modified: trunk/Source/WebKit2/Shared/WebPageCreationParameters.h (178535 => 178536)


--- trunk/Source/WebKit2/Shared/WebPageCreationParameters.h	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/Shared/WebPageCreationParameters.h	2015-01-15 23:42:11 UTC (rev 178536)
@@ -66,6 +66,7 @@
 
     bool drawsBackground;
     bool drawsTransparentBackground;
+    bool isEditable;
 
     WebCore::Color underlayColor;
 

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (178535 => 178536)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-01-15 23:42:11 UTC (rev 178536)
@@ -1605,6 +1605,16 @@
 
 @implementation WKWebView (WKPrivate)
 
+- (BOOL)_isEditable
+{
+    return _page->isEditable();
+}
+
+- (void)_setEditable:(BOOL)editable
+{
+    _page->setEditable(editable);
+}
+
 - (_WKRemoteObjectRegistry *)_remoteObjectRegistry
 {
     if (!_remoteObjectRegistry) {

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h (178535 => 178536)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebViewPrivate.h	2015-01-15 23:42:11 UTC (rev 178536)
@@ -82,6 +82,8 @@
 
 @property (nonatomic, readonly) pid_t _webProcessIdentifier;
 
+@property (nonatomic, getter=_isEditable, setter=_setEditable:) BOOL _editable;
+
 // FIXME: Remove these once nobody is using them.
 @property (nonatomic, readonly) NSData *_sessionStateData;
 - (void)_restoreFromSessionStateData:(NSData *)sessionStateData;

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (178535 => 178536)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-01-15 23:42:11 UTC (rev 178536)
@@ -743,11 +743,9 @@
 
 Editing-related methods still unimplemented that are implemented in WebKit1:
 
-- (void)capitalizeWord:(id)sender;
 - (void)changeFont:(id)sender;
 - (void)complete:(id)sender;
 - (void)copyFont:(id)sender;
-- (void)lowercaseWord:(id)sender;
 - (void)makeBaseWritingDirectionLeftToRight:(id)sender;
 - (void)makeBaseWritingDirectionNatural:(id)sender;
 - (void)makeBaseWritingDirectionRightToLeft:(id)sender;
@@ -755,7 +753,6 @@
 - (void)scrollLineDown:(id)sender;
 - (void)scrollLineUp:(id)sender;
 - (void)showGuessPanel:(id)sender;
-- (void)uppercaseWord:(id)sender;
 
 Some other editing-related methods still unimplemented:
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (178535 => 178536)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-01-15 23:42:11 UTC (rev 178536)
@@ -291,6 +291,7 @@
 #if PLATFORM(MAC) && !USE(ASYNC_NSTEXTINPUTCLIENT)
     , m_temporarilyClosedComposition(false)
 #endif
+    , m_isEditable(false)
     , m_textZoomFactor(1)
     , m_pageZoomFactor(1)
     , m_pageScaleFactor(1)
@@ -1394,6 +1395,17 @@
     m_process->send(Messages::WebPage::ExecuteEditCommand(commandName), m_pageID);
 }
 
+void WebPageProxy::setEditable(bool editable)
+{
+    if (editable == m_isEditable)
+        return;
+    if (!isValid())
+        return;
+
+    m_isEditable = editable;
+    m_process->send(Messages::WebPage::SetEditable(editable), m_pageID);
+}
+
 #if !PLATFORM(IOS)
 void WebPageProxy::didCommitLayerTree(const RemoteLayerTreeTransaction&)
 {
@@ -4616,6 +4628,7 @@
     parameters.store = preferencesStore();
     parameters.pageGroupData = m_pageGroup->data();
     parameters.drawsBackground = m_drawsBackground;
+    parameters.isEditable = m_isEditable;
     parameters.drawsTransparentBackground = m_drawsTransparentBackground;
     parameters.underlayColor = m_underlayColor;
     parameters.useFixedLayout = m_useFixedLayout;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (178535 => 178536)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-01-15 23:42:11 UTC (rev 178536)
@@ -411,6 +411,8 @@
     
     bool maintainsInactiveSelection() const { return m_maintainsInactiveSelection; }
     void setMaintainsInactiveSelection(bool);
+    void setEditable(bool);
+    bool isEditable() const { return m_isEditable; }
 
 #if PLATFORM(IOS)
     void executeEditCommand(const String& commandName, std::function<void (CallbackBase::Error)>);
@@ -1446,6 +1448,7 @@
     String m_toolTip;
 
     EditorState m_editorState;
+    bool m_isEditable;
 #if PLATFORM(MAC) && !USE(ASYNC_NSTEXTINPUTCLIENT)
     bool m_temporarilyClosedComposition; // Editor state changed from hasComposition to !hasComposition, but that was only with shouldIgnoreCompositionSelectionChange yet.
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (178535 => 178536)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2015-01-15 23:42:11 UTC (rev 178536)
@@ -921,6 +921,19 @@
     frame.editor().command(commandName).execute(argument);
 }
 
+void WebPage::setEditable(bool editable)
+{
+    m_page->setEditable(editable);
+    m_page->setTabKeyCyclesThroughElements(!editable);
+    Frame& frame = m_page->focusController().focusedOrMainFrame();
+    if (editable) {
+        frame.editor().applyEditingStyleToBodyElement();
+        // If the page is made editable and the selection is empty, set it to something.
+        if (frame.selection().isNone())
+            frame.selection().setSelectionFromNone();
+    }
+}
+
 bool WebPage::isEditingCommandEnabled(const String& commandName)
 {
     Frame& frame = m_page->focusController().focusedOrMainFrame();

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (178535 => 178536)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2015-01-15 23:42:11 UTC (rev 178536)
@@ -933,6 +933,7 @@
     void setViewState(WebCore::ViewState::Flags, bool wantsDidUpdateViewState, const Vector<uint64_t>& callbackIDs);
     void validateCommand(const String&, uint64_t);
     void executeEditCommand(const String&);
+    void setEditable(bool);
 
     void updateUserActivity();
 

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (178535 => 178536)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2015-01-15 23:16:18 UTC (rev 178535)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2015-01-15 23:42:11 UTC (rev 178536)
@@ -179,6 +179,7 @@
     Close()
     TryClose()
 
+    SetEditable(bool editable)
     ValidateCommand(String name, uint64_t callbackID)
     ExecuteEditCommand(String name)
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to