WebCore:
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Aug 2006 18:32:40 +0000 (18:32 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 30 Aug 2006 18:32:40 +0000 (18:32 +0000)
        Reviewed by Darin.

        - WebCore part of fix for:
        http://bugzilla.opendarwin.org/show_bug.cgi?id=10576
        Disallow copy from new password fields

        * page/Frame.cpp: (WebCore::Frame::mayCopy): Added. Checks to see if the selection is within a password field.
        * page/Frame.h: Added mayCopy.

        * bridge/mac/FrameMac.h:
        * bridge/mac/FrameMac.mm:
        (WebCore::FrameMac::handleMouseMoveEvent): Checks mayCopy before starting a drag.
        (WebCore::FrameMac::mayDHTMLCut): Renamed to match the bridge method.  This also checks mayCopy now.
        (WebCore::FrameMac::mayDHTMLCopy): ditto.
        (WebCore::FrameMac::tryDHTMLCut): ditto.
        (WebCore::FrameMac::tryDHTMLCopy): ditto.
        (WebCore::FrameMac::mayDHTMLPaste): Renamed to match the bridge function.
        (WebCore::FrameMac::tryDHTMLPaste): ditto.
        * bridge/mac/WebCoreFrameBridge.h:
        * bridge/mac/WebCoreFrameBridge.mm:
        (-[WebCoreFrameBridge mayCopy]): Calls the renamed method on frame.
        (-[WebCoreFrameBridge mayDHTMLCut]): ditto.
        (-[WebCoreFrameBridge mayDHTMLCopy]): ditto.
        (-[WebCoreFrameBridge mayDHTMLPaste]): ditto.
        (-[WebCoreFrameBridge tryDHTMLCut]): ditto.
        (-[WebCoreFrameBridge tryDHTMLCopy]): ditto.
        (-[WebCoreFrameBridge tryDHTMLPaste]): ditto.

        * css/html4.css: Added !important to the -webkit-text-security property for password fields.

WebKit:

        Reviewed by Darin.

        WebKit part of fix for:
        http://bugzilla.opendarwin.org/show_bug.cgi?id=10576
        Disallow copy from new password fields

        * WebView/WebHTMLView.m:
        (-[WebHTMLView _canCopy]): Now also calls across the bridge to ask if it mayCopy.
        (-[WebHTMLView _canCut]): Calls _canCopy now.
        (-[NSArray validateUserInterfaceItem:]): Calls _canCut when validating the "Cut" menu item.
         This used to call _canDelete (which used to be the same as _canCut), but now _canCut also checks _canCopy.

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

WebCore/ChangeLog
WebCore/bridge/mac/FrameMac.h
WebCore/bridge/mac/FrameMac.mm
WebCore/bridge/mac/WebCoreFrameBridge.h
WebCore/bridge/mac/WebCoreFrameBridge.mm
WebCore/css/html4.css
WebCore/page/Frame.cpp
WebCore/page/Frame.h
WebKit/ChangeLog
WebKit/WebView/WebHTMLView.m

index c11bec902ff54992cc1d3df91fdb1a9970f8ac3f..cb4a676067b2e2020a27eb1458f03a14052f32d2 100644 (file)
@@ -1,3 +1,35 @@
+2006-08-30  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Darin.
+
+        - WebCore part of fix for:
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=10576
+        Disallow copy from new password fields
+
+        * page/Frame.cpp: (WebCore::Frame::mayCopy): Added. Checks to see if the selection is within a password field.
+        * page/Frame.h: Added mayCopy.
+
+        * bridge/mac/FrameMac.h:
+        * bridge/mac/FrameMac.mm:
+        (WebCore::FrameMac::handleMouseMoveEvent): Checks mayCopy before starting a drag.
+        (WebCore::FrameMac::mayDHTMLCut): Renamed to match the bridge method.  This also checks mayCopy now.
+        (WebCore::FrameMac::mayDHTMLCopy): ditto.
+        (WebCore::FrameMac::tryDHTMLCut): ditto.
+        (WebCore::FrameMac::tryDHTMLCopy): ditto.
+        (WebCore::FrameMac::mayDHTMLPaste): Renamed to match the bridge function.
+        (WebCore::FrameMac::tryDHTMLPaste): ditto.
+        * bridge/mac/WebCoreFrameBridge.h:
+        * bridge/mac/WebCoreFrameBridge.mm:
+        (-[WebCoreFrameBridge mayCopy]): Calls the renamed method on frame.
+        (-[WebCoreFrameBridge mayDHTMLCut]): ditto.
+        (-[WebCoreFrameBridge mayDHTMLCopy]): ditto.
+        (-[WebCoreFrameBridge mayDHTMLPaste]): ditto.
+        (-[WebCoreFrameBridge tryDHTMLCut]): ditto.
+        (-[WebCoreFrameBridge tryDHTMLCopy]): ditto.
+        (-[WebCoreFrameBridge tryDHTMLPaste]): ditto.
+
+        * css/html4.css: Added !important to the -webkit-text-security property for password fields.
+
 2006-08-30  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Tim H.
index d846e1de19b39626ad7c2977aa1755ce5d0e3a2c..dbd134c2ca0113a4af3324d50f9da8e11d9bd982 100644 (file)
@@ -217,12 +217,12 @@ public:
     void dragSourceMovedTo(const PlatformMouseEvent&);
     void dragSourceEndedAt(const PlatformMouseEvent&, NSDragOperation);
 
-    bool mayCut();
-    bool mayCopy();
-    bool mayPaste();
-    bool tryCut();
-    bool tryCopy();
-    bool tryPaste();
+    bool mayDHTMLCut();
+    bool mayDHTMLCopy();
+    bool mayDHTMLPaste();
+    bool tryDHTMLCut();
+    bool tryDHTMLCopy();
+    bool tryDHTMLPaste();
     
     bool sendContextMenuEvent(NSEvent*);
 
index 81f83c00b84e0ca33e191b70a7a334ad984a3774..04f45bec2e4ffc25c3f70a70ef340389f16b19fc 100644 (file)
@@ -1722,7 +1722,7 @@ void FrameMac::handleMouseMoveEvent(const MouseEventWithHitTestResults& event)
                         _dragClipboard->setDragImageElement(_dragSrc.get(), IntPoint() + delta);
                     } 
 
