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

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

Powered by Google App Engine
This is Rietveld 408576698