| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/browser/frame_host/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 #include "content/browser/renderer_host/input/input_router.h" | 30 #include "content/browser/renderer_host/input/input_router.h" |
| 31 #include "content/browser/renderer_host/input/timeout_monitor.h" | 31 #include "content/browser/renderer_host/input/timeout_monitor.h" |
| 32 #include "content/browser/renderer_host/render_process_host_impl.h" | 32 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 33 #include "content/browser/renderer_host/render_view_host_delegate.h" | 33 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| 34 #include "content/browser/renderer_host/render_view_host_delegate_view.h" | 34 #include "content/browser/renderer_host/render_view_host_delegate_view.h" |
| 35 #include "content/browser/renderer_host/render_view_host_impl.h" | 35 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 36 #include "content/browser/renderer_host/render_widget_host_impl.h" | 36 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 37 #include "content/browser/renderer_host/render_widget_host_view_base.h" | 37 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| 38 #include "content/browser/transition_request_manager.h" | 38 #include "content/browser/transition_request_manager.h" |
| 39 #include "content/common/accessibility_messages.h" | 39 #include "content/common/accessibility_messages.h" |
| 40 #include "content/common/desktop_notification_messages.h" | |
| 41 #include "content/common/frame_messages.h" | 40 #include "content/common/frame_messages.h" |
| 42 #include "content/common/input_messages.h" | 41 #include "content/common/input_messages.h" |
| 43 #include "content/common/inter_process_time_ticks_converter.h" | 42 #include "content/common/inter_process_time_ticks_converter.h" |
| 44 #include "content/common/navigation_params.h" | 43 #include "content/common/navigation_params.h" |
| 45 #include "content/common/platform_notification_messages.h" | 44 #include "content/common/platform_notification_messages.h" |
| 46 #include "content/common/render_frame_setup.mojom.h" | 45 #include "content/common/render_frame_setup.mojom.h" |
| 47 #include "content/common/swapped_out_messages.h" | 46 #include "content/common/swapped_out_messages.h" |
| 48 #include "content/public/browser/ax_event_notification_details.h" | 47 #include "content/public/browser/ax_event_notification_details.h" |
| 49 #include "content/public/browser/browser_accessibility_state.h" | 48 #include "content/public/browser/browser_accessibility_state.h" |
| 50 #include "content/public/browser/browser_context.h" | 49 #include "content/public/browser/browser_context.h" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 76 // The next value to use for the accessibility reset token. | 75 // The next value to use for the accessibility reset token. |
| 77 int g_next_accessibility_reset_token = 1; | 76 int g_next_accessibility_reset_token = 1; |
| 78 | 77 |
| 79 // The (process id, routing id) pair that identifies one RenderFrame. | 78 // The (process id, routing id) pair that identifies one RenderFrame. |
| 80 typedef std::pair<int32, int32> RenderFrameHostID; | 79 typedef std::pair<int32, int32> RenderFrameHostID; |
| 81 typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*> | 80 typedef base::hash_map<RenderFrameHostID, RenderFrameHostImpl*> |
| 82 RoutingIDFrameMap; | 81 RoutingIDFrameMap; |
| 83 base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = | 82 base::LazyInstance<RoutingIDFrameMap> g_routing_id_frame_map = |
| 84 LAZY_INSTANCE_INITIALIZER; | 83 LAZY_INSTANCE_INITIALIZER; |
| 85 | 84 |
| 86 class DesktopNotificationDelegateImpl : public DesktopNotificationDelegate { | |
| 87 public: | |
| 88 DesktopNotificationDelegateImpl(RenderFrameHost* render_frame_host, | |
| 89 int notification_id) | |
| 90 : render_process_id_(render_frame_host->GetProcess()->GetID()), | |
| 91 render_frame_id_(render_frame_host->GetRoutingID()), | |
| 92 notification_id_(notification_id) {} | |
| 93 | |
| 94 ~DesktopNotificationDelegateImpl() override {} | |
| 95 | |
| 96 void NotificationDisplayed() override { | |
| 97 RenderFrameHost* rfh = | |
| 98 RenderFrameHost::FromID(render_process_id_, render_frame_id_); | |
| 99 if (!rfh) | |
| 100 return; | |
| 101 | |
| 102 rfh->Send(new DesktopNotificationMsg_PostDisplay( | |
| 103 rfh->GetRoutingID(), notification_id_)); | |
| 104 } | |
| 105 | |
| 106 void NotificationClosed(bool by_user) override { | |
| 107 RenderFrameHost* rfh = | |
| 108 RenderFrameHost::FromID(render_process_id_, render_frame_id_); | |
| 109 if (!rfh) | |
| 110 return; | |
| 111 | |
| 112 rfh->Send(new DesktopNotificationMsg_PostClose( | |
| 113 rfh->GetRoutingID(), notification_id_, by_user)); | |
| 114 static_cast<RenderFrameHostImpl*>(rfh)->NotificationClosed( | |
| 115 notification_id_); | |
| 116 } | |
| 117 | |
| 118 void NotificationClick() override { | |
| 119 RenderFrameHost* rfh = | |
| 120 RenderFrameHost::FromID(render_process_id_, render_frame_id_); | |
| 121 if (!rfh) | |
| 122 return; | |
| 123 | |
| 124 rfh->Send(new DesktopNotificationMsg_PostClick( | |
| 125 rfh->GetRoutingID(), notification_id_)); | |
| 126 } | |
| 127 | |
| 128 private: | |
| 129 int render_process_id_; | |
| 130 int render_frame_id_; | |
| 131 int notification_id_; | |
| 132 }; | |
| 133 | |
| 134 // Translate a WebKit text direction into a base::i18n one. | 85 // Translate a WebKit text direction into a base::i18n one. |
| 135 base::i18n::TextDirection WebTextDirectionToChromeTextDirection( | 86 base::i18n::TextDirection WebTextDirectionToChromeTextDirection( |
| 136 blink::WebTextDirection dir) { | 87 blink::WebTextDirection dir) { |
| 137 switch (dir) { | 88 switch (dir) { |
| 138 case blink::WebTextDirectionLeftToRight: | 89 case blink::WebTextDirectionLeftToRight: |
| 139 return base::i18n::LEFT_TO_RIGHT; | 90 return base::i18n::LEFT_TO_RIGHT; |
| 140 case blink::WebTextDirectionRightToLeft: | 91 case blink::WebTextDirectionRightToLeft: |
| 141 return base::i18n::RIGHT_TO_LEFT; | 92 return base::i18n::RIGHT_TO_LEFT; |
| 142 default: | 93 default: |
| 143 NOTREACHED(); | 94 NOTREACHED(); |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument, | 328 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAccessInitialDocument, |
| 378 OnDidAccessInitialDocument) | 329 OnDidAccessInitialDocument) |
| 379 IPC_MESSAGE_HANDLER(FrameHostMsg_DidDisownOpener, OnDidDisownOpener) | 330 IPC_MESSAGE_HANDLER(FrameHostMsg_DidDisownOpener, OnDidDisownOpener) |
| 380 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAssignPageId, OnDidAssignPageId) | 331 IPC_MESSAGE_HANDLER(FrameHostMsg_DidAssignPageId, OnDidAssignPageId) |
| 381 IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateTitle, OnUpdateTitle) | 332 IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateTitle, OnUpdateTitle) |
| 382 IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateEncoding, OnUpdateEncoding) | 333 IPC_MESSAGE_HANDLER(FrameHostMsg_UpdateEncoding, OnUpdateEncoding) |
| 383 IPC_MESSAGE_HANDLER(FrameHostMsg_BeginNavigation, | 334 IPC_MESSAGE_HANDLER(FrameHostMsg_BeginNavigation, |
| 384 OnBeginNavigation) | 335 OnBeginNavigation) |
| 385 IPC_MESSAGE_HANDLER(PlatformNotificationHostMsg_RequestPermission, | 336 IPC_MESSAGE_HANDLER(PlatformNotificationHostMsg_RequestPermission, |
| 386 OnRequestPlatformNotificationPermission) | 337 OnRequestPlatformNotificationPermission) |
| 387 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, | |
| 388 OnShowDesktopNotification) | |
| 389 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel, | |
| 390 OnCancelDesktopNotification) | |
| 391 IPC_MESSAGE_HANDLER(FrameHostMsg_TextSurroundingSelectionResponse, | 338 IPC_MESSAGE_HANDLER(FrameHostMsg_TextSurroundingSelectionResponse, |
| 392 OnTextSurroundingSelectionResponse) | 339 OnTextSurroundingSelectionResponse) |
| 393 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents) | 340 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents) |
| 394 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_LocationChanges, | 341 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_LocationChanges, |
| 395 OnAccessibilityLocationChanges) | 342 OnAccessibilityLocationChanges) |
| 396 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_FindInPageResult, | 343 IPC_MESSAGE_HANDLER(AccessibilityHostMsg_FindInPageResult, |
| 397 OnAccessibilityFindInPageResult) | 344 OnAccessibilityFindInPageResult) |
| 398 #if defined(OS_MACOSX) || defined(OS_ANDROID) | 345 #if defined(OS_MACOSX) || defined(OS_ANDROID) |
| 399 IPC_MESSAGE_HANDLER(FrameHostMsg_ShowPopup, OnShowPopup) | 346 IPC_MESSAGE_HANDLER(FrameHostMsg_ShowPopup, OnShowPopup) |
| 400 IPC_MESSAGE_HANDLER(FrameHostMsg_HidePopup, OnHidePopup) | 347 IPC_MESSAGE_HANDLER(FrameHostMsg_HidePopup, OnHidePopup) |
| (...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 // TODO(peter): plumb user_gesture and bridge_id. | 957 // TODO(peter): plumb user_gesture and bridge_id. |
| 1011 GetContentClient()->browser()->RequestPermission( | 958 GetContentClient()->browser()->RequestPermission( |
| 1012 content::PERMISSION_NOTIFICATIONS, | 959 content::PERMISSION_NOTIFICATIONS, |
| 1013 delegate()->GetAsWebContents(), | 960 delegate()->GetAsWebContents(), |
| 1014 routing_id_, | 961 routing_id_, |
| 1015 origin, | 962 origin, |
| 1016 true, // user_gesture, | 963 true, // user_gesture, |
| 1017 done_callback); | 964 done_callback); |
| 1018 } | 965 } |
| 1019 | 966 |
| 1020 void RenderFrameHostImpl::OnShowDesktopNotification( | |
| 1021 int notification_id, | |
| 1022 const ShowDesktopNotificationHostMsgParams& params) { | |
| 1023 scoped_ptr<DesktopNotificationDelegateImpl> delegate( | |
| 1024 new DesktopNotificationDelegateImpl(this, notification_id)); | |
| 1025 | |
| 1026 base::Closure cancel_callback; | |
| 1027 GetContentClient()->browser()->ShowDesktopNotification( | |
| 1028 params, | |
| 1029 GetSiteInstance()->GetBrowserContext(), | |
| 1030 GetProcess()->GetID(), | |
| 1031 delegate.Pass(), | |
| 1032 &cancel_callback); | |
| 1033 | |
| 1034 cancel_notification_callbacks_[notification_id] = cancel_callback; | |
| 1035 } | |
| 1036 | |
| 1037 void RenderFrameHostImpl::OnCancelDesktopNotification(int notification_id) { | |
| 1038 if (!cancel_notification_callbacks_.count(notification_id)) | |
| 1039 return; | |
| 1040 | |
| 1041 cancel_notification_callbacks_[notification_id].Run(); | |
| 1042 cancel_notification_callbacks_.erase(notification_id); | |
| 1043 } | |
| 1044 | |
| 1045 void RenderFrameHostImpl::OnTextSurroundingSelectionResponse( | 967 void RenderFrameHostImpl::OnTextSurroundingSelectionResponse( |
| 1046 const base::string16& content, | 968 const base::string16& content, |
| 1047 size_t start_offset, | 969 size_t start_offset, |
| 1048 size_t end_offset) { | 970 size_t end_offset) { |
| 1049 render_view_host_->OnTextSurroundingSelectionResponse( | 971 render_view_host_->OnTextSurroundingSelectionResponse( |
| 1050 content, start_offset, end_offset); | 972 content, start_offset, end_offset); |
| 1051 } | 973 } |
| 1052 | 974 |
| 1053 void RenderFrameHostImpl::OnDidAccessInitialDocument() { | 975 void RenderFrameHostImpl::OnDidAccessInitialDocument() { |
| 1054 delegate_->DidAccessInitialDocument(); | 976 delegate_->DidAccessInitialDocument(); |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1446 // If we are waiting for an unload or beforeunload ack and the user has | 1368 // If we are waiting for an unload or beforeunload ack and the user has |
| 1447 // suppressed messages, kill the tab immediately; a page that's spamming | 1369 // suppressed messages, kill the tab immediately; a page that's spamming |
| 1448 // alerts in onbeforeunload is presumably malicious, so there's no point in | 1370 // alerts in onbeforeunload is presumably malicious, so there's no point in |
| 1449 // continuing to run its script and dragging out the process. | 1371 // continuing to run its script and dragging out the process. |
| 1450 // This must be done after sending the reply since RenderView can't close | 1372 // This must be done after sending the reply since RenderView can't close |
| 1451 // correctly while waiting for a response. | 1373 // correctly while waiting for a response. |
| 1452 if (is_waiting && dialog_was_suppressed) | 1374 if (is_waiting && dialog_was_suppressed) |
| 1453 render_view_host_->delegate_->RendererUnresponsive(render_view_host_); | 1375 render_view_host_->delegate_->RendererUnresponsive(render_view_host_); |
| 1454 } | 1376 } |
| 1455 | 1377 |
| 1456 void RenderFrameHostImpl::NotificationClosed(int notification_id) { | |
| 1457 cancel_notification_callbacks_.erase(notification_id); | |
| 1458 } | |
| 1459 | |
| 1460 // PlzNavigate | 1378 // PlzNavigate |
| 1461 void RenderFrameHostImpl::CommitNavigation( | 1379 void RenderFrameHostImpl::CommitNavigation( |
| 1462 ResourceResponse* response, | 1380 ResourceResponse* response, |
| 1463 scoped_ptr<StreamHandle> body, | 1381 scoped_ptr<StreamHandle> body, |
| 1464 const CommonNavigationParams& common_params, | 1382 const CommonNavigationParams& common_params, |
| 1465 const CommitNavigationParams& commit_params) { | 1383 const CommitNavigationParams& commit_params) { |
| 1466 // TODO(clamy): Check if we have to add security checks for the browser plugin | 1384 // TODO(clamy): Check if we have to add security checks for the browser plugin |
| 1467 // guests. | 1385 // guests. |
| 1468 | 1386 |
| 1469 Send(new FrameMsg_CommitNavigation( | 1387 Send(new FrameMsg_CommitNavigation( |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1684 void RenderFrameHostImpl::DidUseGeolocationPermission() { | 1602 void RenderFrameHostImpl::DidUseGeolocationPermission() { |
| 1685 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); | 1603 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); |
| 1686 GetContentClient()->browser()->RegisterPermissionUsage( | 1604 GetContentClient()->browser()->RegisterPermissionUsage( |
| 1687 PERMISSION_GEOLOCATION, | 1605 PERMISSION_GEOLOCATION, |
| 1688 delegate_->GetAsWebContents(), | 1606 delegate_->GetAsWebContents(), |
| 1689 GetLastCommittedURL().GetOrigin(), | 1607 GetLastCommittedURL().GetOrigin(), |
| 1690 top_frame->GetLastCommittedURL().GetOrigin()); | 1608 top_frame->GetLastCommittedURL().GetOrigin()); |
| 1691 } | 1609 } |
| 1692 | 1610 |
| 1693 } // namespace content | 1611 } // namespace content |
| OLD | NEW |