| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/renderer_host/render_view_host.h" | 5 #include "content/browser/renderer_host/render_view_host.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/i18n/rtl.h" | 12 #include "base/i18n/rtl.h" |
| 13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
| 14 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
| 15 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
| 16 #include "base/string_util.h" | 16 #include "base/string_util.h" |
| 17 #include "base/time.h" | 17 #include "base/time.h" |
| 18 #include "base/utf_string_conversions.h" | 18 #include "base/utf_string_conversions.h" |
| 19 #include "base/values.h" | 19 #include "base/values.h" |
| 20 #include "content/browser/browser_context.h" | 20 #include "content/browser/browser_context.h" |
| 21 #include "content/browser/browser_message_filter.h" | 21 #include "content/browser/browser_message_filter.h" |
| 22 #include "content/browser/browsing_instance_frame_id.h" |
| 22 #include "content/browser/child_process_security_policy.h" | 23 #include "content/browser/child_process_security_policy.h" |
| 23 #include "content/browser/cross_site_request_manager.h" | 24 #include "content/browser/cross_site_request_manager.h" |
| 25 #include "content/browser/frame_map.h" |
| 24 #include "content/browser/host_zoom_map.h" | 26 #include "content/browser/host_zoom_map.h" |
| 25 #include "content/browser/in_process_webkit/session_storage_namespace.h" | 27 #include "content/browser/in_process_webkit/session_storage_namespace.h" |
| 26 #include "content/browser/power_save_blocker.h" | 28 #include "content/browser/power_save_blocker.h" |
| 27 #include "content/browser/renderer_host/render_process_host_impl.h" | 29 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 28 #include "content/browser/renderer_host/render_view_host_delegate.h" | 30 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| 29 #include "content/browser/renderer_host/render_widget_host.h" | 31 #include "content/browser/renderer_host/render_widget_host.h" |
| 30 #include "content/browser/renderer_host/render_widget_host_view.h" | 32 #include "content/browser/renderer_host/render_widget_host_view.h" |
| 31 #include "content/browser/site_instance.h" | 33 #include "content/browser/site_instance.h" |
| 32 #include "content/browser/user_metrics.h" | 34 #include "content/browser/user_metrics.h" |
| 33 #include "content/common/desktop_notification_messages.h" | 35 #include "content/common/desktop_notification_messages.h" |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 | 256 |
| 255 void RenderViewHost::NavigateToURL(const GURL& url) { | 257 void RenderViewHost::NavigateToURL(const GURL& url) { |
| 256 ViewMsg_Navigate_Params params; | 258 ViewMsg_Navigate_Params params; |
| 257 params.page_id = -1; | 259 params.page_id = -1; |
| 258 params.pending_history_list_offset = -1; | 260 params.pending_history_list_offset = -1; |
| 259 params.current_history_list_offset = -1; | 261 params.current_history_list_offset = -1; |
| 260 params.current_history_list_length = 0; | 262 params.current_history_list_length = 0; |
| 261 params.url = url; | 263 params.url = url; |
| 262 params.transition = content::PAGE_TRANSITION_LINK; | 264 params.transition = content::PAGE_TRANSITION_LINK; |
| 263 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 265 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
| 266 params.opener_browsing_instance_frame_id = -1; |
| 264 Navigate(params); | 267 Navigate(params); |
| 265 } | 268 } |
| 266 | 269 |
| 267 void RenderViewHost::SetNavigationsSuspended(bool suspend) { | 270 void RenderViewHost::SetNavigationsSuspended(bool suspend) { |
| 268 // This should only be called to toggle the state. | 271 // This should only be called to toggle the state. |
| 269 DCHECK(navigations_suspended_ != suspend); | 272 DCHECK(navigations_suspended_ != suspend); |
| 270 | 273 |
| 271 navigations_suspended_ = suspend; | 274 navigations_suspended_ = suspend; |
| 272 if (!suspend && suspended_nav_message_.get()) { | 275 if (!suspend && suspended_nav_message_.get()) { |
| 273 // There's a navigation message waiting to be sent. Now that we're not | 276 // There's a navigation message waiting to be sent. Now that we're not |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 // already decided to silence them in crbug.com/68780. We will set it back | 327 // already decided to silence them in crbug.com/68780. We will set it back |
| 325 // to false in SetNavigationsSuspended if we swap back in. | 328 // to false in SetNavigationsSuspended if we swap back in. |
| 326 is_swapped_out_ = true; | 329 is_swapped_out_ = true; |
| 327 | 330 |
| 328 // This will be set back to false in OnSwapOutACK, just before we replace | 331 // This will be set back to false in OnSwapOutACK, just before we replace |
| 329 // this RVH with the pending RVH. | 332 // this RVH with the pending RVH. |
| 330 is_waiting_for_unload_ack_ = true; | 333 is_waiting_for_unload_ack_ = true; |
| 331 // Start the hang monitor in case the renderer hangs in the unload handler. | 334 // Start the hang monitor in case the renderer hangs in the unload handler. |
| 332 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | 335 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
| 333 | 336 |
| 337 content::FrameMap& frame_mapper = |
| 338 process()->GetBrowserContext()->frame_mapper(); |
| 339 content::BrowsingInstanceFrame* topLevelFrame = |
| 340 frame_mapper.FindTopLevelFrameByProcessAndRoute(process()->GetID(), |
| 341 routing_id()); |
| 342 DCHECK(topLevelFrame); |
| 343 |
| 334 ViewMsg_SwapOut_Params params; | 344 ViewMsg_SwapOut_Params params; |
| 335 params.closing_process_id = process()->GetID(); | 345 params.closing_process_id = process()->GetID(); |
| 336 params.closing_route_id = routing_id(); | 346 params.closing_route_id = routing_id(); |
| 337 params.new_render_process_host_id = new_render_process_host_id; | 347 params.new_render_process_host_id = new_render_process_host_id; |
| 338 params.new_request_id = new_request_id; | 348 params.new_request_id = new_request_id; |
| 349 params.browsing_instance_frame_id = topLevelFrame->id(); |
| 350 |
| 339 if (IsRenderViewLive()) { | 351 if (IsRenderViewLive()) { |
| 340 Send(new ViewMsg_SwapOut(routing_id(), params)); | 352 Send(new ViewMsg_SwapOut(routing_id(), params)); |
| 341 } else { | 353 } else { |
| 342 // This RenderViewHost doesn't have a live renderer, so just skip the unload | 354 // This RenderViewHost doesn't have a live renderer, so just skip the unload |
| 343 // event. We must notify the ResourceDispatcherHost on the IO thread, | 355 // event. We must notify the ResourceDispatcherHost on the IO thread, |
| 344 // which we will do through the RenderProcessHost's widget helper. | 356 // which we will do through the RenderProcessHost's widget helper. |
| 345 process()->CrossSiteSwapOutACK(params); | 357 process()->CrossSiteSwapOutACK(params); |
| 346 } | 358 } |
| 347 } | 359 } |
| 348 | 360 |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1000 FilterURL(policy, renderer_id, &validated_params.frame_url); | 1012 FilterURL(policy, renderer_id, &validated_params.frame_url); |
| 1001 | 1013 |
| 1002 view->ShowContextMenu(validated_params); | 1014 view->ShowContextMenu(validated_params); |
| 1003 } | 1015 } |
| 1004 | 1016 |
| 1005 void RenderViewHost::OnMsgToggleFullscreen(bool enter_fullscreen) { | 1017 void RenderViewHost::OnMsgToggleFullscreen(bool enter_fullscreen) { |
| 1006 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1018 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 1007 delegate_->ToggleFullscreenMode(enter_fullscreen); | 1019 delegate_->ToggleFullscreenMode(enter_fullscreen); |
| 1008 } | 1020 } |
| 1009 | 1021 |
| 1010 void RenderViewHost::OnMsgOpenURL(const GURL& url, | 1022 void RenderViewHost::OnMsgOpenURL(const ViewHostMsg_OpenURL_Params& params) { |
| 1011 const content::Referrer& referrer, | 1023 GURL validated_url(params.url); |
| 1012 WindowOpenDisposition disposition, | |
| 1013 int64 source_frame_id) { | |
| 1014 GURL validated_url(url); | |
| 1015 FilterURL(ChildProcessSecurityPolicy::GetInstance(), | 1024 FilterURL(ChildProcessSecurityPolicy::GetInstance(), |
| 1016 process()->GetID(), &validated_url); | 1025 process()->GetID(), &validated_url); |
| 1017 | 1026 |
| 1018 delegate_->RequestOpenURL( | 1027 // Translate the RenderView's opener_frame_id to browsing instance frame id |
| 1019 validated_url, referrer, disposition, source_frame_id); | 1028 int64 opener_browsing_instance_frame_id = -1; |
| 1029 DLOG(WARNING) << "OnMsgOpenURL, opener_frame_id = " << params.opener_frame_id; |
| 1030 if (params.opener_frame_id) { |
| 1031 DLOG(WARNING) << "Mapping opener_frame_id " << params.opener_frame_id; |
| 1032 DLOG(WARNING) << "Process = " << process()->GetID(); |
| 1033 content::FrameMap& frame_mapper = |
| 1034 process()->GetBrowserContext()->frame_mapper(); |
| 1035 content::BrowsingInstanceFrame* opener = frame_mapper.FindByWebKitId( |
| 1036 process()->GetID(), params.opener_frame_id); |
| 1037 if (opener) { |
| 1038 DLOG(WARNING) << "Opener is " << opener->id(); |
| 1039 opener_browsing_instance_frame_id = opener->id(); |
| 1040 } else { |
| 1041 DLOG(WARNING) << "Opener not found"; |
| 1042 } |
| 1043 } |
| 1044 delegate_->RequestOpenURL(validated_url, params.referrer, |
| 1045 params.disposition, params.source_frame_id, |
| 1046 opener_browsing_instance_frame_id); |
| 1020 } | 1047 } |
| 1021 | 1048 |
| 1022 void RenderViewHost::OnMsgDidContentsPreferredSizeChange( | 1049 void RenderViewHost::OnMsgDidContentsPreferredSizeChange( |
| 1023 const gfx::Size& new_size) { | 1050 const gfx::Size& new_size) { |
| 1024 delegate_->UpdatePreferredSize(new_size); | 1051 delegate_->UpdatePreferredSize(new_size); |
| 1025 } | 1052 } |
| 1026 | 1053 |
| 1027 void RenderViewHost::OnRenderAutoResized(const gfx::Size& new_size) { | 1054 void RenderViewHost::OnRenderAutoResized(const gfx::Size& new_size) { |
| 1028 delegate_->UpdatePreferredSize(new_size); | 1055 delegate_->UpdatePreferredSize(new_size); |
| 1029 } | 1056 } |
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 | 1547 |
| 1521 void RenderViewHost::OnWebUISend(const GURL& source_url, | 1548 void RenderViewHost::OnWebUISend(const GURL& source_url, |
| 1522 const std::string& name, | 1549 const std::string& name, |
| 1523 const base::ListValue& args) { | 1550 const base::ListValue& args) { |
| 1524 delegate_->WebUISend(this, source_url, name, args); | 1551 delegate_->WebUISend(this, source_url, name, args); |
| 1525 } | 1552 } |
| 1526 | 1553 |
| 1527 void RenderViewHost::ClearPowerSaveBlockers() { | 1554 void RenderViewHost::ClearPowerSaveBlockers() { |
| 1528 STLDeleteValues(&power_save_blockers_); | 1555 STLDeleteValues(&power_save_blockers_); |
| 1529 } | 1556 } |
| OLD | NEW |