| OLD | NEW |
| 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 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 837 // This ensures we are in a unique origin that others cannot script. | 837 // This ensures we are in a unique origin that others cannot script. |
| 838 if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame()) | 838 if (is_swapped_out_ && webview()->mainFrame()->isWebLocalFrame()) |
| 839 main_render_frame_->NavigateToSwappedOutURL(); | 839 main_render_frame_->NavigateToSwappedOutURL(); |
| 840 } | 840 } |
| 841 | 841 |
| 842 RenderViewImpl::~RenderViewImpl() { | 842 RenderViewImpl::~RenderViewImpl() { |
| 843 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin(); | 843 for (BitmapMap::iterator it = disambiguation_bitmaps_.begin(); |
| 844 it != disambiguation_bitmaps_.end(); | 844 it != disambiguation_bitmaps_.end(); |
| 845 ++it) | 845 ++it) |
| 846 delete it->second; | 846 delete it->second; |
| 847 history_page_ids_.clear(); | |
| 848 | |
| 849 base::debug::TraceLog::GetInstance()->RemoveProcessLabel(routing_id_); | 847 base::debug::TraceLog::GetInstance()->RemoveProcessLabel(routing_id_); |
| 850 | 848 |
| 851 // If file chooser is still waiting for answer, dispatch empty answer. | 849 // If file chooser is still waiting for answer, dispatch empty answer. |
| 852 while (!file_chooser_completions_.empty()) { | 850 while (!file_chooser_completions_.empty()) { |
| 853 if (file_chooser_completions_.front()->completion) { | 851 if (file_chooser_completions_.front()->completion) { |
| 854 file_chooser_completions_.front()->completion->didChooseFile( | 852 file_chooser_completions_.front()->completion->didChooseFile( |
| 855 WebVector<WebString>()); | 853 WebVector<WebString>()); |
| 856 } | 854 } |
| 857 file_chooser_completions_.pop_front(); | 855 file_chooser_completions_.pop_front(); |
| 858 } | 856 } |
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1338 IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt) | 1336 IPC_MESSAGE_HANDLER(ViewMsg_MediaPlayerActionAt, OnMediaPlayerActionAt) |
| 1339 IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt) | 1337 IPC_MESSAGE_HANDLER(ViewMsg_PluginActionAt, OnPluginActionAt) |
| 1340 IPC_MESSAGE_HANDLER(ViewMsg_SetActive, OnSetActive) | 1338 IPC_MESSAGE_HANDLER(ViewMsg_SetActive, OnSetActive) |
| 1341 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, | 1339 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, |
| 1342 OnGetAllSavableResourceLinksForCurrentPage) | 1340 OnGetAllSavableResourceLinksForCurrentPage) |
| 1343 IPC_MESSAGE_HANDLER( | 1341 IPC_MESSAGE_HANDLER( |
| 1344 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, | 1342 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, |
| 1345 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) | 1343 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) |
| 1346 IPC_MESSAGE_HANDLER(ViewMsg_ShowContextMenu, OnShowContextMenu) | 1344 IPC_MESSAGE_HANDLER(ViewMsg_ShowContextMenu, OnShowContextMenu) |
| 1347 // TODO(viettrungluu): Move to a separate message filter. | 1345 // TODO(viettrungluu): Move to a separate message filter. |
| 1348 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryLengthAndPrune, | 1346 IPC_MESSAGE_HANDLER(ViewMsg_SetHistoryOffsetAndLength, |
| 1349 OnSetHistoryLengthAndPrune) | 1347 OnSetHistoryOffsetAndLength) |
| 1350 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) | 1348 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) |
| 1351 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, | 1349 IPC_MESSAGE_HANDLER(ViewMsg_ReleaseDisambiguationPopupBitmap, |
| 1352 OnReleaseDisambiguationPopupBitmap) | 1350 OnReleaseDisambiguationPopupBitmap) |
| 1353 IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, | 1351 IPC_MESSAGE_HANDLER(ViewMsg_WindowSnapshotCompleted, |
| 1354 OnWindowSnapshotCompleted) | 1352 OnWindowSnapshotCompleted) |
| 1355 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) | 1353 IPC_MESSAGE_HANDLER(ViewMsg_ForceRedraw, OnForceRedraw) |
| 1356 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) | 1354 IPC_MESSAGE_HANDLER(ViewMsg_SelectWordAroundCaret, OnSelectWordAroundCaret) |
| 1357 #if defined(OS_ANDROID) | 1355 #if defined(OS_ANDROID) |
| 1358 IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult, | 1356 IPC_MESSAGE_HANDLER(InputMsg_ActivateNearestFindResult, |
| 1359 OnActivateNearestFindResult) | 1357 OnActivateNearestFindResult) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1382 | 1380 |
| 1383 void RenderViewImpl::OnSelectWordAroundCaret() { | 1381 void RenderViewImpl::OnSelectWordAroundCaret() { |
| 1384 if (!webview()) | 1382 if (!webview()) |
| 1385 return; | 1383 return; |
| 1386 | 1384 |
| 1387 handling_input_event_ = true; | 1385 handling_input_event_ = true; |
| 1388 webview()->focusedFrame()->selectWordAroundCaret(); | 1386 webview()->focusedFrame()->selectWordAroundCaret(); |
| 1389 handling_input_event_ = false; | 1387 handling_input_event_ = false; |
| 1390 } | 1388 } |
| 1391 | 1389 |
| 1392 bool RenderViewImpl::IsBackForwardToStaleEntry(const PageState& state, | |
| 1393 int pending_history_list_offset, | |
| 1394 int32 page_id, | |
| 1395 bool is_reload) { | |
| 1396 // Make sure this isn't a back/forward to an entry we have already cropped | |
| 1397 // or replaced from our history, before the browser knew about it. If so, | |
| 1398 // a new navigation has committed in the mean time, and we can ignore this. | |
| 1399 bool is_back_forward = !is_reload && state.IsValid(); | |
| 1400 | |
| 1401 // Note: if the history_list_length_ is 0 for a back/forward, we must be | |
| 1402 // restoring from a previous session. We'll update our state in OnNavigate. | |
| 1403 if (!is_back_forward || history_list_length_ <= 0) | |
| 1404 return false; | |
| 1405 | |
| 1406 DCHECK_EQ(static_cast<int>(history_page_ids_.size()), history_list_length_); | |
| 1407 | |
| 1408 // Check for whether the forward history has been cropped due to a recent | |
| 1409 // navigation the browser didn't know about. | |
| 1410 if (pending_history_list_offset >= history_list_length_) | |
| 1411 return true; | |
| 1412 | |
| 1413 // Check for whether this entry has been replaced with a new one. | |
| 1414 int expected_page_id = | |
| 1415 history_page_ids_[pending_history_list_offset]; | |
| 1416 if (expected_page_id > 0 && page_id != expected_page_id) { | |
| 1417 if (page_id < expected_page_id) | |
| 1418 return true; | |
| 1419 | |
| 1420 // Otherwise we've removed an earlier entry and should have shifted all | |
| 1421 // entries left. For now, it's ok to lazily update the list. | |
| 1422 // TODO(creis): Notify all live renderers when we remove entries from | |
| 1423 // the front of the list, so that we don't hit this case. | |
| 1424 history_page_ids_[pending_history_list_offset] = page_id; | |
| 1425 } | |
| 1426 | |
| 1427 return false; | |
| 1428 } | |
| 1429 | |
| 1430 void RenderViewImpl::OnCopyImageAt(int x, int y) { | 1390 void RenderViewImpl::OnCopyImageAt(int x, int y) { |
| 1431 webview()->copyImageAt(WebPoint(x, y)); | 1391 webview()->copyImageAt(WebPoint(x, y)); |
| 1432 } | 1392 } |
| 1433 | 1393 |
| 1434 void RenderViewImpl::OnSaveImageAt(int x, int y) { | 1394 void RenderViewImpl::OnSaveImageAt(int x, int y) { |
| 1435 webview()->saveImageAt(WebPoint(x, y)); | 1395 webview()->saveImageAt(WebPoint(x, y)); |
| 1436 } | 1396 } |
| 1437 | 1397 |
| 1438 void RenderViewImpl::OnUpdateTargetURLAck() { | 1398 void RenderViewImpl::OnUpdateTargetURLAck() { |
| 1439 // Check if there is a targeturl waiting to be sent. | 1399 // Check if there is a targeturl waiting to be sent. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1474 has_scrolled_focused_editable_node_into_rect_ = true; | 1434 has_scrolled_focused_editable_node_into_rect_ = true; |
| 1475 webview()->scrollFocusedNodeIntoRect(rect); | 1435 webview()->scrollFocusedNodeIntoRect(rect); |
| 1476 } | 1436 } |
| 1477 } | 1437 } |
| 1478 | 1438 |
| 1479 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( | 1439 void RenderViewImpl::OnSetEditCommandsForNextKeyEvent( |
| 1480 const EditCommands& edit_commands) { | 1440 const EditCommands& edit_commands) { |
| 1481 edit_commands_ = edit_commands; | 1441 edit_commands_ = edit_commands; |
| 1482 } | 1442 } |
| 1483 | 1443 |
| 1484 void RenderViewImpl::OnSetHistoryLengthAndPrune(int history_length, | 1444 void RenderViewImpl::OnSetHistoryOffsetAndLength(int history_offset, |
| 1485 int32 minimum_page_id) { | 1445 int history_length) { |
| 1446 DCHECK_GE(history_offset, -1); |
| 1486 DCHECK_GE(history_length, 0); | 1447 DCHECK_GE(history_length, 0); |
| 1487 DCHECK(history_list_offset_ == history_list_length_ - 1); | |
| 1488 DCHECK_GE(minimum_page_id, -1); | |
| 1489 | 1448 |
| 1490 // Generate the new list. | 1449 history_list_offset_ = history_offset; |
| 1491 std::vector<int32> new_history_page_ids(history_length, -1); | 1450 history_list_length_ = history_length; |
| 1492 for (size_t i = 0; i < history_page_ids_.size(); ++i) { | |
| 1493 if (minimum_page_id >= 0 && history_page_ids_[i] < minimum_page_id) | |
| 1494 continue; | |
| 1495 new_history_page_ids.push_back(history_page_ids_[i]); | |
| 1496 } | |
| 1497 new_history_page_ids.swap(history_page_ids_); | |
| 1498 | |
| 1499 // Update indexes. | |
| 1500 history_list_length_ = history_page_ids_.size(); | |
| 1501 history_list_offset_ = history_list_length_ - 1; | |
| 1502 } | 1451 } |
| 1503 | 1452 |
| 1504 | |
| 1505 void RenderViewImpl::OnSetInitialFocus(bool reverse) { | 1453 void RenderViewImpl::OnSetInitialFocus(bool reverse) { |
| 1506 if (!webview()) | 1454 if (!webview()) |
| 1507 return; | 1455 return; |
| 1508 webview()->setInitialFocus(reverse); | 1456 webview()->setInitialFocus(reverse); |
| 1509 } | 1457 } |
| 1510 | 1458 |
| 1511 #if defined(OS_MACOSX) | 1459 #if defined(OS_MACOSX) |
| 1512 void RenderViewImpl::OnSetInLiveResize(bool in_live_resize) { | 1460 void RenderViewImpl::OnSetInLiveResize(bool in_live_resize) { |
| 1513 if (!webview()) | 1461 if (!webview()) |
| 1514 return; | 1462 return; |
| (...skipping 2684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4199 std::vector<gfx::Size> sizes; | 4147 std::vector<gfx::Size> sizes; |
| 4200 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); | 4148 ConvertToFaviconSizes(icon_urls[i].sizes(), &sizes); |
| 4201 if (!url.isEmpty()) | 4149 if (!url.isEmpty()) |
| 4202 urls.push_back( | 4150 urls.push_back( |
| 4203 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); | 4151 FaviconURL(url, ToFaviconType(icon_urls[i].iconType()), sizes)); |
| 4204 } | 4152 } |
| 4205 SendUpdateFaviconURL(urls); | 4153 SendUpdateFaviconURL(urls); |
| 4206 } | 4154 } |
| 4207 | 4155 |
| 4208 } // namespace content | 4156 } // namespace content |
| OLD | NEW |