diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-12 07:30:35 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-12 07:30:35 +0000 |
commit | a954bf7d89777070fa9980d6692e3787dd61e26f (patch) | |
tree | 31a0b26e4f0abfbe45437127d9f9703b5ceb6960 /chrome/browser/renderer_host | |
parent | 8e5722d2311e0a91cca92692c012e64bb01fb2cf (diff) | |
download | chromium_src-a954bf7d89777070fa9980d6692e3787dd61e26f.zip chromium_src-a954bf7d89777070fa9980d6692e3787dd61e26f.tar.gz chromium_src-a954bf7d89777070fa9980d6692e3787dd61e26f.tar.bz2 |
Let cmd-e write the selection into the find pasteboard.
Note that chrome still does not support _reading_ from the find pasteboard, so hitting cmd-e followed by cmd-g in chrome still doesn't work. Also, cmd-f doesn't write to the find pasteboard yet either.
BUG=14562
TEST=Select some text on a web page, hit cmd-e, go to the same web page in safari, hit cmd-g. Safari should search for the text you selected in chrome.
Review URL: http://codereview.chromium.org/197035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26075 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
5 files changed, 43 insertions, 0 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 2acd476..9253e87 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -534,6 +534,13 @@ void RenderViewHost::Copy() { Send(new ViewMsg_Copy(routing_id())); } +void RenderViewHost::CopyToFindPboard() { +#if defined(OS_MACOSX) + // Windows/Linux don't have the concept of a find pasteboard. + Send(new ViewMsg_CopyToFindPboard(routing_id())); +#endif +} + void RenderViewHost::Paste() { Send(new ViewMsg_Paste(routing_id())); } diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index e4b6332..3a1c273 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -269,6 +269,7 @@ class RenderViewHost : public RenderWidgetHost, void Redo(); void Cut(); void Copy(); + void CopyToFindPboard(); void Paste(); void Replace(const std::wstring& text); void ToggleSpellCheck(); diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index 1190fd3..095131f 100644 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -323,6 +323,10 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& msg) { OnClipboardReadAsciiText) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ClipboardReadHTML, OnClipboardReadHTML) +#if defined(OS_MACOSX) + IPC_MESSAGE_HANDLER(ViewHostMsg_ClipboardFindPboardWriteStringAsync, + OnClipboardFindPboardWriteString) +#endif IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromExtension, OnGetMimeTypeFromExtension) IPC_MESSAGE_HANDLER(ViewHostMsg_GetMimeTypeFromFile, diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h index 743b7f6..897e373 100644 --- a/chrome/browser/renderer_host/resource_message_filter.h +++ b/chrome/browser/renderer_host/resource_message_filter.h @@ -180,6 +180,9 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter, void OnClipboardReadText(Clipboard::Buffer buffer, IPC::Message* reply); void OnClipboardReadAsciiText(Clipboard::Buffer buffer, IPC::Message* reply); void OnClipboardReadHTML(Clipboard::Buffer buffer, IPC::Message* reply); +#if defined(OS_MACOSX) + void OnClipboardFindPboardWriteString(const string16& text); +#endif #if !defined(OS_MACOSX) // Not handled in the IO thread on Mac. diff --git a/chrome/browser/renderer_host/resource_message_filter_mac.mm b/chrome/browser/renderer_host/resource_message_filter_mac.mm new file mode 100644 index 0000000..b63c5bf --- /dev/null +++ b/chrome/browser/renderer_host/resource_message_filter_mac.mm @@ -0,0 +1,28 @@ +// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/renderer_host/resource_message_filter.h" + +#import <Cocoa/Cocoa.h> + +#include "base/sys_string_conversions.h" + +// The number of utf16 code units that will be written to the find pasteboard, +// longer texts are silently ignored. This is to prevent that a compromised +// renderer can write unlimited amounts of data into the find pasteboard. +static const size_t kMaxFindPboardStringLength = 4096; + +// Called on the IO thread. +void ResourceMessageFilter::OnClipboardFindPboardWriteString( + const string16& text) { + if (text.length() <= kMaxFindPboardStringLength) { + NSString* nsText = base::SysUTF16ToNSString(text); + if (nsText) { + NSPasteboard* findPboard = [NSPasteboard pasteboardWithName:NSFindPboard]; + [findPboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] + owner:nil]; + [findPboard setString:nsText forType:NSStringPboardType]; + } + } +} |