| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 // Represents the browser side of the browser <--> renderer communication | 5 // Represents the browser side of the browser <--> renderer communication |
| 6 // channel. There will be one RenderProcessHost per renderer process. | 6 // channel. There will be one RenderProcessHost per renderer process. |
| 7 | 7 |
| 8 #include "content/browser/renderer_host/render_process_host_impl.h" | 8 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 472 : child_identity_(child_identity), | 472 : child_identity_(child_identity), |
| 473 registry_(std::move(registry)) {} | 473 registry_(std::move(registry)) {} |
| 474 ~ConnectionFilterImpl() override { | 474 ~ConnectionFilterImpl() override { |
| 475 scoped_refptr<base::SequencedTaskRunner> io_task_runner = | 475 scoped_refptr<base::SequencedTaskRunner> io_task_runner = |
| 476 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); | 476 BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); |
| 477 io_task_runner->DeleteSoon(FROM_HERE, weak_factory_.release()); | 477 io_task_runner->DeleteSoon(FROM_HERE, weak_factory_.release()); |
| 478 } | 478 } |
| 479 | 479 |
| 480 private: | 480 private: |
| 481 // ConnectionFilter: | 481 // ConnectionFilter: |
| 482 bool OnConnect(shell::Connection* connection, | 482 bool OnConnect(const shell::Identity& remote_identity, |
| 483 shell::InterfaceRegistry* registry, |
| 483 shell::Connector* connector) override { | 484 shell::Connector* connector) override { |
| 484 if (!weak_factory_) | 485 if (!weak_factory_) |
| 485 weak_factory_.reset(new base::WeakPtrFactory<ConnectionFilterImpl>(this)); | 486 weak_factory_.reset(new base::WeakPtrFactory<ConnectionFilterImpl>(this)); |
| 486 | 487 |
| 487 // We only fulfill connections from the renderer we host. | 488 // We only fulfill connections from the renderer we host. |
| 488 const shell::Identity& remote_identity = connection->GetRemoteIdentity(); | |
| 489 if (child_identity_.name() != remote_identity.name() || | 489 if (child_identity_.name() != remote_identity.name() || |
| 490 child_identity_.instance() != remote_identity.instance()) { | 490 child_identity_.instance() != remote_identity.instance()) { |
| 491 return false; | 491 return false; |
| 492 } | 492 } |
| 493 | 493 |
| 494 std::set<std::string> interface_names; | 494 std::set<std::string> interface_names; |
| 495 registry_->GetInterfaceNames(&interface_names); | 495 registry_->GetInterfaceNames(&interface_names); |
| 496 for (auto& interface_name : interface_names) { | 496 for (auto& interface_name : interface_names) { |
| 497 // Note that the added callbacks may outlive this object, which is | 497 // Note that the added callbacks may outlive this object, which is |
| 498 // destroyed in RPH::Cleanup(). | 498 // destroyed in RPH::Cleanup(). |
| 499 connection->GetInterfaceRegistry()->AddInterface( | 499 registry->AddInterface(interface_name, |
| 500 interface_name, | 500 base::Bind(&ConnectionFilterImpl::GetInterface, |
| 501 base::Bind(&ConnectionFilterImpl::GetInterface, | 501 weak_factory_->GetWeakPtr(), |
| 502 weak_factory_->GetWeakPtr(), | 502 interface_name)); |
| 503 interface_name)); | |
| 504 } | 503 } |
| 505 return true; | 504 return true; |
| 506 } | 505 } |
| 507 | 506 |
| 508 void GetInterface(const std::string& interface_name, | 507 void GetInterface(const std::string& interface_name, |
| 509 mojo::ScopedMessagePipeHandle handle) { | 508 mojo::ScopedMessagePipeHandle handle) { |
| 510 shell::mojom::InterfaceProvider* provider = registry_.get(); | 509 shell::mojom::InterfaceProvider* provider = registry_.get(); |
| 511 provider->GetInterface(interface_name, std::move(handle)); | 510 provider->GetInterface(interface_name, std::move(handle)); |
| 512 } | 511 } |
| 513 | 512 |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1091 AddFilter(new MemoryMessageFilter(this)); | 1090 AddFilter(new MemoryMessageFilter(this)); |
| 1092 AddFilter(new PushMessagingMessageFilter( | 1091 AddFilter(new PushMessagingMessageFilter( |
| 1093 GetID(), storage_partition_impl_->GetServiceWorkerContext())); | 1092 GetID(), storage_partition_impl_->GetServiceWorkerContext())); |
| 1094 #if defined(OS_ANDROID) | 1093 #if defined(OS_ANDROID) |
| 1095 AddFilter(new ScreenOrientationMessageFilterAndroid()); | 1094 AddFilter(new ScreenOrientationMessageFilterAndroid()); |
| 1096 #endif | 1095 #endif |
| 1097 } | 1096 } |
| 1098 | 1097 |
| 1099 void RenderProcessHostImpl::RegisterMojoInterfaces() { | 1098 void RenderProcessHostImpl::RegisterMojoInterfaces() { |
| 1100 std::unique_ptr<shell::InterfaceRegistry> registry( | 1099 std::unique_ptr<shell::InterfaceRegistry> registry( |
| 1101 new shell::InterfaceRegistry(nullptr)); | 1100 new shell::InterfaceRegistry); |
| 1102 #if defined(OS_ANDROID) | 1101 #if defined(OS_ANDROID) |
| 1103 interface_registry_android_ = | 1102 interface_registry_android_ = |
| 1104 InterfaceRegistryAndroid::Create(registry.get()); | 1103 InterfaceRegistryAndroid::Create(registry.get()); |
| 1105 InterfaceRegistrarAndroid::ExposeInterfacesToRenderer( | 1104 InterfaceRegistrarAndroid::ExposeInterfacesToRenderer( |
| 1106 interface_registry_android_.get()); | 1105 interface_registry_android_.get()); |
| 1107 #endif | 1106 #endif |
| 1108 | 1107 |
| 1109 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = | 1108 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner = |
| 1110 BrowserThread::GetTaskRunnerForThread(BrowserThread::UI); | 1109 BrowserThread::GetTaskRunnerForThread(BrowserThread::UI); |
| 1111 #if !defined(OS_ANDROID) | 1110 #if !defined(OS_ANDROID) |
| (...skipping 1716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2828 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 2827 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
| 2829 | 2828 |
| 2830 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias | 2829 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. Alias |
| 2831 // enough information here so that we can determine what the bad message was. | 2830 // enough information here so that we can determine what the bad message was. |
| 2832 base::debug::Alias(&error); | 2831 base::debug::Alias(&error); |
| 2833 bad_message::ReceivedBadMessage(process.get(), | 2832 bad_message::ReceivedBadMessage(process.get(), |
| 2834 bad_message::RPH_MOJO_PROCESS_ERROR); | 2833 bad_message::RPH_MOJO_PROCESS_ERROR); |
| 2835 } | 2834 } |
| 2836 | 2835 |
| 2837 } // namespace content | 2836 } // namespace content |
| OLD | NEW |