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/browser/renderer_host/render_view_host_impl.h" | 5 #include "content/browser/renderer_host/render_view_host_impl.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 routing_id, | 166 routing_id, |
167 hidden), | 167 hidden), |
168 delegate_(delegate), | 168 delegate_(delegate), |
169 instance_(static_cast<SiteInstanceImpl*>(instance)), | 169 instance_(static_cast<SiteInstanceImpl*>(instance)), |
170 waiting_for_drag_context_response_(false), | 170 waiting_for_drag_context_response_(false), |
171 enabled_bindings_(0), | 171 enabled_bindings_(0), |
172 navigations_suspended_(false), | 172 navigations_suspended_(false), |
173 has_accessed_initial_document_(false), | 173 has_accessed_initial_document_(false), |
174 is_swapped_out_(swapped_out), | 174 is_swapped_out_(swapped_out), |
175 is_subframe_(false), | 175 is_subframe_(false), |
176 main_frame_id_(-1), | 176 main_frame_routing_id_(main_frame_routing_id), |
177 run_modal_reply_msg_(NULL), | 177 run_modal_reply_msg_(NULL), |
178 run_modal_opener_id_(MSG_ROUTING_NONE), | 178 run_modal_opener_id_(MSG_ROUTING_NONE), |
179 is_waiting_for_beforeunload_ack_(false), | 179 is_waiting_for_beforeunload_ack_(false), |
180 is_waiting_for_unload_ack_(false), | 180 is_waiting_for_unload_ack_(false), |
181 has_timed_out_on_unload_(false), | 181 has_timed_out_on_unload_(false), |
182 unload_ack_is_for_cross_site_transition_(false), | 182 unload_ack_is_for_cross_site_transition_(false), |
183 are_javascript_messages_suppressed_(false), | 183 are_javascript_messages_suppressed_(false), |
184 sudden_termination_allowed_(false), | 184 sudden_termination_allowed_(false), |
185 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { | 185 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING) { |
186 DCHECK(instance_.get()); | 186 DCHECK(instance_.get()); |
187 CHECK(delegate_); // http://crbug.com/82827 | 187 CHECK(delegate_); // http://crbug.com/82827 |
188 | 188 |
189 if (main_frame_routing_id == MSG_ROUTING_NONE) | |
190 main_frame_routing_id = GetProcess()->GetNextRoutingID(); | |
191 | |
192 main_render_frame_host_.reset( | |
193 new RenderFrameHostImpl(this, delegate_->GetFrameTree(), | |
194 main_frame_routing_id, is_swapped_out_)); | |
195 | |
196 GetProcess()->EnableSendQueue(); | 189 GetProcess()->EnableSendQueue(); |
197 | 190 |
198 if (!swapped_out) | 191 if (!swapped_out) |
199 instance_->increment_active_view_count(); | 192 instance_->increment_active_view_count(); |
200 | 193 |
201 if (ResourceDispatcherHostImpl::Get()) { | 194 if (ResourceDispatcherHostImpl::Get()) { |
202 BrowserThread::PostTask( | 195 BrowserThread::PostTask( |
203 BrowserThread::IO, FROM_HERE, | 196 BrowserThread::IO, FROM_HERE, |
204 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostCreated, | 197 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostCreated, |
205 base::Unretained(ResourceDispatcherHostImpl::Get()), | 198 base::Unretained(ResourceDispatcherHostImpl::Get()), |
206 GetProcess()->GetID(), GetRoutingID())); | 199 GetProcess()->GetID(), GetRoutingID())); |
207 } | 200 } |
| 201 LOG(INFO) << "NEW RVH: process " << GetProcess()->GetID() << |
| 202 ", route " << GetRoutingID() << ", SID " << |
| 203 instance_->GetId() << ", site " << instance_->GetSiteURL(); |
208 | 204 |
209 #if defined(OS_ANDROID) | 205 #if defined(OS_ANDROID) |
210 media_player_manager_.reset(BrowserMediaPlayerManager::Create(this)); | 206 media_player_manager_.reset(BrowserMediaPlayerManager::Create(this)); |
211 #endif | 207 #endif |
212 } | 208 } |
213 | 209 |
214 RenderViewHostImpl::~RenderViewHostImpl() { | 210 RenderViewHostImpl::~RenderViewHostImpl() { |
| 211 LOG(INFO) << "DELETE RVH: process " << GetProcess()->GetID() << |
| 212 ", route " << GetRoutingID() << ", SID " << instance_->GetId(); |
215 if (ResourceDispatcherHostImpl::Get()) { | 213 if (ResourceDispatcherHostImpl::Get()) { |
216 BrowserThread::PostTask( | 214 BrowserThread::PostTask( |
217 BrowserThread::IO, FROM_HERE, | 215 BrowserThread::IO, FROM_HERE, |
218 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostDeleted, | 216 base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostDeleted, |
219 base::Unretained(ResourceDispatcherHostImpl::Get()), | 217 base::Unretained(ResourceDispatcherHostImpl::Get()), |
220 GetProcess()->GetID(), GetRoutingID())); | 218 GetProcess()->GetID(), GetRoutingID())); |
221 } | 219 } |
222 | 220 |
223 delegate_->RenderViewDeleted(this); | 221 delegate_->RenderViewDeleted(this); |
224 | 222 |
225 // Be sure to clean up any leftover state from cross-site requests. | 223 // Be sure to clean up any leftover state from cross-site requests. |
226 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( | 224 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( |
227 GetProcess()->GetID(), GetRoutingID(), false); | 225 GetProcess()->GetID(), GetRoutingID(), false); |
228 | 226 |
229 // If this was swapped out, it already decremented the active view | 227 // If this was swapped out, it already decremented the active view |
230 // count of the SiteInstance it belongs to. | 228 // count of the SiteInstance it belongs to. |
231 if (!is_swapped_out_) | 229 if (!is_swapped_out_) |
232 instance_->decrement_active_view_count(); | 230 instance_->decrement_active_view_count(); |
233 } | 231 } |
234 | 232 |
235 RenderViewHostDelegate* RenderViewHostImpl::GetDelegate() const { | 233 RenderViewHostDelegate* RenderViewHostImpl::GetDelegate() const { |
236 return delegate_; | 234 return delegate_; |
237 } | 235 } |
238 | 236 |
239 SiteInstance* RenderViewHostImpl::GetSiteInstance() const { | 237 SiteInstance* RenderViewHostImpl::GetSiteInstance() const { |
240 return instance_.get(); | 238 return instance_.get(); |
241 } | 239 } |
242 | 240 |
| 241 void RenderViewHostImpl::RegisterRenderFrameHost( |
| 242 RenderFrameHostImpl* render_frame_host) { |
| 243 LOG(INFO) << "RVH incrementing refcount with instance " << |
| 244 instance_->GetId() << " for " << instance_->GetSiteURL(); |
| 245 CHECK(rfh_list_.find(render_frame_host) == rfh_list_.end()); |
| 246 rfh_list_.insert(render_frame_host); |
| 247 } |
| 248 |
| 249 void RenderViewHostImpl::UnregisterRenderFrameHost( |
| 250 RenderFrameHostImpl* render_frame_host) { |
| 251 LOG(INFO) << "RVH decrementing refcount with instance " << |
| 252 instance_->GetId() << " for " << instance_->GetSiteURL(); |
| 253 CHECK(rfh_list_.find(render_frame_host) != rfh_list_.end()); |
| 254 rfh_list_.erase(render_frame_host); |
| 255 if (rfh_list_.size() == 0) |
| 256 Shutdown(); |
| 257 } |
| 258 |
| 259 void RenderViewHostImpl::RegisterFrameID(int64 frame_id, |
| 260 int64 frame_tree_node_id) { |
| 261 frame_id_map_[frame_id] = frame_tree_node_id; |
| 262 } |
| 263 |
| 264 void RenderViewHostImpl::UnregisterFrameID(int64 frame_id) { |
| 265 CHECK(HasFrameID(frame_id)); |
| 266 frame_id_map_.erase(frame_id); |
| 267 } |
| 268 |
| 269 bool RenderViewHostImpl::HasFrameID(int64 frame_id) const { |
| 270 return frame_id_map_.find(frame_id) != frame_id_map_.end(); |
| 271 } |
| 272 |
| 273 int64 RenderViewHostImpl::GetFrameTreeNodeID(int64 frame_id) { |
| 274 return frame_id_map_[frame_id]; |
| 275 } |
| 276 |
| 277 int64 RenderViewHostImpl::GetFrameIDForTesting(int64 frame_tree_node_id) const { |
| 278 for (FrameIDMap::const_iterator iter = frame_id_map_.begin(); |
| 279 iter != frame_id_map_.end(); |
| 280 iter++) { |
| 281 if (iter->second == frame_tree_node_id) |
| 282 return iter->first; |
| 283 } |
| 284 return -1; |
| 285 } |
| 286 |
243 bool RenderViewHostImpl::CreateRenderView( | 287 bool RenderViewHostImpl::CreateRenderView( |
244 const string16& frame_name, | 288 const string16& frame_name, |
245 int opener_route_id, | 289 int opener_route_id, |
246 int32 max_page_id) { | 290 int32 max_page_id) { |
247 TRACE_EVENT0("renderer_host", "RenderViewHostImpl::CreateRenderView"); | 291 TRACE_EVENT0("renderer_host", "RenderViewHostImpl::CreateRenderView"); |
248 DCHECK(!IsRenderViewLive()) << "Creating view twice"; | 292 DCHECK(!IsRenderViewLive()) << "Creating view twice"; |
249 | 293 |
250 // The process may (if we're sharing a process with another host that already | 294 // The process may (if we're sharing a process with another host that already |
251 // initialized it) or may not (we have our own process or the old process | 295 // initialized it) or may not (we have our own process or the old process |
252 // crashed) have been initialized. Calling Init multiple times will be | 296 // crashed) have been initialized. Calling Init multiple times will be |
(...skipping 12 matching lines...) Expand all Loading... |
265 // page ID it might be asked to render. | 309 // page ID it might be asked to render. |
266 int32 next_page_id = 1; | 310 int32 next_page_id = 1; |
267 if (max_page_id > -1) | 311 if (max_page_id > -1) |
268 next_page_id = max_page_id + 1; | 312 next_page_id = max_page_id + 1; |
269 | 313 |
270 ViewMsg_New_Params params; | 314 ViewMsg_New_Params params; |
271 params.renderer_preferences = | 315 params.renderer_preferences = |
272 delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); | 316 delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); |
273 params.web_preferences = delegate_->GetWebkitPrefs(); | 317 params.web_preferences = delegate_->GetWebkitPrefs(); |
274 params.view_id = GetRoutingID(); | 318 params.view_id = GetRoutingID(); |
275 params.main_frame_routing_id = main_render_frame_host()->routing_id(); | 319 params.main_frame_routing_id = main_frame_routing_id_; |
276 params.surface_id = surface_id(); | 320 params.surface_id = surface_id(); |
277 params.session_storage_namespace_id = | 321 params.session_storage_namespace_id = |
278 delegate_->GetSessionStorageNamespace(instance_)->id(); | 322 delegate_->GetSessionStorageNamespace(instance_)->id(); |
279 params.frame_name = frame_name; | 323 params.frame_name = frame_name; |
280 // Ensure the RenderView sets its opener correctly. | 324 // Ensure the RenderView sets its opener correctly. |
281 params.opener_route_id = opener_route_id; | 325 params.opener_route_id = opener_route_id; |
282 params.swapped_out = is_swapped_out_; | 326 params.swapped_out = is_swapped_out_; |
283 params.hidden = is_hidden(); | 327 params.hidden = is_hidden(); |
284 params.next_page_id = next_page_id; | 328 params.next_page_id = next_page_id; |
285 GetWebScreenInfo(¶ms.screen_info); | 329 GetWebScreenInfo(¶ms.screen_info); |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 } | 707 } |
664 } | 708 } |
665 | 709 |
666 void RenderViewHostImpl::OnCrossSiteResponse( | 710 void RenderViewHostImpl::OnCrossSiteResponse( |
667 const GlobalRequestID& global_request_id, | 711 const GlobalRequestID& global_request_id, |
668 bool is_transfer, | 712 bool is_transfer, |
669 const std::vector<GURL>& transfer_url_chain, | 713 const std::vector<GURL>& transfer_url_chain, |
670 const Referrer& referrer, | 714 const Referrer& referrer, |
671 PageTransition page_transition, | 715 PageTransition page_transition, |
672 int64 frame_id) { | 716 int64 frame_id) { |
673 RenderViewHostDelegate::RendererManagement* manager = | 717 FrameTreeNode* node = NULL; |
674 delegate_->GetRendererManagementDelegate(); | 718 if (frame_id != -1) { |
| 719 CHECK(HasFrameID(frame_id)); |
| 720 int64 frame_tree_node_id = GetFrameTreeNodeID(frame_id); |
| 721 node = delegate_->GetFrameTree()->FindByID(frame_tree_node_id); |
| 722 } |
| 723 |
| 724 // TODO(creis): We should always be able to get the RFHM for a frame_id, |
| 725 // but today the frame_id is -1 for the main frame. |
| 726 RenderViewHostDelegate::RendererManagement* manager = node ? |
| 727 node->render_manager() : delegate_->GetRenderManager(); |
| 728 CHECK(manager); |
675 if (manager) { | 729 if (manager) { |
676 manager->OnCrossSiteResponse(this, global_request_id, is_transfer, | 730 manager->OnCrossSiteResponse(this, global_request_id, is_transfer, |
677 transfer_url_chain, referrer, page_transition, | 731 transfer_url_chain, referrer, page_transition, |
678 frame_id); | 732 frame_id); |
679 } | 733 } |
680 } | 734 } |
681 | 735 |
682 void RenderViewHostImpl::SuppressDialogsUntilSwapOut() { | 736 void RenderViewHostImpl::SuppressDialogsUntilSwapOut() { |
683 Send(new ViewMsg_SuppressDialogsUntilSwapOut(GetRoutingID())); | 737 Send(new ViewMsg_SuppressDialogsUntilSwapOut(GetRoutingID())); |
684 } | 738 } |
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 // Kill the renderer. | 1319 // Kill the renderer. |
1266 RecordAction(UserMetricsAction("BadMessageTerminate_RVH")); | 1320 RecordAction(UserMetricsAction("BadMessageTerminate_RVH")); |
1267 GetProcess()->ReceivedBadMessage(); | 1321 GetProcess()->ReceivedBadMessage(); |
1268 } | 1322 } |
1269 | 1323 |
1270 return handled; | 1324 return handled; |
1271 } | 1325 } |
1272 | 1326 |
1273 void RenderViewHostImpl::Init() { | 1327 void RenderViewHostImpl::Init() { |
1274 RenderWidgetHostImpl::Init(); | 1328 RenderWidgetHostImpl::Init(); |
1275 main_render_frame_host()->Init(); | 1329 // TODO(creis): The caller of this should call Init on the RFH as well. |
| 1330 //main_render_frame_host()->Init(); |
1276 } | 1331 } |
1277 | 1332 |
1278 void RenderViewHostImpl::Shutdown() { | 1333 void RenderViewHostImpl::Shutdown() { |
1279 // If we are being run modally (see RunModal), then we need to cleanup. | 1334 // If we are being run modally (see RunModal), then we need to cleanup. |
1280 if (run_modal_reply_msg_) { | 1335 if (run_modal_reply_msg_) { |
1281 Send(run_modal_reply_msg_); | 1336 Send(run_modal_reply_msg_); |
1282 run_modal_reply_msg_ = NULL; | 1337 run_modal_reply_msg_ = NULL; |
1283 RenderViewHostImpl* opener = | 1338 RenderViewHostImpl* opener = |
1284 RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_); | 1339 RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_); |
1285 if (opener) { | 1340 if (opener) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1375 delegate_->RenderViewReady(this); | 1430 delegate_->RenderViewReady(this); |
1376 } | 1431 } |
1377 | 1432 |
1378 void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) { | 1433 void RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) { |
1379 // Keep the termination status so we can get at it later when we | 1434 // Keep the termination status so we can get at it later when we |
1380 // need to know why it died. | 1435 // need to know why it died. |
1381 render_view_termination_status_ = | 1436 render_view_termination_status_ = |
1382 static_cast<base::TerminationStatus>(status); | 1437 static_cast<base::TerminationStatus>(status); |
1383 | 1438 |
1384 // Reset state. | 1439 // Reset state. |
1385 main_frame_id_ = -1; | 1440 frame_id_map_.clear(); |
1386 | 1441 |
1387 // Our base class RenderWidgetHost needs to reset some stuff. | 1442 // Our base class RenderWidgetHost needs to reset some stuff. |
1388 RendererExited(render_view_termination_status_, exit_code); | 1443 RendererExited(render_view_termination_status_, exit_code); |
1389 | 1444 |
1390 delegate_->RenderViewTerminated(this, | 1445 delegate_->RenderViewTerminated(this, |
1391 static_cast<base::TerminationStatus>(status), | 1446 static_cast<base::TerminationStatus>(status), |
1392 exit_code); | 1447 exit_code); |
1393 } | 1448 } |
1394 | 1449 |
1395 void RenderViewHostImpl::OnDidStartProvisionalLoadForFrame( | 1450 void RenderViewHostImpl::OnDidStartProvisionalLoadForFrame( |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1449 // Navigate message, then the renderer was navigating before it received the | 1504 // Navigate message, then the renderer was navigating before it received the |
1450 // unload request. It will either respond to the unload request soon or our | 1505 // unload request. It will either respond to the unload request soon or our |
1451 // timer will expire. Either way, we should ignore this message, because we | 1506 // timer will expire. Either way, we should ignore this message, because we |
1452 // have already committed to closing this renderer. | 1507 // have already committed to closing this renderer. |
1453 if (is_waiting_for_unload_ack_) | 1508 if (is_waiting_for_unload_ack_) |
1454 return; | 1509 return; |
1455 | 1510 |
1456 // Cache the main frame id, so we can use it for creating the frame tree | 1511 // Cache the main frame id, so we can use it for creating the frame tree |
1457 // root node when needed. | 1512 // root node when needed. |
1458 if (PageTransitionIsMainFrame(validated_params.transition)) { | 1513 if (PageTransitionIsMainFrame(validated_params.transition)) { |
1459 if (main_frame_id_ == -1) { | 1514 int frame_tree_node_id = |
1460 main_frame_id_ = validated_params.frame_id; | 1515 delegate_->GetFrameTree()->root()->frame_tree_node_id(); |
| 1516 if (!HasFrameID(validated_params.frame_id)) { |
| 1517 RegisterFrameID(validated_params.frame_id, frame_tree_node_id); |
1461 } else { | 1518 } else { |
1462 // TODO(nasko): We plan to remove the usage of frame_id in navigation | 1519 // TODO(nasko): We plan to remove the usage of frame_id in navigation |
1463 // and move to routing ids. This is in place to ensure that a | 1520 // and move to routing ids. This is in place to ensure that a |
1464 // renderer is not misbehaving and sending us incorrect data. | 1521 // renderer is not misbehaving and sending us incorrect data. |
1465 DCHECK_EQ(main_frame_id_, validated_params.frame_id); | 1522 DCHECK_EQ(frame_tree_node_id, |
| 1523 GetFrameTreeNodeID(validated_params.frame_id)); |
1466 } | 1524 } |
1467 } | 1525 } |
1468 RenderProcessHost* process = GetProcess(); | 1526 RenderProcessHost* process = GetProcess(); |
1469 | 1527 |
1470 // Attempts to commit certain off-limits URL should be caught more strictly | 1528 // Attempts to commit certain off-limits URL should be caught more strictly |
1471 // than our FilterURL checks below. If a renderer violates this policy, it | 1529 // than our FilterURL checks below. If a renderer violates this policy, it |
1472 // should be killed. | 1530 // should be killed. |
1473 if (!CanCommitURL(validated_params.url)) { | 1531 if (!CanCommitURL(validated_params.url)) { |
1474 VLOG(1) << "Blocked URL " << validated_params.url.spec(); | 1532 VLOG(1) << "Blocked URL " << validated_params.url.spec(); |
1475 validated_params.url = GURL(kAboutBlankURL); | 1533 validated_params.url = GURL(kAboutBlankURL); |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1803 StopHangMonitorTimeout(); | 1861 StopHangMonitorTimeout(); |
1804 // If this renderer navigated while the beforeunload request was in flight, we | 1862 // If this renderer navigated while the beforeunload request was in flight, we |
1805 // may have cleared this state in OnNavigate, in which case we can ignore | 1863 // may have cleared this state in OnNavigate, in which case we can ignore |
1806 // this message. | 1864 // this message. |
1807 if (!is_waiting_for_beforeunload_ack_ || is_swapped_out_) | 1865 if (!is_waiting_for_beforeunload_ack_ || is_swapped_out_) |
1808 return; | 1866 return; |
1809 | 1867 |
1810 is_waiting_for_beforeunload_ack_ = false; | 1868 is_waiting_for_beforeunload_ack_ = false; |
1811 | 1869 |
1812 RenderViewHostDelegate::RendererManagement* management_delegate = | 1870 RenderViewHostDelegate::RendererManagement* management_delegate = |
1813 delegate_->GetRendererManagementDelegate(); | 1871 delegate_->GetRenderManager(); |
1814 if (management_delegate) { | 1872 if (management_delegate) { |
1815 base::TimeTicks before_unload_end_time; | 1873 base::TimeTicks before_unload_end_time; |
1816 if (!send_should_close_start_time_.is_null() && | 1874 if (!send_should_close_start_time_.is_null() && |
1817 !renderer_before_unload_start_time.is_null() && | 1875 !renderer_before_unload_start_time.is_null() && |
1818 !renderer_before_unload_end_time.is_null()) { | 1876 !renderer_before_unload_end_time.is_null()) { |
1819 // When passing TimeTicks across process boundaries, we need to compensate | 1877 // When passing TimeTicks across process boundaries, we need to compensate |
1820 // for any skew between the processes. Here we are converting the | 1878 // for any skew between the processes. Here we are converting the |
1821 // renderer's notion of before_unload_end_time to TimeTicks in the browser | 1879 // renderer's notion of before_unload_end_time to TimeTicks in the browser |
1822 // process. See comments in inter_process_time_ticks_converter.h for more. | 1880 // process. See comments in inter_process_time_ticks_converter.h for more. |
1823 InterProcessTimeTicksConverter converter( | 1881 InterProcessTimeTicksConverter converter( |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2267 | 2325 |
2268 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); | 2326 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); |
2269 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); | 2327 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); |
2270 file != file_paths.end(); ++file) { | 2328 file != file_paths.end(); ++file) { |
2271 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) | 2329 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) |
2272 return false; | 2330 return false; |
2273 } | 2331 } |
2274 return true; | 2332 return true; |
2275 } | 2333 } |
2276 | 2334 |
2277 void RenderViewHostImpl::AttachToFrameTree() { | |
2278 FrameTree* frame_tree = delegate_->GetFrameTree(); | |
2279 | |
2280 frame_tree->SwapMainFrame(main_render_frame_host_.get()); | |
2281 if (main_frame_id() != FrameTreeNode::kInvalidFrameId) { | |
2282 frame_tree->OnFirstNavigationAfterSwap(main_frame_id()); | |
2283 } | |
2284 } | |
2285 | |
2286 } // namespace content | 2335 } // namespace content |
OLD | NEW |