Diff
Modified: trunk/Source/WebCore/ChangeLog (167685 => 167686)
--- trunk/Source/WebCore/ChangeLog 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebCore/ChangeLog 2014-04-22 22:05:46 UTC (rev 167686)
@@ -1,3 +1,17 @@
+2014-04-22 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r167674.
+ https://bugs.webkit.org/show_bug.cgi?id=132025
+
+ Going a different way with this (Requested by bradee-oh on
+ #webkit).
+
+ Reverted changeset:
+
+ "Change Image Controls replacement to use selection and paste"
+ https://bugs.webkit.org/show_bug.cgi?id=131992
+ http://trac.webkit.org/changeset/167674
+
2014-04-22 Brent Fulgham <[email protected]>
[Win] Support Python 2.7 in Cygwin
Modified: trunk/Source/WebCore/WebCore.exp.in (167685 => 167686)
--- trunk/Source/WebCore/WebCore.exp.in 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebCore/WebCore.exp.in 2014-04-22 22:05:46 UTC (rev 167686)
@@ -2987,6 +2987,10 @@
__ZNK7WebCore12IconDatabase9isEnabledEv
#endif
+#if ENABLE(IMAGE_CONTROLS)
+__ZN7WebCore21ContextMenuController22replaceControlledImageEN3WTF10PassRefPtrINS_5ImageEEE
+#endif
+
#if ENABLE(INDEXED_DATABASE)
__ZN7WebCore10IDBKeyData14setNumberValueEd
__ZN7WebCore10IDBKeyData6decodeERNS_12KeyedDecoderERS0_
Modified: trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp (167685 => 167686)
--- trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebCore/html/shadow/mac/ImageControlsButtonElementMac.cpp 2014-04-22 22:05:46 UTC (rev 167686)
@@ -30,15 +30,11 @@
#include "ContextMenuController.h"
#include "Event.h"
-#include "Frame.h"
-#include "FrameSelection.h"
#include "HTMLDivElement.h"
#include "Page.h"
-#include "Range.h"
#include "RenderBlockFlow.h"
#include "RenderStyle.h"
#include "RenderTheme.h"
-#include "ShadowRoot.h"
namespace WebCore {
@@ -103,33 +99,8 @@
void ImageControlsButtonElementMac::defaultEventHandler(Event* event)
{
if (event->type() == eventNames().clickEvent) {
- // Before showing the menu, change the current selection to the represented Image element.
- ContainerNode* parent = parentNode();
- Element* hostElement = nullptr;
- while (parent) {
- if (parent->isShadowRoot()) {
- hostElement = static_cast<ShadowRoot*>(parent)->hostElement();
- break;
- }
- parent = parent->parentNode();
- }
-
- if (!hostElement)
- return;
- ASSERT(isHTMLImageElement(hostElement));
-
- Frame* frame = document().frame();
- if (!frame)
- return;
-
- Page* page = document().page();
- if (!page)
- return;
-
- RefPtr<Range> range = Range::create(document(), Position(hostElement, Position::PositionIsBeforeAnchor), Position(hostElement, Position::PositionIsAfterAnchor));
- frame->selection().setSelection(VisibleSelection(range.get()));
-
- page->contextMenuController().showImageControlsMenu(event);
+ if (Page* page = document().page())
+ page->contextMenuController().showImageControlsMenu(event);
event->setDefaultHandled();
return;
}
Modified: trunk/Source/WebCore/page/ContextMenuController.cpp (167685 => 167686)
--- trunk/Source/WebCore/page/ContextMenuController.cpp 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebCore/page/ContextMenuController.cpp 2014-04-22 22:05:46 UTC (rev 167686)
@@ -1452,6 +1452,24 @@
handleContextMenuEvent(event);
m_client.showContextMenu();
}
+
+void ContextMenuController::replaceControlledImage(PassRefPtr<Image> newImage)
+{
+ Node* node = m_context.hitTestResult().innerNonSharedNode();
+ if (!node)
+ return;
+
+ Frame* frame = node->document().frame();
+ if (!frame)
+ return;
+
+ RenderObject* renderer = node->renderer();
+ if (!renderer || !renderer->isRenderImage())
+ return;
+
+ CachedResourceHandle<CachedImage> replacedImage = new CachedImage(URL::fakeURLWithRelativePart("image"), newImage.get(), frame->page()->sessionID());
+ toRenderImage(renderer)->imageResource().setCachedImage(replacedImage.get());
+}
#endif
} // namespace WebCore
Modified: trunk/Source/WebCore/page/ContextMenuController.h (167685 => 167686)
--- trunk/Source/WebCore/page/ContextMenuController.h 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebCore/page/ContextMenuController.h 2014-04-22 22:05:46 UTC (rev 167686)
@@ -71,6 +71,7 @@
#if ENABLE(IMAGE_CONTROLS)
void showImageControlsMenu(Event*);
+ void replaceControlledImage(PassRefPtr<Image>);
#endif
private:
Modified: trunk/Source/WebKit/mac/ChangeLog (167685 => 167686)
--- trunk/Source/WebKit/mac/ChangeLog 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit/mac/ChangeLog 2014-04-22 22:05:46 UTC (rev 167686)
@@ -1,3 +1,17 @@
+2014-04-22 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r167674.
+ https://bugs.webkit.org/show_bug.cgi?id=132025
+
+ Going a different way with this (Requested by bradee-oh on
+ #webkit).
+
+ Reverted changeset:
+
+ "Change Image Controls replacement to use selection and paste"
+ https://bugs.webkit.org/show_bug.cgi?id=131992
+ http://trac.webkit.org/changeset/167674
+
2014-04-22 Brady Eidson <[email protected]>
Change Image Controls replacement to use selection and paste
Modified: trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm (167685 => 167686)
--- trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit/mac/Misc/WebSharingServicePickerController.mm 2014-04-22 22:05:46 UTC (rev 167686)
@@ -31,10 +31,6 @@
#import "WebViewInternal.h"
#import <AppKit/NSSharingService.h>
#import <WebCore/BitmapImage.h>
-#import <WebCore/Editor.h>
-#import <WebCore/FocusController.h>
-#import <WebCore/Frame.h>
-#import <WebCore/FrameSelection.h>
#import <WebCore/ContextMenuController.h>
#import <WebCore/Page.h>
@@ -52,8 +48,6 @@
#endif
-static NSString *imageControlPasteboardName = @"WebKitImageControlsPasteboard";
-
using namespace WebCore;
@implementation WebSharingServicePickerController
@@ -125,22 +119,14 @@
RetainPtr<CGImageSourceRef> source = adoptCF(CGImageSourceCreateWithData((CFDataRef)[items objectAtIndex:0], NULL));
RetainPtr<CGImageRef> cgImage = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));
+ RefPtr<Image> image = BitmapImage::create(cgImage.get());
- if (!cgImage)
- return;
-
Page* page = [_menuClient->webView() page];
if (!page)
return;
- NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:imageControlPasteboardName];
- [pasteboard declareTypes:@[ NSPasteboardTypeTIFF ] owner:nil];
- [pasteboard setData:[items objectAtIndex:0] forType:NSPasteboardTypeTIFF];
+ page->contextMenuController().replaceControlledImage(image.get());
- Frame& frame = page->focusController().focusedOrMainFrame();
- if (!frame.selection().isNone())
- frame.editor().readSelectionFromPasteboard(imageControlPasteboardName);
-
[self clear];
}
Modified: trunk/Source/WebKit2/ChangeLog (167685 => 167686)
--- trunk/Source/WebKit2/ChangeLog 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/ChangeLog 2014-04-22 22:05:46 UTC (rev 167686)
@@ -1,3 +1,17 @@
+2014-04-22 Commit Queue <[email protected]>
+
+ Unreviewed, rolling out r167674.
+ https://bugs.webkit.org/show_bug.cgi?id=132025
+
+ Going a different way with this (Requested by bradee-oh on
+ #webkit).
+
+ Reverted changeset:
+
+ "Change Image Controls replacement to use selection and paste"
+ https://bugs.webkit.org/show_bug.cgi?id=131992
+ http://trac.webkit.org/changeset/167674
+
2014-04-22 Joseph Pecoraro <[email protected]>
Remove unused local variable
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (167685 => 167686)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-04-22 22:05:46 UTC (rev 167686)
@@ -3445,6 +3445,16 @@
m_contextMenuClient.contextMenuDismissed(this);
}
+#if ENABLE(IMAGE_CONTROLS)
+void WebPageProxy::replaceControlledImage(PassRefPtr<ShareableBitmap> newBitmap)
+{
+ RefPtr<ShareableBitmap> bitmap = newBitmap;
+ ShareableBitmap::Handle bitmapHandle;
+ bitmap->createHandle(bitmapHandle);
+ m_process->send(Messages::WebPage::ReplaceControlledImage(bitmapHandle), m_pageID);
+}
+#endif
+
void WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
{
// Application custom items don't need to round-trip through to WebCore in the WebProcess.
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (167685 => 167686)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-04-22 22:05:46 UTC (rev 167686)
@@ -1059,6 +1059,10 @@
void takeSnapshot(WebCore::IntRect, WebCore::IntSize bitmapSize, SnapshotOptions, ImageCallback::CallbackFunction);
+#if ENABLE(IMAGE_CONTROLS)
+ void replaceControlledImage(PassRefPtr<ShareableBitmap>);
+#endif
+
private:
WebPageProxy(PageClient&, WebProcessProxy&, uint64_t pageID, const WebPageConfiguration&);
void platformInitialize();
Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h (167685 => 167686)
--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.h 2014-04-22 22:05:46 UTC (rev 167686)
@@ -55,9 +55,9 @@
#if ENABLE(IMAGE_CONTROLS)
void clearImageServicesMenu();
+ void replaceControlledImage(CGImageRef newImage);
#endif
- WebPageProxy& page() const { return *m_page; }
NSWindow *window() const;
private:
Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm (167685 => 167686)
--- trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMenuProxyMac.mm 2014-04-22 22:05:46 UTC (rev 167686)
@@ -56,11 +56,8 @@
@property NSSharingServicePickerStyle style;
- (NSMenu *)menu;
@end
+#endif
-static NSString *imageControlPasteboardName = @"WebKitImageControlsPasteboard";
-
-#endif // ENABLE(IMAGE_CONTROLS)
-
using namespace WebCore;
@interface WKUserDataWrapper : NSObject {
@@ -234,15 +231,7 @@
{
RetainPtr<CGImageSourceRef> source = adoptCF(CGImageSourceCreateWithData((CFDataRef)[items objectAtIndex:0], NULL));
RetainPtr<CGImageRef> image = adoptCF(CGImageSourceCreateImageAtIndex(source.get(), 0, NULL));
-
- if (!image)
- return;
-
- NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:imageControlPasteboardName];
- [pasteboard declareTypes:@[ NSPasteboardTypeTIFF ] owner:nil];
- [pasteboard setData:[items objectAtIndex:0] forType:NSPasteboardTypeTIFF];
-
- _menuProxy->page().readSelectionFromPasteboard(imageControlPasteboardName);
+ _menuProxy->replaceControlledImage(image.get());
}
- (NSWindow *)sharingService:(NSSharingService *)sharingService sourceWindowForShareItems:(NSArray *)items sharingContentScope:(NSSharingContentScope *)sharingContentScope
@@ -260,7 +249,6 @@
: m_webView(webView)
, m_page(page)
{
- ASSERT(m_page);
}
WebContextMenuProxyMac::~WebContextMenuProxyMac()
@@ -445,6 +433,17 @@
return [m_webView window];
}
+#if ENABLE(IMAGE_CONTROLS)
+void WebContextMenuProxyMac::replaceControlledImage(CGImageRef newImage)
+{
+ FloatSize newImageSize(CGImageGetWidth(newImage), CGImageGetHeight(newImage));
+ RefPtr<ShareableBitmap> newBitmap = ShareableBitmap::createShareable(expandedIntSize(newImageSize), ShareableBitmap::SupportsAlpha);
+ newBitmap->createGraphicsContext()->drawNativeImage(newImage, newImageSize, ColorSpaceDeviceRGB, FloatRect(FloatPoint(), newImageSize), FloatRect(FloatPoint(), newImageSize));
+
+ m_page->replaceControlledImage(newBitmap.release());
+}
+#endif
+
} // namespace WebKit
#endif // PLATFORM(MAC)
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp (167685 => 167686)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.cpp 2014-04-22 22:05:46 UTC (rev 167686)
@@ -77,6 +77,13 @@
m_page->corePage()->contextMenuController().contextMenuItemSelected(&coreItem);
}
+#if ENABLE(IMAGE_CONTROLS)
+void WebContextMenu::replaceControlledImage(PassRefPtr<Image> newImage)
+{
+ m_page->corePage()->contextMenuController().replaceControlledImage(newImage);
+}
+#endif
+
void WebContextMenu::menuItemsWithUserData(Vector<WebContextMenuItemData> &menuItems, RefPtr<API::Object>& userData) const
{
ContextMenuController& controller = m_page->corePage()->contextMenuController();
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.h (167685 => 167686)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.h 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebContextMenu.h 2014-04-22 22:05:46 UTC (rev 167686)
@@ -50,6 +50,10 @@
void itemSelected(const WebContextMenuItemData&);
Vector<WebContextMenuItemData> items() const;
+#if ENABLE(IMAGE_CONTROLS)
+ void replaceControlledImage(PassRefPtr<WebCore::Image>);
+#endif
+
private:
WebContextMenu(WebPage*);
void menuItemsWithUserData(Vector<WebContextMenuItemData>&, RefPtr<API::Object>&) const;
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (167685 => 167686)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2014-04-22 22:05:46 UTC (rev 167686)
@@ -3114,6 +3114,15 @@
}
#endif
+#if ENABLE(IMAGE_CONTROLS)
+void WebPage::replaceControlledImage(const ShareableBitmap::Handle& bitmapHandle)
+{
+ RefPtr<ShareableBitmap> bitmap = ShareableBitmap::create(bitmapHandle);
+ if (bitmap)
+ m_contextMenu->replaceControlledImage(bitmap->createImage());
+}
+#endif
+
void WebPage::replaceSelectionWithText(Frame* frame, const String& text)
{
bool selectReplacement = true;
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (167685 => 167686)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h 2014-04-22 22:05:46 UTC (rev 167686)
@@ -771,6 +771,10 @@
PassRefPtr<WebCore::DocumentLoader> createDocumentLoader(WebCore::Frame&, const WebCore::ResourceRequest&, const WebCore::SubstituteData&);
void getBytecodeProfile(uint64_t callbackID);
+
+#if ENABLE(IMAGE_CONTROLS)
+ void replaceControlledImage(const ShareableBitmap::Handle&);
+#endif
// Some platforms require accessibility-enabled processes to spin the run loop so that the WebProcess doesn't hang.
// While this is not ideal, it does not have to be applied to every platform at the moment.
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (167685 => 167686)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2014-04-22 21:58:42 UTC (rev 167685)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in 2014-04-22 22:05:46 UTC (rev 167686)
@@ -362,4 +362,8 @@
GetBytecodeProfile(uint64_t callbackID)
TakeSnapshot(WebCore::IntRect snapshotRect, WebCore::IntSize bitmapSize, uint32_t options, uint64_t callbackID)
+
+#if ENABLE(IMAGE_CONTROLS)
+ ReplaceControlledImage(WebKit::ShareableBitmap::Handle newBitmapHandle)
+#endif
}