diff options
Diffstat (limited to 'chrome/browser/renderer_host/mock_render_process_host.cc')
-rw-r--r-- | chrome/browser/renderer_host/mock_render_process_host.cc | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/chrome/browser/renderer_host/mock_render_process_host.cc b/chrome/browser/renderer_host/mock_render_process_host.cc index 21fa34d..cdecb6f 100644 --- a/chrome/browser/renderer_host/mock_render_process_host.cc +++ b/chrome/browser/renderer_host/mock_render_process_host.cc @@ -9,7 +9,8 @@ MockRenderProcessHost::MockRenderProcessHost(Profile* profile) : RenderProcessHost(profile), transport_dib_(NULL), - bad_msg_count_(0) { + bad_msg_count_(0), + factory_(NULL) { // Child process security operations can't be unit tested unless we add // ourselves as an existing child process. ChildProcessSecurityPolicy::GetInstance()->Add(id()); @@ -18,10 +19,12 @@ MockRenderProcessHost::MockRenderProcessHost(Profile* profile) MockRenderProcessHost::~MockRenderProcessHost() { ChildProcessSecurityPolicy::GetInstance()->Remove(id()); delete transport_dib_; + if (factory_) + factory_->Remove(this); } -bool MockRenderProcessHost::Init(bool is_extensions_process, - URLRequestContextGetter* request_context) { +bool MockRenderProcessHost::Init( + bool is_accessibility_enabled, bool is_extensions_process) { return true; } @@ -103,7 +106,7 @@ TransportDIB* MockRenderProcessHost::GetTransportDIB(TransportDIB::Id dib_id) { // On Mac, TransportDIBs are always created in the browser, so we cannot map // one from a dib_id. transport_dib_ = TransportDIB::Create(100 * 100 * 4, 0); -#elif defined(OS_LINUX) +#elif defined(OS_POSIX) transport_dib_ = TransportDIB::Map(dib_id); #endif @@ -115,3 +118,32 @@ void MockRenderProcessHost::OnMessageReceived(const IPC::Message& msg) { void MockRenderProcessHost::OnChannelConnected(int32 peer_pid) { } + +MockRenderProcessHostFactory::~MockRenderProcessHostFactory() { + // Detach this object from MockRenderProcesses to prevent STLDeleteElements() + // from calling MockRenderProcessHostFactory::Remove(). + for (ScopedVector<MockRenderProcessHost>::iterator it = processes_.begin(); + it != processes_.end(); ++it) { + (*it)->SetFactory(NULL); + } +} + +RenderProcessHost* MockRenderProcessHostFactory::CreateRenderProcessHost( + Profile* profile) const { + MockRenderProcessHost* host = new MockRenderProcessHost(profile); + if (host) { + processes_.push_back(host); + host->SetFactory(this); + } + return host; +} + +void MockRenderProcessHostFactory::Remove(MockRenderProcessHost* host) const { + for (ScopedVector<MockRenderProcessHost>::iterator it = processes_.begin(); + it != processes_.end(); ++it) { + if (*it == host) { + processes_.weak_erase(it); + break; + } + } +} |