| OLD | NEW |
| 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/public/test/mock_render_process_host.h" | 5 #include "content/public/test/mock_render_process_host.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/browser/child_process_security_policy_impl.h" | 10 #include "content/browser/child_process_security_policy_impl.h" |
| 11 #include "content/browser/renderer_host/render_process_host_impl.h" | 11 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 12 #include "content/browser/renderer_host/render_view_host_impl.h" | 12 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 13 #include "content/browser/renderer_host/render_widget_host_impl.h" | 13 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 14 #include "content/common/child_process_host_impl.h" | 14 #include "content/common/child_process_host_impl.h" |
| 15 #include "content/public/browser/notification_service.h" | 15 #include "content/public/browser/notification_service.h" |
| 16 #include "content/public/browser/notification_types.h" | 16 #include "content/public/browser/notification_types.h" |
| 17 #include "content/public/browser/render_widget_host_iterator.h" | 17 #include "content/public/browser/render_widget_host_iterator.h" |
| 18 #include "content/public/browser/storage_partition.h" | 18 #include "content/public/browser/storage_partition.h" |
| 19 | 19 |
| 20 namespace content { | 20 namespace content { |
| 21 | 21 |
| 22 MockRenderProcessHost::MockRenderProcessHost( | 22 MockRenderProcessHost::MockRenderProcessHost(BrowserContext* browser_context) |
| 23 BrowserContext* browser_context) | 23 : transport_dib_(NULL), |
| 24 : transport_dib_(NULL), | 24 bad_msg_count_(0), |
| 25 bad_msg_count_(0), | 25 factory_(NULL), |
| 26 factory_(NULL), | 26 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), |
| 27 id_(ChildProcessHostImpl::GenerateChildProcessUniqueId()), | 27 browser_context_(browser_context), |
| 28 browser_context_(browser_context), | 28 prev_routing_id_(0), |
| 29 prev_routing_id_(0), | 29 fast_shutdown_started_(false), |
| 30 fast_shutdown_started_(false) { | 30 deletion_callback_called_(false) { |
| 31 // Child process security operations can't be unit tested unless we add | 31 // Child process security operations can't be unit tested unless we add |
| 32 // ourselves as an existing child process. | 32 // ourselves as an existing child process. |
| 33 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); | 33 ChildProcessSecurityPolicyImpl::GetInstance()->Add(GetID()); |
| 34 | 34 |
| 35 RenderProcessHostImpl::RegisterHost(GetID(), this); | 35 RenderProcessHostImpl::RegisterHost(GetID(), this); |
| 36 } | 36 } |
| 37 | 37 |
| 38 MockRenderProcessHost::~MockRenderProcessHost() { | 38 MockRenderProcessHost::~MockRenderProcessHost() { |
| 39 ChildProcessSecurityPolicyImpl::GetInstance()->Remove(GetID()); | 39 ChildProcessSecurityPolicyImpl::GetInstance()->Remove(GetID()); |
| 40 delete transport_dib_; | 40 delete transport_dib_; |
| 41 if (factory_) | 41 if (factory_) |
| 42 factory_->Remove(this); | 42 factory_->Remove(this); |
| 43 // In unit tests, Release() might not have been called. | 43 |
| 44 RenderProcessHostImpl::UnregisterHost(GetID()); | 44 // In unit tests, Cleanup() might not have been called. |
| 45 if (!deletion_callback_called_) { |
| 46 FOR_EACH_OBSERVER(RenderProcessHostObserver, |
| 47 observers_, |
| 48 RenderProcessHostDestroyed(this)); |
| 49 RenderProcessHostImpl::UnregisterHost(GetID()); |
| 50 } |
| 45 } | 51 } |
| 46 | 52 |
| 47 void MockRenderProcessHost::EnableSendQueue() { | 53 void MockRenderProcessHost::EnableSendQueue() { |
| 48 } | 54 } |
| 49 | 55 |
| 50 bool MockRenderProcessHost::Init() { | 56 bool MockRenderProcessHost::Init() { |
| 51 return true; | 57 return true; |
| 52 } | 58 } |
| 53 | 59 |
| 54 int MockRenderProcessHost::GetNextRoutingID() { | 60 int MockRenderProcessHost::GetNextRoutingID() { |
| 55 return ++prev_routing_id_; | 61 return ++prev_routing_id_; |
| 56 } | 62 } |
| 57 | 63 |
| 58 void MockRenderProcessHost::AddRoute( | 64 void MockRenderProcessHost::AddRoute( |
| 59 int32 routing_id, | 65 int32 routing_id, |
| 60 IPC::Listener* listener) { | 66 IPC::Listener* listener) { |
| 61 listeners_.AddWithID(listener, routing_id); | 67 listeners_.AddWithID(listener, routing_id); |
| 62 } | 68 } |
| 63 | 69 |
| 64 void MockRenderProcessHost::RemoveRoute(int32 routing_id) { | 70 void MockRenderProcessHost::RemoveRoute(int32 routing_id) { |
| 65 DCHECK(listeners_.Lookup(routing_id) != NULL); | 71 DCHECK(listeners_.Lookup(routing_id) != NULL); |
| 66 listeners_.Remove(routing_id); | 72 listeners_.Remove(routing_id); |
| 67 Cleanup(); | 73 Cleanup(); |
| 68 } | 74 } |
| 69 | 75 |
| 76 void MockRenderProcessHost::AddObserver(RenderProcessHostObserver* observer) { |
| 77 observers_.AddObserver(observer); |
| 78 } |
| 79 |
| 80 void MockRenderProcessHost::RemoveObserver( |
| 81 RenderProcessHostObserver* observer) { |
| 82 observers_.RemoveObserver(observer); |
| 83 } |
| 84 |
| 70 bool MockRenderProcessHost::WaitForBackingStoreMsg( | 85 bool MockRenderProcessHost::WaitForBackingStoreMsg( |
| 71 int render_widget_id, | 86 int render_widget_id, |
| 72 const base::TimeDelta& max_delay, | 87 const base::TimeDelta& max_delay, |
| 73 IPC::Message* msg) { | 88 IPC::Message* msg) { |
| 74 return false; | 89 return false; |
| 75 } | 90 } |
| 76 | 91 |
| 77 void MockRenderProcessHost::ReceivedBadMessage() { | 92 void MockRenderProcessHost::ReceivedBadMessage() { |
| 78 ++bad_msg_count_; | 93 ++bad_msg_count_; |
| 79 } | 94 } |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 | 177 |
| 163 void MockRenderProcessHost::SetIgnoreInputEvents(bool ignore_input_events) { | 178 void MockRenderProcessHost::SetIgnoreInputEvents(bool ignore_input_events) { |
| 164 } | 179 } |
| 165 | 180 |
| 166 bool MockRenderProcessHost::IgnoreInputEvents() const { | 181 bool MockRenderProcessHost::IgnoreInputEvents() const { |
| 167 return false; | 182 return false; |
| 168 } | 183 } |
| 169 | 184 |
| 170 void MockRenderProcessHost::Cleanup() { | 185 void MockRenderProcessHost::Cleanup() { |
| 171 if (listeners_.IsEmpty()) { | 186 if (listeners_.IsEmpty()) { |
| 187 FOR_EACH_OBSERVER(RenderProcessHostObserver, |
| 188 observers_, |
| 189 RenderProcessHostDestroyed(this)); |
| 172 NotificationService::current()->Notify( | 190 NotificationService::current()->Notify( |
| 173 NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 191 NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 174 Source<RenderProcessHost>(this), | 192 Source<RenderProcessHost>(this), |
| 175 NotificationService::NoDetails()); | 193 NotificationService::NoDetails()); |
| 176 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); | 194 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
| 177 RenderProcessHostImpl::UnregisterHost(GetID()); | 195 RenderProcessHostImpl::UnregisterHost(GetID()); |
| 196 deletion_callback_called_ = true; |
| 178 } | 197 } |
| 179 } | 198 } |
| 180 | 199 |
| 181 void MockRenderProcessHost::AddPendingView() { | 200 void MockRenderProcessHost::AddPendingView() { |
| 182 } | 201 } |
| 183 | 202 |
| 184 void MockRenderProcessHost::RemovePendingView() { | 203 void MockRenderProcessHost::RemovePendingView() { |
| 185 } | 204 } |
| 186 | 205 |
| 187 void MockRenderProcessHost::SetSuddenTerminationAllowed(bool allowed) { | 206 void MockRenderProcessHost::SetSuddenTerminationAllowed(bool allowed) { |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 for (ScopedVector<MockRenderProcessHost>::iterator it = processes_.begin(); | 292 for (ScopedVector<MockRenderProcessHost>::iterator it = processes_.begin(); |
| 274 it != processes_.end(); ++it) { | 293 it != processes_.end(); ++it) { |
| 275 if (*it == host) { | 294 if (*it == host) { |
| 276 processes_.weak_erase(it); | 295 processes_.weak_erase(it); |
| 277 break; | 296 break; |
| 278 } | 297 } |
| 279 } | 298 } |
| 280 } | 299 } |
| 281 | 300 |
| 282 } // content | 301 } // content |
| OLD | NEW |