| 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/child/child_thread_impl.h" | 5 #include "content/child/child_thread_impl.h" |
| 6 | 6 |
| 7 #include <signal.h> | 7 #include <signal.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 637 NOTREACHED(); | 637 NOTREACHED(); |
| 638 } | 638 } |
| 639 | 639 |
| 640 ServiceManagerConnection* ChildThreadImpl::GetServiceManagerConnection() { | 640 ServiceManagerConnection* ChildThreadImpl::GetServiceManagerConnection() { |
| 641 return service_manager_connection_.get(); | 641 return service_manager_connection_.get(); |
| 642 } | 642 } |
| 643 | 643 |
| 644 service_manager::InterfaceRegistry* ChildThreadImpl::GetInterfaceRegistry() { | 644 service_manager::InterfaceRegistry* ChildThreadImpl::GetInterfaceRegistry() { |
| 645 if (!interface_registry_.get()) { | 645 if (!interface_registry_.get()) { |
| 646 interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>( | 646 interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>( |
| 647 service_manager::Identity(), service_manager::InterfaceProviderSpec()); | 647 service_manager::mojom::kServiceManager_ConnectorSpec); |
| 648 } | 648 } |
| 649 return interface_registry_.get(); | 649 return interface_registry_.get(); |
| 650 } | 650 } |
| 651 | 651 |
| 652 service_manager::InterfaceProvider* ChildThreadImpl::GetRemoteInterfaces() { | 652 service_manager::InterfaceProvider* ChildThreadImpl::GetRemoteInterfaces() { |
| 653 if (browser_connection_) | 653 if (browser_connection_) |
| 654 return browser_connection_->GetRemoteInterfaces(); | 654 return browser_connection_->GetRemoteInterfaces(); |
| 655 | 655 |
| 656 if (!remote_interfaces_.get()) | 656 if (!remote_interfaces_.get()) |
| 657 remote_interfaces_.reset(new service_manager::InterfaceProvider); | 657 remote_interfaces_.reset(new service_manager::InterfaceProvider); |
| 658 return remote_interfaces_.get(); | 658 return remote_interfaces_.get(); |
| 659 } | 659 } |
| 660 | 660 |
| 661 const service_manager::ServiceInfo& |
| 662 ChildThreadImpl::GetChildServiceInfo() const { |
| 663 DCHECK(IsConnectedToBrowser()); |
| 664 return child_info_; |
| 665 } |
| 666 |
| 667 const service_manager::ServiceInfo& |
| 668 ChildThreadImpl::GetBrowserServiceInfo() const { |
| 669 DCHECK(IsConnectedToBrowser()); |
| 670 return browser_info_; |
| 671 } |
| 672 |
| 673 bool ChildThreadImpl::IsConnectedToBrowser() const { |
| 674 return connected_to_browser_; |
| 675 } |
| 676 |
| 661 IPC::MessageRouter* ChildThreadImpl::GetRouter() { | 677 IPC::MessageRouter* ChildThreadImpl::GetRouter() { |
| 662 DCHECK(message_loop_->task_runner()->BelongsToCurrentThread()); | 678 DCHECK(message_loop_->task_runner()->BelongsToCurrentThread()); |
| 663 return &router_; | 679 return &router_; |
| 664 } | 680 } |
| 665 | 681 |
| 666 mojom::RouteProvider* ChildThreadImpl::GetRemoteRouteProvider() { | 682 mojom::RouteProvider* ChildThreadImpl::GetRemoteRouteProvider() { |
| 667 if (!remote_route_provider_) { | 683 if (!remote_route_provider_) { |
| 668 DCHECK(channel_); | 684 DCHECK(channel_); |
| 669 channel_->GetRemoteAssociatedInterface(&remote_route_provider_); | 685 channel_->GetRemoteAssociatedInterface(&remote_route_provider_); |
| 670 } | 686 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 744 | 760 |
| 745 if (msg.routing_id() == MSG_ROUTING_CONTROL) | 761 if (msg.routing_id() == MSG_ROUTING_CONTROL) |
| 746 return OnControlMessageReceived(msg); | 762 return OnControlMessageReceived(msg); |
| 747 | 763 |
| 748 return router_.OnMessageReceived(msg); | 764 return router_.OnMessageReceived(msg); |
| 749 } | 765 } |
| 750 | 766 |
| 751 void ChildThreadImpl::StartServiceManagerConnection() { | 767 void ChildThreadImpl::StartServiceManagerConnection() { |
| 752 DCHECK(service_manager_connection_); | 768 DCHECK(service_manager_connection_); |
| 753 service_manager_connection_->Start(); | 769 service_manager_connection_->Start(); |
| 770 // We don't care about storing the id, since if this pipe closes we're toast. |
| 771 service_manager_connection_->AddOnConnectHandler( |
| 772 base::Bind(&ChildThreadImpl::OnServiceConnect, |
| 773 weak_factory_.GetWeakPtr())); |
| 754 } | 774 } |
| 755 | 775 |
| 756 bool ChildThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { | 776 bool ChildThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { |
| 757 return false; | 777 return false; |
| 758 } | 778 } |
| 759 | 779 |
| 760 void ChildThreadImpl::OnProcessBackgrounded(bool backgrounded) { | 780 void ChildThreadImpl::OnProcessBackgrounded(bool backgrounded) { |
| 761 // Set timer slack to maximum on main thread when in background. | 781 // Set timer slack to maximum on main thread when in background. |
| 762 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; | 782 base::TimerSlack timer_slack = base::TIMER_SLACK_NONE; |
| 763 if (backgrounded) | 783 if (backgrounded) |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 void ChildThreadImpl::GetAssociatedInterface( | 867 void ChildThreadImpl::GetAssociatedInterface( |
| 848 const std::string& name, | 868 const std::string& name, |
| 849 mojom::AssociatedInterfaceAssociatedRequest request) { | 869 mojom::AssociatedInterfaceAssociatedRequest request) { |
| 850 int32_t routing_id = static_cast<int32_t>(reinterpret_cast<uintptr_t>( | 870 int32_t routing_id = static_cast<int32_t>(reinterpret_cast<uintptr_t>( |
| 851 associated_interface_provider_bindings_.dispatch_context())); | 871 associated_interface_provider_bindings_.dispatch_context())); |
| 852 Listener* route = router_.GetRoute(routing_id); | 872 Listener* route = router_.GetRoute(routing_id); |
| 853 if (route) | 873 if (route) |
| 854 route->OnAssociatedInterfaceRequest(name, request.PassHandle()); | 874 route->OnAssociatedInterfaceRequest(name, request.PassHandle()); |
| 855 } | 875 } |
| 856 | 876 |
| 877 void ChildThreadImpl::OnServiceConnect( |
| 878 const service_manager::ServiceInfo& local_info, |
| 879 const service_manager::ServiceInfo& remote_info) { |
| 880 if (remote_info.identity.name() != kBrowserServiceName) |
| 881 return; |
| 882 DCHECK(!connected_to_browser_); |
| 883 connected_to_browser_ = true; |
| 884 child_info_ = local_info; |
| 885 browser_info_ = remote_info; |
| 886 } |
| 887 |
| 857 bool ChildThreadImpl::IsInBrowserProcess() const { | 888 bool ChildThreadImpl::IsInBrowserProcess() const { |
| 858 return static_cast<bool>(browser_process_io_runner_); | 889 return static_cast<bool>(browser_process_io_runner_); |
| 859 } | 890 } |
| 860 | 891 |
| 861 } // namespace content | 892 } // namespace content |
| OLD | NEW |