Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6108)

Unified Diff: chrome/renderer/render_view.cc

Issue 1075011: Chrome side of adding search support to Pepper. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/webplugin_delegate_pepper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_view.cc
===================================================================
--- chrome/renderer/render_view.cc (revision 42528)
+++ chrome/renderer/render_view.cc (working copy)
@@ -87,6 +87,8 @@
#include "third_party/WebKit/WebKit/chromium/public/WebNode.h"
#include "third_party/WebKit/WebKit/chromium/public/WebNodeList.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPageSerializer.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebPlugin.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebPluginDocument.h"
#include "third_party/WebKit/WebKit/chromium/public/WebPoint.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRange.h"
#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
@@ -117,6 +119,7 @@
#include "webkit/glue/webdropdata.h"
#include "webkit/glue/webkit_glue.h"
#include "webkit/glue/webmediaplayer_impl.h"
+#include "webkit/glue/webplugin_delegate.h"
#include "webkit/glue/webplugin_impl.h"
#if defined(OS_WIN)
@@ -168,6 +171,7 @@
using WebKit::WebPageSerializerClient;
using WebKit::WebPlugin;
using WebKit::WebPluginParams;
+using WebKit::WebPluginDocument;
using WebKit::WebPoint;
using WebKit::WebPopupMenuInfo;
using WebKit::WebRange;
@@ -507,7 +511,6 @@
IPC_MESSAGE_HANDLER(ViewMsg_Stop, OnStop)
IPC_MESSAGE_HANDLER(ViewMsg_ReloadFrame, OnReloadFrame)
IPC_MESSAGE_HANDLER(ViewMsg_LoadAlternateHTMLText, OnLoadAlternateHTMLText)
- IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding)
IPC_MESSAGE_HANDLER(ViewMsg_Undo, OnUndo)
IPC_MESSAGE_HANDLER(ViewMsg_Redo, OnRedo)
IPC_MESSAGE_HANDLER(ViewMsg_Cut, OnCut)
@@ -526,6 +529,8 @@
IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt)
IPC_MESSAGE_HANDLER(ViewMsg_ExecuteEditCommand, OnExecuteEditCommand)
IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind)
+ IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding)
+ IPC_MESSAGE_HANDLER(ViewMsg_FindReplyACK, OnFindReplyAck)
IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom)
IPC_MESSAGE_HANDLER(ViewMsg_SetContentSettingsForLoadingHost,
OnSetContentSettingsForLoadingHost)
@@ -552,7 +557,6 @@
IPC_MESSAGE_HANDLER(ViewMsg_DragSourceSystemDragEnded,
OnDragSourceSystemDragEnded)
IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus)
- IPC_MESSAGE_HANDLER(ViewMsg_FindReplyACK, OnFindReplyAck)
IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck)
IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences)
IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL)
@@ -992,44 +996,6 @@
devtools_client_.reset(new DevToolsClient(this));
}
-void RenderView::OnStopFinding(const ViewMsg_StopFinding_Params& params) {
- WebView* view = webview();
- if (!view)
- return;
-
- bool clear_selection =
- params.action == ViewMsg_StopFinding_Params::kClearSelection;
- if (clear_selection)
- view->focusedFrame()->executeCommand(WebString::fromUTF8("Unselect"));
-
- WebFrame* frame = view->mainFrame();
- while (frame) {
- frame->stopFinding(clear_selection);
- frame = frame->traverseNext(false);
- }
-
- if (params.action == ViewMsg_StopFinding_Params::kActivateSelection) {
- WebFrame* focused_frame = view->focusedFrame();
- if (focused_frame) {
- WebDocument doc = focused_frame->document();
- if (!doc.isNull()) {
- WebNode node = doc.focusedNode();
- if (!node.isNull())
- node.simulateClick();
- }
- }
- }
-}
-
-void RenderView::OnFindReplyAck() {
- // Check if there is any queued up request waiting to be sent.
- if (queued_find_reply_message_.get()) {
- // Send the search result over to the browser process.
- Send(queued_find_reply_message_.get());
- queued_find_reply_message_.release();
- }
-}
-
void RenderView::OnUpdateTargetURLAck() {
// Check if there is a targeturl waiting to be sent.
if (target_url_status_ == TARGET_PENDING) {
@@ -2986,6 +2952,15 @@
false));
}
+void RenderView::ReportNoFindInPageResults(int request_id) {
+ Send(new ViewHostMsg_Find_Reply(routing_id_,
+ request_id,
+ 0,
+ gfx::Rect(),
+ 0,
+ true));
+}
+
// webkit_glue::WebPluginPageDelegate -----------------------------------------
webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate(
@@ -3252,9 +3227,33 @@
return url;
}
+webkit_glue::WebPluginDelegate* RenderView::GetDelegateForPluginDocument() {
+ WebPlugin* plugin = webview()->mainFrame()->document().
+ toElement<WebPluginDocument>().plugin();
+ return static_cast<webkit_glue::WebPluginImpl*>(plugin)->delegate();
+}
+
void RenderView::OnFind(int request_id, const string16& search_text,
const WebFindOptions& options) {
WebFrame* main_frame = webview()->mainFrame();
+
+ if (main_frame->document().isPluginDocument()) {
+ webkit_glue::WebPluginDelegate* delegate = GetDelegateForPluginDocument();
+ if (options.findNext) {
+ // Just navigate back/forward.
+ delegate->SelectFindResult(options.forward);
+ } else {
+ if (delegate->SupportsFind()) {
+ delegate->StartFind(UTF16ToUTF8(search_text),
+ options.matchCase,
+ request_id);
+ } else {
+ ReportNoFindInPageResults(request_id);
+ }
+ }
+ return;
+ }
+
WebFrame* frame_after_main = main_frame->traverseNext(true);
WebFrame* focused_frame = webview()->focusedFrame();
WebFrame* search_frame = focused_frame; // start searching focused frame.
@@ -3357,6 +3356,50 @@
}
}
+void RenderView::OnStopFinding(const ViewMsg_StopFinding_Params& params) {
+ WebView* view = webview();
+ if (!view)
+ return;
+
+ WebDocument doc = view->mainFrame()->document();
+ if (doc.isPluginDocument()) {
+ GetDelegateForPluginDocument()->StopFind();
+ return;
+ }
+
+ bool clear_selection =
+ params.action == ViewMsg_StopFinding_Params::kClearSelection;
+ if (clear_selection)
+ view->focusedFrame()->executeCommand(WebString::fromUTF8("Unselect"));
+
+ WebFrame* frame = view->mainFrame();
+ while (frame) {
+ frame->stopFinding(clear_selection);
+ frame = frame->traverseNext(false);
+ }
+
+ if (params.action == ViewMsg_StopFinding_Params::kActivateSelection) {
+ WebFrame* focused_frame = view->focusedFrame();
+ if (focused_frame) {
+ WebDocument doc = focused_frame->document();
+ if (!doc.isNull()) {
+ WebNode node = doc.focusedNode();
+ if (!node.isNull())
+ node.simulateClick();
+ }
+ }
+ }
+}
+
+void RenderView::OnFindReplyAck() {
+ // Check if there is any queued up request waiting to be sent.
+ if (queued_find_reply_message_.get()) {
+ // Send the search result over to the browser process.
+ Send(queued_find_reply_message_.get());
+ queued_find_reply_message_.release();
+ }
+}
+
// static
std::string RenderView::DetermineTextLanguage(const std::wstring& text) {
// Text with less than 100 bytes will probably not provide good results.
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/webplugin_delegate_pepper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698