summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authorthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-12 07:30:35 +0000
committerthakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-12 07:30:35 +0000
commita954bf7d89777070fa9980d6692e3787dd61e26f (patch)
tree31a0b26e4f0abfbe45437127d9f9703b5ceb6960 /chrome/browser/renderer_host
parent8e5722d2311e0a91cca92692c012e64bb01fb2cf (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/renderer_host/render_view_host.cc7
-rw-r--r--chrome/browser/renderer_host/render_view_host.h1
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.cc4
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.h3
-rw-r--r--chrome/browser/renderer_host/resource_message_filter_mac.mm28
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];
+ }
+ }
+}