mock_render_process_host.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 3// found in the LICENSE file. 4 5#ifndef CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 6#define CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_vector.h" 10#include "base/observer_list.h" 11#include "content/public/browser/render_process_host.h" 12#include "content/public/browser/render_process_host_factory.h" 13#include "ipc/ipc_test_sink.h" 14 15class StoragePartition; 16class TransportDIB; 17 18namespace content { 19 20class MockRenderProcessHostFactory; 21 22// A mock render process host that has no corresponding renderer process. All 23// IPC messages are sent into the message sink for inspection by tests. 24class MockRenderProcessHost : public RenderProcessHost { 25 public: 26 explicit MockRenderProcessHost(BrowserContext* browser_context); 27 virtual ~MockRenderProcessHost(); 28 29 // Provides access to all IPC messages that would have been sent to the 30 // renderer via this RenderProcessHost. 31 IPC::TestSink& sink() { return sink_; } 32 33 // Provides test access to how many times a bad message has been received. 34 int bad_msg_count() const { return bad_msg_count_; } 35 36 // RenderProcessHost implementation (public portion). 37 virtual void EnableSendQueue() OVERRIDE; 38 virtual bool Init() OVERRIDE; 39 virtual int GetNextRoutingID() OVERRIDE; 40 virtual void AddRoute(int32 routing_id, IPC::Listener* listener) OVERRIDE; 41 virtual void RemoveRoute(int32 routing_id) OVERRIDE; 42 virtual void AddObserver(RenderProcessHostObserver* observer) OVERRIDE; 43 virtual void RemoveObserver(RenderProcessHostObserver* observer) OVERRIDE; 44 virtual bool WaitForBackingStoreMsg(int render_widget_id, 45 const base::TimeDelta& max_delay, 46 IPC::Message* msg) OVERRIDE; 47 virtual void ReceivedBadMessage() OVERRIDE; 48 virtual void WidgetRestored() OVERRIDE; 49 virtual void WidgetHidden() OVERRIDE; 50 virtual int VisibleWidgetCount() const OVERRIDE; 51 virtual bool IsGuest() const OVERRIDE; 52 virtual StoragePartition* GetStoragePartition() const OVERRIDE; 53 virtual void AddWord(const base::string16& word); 54 virtual bool FastShutdownIfPossible() OVERRIDE; 55 virtual bool FastShutdownStarted() const OVERRIDE; 56 virtual void DumpHandles() OVERRIDE; 57 virtual base::ProcessHandle GetHandle() const OVERRIDE; 58 virtual TransportDIB* MapTransportDIB(TransportDIB::Id dib_id) OVERRIDE; 59 virtual TransportDIB* GetTransportDIB(TransportDIB::Id dib_id) OVERRIDE; 60 virtual int GetID() const OVERRIDE; 61 virtual bool HasConnection() const OVERRIDE; 62 virtual void SetIgnoreInputEvents(bool ignore_input_events) OVERRIDE; 63 virtual bool IgnoreInputEvents() const OVERRIDE; 64 virtual void Cleanup() OVERRIDE; 65 virtual void AddPendingView() OVERRIDE; 66 virtual void RemovePendingView() OVERRIDE; 67 virtual void SetSuddenTerminationAllowed(bool allowed) OVERRIDE; 68 virtual bool SuddenTerminationAllowed() const OVERRIDE; 69 virtual BrowserContext* GetBrowserContext() const OVERRIDE; 70 virtual bool InSameStoragePartition( 71 StoragePartition* partition) const OVERRIDE; 72 virtual IPC::ChannelProxy* GetChannel() OVERRIDE; 73 virtual void AddFilter(BrowserMessageFilter* filter) OVERRIDE; 74 virtual bool FastShutdownForPageCount(size_t count) OVERRIDE; 75 virtual base::TimeDelta GetChildProcessIdleTime() const OVERRIDE; 76 virtual void ResumeRequestsForView(int route_id) OVERRIDE; 77 virtual void FilterURL(bool empty_allowed, GURL* url) OVERRIDE; 78#if defined(ENABLE_WEBRTC) 79 virtual void EnableAecDump(const base::FilePath& file) OVERRIDE; 80 virtual void DisableAecDump() OVERRIDE; 81 virtual void SetWebRtcLogMessageCallback( 82 base::Callback<void(const std::string&)> callback) OVERRIDE; 83#endif 84 virtual void ResumeDeferredNavigation(const GlobalRequestID& request_id) 85 OVERRIDE; 86 87 // IPC::Sender via RenderProcessHost. 88 virtual bool Send(IPC::Message* msg) OVERRIDE; 89 90 // IPC::Listener via RenderProcessHost. 91 virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 92 virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 93 94 // Attaches the factory object so we can remove this object in its destructor 95 // and prevent MockRenderProcessHostFacotry from deleting it. 96 void SetFactory(const MockRenderProcessHostFactory* factory) { 97 factory_ = factory; 98 } 99 100 int GetActiveViewCount(); 101 102 void SetIsGuest(bool is_guest) { 103 is_guest_ = is_guest; 104 } 105 106 private: 107 // Stores IPC messages that would have been sent to the renderer. 108 IPC::TestSink sink_; 109 TransportDIB* transport_dib_; 110 int bad_msg_count_; 111 const MockRenderProcessHostFactory* factory_; 112 int id_; 113 BrowserContext* browser_context_; 114 ObserverList<RenderProcessHostObserver> observers_; 115 116 IDMap<RenderWidgetHost> render_widget_hosts_; 117 int prev_routing_id_; 118 IDMap<IPC::Listener> listeners_; 119 bool fast_shutdown_started_; 120 bool deletion_callback_called_; 121 bool is_guest_; 122 123 DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHost); 124}; 125 126class MockRenderProcessHostFactory : public RenderProcessHostFactory { 127 public: 128 MockRenderProcessHostFactory(); 129 virtual ~MockRenderProcessHostFactory(); 130 131 virtual RenderProcessHost* CreateRenderProcessHost( 132 BrowserContext* browser_context, 133 SiteInstance* site_instance) const OVERRIDE; 134 135 // Removes the given MockRenderProcessHost from the MockRenderProcessHost list 136 // without deleting it. When a test deletes a MockRenderProcessHost, we need 137 // to remove it from |processes_| to prevent it from being deleted twice. 138 void Remove(MockRenderProcessHost* host) const; 139 140 private: 141 // A list of MockRenderProcessHosts created by this object. This list is used 142 // for deleting all MockRenderProcessHosts that have not deleted by a test in 143 // the destructor and prevent them from being leaked. 144 mutable ScopedVector<MockRenderProcessHost> processes_; 145 146 DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHostFactory); 147}; 148 149} // namespace content 150 151#endif // CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 152