Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 2381493003: Move ViewMsg_New to mojom (Closed)
Patch Set: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 void CreateFrame(int32_t frame_routing_id, 341 void CreateFrame(int32_t frame_routing_id,
342 mojom::FrameRequest frame_request, 342 mojom::FrameRequest frame_request,
343 mojom::FrameHostPtr frame_host) override { 343 mojom::FrameHostPtr frame_host) override {
344 // TODO(morrita): This is for investigating http://crbug.com/415059 and 344 // TODO(morrita): This is for investigating http://crbug.com/415059 and
345 // should be removed once it is fixed. 345 // should be removed once it is fixed.
346 CHECK_LT(routing_id_highmark_, frame_routing_id); 346 CHECK_LT(routing_id_highmark_, frame_routing_id);
347 routing_id_highmark_ = frame_routing_id; 347 routing_id_highmark_ = frame_routing_id;
348 348
349 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id); 349 RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id);
350 // We can receive a GetServiceProviderForFrame message for a frame not yet 350 // We can receive a GetServiceProviderForFrame message for a frame not yet
351 // created due to a race between the message and a ViewMsg_New IPC that 351 // created due to a race between the message and a
352 // triggers creation of the RenderFrame we want. 352 // mojom::Renderer::CreateView IPC that triggers creation of the RenderFrame
353 // we want.
353 if (!frame) { 354 if (!frame) {
354 RenderThreadImpl::current()->RegisterPendingFrameCreate( 355 RenderThreadImpl::current()->RegisterPendingFrameCreate(
355 frame_routing_id, std::move(frame_request), std::move(frame_host)); 356 frame_routing_id, std::move(frame_request), std::move(frame_host));
356 return; 357 return;
357 } 358 }
358 359
359 frame->Bind(std::move(frame_request), std::move(frame_host)); 360 frame->Bind(std::move(frame_request), std::move(frame_host));
360 } 361 }
361 362
362 private: 363 private:
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, 600 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
600 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) 601 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue)
601 : ChildThreadImpl(Options::Builder() 602 : ChildThreadImpl(Options::Builder()
602 .InBrowserProcess(params) 603 .InBrowserProcess(params)
603 .UseMojoChannel(true) 604 .UseMojoChannel(true)
604 .AutoStartMojoShellConnection(false) 605 .AutoStartMojoShellConnection(false)
605 .ConnectToBrowser(true) 606 .ConnectToBrowser(true)
606 .Build()), 607 .Build()),
607 renderer_scheduler_(std::move(scheduler)), 608 renderer_scheduler_(std::move(scheduler)),
608 time_zone_monitor_binding_(this), 609 time_zone_monitor_binding_(this),
609 categorized_worker_pool_(new CategorizedWorkerPool()) { 610 categorized_worker_pool_(new CategorizedWorkerPool()),
611 renderer_binding_(this) {
610 Init(resource_task_queue); 612 Init(resource_task_queue);
611 } 613 }
612 614
613 // When we run plugins in process, we actually run them on the render thread, 615 // When we run plugins in process, we actually run them on the render thread,
614 // which means that we need to make the render thread pump UI events. 616 // which means that we need to make the render thread pump UI events.
615 RenderThreadImpl::RenderThreadImpl( 617 RenderThreadImpl::RenderThreadImpl(
616 std::unique_ptr<base::MessageLoop> main_message_loop, 618 std::unique_ptr<base::MessageLoop> main_message_loop,
617 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler) 619 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler)
618 : ChildThreadImpl(Options::Builder() 620 : ChildThreadImpl(Options::Builder()
619 .UseMojoChannel(true) 621 .UseMojoChannel(true)
620 .AutoStartMojoShellConnection(false) 622 .AutoStartMojoShellConnection(false)
621 .ConnectToBrowser(true) 623 .ConnectToBrowser(true)
622 .Build()), 624 .Build()),
623 renderer_scheduler_(std::move(scheduler)), 625 renderer_scheduler_(std::move(scheduler)),
624 time_zone_monitor_binding_(this), 626 time_zone_monitor_binding_(this),
625 main_message_loop_(std::move(main_message_loop)), 627 main_message_loop_(std::move(main_message_loop)),
626 categorized_worker_pool_(new CategorizedWorkerPool()) { 628 categorized_worker_pool_(new CategorizedWorkerPool()),
629 renderer_binding_(this) {
627 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; 630 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter;
628 Init(test_task_counter); 631 Init(test_task_counter);
629 } 632 }
630 633
631 void RenderThreadImpl::Init( 634 void RenderThreadImpl::Init(
632 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { 635 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
633 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); 636 TRACE_EVENT0("startup", "RenderThreadImpl::Init");
634 637
635 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( 638 base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex(
636 base::PlatformThread::CurrentId(), 639 base::PlatformThread::CurrentId(),
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
730 switches::kUseMusInRenderer)) { 733 switches::kUseMusInRenderer)) {
731 CreateRenderWidgetWindowTreeClientFactory(GetMojoShellConnection()); 734 CreateRenderWidgetWindowTreeClientFactory(GetMojoShellConnection());
732 } 735 }
733 #endif 736 #endif
734 737
735 // Must be called before RenderThreadStarted() below. 738 // Must be called before RenderThreadStarted() below.
736 StartMojoShellConnection(); 739 StartMojoShellConnection();
737 740
738 GetContentClient()->renderer()->RenderThreadStarted(); 741 GetContentClient()->renderer()->RenderThreadStarted();
739 742
743 GetAssociatedInterfaceRegistry()->AddInterface(
744 base::Bind(&RenderThreadImpl::OnRendererInterfaceRequest,
745 base::Unretained(this)));
746
740 InitSkiaEventTracer(); 747 InitSkiaEventTracer();
741 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 748 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
742 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); 749 skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr);
743 750
744 const base::CommandLine& command_line = 751 const base::CommandLine& command_line =
745 *base::CommandLine::ForCurrentProcess(); 752 *base::CommandLine::ForCurrentProcess();
746 753
747 #if defined(ENABLE_IPC_FUZZER) 754 #if defined(ENABLE_IPC_FUZZER)
748 if (command_line.HasSwitch(switches::kIpcDumpDirectory)) { 755 if (command_line.HasSwitch(switches::kIpcDumpDirectory)) {
749 base::FilePath dump_directory = 756 base::FilePath dump_directory =
(...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after
1559 audio_renderer_mixer_manager_ = AudioRendererMixerManager::Create(); 1566 audio_renderer_mixer_manager_ = AudioRendererMixerManager::Create();
1560 } 1567 }
1561 1568
1562 return audio_renderer_mixer_manager_.get(); 1569 return audio_renderer_mixer_manager_.get();
1563 } 1570 }
1564 1571
1565 base::WaitableEvent* RenderThreadImpl::GetShutdownEvent() { 1572 base::WaitableEvent* RenderThreadImpl::GetShutdownEvent() {
1566 return ChildProcess::current()->GetShutDownEvent(); 1573 return ChildProcess::current()->GetShutDownEvent();
1567 } 1574 }
1568 1575
1576 void RenderThreadImpl::OnAssociatedInterfaceRequest(
1577 const std::string& name,
1578 mojo::ScopedInterfaceEndpointHandle handle) {
1579 associated_interfaces_.BindRequest(name, std::move(handle));
1580 }
1581
1569 bool RenderThreadImpl::IsGpuRasterizationForced() { 1582 bool RenderThreadImpl::IsGpuRasterizationForced() {
1570 return is_gpu_rasterization_forced_; 1583 return is_gpu_rasterization_forced_;
1571 } 1584 }
1572 1585
1573 bool RenderThreadImpl::IsGpuRasterizationEnabled() { 1586 bool RenderThreadImpl::IsGpuRasterizationEnabled() {
1574 return is_gpu_rasterization_enabled_; 1587 return is_gpu_rasterization_enabled_;
1575 } 1588 }
1576 1589
1577 bool RenderThreadImpl::IsAsyncWorkerContextEnabled() { 1590 bool RenderThreadImpl::IsAsyncWorkerContextEnabled() {
1578 return is_async_worker_context_enabled_; 1591 return is_async_worker_context_enabled_;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1718 embedded_worker_dispatcher_->OnMessageReceived(msg)) { 1731 embedded_worker_dispatcher_->OnMessageReceived(msg)) {
1719 return true; 1732 return true;
1720 } 1733 }
1721 1734
1722 bool handled = true; 1735 bool handled = true;
1723 IPC_BEGIN_MESSAGE_MAP(RenderThreadImpl, msg) 1736 IPC_BEGIN_MESSAGE_MAP(RenderThreadImpl, msg)
1724 IPC_MESSAGE_HANDLER(FrameMsg_NewFrame, OnCreateNewFrame) 1737 IPC_MESSAGE_HANDLER(FrameMsg_NewFrame, OnCreateNewFrame)
1725 IPC_MESSAGE_HANDLER(FrameMsg_NewFrameProxy, OnCreateNewFrameProxy) 1738 IPC_MESSAGE_HANDLER(FrameMsg_NewFrameProxy, OnCreateNewFrameProxy)
1726 // TODO(port): removed from render_messages_internal.h; 1739 // TODO(port): removed from render_messages_internal.h;
1727 // is there a new non-windows message I should add here? 1740 // is there a new non-windows message I should add here?
1728 IPC_MESSAGE_HANDLER(ViewMsg_New, OnCreateNewView)
1729 IPC_MESSAGE_HANDLER(ViewMsg_NetworkConnectionChanged, 1741 IPC_MESSAGE_HANDLER(ViewMsg_NetworkConnectionChanged,
1730 OnNetworkConnectionChanged) 1742 OnNetworkConnectionChanged)
1731 IPC_MESSAGE_HANDLER(WorkerProcessMsg_CreateWorker, OnCreateNewSharedWorker) 1743 IPC_MESSAGE_HANDLER(WorkerProcessMsg_CreateWorker, OnCreateNewSharedWorker)
1732 #if defined(OS_ANDROID) 1744 #if defined(OS_ANDROID)
1733 IPC_MESSAGE_HANDLER(ViewMsg_SetWebKitSharedTimersSuspended, 1745 IPC_MESSAGE_HANDLER(ViewMsg_SetWebKitSharedTimersSuspended,
1734 OnSetWebKitSharedTimersSuspended) 1746 OnSetWebKitSharedTimersSuspended)
1735 #endif 1747 #endif
1736 #if defined(OS_MACOSX) 1748 #if defined(OS_MACOSX)
1737 IPC_MESSAGE_HANDLER(ViewMsg_UpdateScrollbarTheme, OnUpdateScrollbarTheme) 1749 IPC_MESSAGE_HANDLER(ViewMsg_UpdateScrollbarTheme, OnUpdateScrollbarTheme)
1738 IPC_MESSAGE_HANDLER(ViewMsg_SystemColorsChanged, OnSystemColorsChanged) 1750 IPC_MESSAGE_HANDLER(ViewMsg_SystemColorsChanged, OnSystemColorsChanged)
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 base::IntToString(render_view_routing_id)); 1817 base::IntToString(render_view_routing_id));
1806 base::debug::SetCrashKeyValue("newproxy_opener_id", 1818 base::debug::SetCrashKeyValue("newproxy_opener_id",
1807 base::IntToString(opener_routing_id)); 1819 base::IntToString(opener_routing_id));
1808 base::debug::SetCrashKeyValue("newproxy_parent_id", 1820 base::debug::SetCrashKeyValue("newproxy_parent_id",
1809 base::IntToString(parent_routing_id)); 1821 base::IntToString(parent_routing_id));
1810 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id, 1822 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id,
1811 opener_routing_id, parent_routing_id, 1823 opener_routing_id, parent_routing_id,
1812 replicated_state); 1824 replicated_state);
1813 } 1825 }
1814 1826
1815 void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) {
1816 CompositorDependencies* compositor_deps = this;
1817 // When bringing in render_view, also bring in webkit's glue and jsbindings.
1818 RenderViewImpl::Create(compositor_deps, params, false);
1819 }
1820
1821 scoped_refptr<gpu::GpuChannelHost> RenderThreadImpl::EstablishGpuChannelSync() { 1827 scoped_refptr<gpu::GpuChannelHost> RenderThreadImpl::EstablishGpuChannelSync() {
1822 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync"); 1828 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync");
1823 1829
1824 if (gpu_channel_) { 1830 if (gpu_channel_) {
1825 // Do nothing if we already have a GPU channel or are already 1831 // Do nothing if we already have a GPU channel or are already
1826 // establishing one. 1832 // establishing one.
1827 if (!gpu_channel_->IsLost()) 1833 if (!gpu_channel_->IsLost())
1828 return gpu_channel_; 1834 return gpu_channel_;
1829 1835
1830 // Recreate the channel if it has been lost. 1836 // Recreate the channel if it has been lost.
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1977 sync_compositor_message_filter_.get(), 1983 sync_compositor_message_filter_.get(),
1978 std::move(frame_swap_message_queue)); 1984 std::move(frame_swap_message_queue));
1979 } 1985 }
1980 #endif 1986 #endif
1981 return base::WrapUnique(new RendererCompositorFrameSink( 1987 return base::WrapUnique(new RendererCompositorFrameSink(
1982 routing_id, compositor_frame_sink_id, 1988 routing_id, compositor_frame_sink_id,
1983 CreateExternalBeginFrameSource(routing_id), std::move(context_provider), 1989 CreateExternalBeginFrameSource(routing_id), std::move(context_provider),
1984 std::move(worker_context_provider), std::move(frame_swap_message_queue))); 1990 std::move(worker_context_provider), std::move(frame_swap_message_queue)));
1985 } 1991 }
1986 1992
1993 AssociatedInterfaceRegistry*
1994 RenderThreadImpl::GetAssociatedInterfaceRegistry() {
1995 return &associated_interfaces_;
1996 }
1997
1987 std::unique_ptr<cc::SwapPromise> 1998 std::unique_ptr<cc::SwapPromise>
1988 RenderThreadImpl::RequestCopyOfOutputForLayoutTest( 1999 RenderThreadImpl::RequestCopyOfOutputForLayoutTest(
1989 int32_t routing_id, 2000 int32_t routing_id,
1990 std::unique_ptr<cc::CopyOutputRequest> request) { 2001 std::unique_ptr<cc::CopyOutputRequest> request) {
1991 DCHECK(layout_test_deps_); 2002 DCHECK(layout_test_deps_);
1992 return layout_test_deps_->RequestCopyOfOutput(routing_id, std::move(request)); 2003 return layout_test_deps_->RequestCopyOfOutput(routing_id, std::move(request));
1993 } 2004 }
1994 2005
1995 blink::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter( 2006 blink::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter(
1996 blink::WebMediaStreamCenterClient* client) { 2007 blink::WebMediaStreamCenterClient* client) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 net::NetworkChangeNotifier::ConnectionType type, 2065 net::NetworkChangeNotifier::ConnectionType type,
2055 double max_bandwidth_mbps) { 2066 double max_bandwidth_mbps) {
2056 bool online = type != net::NetworkChangeNotifier::CONNECTION_NONE; 2067 bool online = type != net::NetworkChangeNotifier::CONNECTION_NONE;
2057 WebNetworkStateNotifier::setOnLine(online); 2068 WebNetworkStateNotifier::setOnLine(online);
2058 FOR_EACH_OBSERVER( 2069 FOR_EACH_OBSERVER(
2059 RenderThreadObserver, observers_, NetworkStateChanged(online)); 2070 RenderThreadObserver, observers_, NetworkStateChanged(online));
2060 WebNetworkStateNotifier::setWebConnection( 2071 WebNetworkStateNotifier::setWebConnection(
2061 NetConnectionTypeToWebConnectionType(type), max_bandwidth_mbps); 2072 NetConnectionTypeToWebConnectionType(type), max_bandwidth_mbps);
2062 } 2073 }
2063 2074
2075 void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) {
2076 CompositorDependencies* compositor_deps = this;
2077 // When bringing in render_view, also bring in webkit's glue and jsbindings.
2078 RenderViewImpl::Create(compositor_deps, *params, false);
2079 }
2080
2064 void RenderThreadImpl::OnTimeZoneChange(const std::string& zone_id) { 2081 void RenderThreadImpl::OnTimeZoneChange(const std::string& zone_id) {
2065 if (!blink_platform_impl_) 2082 if (!blink_platform_impl_)
2066 return; 2083 return;
2067 if (!zone_id.empty()) { 2084 if (!zone_id.empty()) {
2068 icu::TimeZone *new_zone = icu::TimeZone::createTimeZone( 2085 icu::TimeZone *new_zone = icu::TimeZone::createTimeZone(
2069 icu::UnicodeString::fromUTF8(zone_id)); 2086 icu::UnicodeString::fromUTF8(zone_id));
2070 icu::TimeZone::adoptDefault(new_zone); 2087 icu::TimeZone::adoptDefault(new_zone);
2071 VLOG(1) << "ICU default timezone is set to " << zone_id; 2088 VLOG(1) << "ICU default timezone is set to " << zone_id;
2072 } 2089 }
2073 NotifyTimezoneChange(); 2090 NotifyTimezoneChange();
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
2313 // OnSyncMemoryPressure() is never called in that case. 2330 // OnSyncMemoryPressure() is never called in that case.
2314 void RenderThreadImpl::OnTrimMemoryImmediately() { 2331 void RenderThreadImpl::OnTrimMemoryImmediately() {
2315 if (blink::mainThreadIsolate()) { 2332 if (blink::mainThreadIsolate()) {
2316 blink::mainThreadIsolate()->MemoryPressureNotification( 2333 blink::mainThreadIsolate()->MemoryPressureNotification(
2317 v8::MemoryPressureLevel::kCritical); 2334 v8::MemoryPressureLevel::kCritical);
2318 blink::MemoryPressureNotificationToWorkerThreadIsolates( 2335 blink::MemoryPressureNotificationToWorkerThreadIsolates(
2319 v8::MemoryPressureLevel::kCritical); 2336 v8::MemoryPressureLevel::kCritical);
2320 } 2337 }
2321 } 2338 }
2322 2339
2340 void RenderThreadImpl::OnRendererInterfaceRequest(
2341 mojom::RendererAssociatedRequest request) {
2342 DCHECK(!renderer_binding_.is_bound());
2343 renderer_binding_.Bind(std::move(request));
2344 }
2323 2345
2324 } // namespace content 2346 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698