-                    _mouseDownMayStartDrag = dispatchDragSrcEvent(dragstartEvent, m_mouseDown);
+                    _mouseDownMayStartDrag = dispatchDragSrcEvent(dragstartEvent, m_mouseDown) && mayCopy();
                     // Invalidate clipboard here against anymore pasteboard writing for security.  The drag
                     // image can still be changed as we drag, but not the pasteboard data.
                     _dragClipboard->setAccessPolicy(ClipboardMac::ImageWritable);
@@ -1833,23 +1833,26 @@ bool FrameMac::dispatchCPPEvent(const AtomicString &eventType, ClipboardMac::Acc
 // We need to use onbeforecopy as a real menu enabler because we allow elements that are not
 // normally selectable to implement copy/paste (like divs, or a document body).
 
-bool FrameMac::mayCut()
+bool FrameMac::mayDHTMLCut()
 {
-    return !dispatchCPPEvent(beforecutEvent, ClipboardMac::Numb);
+    return mayCopy() && !dispatchCPPEvent(beforecutEvent, ClipboardMac::Numb);
 }
 
-bool FrameMac::mayCopy()
+bool FrameMac::mayDHTMLCopy()
 {
-    return !dispatchCPPEvent(beforecopyEvent, ClipboardMac::Numb);
+    return mayCopy() && !dispatchCPPEvent(beforecopyEvent, ClipboardMac::Numb);
 }
 
-bool FrameMac::mayPaste()
+bool FrameMac::mayDHTMLPaste()
 {
     return !dispatchCPPEvent(beforepasteEvent, ClipboardMac::Numb);
 }
 
-bool FrameMac::tryCut()
+bool FrameMac::tryDHTMLCut()
 {
+    if (!mayCopy())
+        return false;
+
     // Must be done before oncut adds types and data to the pboard,
     // also done for security, as it erases data from the last copy/paste.
     [[NSPasteboard generalPasteboard] declareTypes:[NSArray array] owner:nil];
@@ -1857,8 +1860,11 @@ bool FrameMac::tryCut()
     return !dispatchCPPEvent(cutEvent, ClipboardMac::Writable);
 }
 
-bool FrameMac::tryCopy()
+bool FrameMac::tryDHTMLCopy()
 {
+    if (!mayCopy())
+        return false;
+
     // Must be done before oncopy adds types and data to the pboard,
     // also done for security, as it erases data from the last copy/paste.
     [[NSPasteboard generalPasteboard] declareTypes:[NSArray array] owner:nil];
@@ -1866,7 +1872,7 @@ bool FrameMac::tryCopy()
     return !dispatchCPPEvent(copyEvent, ClipboardMac::Writable);
 }
 
-bool FrameMac::tryPaste()
+bool FrameMac::tryDHTMLPaste()
 {
     return !dispatchCPPEvent(pasteEvent, ClipboardMac::Readable);
 }
index 49c6e48ef9755c11e11a7e41a80d15e7980f3a01..5168adc108ed49cda79cd7bc463b8ee201174ca3 100644 (file)
@@ -334,6 +334,8 @@ typedef enum {
 - (BOOL)isSelectionRichlyEditable;
 - (WebSelectionState)selectionState;
 
+- (BOOL)mayCopy;
+
 - (NSAttributedString *)selectedAttributedString;
 - (NSString *)selectedString;
 
index 98eb44684afdc8e69566156f9b5fc2ed2658deda..2684dca23adb4020e88c741327155d247579f285 100644 (file)
@@ -766,6 +766,11 @@ static inline WebCoreFrameBridge *bridge(Frame *frame)
     return WebSelectionStateNone;
 }
 
+- (BOOL)mayCopy
+{
+    return m_frame->mayCopy();
+}
+
 - (NSString *)_stringWithDocumentTypeStringAndMarkupString:(NSString *)markupString
 {
     return m_frame->documentTypeString() + markupString;
@@ -2429,32 +2434,32 @@ static PlatformMouseEvent createMouseEventFromDraggingInfo(NSWindow* window, id
 
 - (BOOL)mayDHTMLCut
 {
-    return m_frame->mayCut();
+    return m_frame->mayDHTMLCut();
 }
 
 - (BOOL)mayDHTMLCopy
 {
-    return m_frame->mayCopy();
+    return m_frame->mayDHTMLCopy();
 }
 
 - (BOOL)mayDHTMLPaste
 {
-    return m_frame->mayPaste();
+    return m_frame->mayDHTMLPaste();
 }
 
 - (BOOL)tryDHTMLCut
 {
-    return m_frame->tryCut();
+    return m_frame->tryDHTMLCut();
 }
 
 - (BOOL)tryDHTMLCopy
 {
-    return m_frame->tryCopy();
+    return m_frame->tryDHTMLCopy();
 }
 
 - (BOOL)tryDHTMLPaste
 {
-    return m_frame->tryPaste();
+    return m_frame->tryDHTMLPaste();
 }
 
 - (DOMRange *)rangeOfCharactersAroundCaret
index 2832b958e1aa970e692e010717a76ec99844b076..8dd792f4bc1b3495e3eb88792504e29d1235f4f6 100644 (file)
@@ -337,7 +337,7 @@ input[type="password"] {
     border:initial;
     padding:initial;
 
-    -webkit-text-security: disc;
+    -webkit-text-security: disc !important;
 }
 
 input[type="search"], input[type="hidden"], input[type="image"], input[type="file"] {
index 9ab151ef4959619de824e74c3894b8e7bb168843..74afd8ac249a83ed05c88f5ba27ce225cce31c1c 100644 (file)
@@ -2181,6 +2181,17 @@ void Frame::pasteAndMatchStyle()
     issuePasteAndMatchStyleCommand();
 }
 
+bool Frame::mayCopy()
+{
+    Node* startNode = selection().start().node();
+    if (startNode) {
+        startNode = startNode->shadowAncestorNode();
+        if (startNode->hasTagName(inputTag) && static_cast<HTMLInputElement*>(startNode)->inputType() == HTMLInputElement::PASSWORD)
+            return false;
+    }
+    return true;
+}
+
 void Frame::transpose()
 {
     issueTransposeCommand();
index 4e9f46f367991c52514230648cbd975d384e85f7..7240f102e752643bcf96e618f605ffebe8512d64 100644 (file)
@@ -485,6 +485,7 @@ public:
   void cutToPasteboard();
   void pasteFromPasteboard();
   void pasteAndMatchStyle();
+  bool mayCopy();
   virtual bool canPaste() const = 0;
   void redo();
   void undo();
index 7d7986f4325c7e82b1f3e4435bdceaa1d601fe22..882f11f56ac8fbe87d9a68ad9d72f0fcef1b7b57 100644 (file)
@@ -1,3 +1,17 @@
+2006-08-30  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Darin.
+
+        WebKit part of fix for:
+        http://bugzilla.opendarwin.org/show_bug.cgi?id=10576
+        Disallow copy from new password fields
+
+        * WebView/WebHTMLView.m:
+        (-[WebHTMLView _canCopy]): Now also calls across the bridge to ask if it mayCopy.
+        (-[WebHTMLView _canCut]): Calls _canCopy now.
+        (-[NSArray validateUserInterfaceItem:]): Calls _canCut when validating the "Cut" menu item.
+         This used to call _canDelete (which used to be the same as _canCut), but now _canCut also checks _canCopy.
+
 2006-08-30  Karl Adam  <karladam@yahoo-inc.com>
 
         Reviewed by Eric and Tim H.
index 4344a96161d07e0386055108686f44843b4b63a3..400a645ddbcd2fe6c58fc46ba018ca0e1d37d19b 100644 (file)
@@ -1597,12 +1597,12 @@ static WebHTMLView *lastHitView = nil;
 - (BOOL)_canCopy
 {
     // Copying can be done regardless of whether you can edit.
-    return [self _hasSelection];
+    return [self _hasSelection] && [[self _bridge] mayCopy];
 }
 
 - (BOOL)_canCut
 {
-    return [self _hasSelection] && [self _isEditable];
+    return [self _canCopy] && [self _isEditable];
 }
 
 - (BOOL)_canDelete
@@ -2177,7 +2177,7 @@ static WebHTMLView *lastHitView = nil;
     } else if (action == @selector(copy:)) {
         return [bridge mayDHTMLCopy] || [self _canCopy];
     } else if (action == @selector(cut:)) {
-        return [bridge mayDHTMLCut] || [self _canDelete];
+        return [bridge mayDHTMLCut] || [self _canCut];
     } else if (action == @selector(delete:)) {
         return [self _canDelete];
     } else if (action == @selector(_ignoreSpellingFromMenu:)