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_thread_impl.h" | 5 #include "content/renderer/render_thread_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 base::Histogram* histogram = static_cast<base::Histogram*>(hist); | 314 base::Histogram* histogram = static_cast<base::Histogram*>(hist); |
315 histogram->Add(sample); | 315 histogram->Add(sample); |
316 } | 316 } |
317 | 317 |
318 class FrameFactoryImpl : public mojom::FrameFactory { | 318 class FrameFactoryImpl : public mojom::FrameFactory { |
319 public: | 319 public: |
320 FrameFactoryImpl() : routing_id_highmark_(-1) {} | 320 FrameFactoryImpl() : routing_id_highmark_(-1) {} |
321 | 321 |
322 private: | 322 private: |
323 // mojom::FrameFactory: | 323 // mojom::FrameFactory: |
324 void CreateFrame(int32_t frame_routing_id, | 324 void CreateFrame( |
325 mojom::FrameRequest frame_request, | 325 int32_t frame_routing_id, |
326 mojom::FrameHostPtr frame_host) override { | 326 mojom::FrameRequest frame_request, |
| 327 mojom::FrameHostInterfaceBrokerPtr frame_host_interface_broker) override { |
327 // TODO(morrita): This is for investigating http://crbug.com/415059 and | 328 // TODO(morrita): This is for investigating http://crbug.com/415059 and |
328 // should be removed once it is fixed. | 329 // should be removed once it is fixed. |
329 CHECK_LT(routing_id_highmark_, frame_routing_id); | 330 CHECK_LT(routing_id_highmark_, frame_routing_id); |
330 routing_id_highmark_ = frame_routing_id; | 331 routing_id_highmark_ = frame_routing_id; |
331 | 332 |
332 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id); | 333 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id); |
333 // We can receive a GetServiceProviderForFrame message for a frame not yet | 334 // We can receive a GetServiceProviderForFrame message for a frame not yet |
334 // created due to a race between the message and a | 335 // created due to a race between the message and a |
335 // mojom::Renderer::CreateView IPC that triggers creation of the RenderFrame | 336 // mojom::Renderer::CreateView IPC that triggers creation of the RenderFrame |
336 // we want. | 337 // we want. |
337 if (!frame) { | 338 if (!frame) { |
338 RenderThreadImpl::current()->RegisterPendingFrameCreate( | 339 RenderThreadImpl::current()->RegisterPendingFrameCreate( |
339 frame_routing_id, std::move(frame_request), std::move(frame_host)); | 340 frame_routing_id, std::move(frame_request), |
| 341 std::move(frame_host_interface_broker)); |
340 return; | 342 return; |
341 } | 343 } |
342 | 344 |
343 frame->BindFrame(std::move(frame_request), std::move(frame_host)); | 345 frame->BindFrame(std::move(frame_request), |
| 346 std::move(frame_host_interface_broker)); |
344 } | 347 } |
345 | 348 |
346 private: | 349 private: |
347 int32_t routing_id_highmark_; | 350 int32_t routing_id_highmark_; |
348 }; | 351 }; |
349 | 352 |
350 void CreateFrameFactory(mojom::FrameFactoryRequest request) { | 353 void CreateFrameFactory(mojom::FrameFactoryRequest request) { |
351 mojo::MakeStrongBinding(base::MakeUnique<FrameFactoryImpl>(), | 354 mojo::MakeStrongBinding(base::MakeUnique<FrameFactoryImpl>(), |
352 std::move(request)); | 355 std::move(request)); |
353 } | 356 } |
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
989 ChildThreadImpl::GetRouter()->AddRoute(routing_id, listener); | 992 ChildThreadImpl::GetRouter()->AddRoute(routing_id, listener); |
990 auto it = pending_frame_creates_.find(routing_id); | 993 auto it = pending_frame_creates_.find(routing_id); |
991 if (it == pending_frame_creates_.end()) | 994 if (it == pending_frame_creates_.end()) |
992 return; | 995 return; |
993 | 996 |
994 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(routing_id); | 997 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(routing_id); |
995 if (!frame) | 998 if (!frame) |
996 return; | 999 return; |
997 | 1000 |
998 scoped_refptr<PendingFrameCreate> create(it->second); | 1001 scoped_refptr<PendingFrameCreate> create(it->second); |
999 frame->BindFrame(it->second->TakeFrameRequest(), it->second->TakeFrameHost()); | 1002 frame->BindFrame(it->second->TakeFrameRequest(), |
| 1003 it->second->TakeInterfaceBroker()); |
1000 pending_frame_creates_.erase(it); | 1004 pending_frame_creates_.erase(it); |
1001 } | 1005 } |
1002 | 1006 |
1003 void RenderThreadImpl::RemoveRoute(int32_t routing_id) { | 1007 void RenderThreadImpl::RemoveRoute(int32_t routing_id) { |
1004 ChildThreadImpl::GetRouter()->RemoveRoute(routing_id); | 1008 ChildThreadImpl::GetRouter()->RemoveRoute(routing_id); |
1005 } | 1009 } |
1006 | 1010 |
1007 void RenderThreadImpl::AddEmbeddedWorkerRoute(int32_t routing_id, | 1011 void RenderThreadImpl::AddEmbeddedWorkerRoute(int32_t routing_id, |
1008 IPC::Listener* listener) { | 1012 IPC::Listener* listener) { |
1009 AddRoute(routing_id, listener); | 1013 AddRoute(routing_id, listener); |
1010 if (devtools_agent_message_filter_.get()) { | 1014 if (devtools_agent_message_filter_.get()) { |
1011 devtools_agent_message_filter_->AddEmbeddedWorkerRouteOnMainThread( | 1015 devtools_agent_message_filter_->AddEmbeddedWorkerRouteOnMainThread( |
1012 routing_id); | 1016 routing_id); |
1013 } | 1017 } |
1014 } | 1018 } |
1015 | 1019 |
1016 void RenderThreadImpl::RemoveEmbeddedWorkerRoute(int32_t routing_id) { | 1020 void RenderThreadImpl::RemoveEmbeddedWorkerRoute(int32_t routing_id) { |
1017 RemoveRoute(routing_id); | 1021 RemoveRoute(routing_id); |
1018 if (devtools_agent_message_filter_.get()) { | 1022 if (devtools_agent_message_filter_.get()) { |
1019 devtools_agent_message_filter_->RemoveEmbeddedWorkerRouteOnMainThread( | 1023 devtools_agent_message_filter_->RemoveEmbeddedWorkerRouteOnMainThread( |
1020 routing_id); | 1024 routing_id); |
1021 } | 1025 } |
1022 } | 1026 } |
1023 | 1027 |
1024 void RenderThreadImpl::RegisterPendingFrameCreate( | 1028 void RenderThreadImpl::RegisterPendingFrameCreate( |
1025 int routing_id, | 1029 int routing_id, |
1026 mojom::FrameRequest frame_request, | 1030 mojom::FrameRequest frame_request, |
1027 mojom::FrameHostPtr frame_host) { | 1031 mojom::FrameHostInterfaceBrokerPtr frame_host_interface_broker) { |
1028 std::pair<PendingFrameCreateMap::iterator, bool> result = | 1032 std::pair<PendingFrameCreateMap::iterator, bool> result = |
1029 pending_frame_creates_.insert(std::make_pair( | 1033 pending_frame_creates_.insert(std::make_pair( |
1030 routing_id, | 1034 routing_id, make_scoped_refptr(new PendingFrameCreate( |
1031 make_scoped_refptr(new PendingFrameCreate( | 1035 routing_id, std::move(frame_request), |
1032 routing_id, std::move(frame_request), std::move(frame_host))))); | 1036 std::move(frame_host_interface_broker))))); |
1033 CHECK(result.second) << "Inserting a duplicate item."; | 1037 CHECK(result.second) << "Inserting a duplicate item."; |
1034 } | 1038 } |
1035 | 1039 |
1036 mojom::StoragePartitionService* RenderThreadImpl::GetStoragePartitionService() { | 1040 mojom::StoragePartitionService* RenderThreadImpl::GetStoragePartitionService() { |
1037 return storage_partition_service_.get(); | 1041 return storage_partition_service_.get(); |
1038 } | 1042 } |
1039 | 1043 |
1040 int RenderThreadImpl::GenerateRoutingID() { | 1044 int RenderThreadImpl::GenerateRoutingID() { |
1041 int32_t routing_id = MSG_ROUTING_NONE; | 1045 int32_t routing_id = MSG_ROUTING_NONE; |
1042 render_message_filter()->GenerateRoutingID(&routing_id); | 1046 render_message_filter()->GenerateRoutingID(&routing_id); |
(...skipping 1346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2389 base::allocator::ReleaseFreeMemory(); | 2393 base::allocator::ReleaseFreeMemory(); |
2390 discardable_shared_memory_manager_->ReleaseFreeMemory(); | 2394 discardable_shared_memory_manager_->ReleaseFreeMemory(); |
2391 | 2395 |
2392 if (blink_platform_impl_) | 2396 if (blink_platform_impl_) |
2393 blink::DecommitFreeableMemory(); | 2397 blink::DecommitFreeableMemory(); |
2394 } | 2398 } |
2395 | 2399 |
2396 RenderThreadImpl::PendingFrameCreate::PendingFrameCreate( | 2400 RenderThreadImpl::PendingFrameCreate::PendingFrameCreate( |
2397 int routing_id, | 2401 int routing_id, |
2398 mojom::FrameRequest frame_request, | 2402 mojom::FrameRequest frame_request, |
2399 mojom::FrameHostPtr frame_host) | 2403 mojom::FrameHostInterfaceBrokerPtr frame_host_interface_broker) |
2400 : routing_id_(routing_id), | 2404 : routing_id_(routing_id), |
2401 frame_request_(std::move(frame_request)), | 2405 frame_request_(std::move(frame_request)), |
2402 frame_host_(std::move(frame_host)) { | 2406 frame_host_interface_broker_(std::move(frame_host_interface_broker)) { |
2403 // The RenderFrame may be deleted before the CreateFrame message is received. | 2407 // The RenderFrame may be deleted before the CreateFrame message is received. |
2404 // In that case, the RenderFrameHost should cancel the create, which is | 2408 // In that case, the RenderFrameHost should cancel the create, which is |
2405 // detected by setting an error handler on |frame_host_|. | 2409 // detected by setting an error handler on |frame_host_interface_broker_|. |
2406 frame_host_.set_connection_error_handler(base::Bind( | 2410 frame_host_interface_broker_.set_connection_error_handler( |
2407 &RenderThreadImpl::PendingFrameCreate::OnConnectionError, | 2411 base::Bind(&RenderThreadImpl::PendingFrameCreate::OnConnectionError, |
2408 base::Unretained(this))); | 2412 base::Unretained(this))); |
2409 } | 2413 } |
2410 | 2414 |
2411 RenderThreadImpl::PendingFrameCreate::~PendingFrameCreate() { | 2415 RenderThreadImpl::PendingFrameCreate::~PendingFrameCreate() { |
2412 } | 2416 } |
2413 | 2417 |
2414 void RenderThreadImpl::PendingFrameCreate::OnConnectionError() { | 2418 void RenderThreadImpl::PendingFrameCreate::OnConnectionError() { |
2415 size_t erased = | 2419 size_t erased = |
2416 RenderThreadImpl::current()->pending_frame_creates_.erase(routing_id_); | 2420 RenderThreadImpl::current()->pending_frame_creates_.erase(routing_id_); |
2417 DCHECK_EQ(1u, erased); | 2421 DCHECK_EQ(1u, erased); |
2418 } | 2422 } |
(...skipping 29 matching lines...) Expand all Loading... |
2448 } | 2452 } |
2449 } | 2453 } |
2450 | 2454 |
2451 void RenderThreadImpl::OnRendererInterfaceRequest( | 2455 void RenderThreadImpl::OnRendererInterfaceRequest( |
2452 mojom::RendererAssociatedRequest request) { | 2456 mojom::RendererAssociatedRequest request) { |
2453 DCHECK(!renderer_binding_.is_bound()); | 2457 DCHECK(!renderer_binding_.is_bound()); |
2454 renderer_binding_.Bind(std::move(request)); | 2458 renderer_binding_.Bind(std::move(request)); |
2455 } | 2459 } |
2456 | 2460 |
2457 } // namespace content | 2461 } // namespace content |
OLD | NEW |