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

Side by Side Diff: content/browser/renderer_host/render_process_host_impl.cc

Issue 563373002: Always activate MojoApplicationHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Re-landing Created 6 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/browser/renderer_host/render_process_host_impl.h ('k') | no next file » | 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 // 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 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 BrowserContext* browser_context, 433 BrowserContext* browser_context,
434 StoragePartitionImpl* storage_partition_impl, 434 StoragePartitionImpl* storage_partition_impl,
435 bool is_isolated_guest) 435 bool is_isolated_guest)
436 : fast_shutdown_started_(false), 436 : fast_shutdown_started_(false),
437 deleting_soon_(false), 437 deleting_soon_(false),
438 #ifndef NDEBUG 438 #ifndef NDEBUG
439 is_self_deleted_(false), 439 is_self_deleted_(false),
440 #endif 440 #endif
441 pending_views_(0), 441 pending_views_(0),
442 mojo_application_host_(new MojoApplicationHost), 442 mojo_application_host_(new MojoApplicationHost),
443 mojo_activation_required_(false),
444 visible_widgets_(0), 443 visible_widgets_(0),
445 backgrounded_(true), 444 backgrounded_(true),
446 is_initialized_(false), 445 is_initialized_(false),
447 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), 446 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()),
448 browser_context_(browser_context), 447 browser_context_(browser_context),
449 storage_partition_impl_(storage_partition_impl), 448 storage_partition_impl_(storage_partition_impl),
450 sudden_termination_allowed_(true), 449 sudden_termination_allowed_(true),
451 ignore_input_events_(false), 450 ignore_input_events_(false),
452 is_isolated_guest_(is_isolated_guest), 451 is_isolated_guest_(is_isolated_guest),
453 gpu_observer_registered_(false), 452 gpu_observer_registered_(false),
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 GpuDataManagerImpl::GetInstance()->AddObserver(this); 638 GpuDataManagerImpl::GetInstance()->AddObserver(this);
640 } 639 }
641 640
642 power_monitor_broadcaster_.Init(); 641 power_monitor_broadcaster_.Init();
643 642
644 is_initialized_ = true; 643 is_initialized_ = true;
645 init_time_ = base::TimeTicks::Now(); 644 init_time_ = base::TimeTicks::Now();
646 return true; 645 return true;
647 } 646 }
648 647
649 void RenderProcessHostImpl::MaybeActivateMojo() {
650 // TODO(darin): Following security review, we can unconditionally initialize
651 // Mojo in all renderers. We will then be able to directly call Activate()
652 // from OnProcessLaunched.
653 if (!mojo_activation_required_)
654 return; // Waiting on someone to require Mojo.
655
656 if (!GetHandle())
657 return; // Waiting on renderer startup.
658
659 if (!mojo_application_host_->did_activate())
660 mojo_application_host_->Activate(this, GetHandle());
661 }
662
663 bool RenderProcessHostImpl::ShouldUseMojoChannel() const { 648 bool RenderProcessHostImpl::ShouldUseMojoChannel() const {
664 const base::CommandLine& command_line = 649 const base::CommandLine& command_line =
665 *base::CommandLine::ForCurrentProcess(); 650 *base::CommandLine::ForCurrentProcess();
666 return command_line.HasSwitch(switches::kEnableRendererMojoChannel); 651 return command_line.HasSwitch(switches::kEnableRendererMojoChannel);
667 } 652 }
668 653
669 scoped_ptr<IPC::ChannelProxy> RenderProcessHostImpl::CreateChannelProxy( 654 scoped_ptr<IPC::ChannelProxy> RenderProcessHostImpl::CreateChannelProxy(
670 const std::string& channel_id) { 655 const std::string& channel_id) {
671 scoped_refptr<base::SingleThreadTaskRunner> runner = 656 scoped_refptr<base::SingleThreadTaskRunner> runner =
672 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); 657 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1936 IDMap<IPC::Listener>::iterator iter(&listeners_); 1921 IDMap<IPC::Listener>::iterator iter(&listeners_);
1937 while (!iter.IsAtEnd()) { 1922 while (!iter.IsAtEnd()) {
1938 iter.GetCurrentValue()->OnMessageReceived( 1923 iter.GetCurrentValue()->OnMessageReceived(
1939 ViewHostMsg_RenderProcessGone(iter.GetCurrentKey(), 1924 ViewHostMsg_RenderProcessGone(iter.GetCurrentKey(),
1940 static_cast<int>(status), 1925 static_cast<int>(status),
1941 exit_code)); 1926 exit_code));
1942 iter.Advance(); 1927 iter.Advance();
1943 } 1928 }
1944 1929
1945 mojo_application_host_.reset(new MojoApplicationHost); 1930 mojo_application_host_.reset(new MojoApplicationHost);
1946 mojo_activation_required_ = false;
1947 1931
1948 // It's possible that one of the calls out to the observers might have caused 1932 // It's possible that one of the calls out to the observers might have caused
1949 // this object to be no longer needed. 1933 // this object to be no longer needed.
1950 if (delayed_cleanup_needed_) 1934 if (delayed_cleanup_needed_)
1951 Cleanup(); 1935 Cleanup();
1952 1936
1953 // This object is not deleted at this point and might be reused later. 1937 // This object is not deleted at this point and might be reused later.
1954 // TODO(darin): clean this up 1938 // TODO(darin): clean this up
1955 } 1939 }
1956 1940
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
2103 // was after, we can end up executing JavaScript before the initialization 2087 // was after, we can end up executing JavaScript before the initialization
2104 // happens. 2088 // happens.
2105 NotificationService::current()->Notify( 2089 NotificationService::current()->Notify(
2106 NOTIFICATION_RENDERER_PROCESS_CREATED, 2090 NOTIFICATION_RENDERER_PROCESS_CREATED,
2107 Source<RenderProcessHost>(this), 2091 Source<RenderProcessHost>(this),
2108 NotificationService::NoDetails()); 2092 NotificationService::NoDetails());
2109 2093
2110 // Allow Mojo to be setup before the renderer sees any Chrome IPC messages. 2094 // Allow Mojo to be setup before the renderer sees any Chrome IPC messages.
2111 // This way, Mojo can be safely used from the renderer in response to any 2095 // This way, Mojo can be safely used from the renderer in response to any
2112 // Chrome IPC message. 2096 // Chrome IPC message.
2113 MaybeActivateMojo(); 2097 mojo_application_host_->Activate(this, GetHandle());
2114 2098
2115 if (channel_mojo_host_) 2099 if (channel_mojo_host_)
2116 channel_mojo_host_->OnClientLaunched(GetHandle()); 2100 channel_mojo_host_->OnClientLaunched(GetHandle());
2117 2101
2118 while (!queued_messages_.empty()) { 2102 while (!queued_messages_.empty()) {
2119 Send(queued_messages_.front()); 2103 Send(queued_messages_.front());
2120 queued_messages_.pop(); 2104 queued_messages_.pop();
2121 } 2105 }
2122 2106
2123 #if defined(ENABLE_WEBRTC) 2107 #if defined(ENABLE_WEBRTC)
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
2247 } 2231 }
2248 2232
2249 void RenderProcessHostImpl::DecrementWorkerRefCount() { 2233 void RenderProcessHostImpl::DecrementWorkerRefCount() {
2250 DCHECK_CURRENTLY_ON(BrowserThread::UI); 2234 DCHECK_CURRENTLY_ON(BrowserThread::UI);
2251 DCHECK_GT(worker_ref_count_, 0); 2235 DCHECK_GT(worker_ref_count_, 0);
2252 --worker_ref_count_; 2236 --worker_ref_count_;
2253 if (worker_ref_count_ == 0) 2237 if (worker_ref_count_ == 0)
2254 Cleanup(); 2238 Cleanup();
2255 } 2239 }
2256 2240
2257 void RenderProcessHostImpl::EnsureMojoActivated() {
2258 mojo_activation_required_ = true;
2259 MaybeActivateMojo();
2260 }
2261
2262 } // namespace content 2241 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_process_host_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698