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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 1600953003: Move find-in-page code from RenderView to RenderFrame. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed final comments by nasko@, creis@. Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 #include "third_party/WebKit/public/web/WebAXObject.h" 128 #include "third_party/WebKit/public/web/WebAXObject.h"
129 #include "third_party/WebKit/public/web/WebColorSuggestion.h" 129 #include "third_party/WebKit/public/web/WebColorSuggestion.h"
130 #include "third_party/WebKit/public/web/WebDOMEvent.h" 130 #include "third_party/WebKit/public/web/WebDOMEvent.h"
131 #include "third_party/WebKit/public/web/WebDOMMessageEvent.h" 131 #include "third_party/WebKit/public/web/WebDOMMessageEvent.h"
132 #include "third_party/WebKit/public/web/WebDataSource.h" 132 #include "third_party/WebKit/public/web/WebDataSource.h"
133 #include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h" 133 #include "third_party/WebKit/public/web/WebDateTimeChooserCompletion.h"
134 #include "third_party/WebKit/public/web/WebDateTimeChooserParams.h" 134 #include "third_party/WebKit/public/web/WebDateTimeChooserParams.h"
135 #include "third_party/WebKit/public/web/WebDocument.h" 135 #include "third_party/WebKit/public/web/WebDocument.h"
136 #include "third_party/WebKit/public/web/WebElement.h" 136 #include "third_party/WebKit/public/web/WebElement.h"
137 #include "third_party/WebKit/public/web/WebFileChooserParams.h" 137 #include "third_party/WebKit/public/web/WebFileChooserParams.h"
138 #include "third_party/WebKit/public/web/WebFindOptions.h"
139 #include "third_party/WebKit/public/web/WebFormControlElement.h" 138 #include "third_party/WebKit/public/web/WebFormControlElement.h"
140 #include "third_party/WebKit/public/web/WebFormElement.h" 139 #include "third_party/WebKit/public/web/WebFormElement.h"
141 #include "third_party/WebKit/public/web/WebFrame.h" 140 #include "third_party/WebKit/public/web/WebFrame.h"
142 #include "third_party/WebKit/public/web/WebHistoryItem.h" 141 #include "third_party/WebKit/public/web/WebHistoryItem.h"
143 #include "third_party/WebKit/public/web/WebHitTestResult.h" 142 #include "third_party/WebKit/public/web/WebHitTestResult.h"
144 #include "third_party/WebKit/public/web/WebInputElement.h" 143 #include "third_party/WebKit/public/web/WebInputElement.h"
145 #include "third_party/WebKit/public/web/WebInputEvent.h" 144 #include "third_party/WebKit/public/web/WebInputEvent.h"
146 #include "third_party/WebKit/public/web/WebLocalFrame.h" 145 #include "third_party/WebKit/public/web/WebLocalFrame.h"
147 #include "third_party/WebKit/public/web/WebMediaPlayerAction.h" 146 #include "third_party/WebKit/public/web/WebMediaPlayerAction.h"
148 #include "third_party/WebKit/public/web/WebNavigationPolicy.h" 147 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
149 #include "third_party/WebKit/public/web/WebPageImportanceSignals.h" 148 #include "third_party/WebKit/public/web/WebPageImportanceSignals.h"
150 #include "third_party/WebKit/public/web/WebPlugin.h" 149 #include "third_party/WebKit/public/web/WebPlugin.h"
151 #include "third_party/WebKit/public/web/WebPluginAction.h" 150 #include "third_party/WebKit/public/web/WebPluginAction.h"
152 #include "third_party/WebKit/public/web/WebPluginContainer.h"
153 #include "third_party/WebKit/public/web/WebPluginDocument.h"
154 #include "third_party/WebKit/public/web/WebRange.h" 151 #include "third_party/WebKit/public/web/WebRange.h"
155 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 152 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
156 #include "third_party/WebKit/public/web/WebScriptSource.h" 153 #include "third_party/WebKit/public/web/WebScriptSource.h"
157 #include "third_party/WebKit/public/web/WebSearchableFormData.h" 154 #include "third_party/WebKit/public/web/WebSearchableFormData.h"
158 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 155 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
159 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" 156 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
160 #include "third_party/WebKit/public/web/WebSettings.h" 157 #include "third_party/WebKit/public/web/WebSettings.h"
161 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 158 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
162 #include "third_party/WebKit/public/web/WebView.h" 159 #include "third_party/WebKit/public/web/WebView.h"
163 #include "third_party/WebKit/public/web/WebWindowFeatures.h" 160 #include "third_party/WebKit/public/web/WebWindowFeatures.h"
(...skipping 10 matching lines...) Expand all
174 #include "ui/gfx/native_widget_types.h" 171 #include "ui/gfx/native_widget_types.h"
175 #include "v8/include/v8.h" 172 #include "v8/include/v8.h"
176 173
177 #if defined(OS_ANDROID) 174 #if defined(OS_ANDROID)
178 #include <cpu-features.h> 175 #include <cpu-features.h>
179 176
180 #include "content/renderer/android/address_detector.h" 177 #include "content/renderer/android/address_detector.h"
181 #include "content/renderer/android/content_detector.h" 178 #include "content/renderer/android/content_detector.h"
182 #include "content/renderer/android/email_detector.h" 179 #include "content/renderer/android/email_detector.h"
183 #include "content/renderer/android/phone_number_detector.h" 180 #include "content/renderer/android/phone_number_detector.h"
184 #include "third_party/WebKit/public/platform/WebFloatPoint.h"
185 #include "third_party/WebKit/public/platform/WebFloatRect.h"
186 #include "ui/gfx/geometry/rect_f.h" 181 #include "ui/gfx/geometry/rect_f.h"
187 182
188 #elif defined(OS_WIN) 183 #elif defined(OS_WIN)
189 // TODO(port): these files are currently Windows only because they concern: 184 // TODO(port): these files are currently Windows only because they concern:
190 // * theming 185 // * theming
191 #include "ui/native_theme/native_theme_win.h" 186 #include "ui/native_theme/native_theme_win.h"
192 #elif defined(USE_X11) 187 #elif defined(USE_X11)
193 #include "ui/native_theme/native_theme.h" 188 #include "ui/native_theme/native_theme.h"
194 #elif defined(OS_MACOSX) 189 #elif defined(OS_MACOSX)
195 #include "skia/ext/skia_utils_mac.h" 190 #include "skia/ext/skia_utils_mac.h"
(...skipping 17 matching lines...) Expand all
213 using blink::WebColor; 208 using blink::WebColor;
214 using blink::WebConsoleMessage; 209 using blink::WebConsoleMessage;
215 using blink::WebData; 210 using blink::WebData;
216 using blink::WebDataSource; 211 using blink::WebDataSource;
217 using blink::WebDocument; 212 using blink::WebDocument;
218 using blink::WebDragData; 213 using blink::WebDragData;
219 using blink::WebDragOperation; 214 using blink::WebDragOperation;
220 using blink::WebDragOperationsMask; 215 using blink::WebDragOperationsMask;
221 using blink::WebElement; 216 using blink::WebElement;
222 using blink::WebFileChooserCompletion; 217 using blink::WebFileChooserCompletion;
223 using blink::WebFindOptions;
224 using blink::WebFormControlElement; 218 using blink::WebFormControlElement;
225 using blink::WebFormElement; 219 using blink::WebFormElement;
226 using blink::WebFrame; 220 using blink::WebFrame;
227 using blink::WebGestureEvent; 221 using blink::WebGestureEvent;
228 using blink::WebHistoryItem; 222 using blink::WebHistoryItem;
229 using blink::WebHTTPBody; 223 using blink::WebHTTPBody;
230 using blink::WebIconURL; 224 using blink::WebIconURL;
231 using blink::WebImage; 225 using blink::WebImage;
232 using blink::WebInputElement; 226 using blink::WebInputElement;
233 using blink::WebInputEvent; 227 using blink::WebInputEvent;
234 using blink::WebLocalFrame; 228 using blink::WebLocalFrame;
235 using blink::WebMediaPlayerAction; 229 using blink::WebMediaPlayerAction;
236 using blink::WebMouseEvent; 230 using blink::WebMouseEvent;
237 using blink::WebNavigationPolicy; 231 using blink::WebNavigationPolicy;
238 using blink::WebNavigationType; 232 using blink::WebNavigationType;
239 using blink::WebNode; 233 using blink::WebNode;
240 using blink::WebPeerConnection00Handler; 234 using blink::WebPeerConnection00Handler;
241 using blink::WebPeerConnection00HandlerClient; 235 using blink::WebPeerConnection00HandlerClient;
242 using blink::WebPeerConnectionHandler; 236 using blink::WebPeerConnectionHandler;
243 using blink::WebPeerConnectionHandlerClient; 237 using blink::WebPeerConnectionHandlerClient;
244 using blink::WebPluginAction; 238 using blink::WebPluginAction;
245 using blink::WebPluginContainer;
246 using blink::WebPluginDocument;
247 using blink::WebPoint; 239 using blink::WebPoint;
248 using blink::WebRange; 240 using blink::WebRange;
249 using blink::WebRect; 241 using blink::WebRect;
250 using blink::WebReferrerPolicy; 242 using blink::WebReferrerPolicy;
251 using blink::WebScriptSource; 243 using blink::WebScriptSource;
252 using blink::WebSearchableFormData; 244 using blink::WebSearchableFormData;
253 using blink::WebSecurityOrigin; 245 using blink::WebSecurityOrigin;
254 using blink::WebSecurityPolicy; 246 using blink::WebSecurityPolicy;
255 using blink::WebSettings; 247 using blink::WebSettings;
256 using blink::WebSize; 248 using blink::WebSize;
(...skipping 12 matching lines...) Expand all
269 using blink::WebVector; 261 using blink::WebVector;
270 using blink::WebView; 262 using blink::WebView;
271 using blink::WebWidget; 263 using blink::WebWidget;
272 using blink::WebWindowFeatures; 264 using blink::WebWindowFeatures;
273 using blink::WebRuntimeFeatures; 265 using blink::WebRuntimeFeatures;
274 using base::Time; 266 using base::Time;
275 using base::TimeDelta; 267 using base::TimeDelta;
276 268
277 #if defined(OS_ANDROID) 269 #if defined(OS_ANDROID)
278 using blink::WebContentDetectionResult; 270 using blink::WebContentDetectionResult;
279 using blink::WebFloatPoint;
280 using blink::WebFloatRect;
281 using blink::WebHitTestResult; 271 using blink::WebHitTestResult;
282 #endif 272 #endif
283 273
284 namespace content { 274 namespace content {
285 275
286 //----------------------------------------------------------------------------- 276 //-----------------------------------------------------------------------------
287 277
288 typedef std::map<blink::WebView*, RenderViewImpl*> ViewMap; 278 typedef std::map<blink::WebView*, RenderViewImpl*> ViewMap;
289 static base::LazyInstance<ViewMap> g_view_map = LAZY_INSTANCE_INITIALIZER; 279 static base::LazyInstance<ViewMap> g_view_map = LAZY_INSTANCE_INITIALIZER;
290 typedef std::map<int32_t, RenderViewImpl*> RoutingIDViewMap; 280 typedef std::map<int32_t, RenderViewImpl*> RoutingIDViewMap;
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 frame_widget_(nullptr), 627 frame_widget_(nullptr),
638 speech_recognition_dispatcher_(NULL), 628 speech_recognition_dispatcher_(NULL),
639 mouse_lock_dispatcher_(NULL), 629 mouse_lock_dispatcher_(NULL),
640 #if defined(OS_ANDROID) 630 #if defined(OS_ANDROID)
641 expected_content_intent_id_(0), 631 expected_content_intent_id_(0),
642 #endif 632 #endif
643 #if defined(OS_WIN) 633 #if defined(OS_WIN)
644 focused_plugin_id_(-1), 634 focused_plugin_id_(-1),
645 #endif 635 #endif
646 #if defined(ENABLE_PLUGINS) 636 #if defined(ENABLE_PLUGINS)
647 plugin_find_handler_(NULL),
648 focused_pepper_plugin_(NULL), 637 focused_pepper_plugin_(NULL),
649 pepper_last_mouse_event_target_(NULL), 638 pepper_last_mouse_event_target_(NULL),
650 #endif 639 #endif
651 enumeration_completion_id_(0), 640 enumeration_completion_id_(0),
652 session_storage_namespace_id_(params.session_storage_namespace_id) { 641 session_storage_namespace_id_(params.session_storage_namespace_id) {
653 } 642 }
654 643
655 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params, 644 void RenderViewImpl::Initialize(const ViewMsg_New_Params& params,
656 bool was_created_by_renderer) { 645 bool was_created_by_renderer) {
657 SetRoutingID(params.view_id); 646 SetRoutingID(params.view_id);
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 bool handled = true; 1309 bool handled = true;
1321 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message) 1310 IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message)
1322 IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand) 1311 IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand)
1323 IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret) 1312 IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
1324 IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect, 1313 IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
1325 OnScrollFocusedEditableNodeIntoRect) 1314 OnScrollFocusedEditableNodeIntoRect)
1326 IPC_MESSAGE_HANDLER(InputMsg_SetEditCommandsForNextKeyEvent, 1315 IPC_MESSAGE_HANDLER(InputMsg_SetEditCommandsForNextKeyEvent,
1327 OnSetEditCommandsForNextKeyEvent) 1316 OnSetEditCommandsForNextKeyEvent)
1328 IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt) 1317 IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt)
1329 IPC_MESSAGE_HANDLER(ViewMsg_SaveImageAt, OnSaveImageAt) 1318 IPC_MESSAGE_HANDLER(ViewMsg_SaveImageAt, OnSaveImageAt)
1330 IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind)
1331 IPC_MESSAGE_HANDLER(ViewMsg_StopFinding, OnStopFinding)
1332 IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale) 1319 IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale)
1333 IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom) 1320 IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom)
1334 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL, 1321 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingURL,
1335 OnSetZoomLevelForLoadingURL) 1322 OnSetZoomLevelForLoadingURL)
1336 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForView, 1323 IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForView,
1337 OnSetZoomLevelForView) 1324 OnSetZoomLevelForView)
1338 IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding) 1325 IPC_MESSAGE_HANDLER(ViewMsg_SetPageEncoding, OnSetPageEncoding)
1339 IPC_MESSAGE_HANDLER(ViewMsg_ResetPageEncodingToDefault, 1326 IPC_MESSAGE_HANDLER(ViewMsg_ResetPageEncodingToDefault,
1340 OnResetPageEncodingToDefault) 1327 OnResetPageEncodingToDefault)
1341 IPC_MESSAGE_HANDLER(DragMsg_TargetDragEnter, OnDragTargetDragEnter) 1328 IPC_MESSAGE_HANDLER(DragMsg_TargetDragEnter, OnDragTargetDragEnter)
(...skipping 30 matching lines...) Expand all
1372 IPC_MESSAGE_HANDLER(ViewMsg_ShowContextMenu, OnShowContextMenu) 1359 IPC_MESSAGE_HANDLER(ViewMsg_ShowContextMenu, OnShowContextMenu)
1373 // TODO(viettrungluu): Move to a separate message filter. 1360 // TODO(viettrungluu): Move to a separate message filter.
1374 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryOffsetAndLength, 1361 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryOffsetAndLength,
1375 OnSetHistoryOffsetAndLength) 1362 OnSetHistoryOffsetAndLength)
1376 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 1363 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
1377 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, 1364 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap,
1378 OnReleaseDisambiguationPopupBitmap) 1365 OnReleaseDisambiguationPopupBitmap)
1379 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) 1366 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw)
1380 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) 1367 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret)
1381 #if defined(OS_ANDROID) 1368 #if defined(OS_ANDROID)
1382 IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult,
1383 OnActivateNearestFindResult)
1384 IPC_MESSAGE_HANDLER(ViewMsg_FindMatchRects, OnFindMatchRects)
1385 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState, 1369 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTopControlsState,
1386 OnUpdateTopControlsState) 1370 OnUpdateTopControlsState)
1387 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData) 1371 IPC_MESSAGE_HANDLER(ViewMsg_ExtractSmartClipData, OnExtractSmartClipData)
1388 #elif defined(OS_MACOSX) 1372 #elif defined(OS_MACOSX)
1389 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText, 1373 IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedText,
1390 OnGetRenderedText) 1374 OnGetRenderedText)
1391 IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted, 1375 IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted,
1392 OnPluginImeCompositionCompleted) 1376 OnPluginImeCompositionCompleted)
1393 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose) 1377 IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
1394 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) 1378 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
2208 2192
2209 gfx::Size size = webview()->contentsPreferredMinimumSize(); 2193 gfx::Size size = webview()->contentsPreferredMinimumSize();
2210 if (size == preferred_size_) 2194 if (size == preferred_size_)
2211 return; 2195 return;
2212 2196
2213 preferred_size_ = size; 2197 preferred_size_ = size;
2214 Send(new ViewHostMsg_DidContentsPreferredSizeChange(routing_id(), 2198 Send(new ViewHostMsg_DidContentsPreferredSizeChange(routing_id(),
2215 preferred_size_)); 2199 preferred_size_));
2216 } 2200 }
2217 2201
2218 void RenderViewImpl::SendFindReply(int request_id,
2219 int match_count,
2220 int ordinal,
2221 const WebRect& selection_rect,
2222 bool final_status_update) {
2223 Send(new ViewHostMsg_Find_Reply(routing_id(), request_id, match_count,
2224 selection_rect, ordinal,
2225 final_status_update));
2226 }
2227
2228 blink::WebString RenderViewImpl::acceptLanguages() { 2202 blink::WebString RenderViewImpl::acceptLanguages() {
2229 return WebString::fromUTF8(renderer_preferences_.accept_languages); 2203 return WebString::fromUTF8(renderer_preferences_.accept_languages);
2230 } 2204 }
2231 2205
2232 // RenderView implementation --------------------------------------------------- 2206 // RenderView implementation ---------------------------------------------------
2233 2207
2234 bool RenderViewImpl::Send(IPC::Message* message) { 2208 bool RenderViewImpl::Send(IPC::Message* message) {
2235 return RenderWidget::Send(message); 2209 return RenderWidget::Send(message);
2236 } 2210 }
2237 2211
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2295 WebFrame* focused_frame = webview()->focusedFrame(); 2269 WebFrame* focused_frame = webview()->focusedFrame();
2296 if (focused_frame) { 2270 if (focused_frame) {
2297 WebDocument doc = focused_frame->document(); 2271 WebDocument doc = focused_frame->document();
2298 if (!doc.isNull()) 2272 if (!doc.isNull())
2299 return doc.focusedElement(); 2273 return doc.focusedElement();
2300 } 2274 }
2301 2275
2302 return WebElement(); 2276 return WebElement();
2303 } 2277 }
2304 2278
2305 blink::WebPlugin* RenderViewImpl::GetWebPluginForFind() {
2306 if (!webview())
2307 return NULL;
2308
2309 WebFrame* main_frame = webview()->mainFrame();
2310 if (main_frame->isWebLocalFrame() &&
2311 main_frame->document().isPluginDocument())
2312 return webview()->mainFrame()->document().to<WebPluginDocument>().plugin();
2313
2314 #if defined(ENABLE_PLUGINS)
2315 if (plugin_find_handler_)
2316 return plugin_find_handler_->container()->plugin();
2317 #endif
2318
2319 return NULL;
2320 }
2321
2322 void RenderViewImpl::OnFind(int request_id,
2323 const base::string16& search_text,
2324 const WebFindOptions& options) {
2325 DCHECK(!search_text.empty());
2326
2327 WebFrame* main_frame = webview()->mainFrame();
2328 blink::WebPlugin* plugin = GetWebPluginForFind();
2329 // Check if the plugin still exists in the document.
2330 if (plugin) {
2331 if (options.findNext) {
2332 // Just navigate back/forward.
2333 plugin->selectFindResult(options.forward);
2334 } else {
2335 if (!plugin->startFind(
2336 search_text, options.matchCase, request_id)) {
2337 // Send "no results".
2338 SendFindReply(request_id, 0, 0, gfx::Rect(), true);
2339 }
2340 }
2341 return;
2342 }
2343
2344 WebFrame* frame_after_main = main_frame->traverseNext(true);
2345 WebFrame* focused_frame = webview()->focusedFrame();
2346 WebFrame* search_frame = focused_frame; // start searching focused frame.
2347
2348 bool multi_frame = (frame_after_main != main_frame);
2349
2350 // If we have multiple frames, we don't want to wrap the search within the
2351 // frame, so we check here if we only have main_frame in the chain.
2352 bool wrap_within_frame = !multi_frame;
2353
2354 WebRect selection_rect;
2355 bool result = false;
2356
2357 // If something is selected when we start searching it means we cannot just
2358 // increment the current match ordinal; we need to re-generate it.
2359 WebRange current_selection = focused_frame->selectionRange();
2360
2361 do {
2362 result = search_frame->find(
2363 request_id, search_text, options, wrap_within_frame, &selection_rect);
2364
2365 if (!result) {
2366 // don't leave text selected as you move to the next frame.
2367 search_frame->executeCommand(WebString::fromUTF8("Unselect"),
2368 GetFocusedElement());
2369
2370 // Find the next frame, but skip the invisible ones.
2371 do {
2372 // What is the next frame to search? (we might be going backwards). Note
2373 // that we specify wrap=true so that search_frame never becomes NULL.
2374 search_frame = options.forward ?
2375 search_frame->traverseNext(true) :
2376 search_frame->traversePrevious(true);
2377 } while (!search_frame->hasVisibleContent() &&
2378 search_frame != focused_frame);
2379
2380 // Make sure selection doesn't affect the search operation in new frame.
2381 search_frame->executeCommand(WebString::fromUTF8("Unselect"),
2382 GetFocusedElement());
2383
2384 // If we have multiple frames and we have wrapped back around to the
2385 // focused frame, we need to search it once more allowing wrap within
2386 // the frame, otherwise it will report 'no match' if the focused frame has
2387 // reported matches, but no frames after the focused_frame contain a
2388 // match for the search word(s).
2389 if (multi_frame && search_frame == focused_frame) {
2390 result = search_frame->find(
2391 request_id, search_text, options, true, // Force wrapping.
2392 &selection_rect);
2393 }
2394 }
2395
2396 webview()->setFocusedFrame(search_frame);
2397 } while (!result && search_frame != focused_frame);
2398
2399 if (options.findNext && current_selection.isNull()) {
2400 // Force the main_frame to report the actual count.
2401 main_frame->increaseMatchCount(0, request_id);
2402 } else {
2403 // If nothing is found, set result to "0 of 0", otherwise, set it to
2404 // "-1 of 1" to indicate that we found at least one item, but we don't know
2405 // yet what is active.
2406 int ordinal = result ? -1 : 0; // -1 here means, we might know more later.
2407 int match_count = result ? 1 : 0; // 1 here means possibly more coming.
2408
2409 // If we find no matches then this will be our last status update.
2410 // Otherwise the scoping effort will send more results.
2411 bool final_status_update = !result;
2412
2413 SendFindReply(request_id, match_count, ordinal, selection_rect,
2414 final_status_update);
2415
2416 // Scoping effort begins, starting with the mainframe.
2417 search_frame = main_frame;
2418
2419 main_frame->resetMatchCount();
2420
2421 do {
2422 // Cancel all old scoping requests before starting a new one.
2423 search_frame->cancelPendingScopingEffort();
2424
2425 // We don't start another scoping effort unless at least one match has
2426 // been found.
2427 if (result) {
2428 // Start new scoping request. If the scoping function determines that it
2429 // needs to scope, it will defer until later.
2430 search_frame->scopeStringMatches(request_id,
2431 search_text,
2432 options,
2433 true); // reset the tickmarks
2434 }
2435
2436 // Iterate to the next frame. The frame will not necessarily scope, for
2437 // example if it is not visible.
2438 search_frame = search_frame->traverseNext(true);
2439 } while (search_frame != main_frame);
2440 }
2441 }
2442
2443 void RenderViewImpl::OnStopFinding(StopFindAction action) {
2444 WebView* view = webview();
2445 if (!view)
2446 return;
2447
2448 blink::WebPlugin* plugin = GetWebPluginForFind();
2449 if (plugin) {
2450 plugin->stopFind();
2451 return;
2452 }
2453
2454 bool clear_selection = action == STOP_FIND_ACTION_CLEAR_SELECTION;
2455 if (clear_selection) {
2456 view->focusedFrame()->executeCommand(WebString::fromUTF8("Unselect"),
2457 GetFocusedElement());
2458 }
2459
2460 WebFrame* frame = view->mainFrame();
2461 while (frame) {
2462 frame->stopFinding(clear_selection);
2463 frame = frame->traverseNext(false);
2464 }
2465
2466 if (action == STOP_FIND_ACTION_ACTIVATE_SELECTION) {
2467 WebFrame* focused_frame = view->focusedFrame();
2468 if (focused_frame) {
2469 WebDocument doc = focused_frame->document();
2470 if (!doc.isNull()) {
2471 WebElement element = doc.focusedElement();
2472 if (!element.isNull())
2473 element.simulateClick();
2474 }
2475 }
2476 }
2477 }
2478
2479 #if defined(OS_ANDROID)
2480 void RenderViewImpl::OnActivateNearestFindResult(int request_id,
2481 float x, float y) {
2482 if (!webview())
2483 return;
2484
2485 WebFrame* main_frame = webview()->mainFrame();
2486 WebRect selection_rect;
2487 int ordinal = main_frame->selectNearestFindMatch(WebFloatPoint(x, y),
2488 &selection_rect);
2489 if (ordinal == -1) {
2490 // Something went wrong, so send a no-op reply (force the main_frame to
2491 // report the current match count) in case the host is waiting for a
2492 // response due to rate-limiting).
2493 main_frame->increaseMatchCount(0, request_id);
2494 return;
2495 }
2496
2497 SendFindReply(request_id,
2498 -1 /* number_of_matches */,
2499 ordinal,
2500 selection_rect,
2501 true /* final_update */);
2502 }
2503
2504 void RenderViewImpl::OnFindMatchRects(int current_version) {
2505 if (!webview())
2506 return;
2507
2508 WebFrame* main_frame = webview()->mainFrame();
2509 std::vector<gfx::RectF> match_rects;
2510
2511 int rects_version = main_frame->findMatchMarkersVersion();
2512 if (current_version != rects_version) {
2513 WebVector<WebFloatRect> web_match_rects;
2514 main_frame->findMatchRects(web_match_rects);
2515 match_rects.reserve(web_match_rects.size());
2516 for (size_t i = 0; i < web_match_rects.size(); ++i)
2517 match_rects.push_back(gfx::RectF(web_match_rects[i]));
2518 }
2519
2520 gfx::RectF active_rect = main_frame->activeFindMatchRect();
2521 Send(new ViewHostMsg_FindMatchRects_Reply(routing_id(), rects_version,
2522 match_rects, active_rect));
2523 }
2524 #endif
2525
2526 void RenderViewImpl::OnSetPageScale(float page_scale_factor) { 2279 void RenderViewImpl::OnSetPageScale(float page_scale_factor) {
2527 if (!webview()) 2280 if (!webview())
2528 return; 2281 return;
2529 webview()->setPageScaleFactor(page_scale_factor); 2282 webview()->setPageScaleFactor(page_scale_factor);
2530 } 2283 }
2531 2284
2532 void RenderViewImpl::OnZoom(PageZoom zoom) { 2285 void RenderViewImpl::OnZoom(PageZoom zoom) {
2533 if (!webview()) // Not sure if this can happen, but no harm in being safe. 2286 if (!webview()) // Not sure if this can happen, but no harm in being safe.
2534 return; 2287 return;
2535 2288
(...skipping 1185 matching lines...) Expand 10 before | Expand all | Expand 10 after
3721 if (IsUseZoomForDSFEnabled()) { 3474 if (IsUseZoomForDSFEnabled()) {
3722 webview()->setZoomFactorForDeviceScaleFactor(device_scale_factor_); 3475 webview()->setZoomFactorForDeviceScaleFactor(device_scale_factor_);
3723 } else { 3476 } else {
3724 webview()->setDeviceScaleFactor(device_scale_factor_); 3477 webview()->setDeviceScaleFactor(device_scale_factor_);
3725 } 3478 }
3726 webview()->settings()->setPreferCompositingToLCDTextEnabled( 3479 webview()->settings()->setPreferCompositingToLCDTextEnabled(
3727 PreferCompositingToLCDText(compositor_deps_, device_scale_factor_)); 3480 PreferCompositingToLCDText(compositor_deps_, device_scale_factor_));
3728 } 3481 }
3729 3482
3730 } // namespace content 3483 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698