1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#ifndef CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#define CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/basictypes.h" 97ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com#include "base/memory/scoped_vector.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/observer_list.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "content/public/browser/render_process_host.h" 124991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com#include "content/public/browser/render_process_host_factory.h" 138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "ipc/ipc_test_sink.h" 148b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass StoragePartition; 164991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com 174991b8f23482afc1494fd17647421ce68de53331robertphillips@google.comnamespace content { 184991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass MockRenderProcessHostFactory; 2073cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// A mock render process host that has no corresponding renderer process. All 227ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com// IPC messages are sent into the message sink for inspection by tests. 237ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.comclass MockRenderProcessHost : public RenderProcessHost { 247ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com public: 2573cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org explicit MockRenderProcessHost(BrowserContext* browser_context); 267ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual ~MockRenderProcessHost(); 277bd141dce43ea3405bc60c9c84e6f910b851b079skia.committer@gmail.com 287ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com // Provides access to all IPC messages that would have been sent to the 297ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com // renderer via this RenderProcessHost. 307ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com IPC::TestSink& sink() { return sink_; } 317ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com 327ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com // Provides test access to how many times a bad message has been received. 337ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com int bad_msg_count() const { return bad_msg_count_; } 347ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com 357ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com // RenderProcessHost implementation (public portion). 367ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual void EnableSendQueue() OVERRIDE; 377ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual bool Init() OVERRIDE; 384e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual int GetNextRoutingID() OVERRIDE; 39038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org virtual void AddRoute(int32 routing_id, IPC::Listener* listener) OVERRIDE; 407ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual void RemoveRoute(int32 routing_id) OVERRIDE; 4182065d667f64e232bcde2ad849756a6096fcbe6freed@google.com virtual void AddObserver(RenderProcessHostObserver* observer) OVERRIDE; 4282065d667f64e232bcde2ad849756a6096fcbe6freed@google.com virtual void RemoveObserver(RenderProcessHostObserver* observer) OVERRIDE; 43038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org virtual void ReceivedBadMessage() OVERRIDE; 44038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org virtual void WidgetRestored() OVERRIDE; 454868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual void WidgetHidden() OVERRIDE; 46fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com virtual int VisibleWidgetCount() const OVERRIDE; 474868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual bool IsIsolatedGuest() const OVERRIDE; 484868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual StoragePartition* GetStoragePartition() const OVERRIDE; 497ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual void AddWord(const base::string16& word); 507ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com virtual bool FastShutdownIfPossible() OVERRIDE; 51038aff623d9fd47946cd31685f74cf473f7c84f0senorblanco@chromium.org virtual bool FastShutdownStarted() const OVERRIDE; 524e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual void DumpHandles() OVERRIDE; 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual base::ProcessHandle GetHandle() const OVERRIDE; 544868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual int GetID() const OVERRIDE; 554868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual bool HasConnection() const OVERRIDE; 564e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual void SetIgnoreInputEvents(bool ignore_input_events) OVERRIDE; 57a6398911174d5445456ecb2f5f4f0565db2f100bjunov@google.com virtual bool IgnoreInputEvents() const OVERRIDE; 58a6398911174d5445456ecb2f5f4f0565db2f100bjunov@google.com virtual void Cleanup() OVERRIDE; 59a6398911174d5445456ecb2f5f4f0565db2f100bjunov@google.com virtual void AddPendingView() OVERRIDE; 604868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual void RemovePendingView() OVERRIDE; 614e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual void SetSuddenTerminationAllowed(bool allowed) OVERRIDE; 624e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual bool SuddenTerminationAllowed() const OVERRIDE; 634e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual BrowserContext* GetBrowserContext() const OVERRIDE; 644868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual bool InSameStoragePartition( 654868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org StoragePartition* partition) const OVERRIDE; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual IPC::ChannelProxy* GetChannel() OVERRIDE; 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void AddFilter(BrowserMessageFilter* filter) OVERRIDE; 688b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual bool FastShutdownForPageCount(size_t count) OVERRIDE; 696bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com virtual base::TimeDelta GetChildProcessIdleTime() const OVERRIDE; 706bac947cd5bc460dd9166ada6310d678fd2e39f8reed@google.com virtual void ResumeRequestsForView(int route_id) OVERRIDE; 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void FilterURL(bool empty_allowed, GURL* url) OVERRIDE; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if defined(ENABLE_WEBRTC) 73c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com virtual void EnableAecDump(const base::FilePath& file) OVERRIDE; 74353482251e61971a8cf3a60bbb6910f482be634freed@google.com virtual void DisableAecDump() OVERRIDE; 75353482251e61971a8cf3a60bbb6910f482be634freed@google.com virtual void SetWebRtcLogMessageCallback( 76c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com base::Callback<void(const std::string&)> callback) OVERRIDE; 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual WebRtcStopRtpDumpCallback StartRtpDump( 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool incoming, 794e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com bool outgoing, 8082065d667f64e232bcde2ad849756a6096fcbe6freed@google.com const WebRtcRtpPacketCallback& packet_callback) OVERRIDE; 814868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org#endif 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void ResumeDeferredNavigation(const GlobalRequestID& request_id) 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OVERRIDE; 848b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org virtual void NotifyTimezoneChange() OVERRIDE; 8554924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com virtual ServiceRegistry* GetServiceRegistry() OVERRIDE; 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // IPC::Sender via RenderProcessHost. 88c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com virtual bool Send(IPC::Message* msg) OVERRIDE; 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 904868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org // IPC::Listener via RenderProcessHost. 91c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void OnChannelConnected(int32 peer_pid) OVERRIDE; 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 9479fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org // Attaches the factory object so we can remove this object in its destructor 9579fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org // and prevent MockRenderProcessHostFacotry from deleting it. 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void SetFactory(const MockRenderProcessHostFactory* factory) { 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com factory_ = factory; 9879fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org } 9979fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org 10079fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org int GetActiveViewCount(); 10179fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org 10279fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org void set_is_isolated_guest(bool is_isolated_guest) { 10379fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org is_isolated_guest_ = is_isolated_guest; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1054e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com 1064e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com void SetProcessHandle(scoped_ptr<base::ProcessHandle> new_handle) { 1074e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com process_handle = new_handle.Pass(); 1084e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com } 1094e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com 1104e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com private: 11156c69773aea56c6c6bd47bc7e7970dd081205184djsollen@google.com // Stores IPC messages that would have been sent to the renderer. 112f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com IPC::TestSink sink_; 11379fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org int bad_msg_count_; 114f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com const MockRenderProcessHostFactory* factory_; 115f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com int id_; 116f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com BrowserContext* browser_context_; 117f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com ObserverList<RenderProcessHostObserver> observers_; 118f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com 11979fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org IDMap<RenderWidgetHost> render_widget_hosts_; 120f5dbe2f00f853c6a1719924bdd0c33335a53423adjsollen@google.com int prev_routing_id_; 12179fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org IDMap<IPC::Listener> listeners_; 12279fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org bool fast_shutdown_started_; 12374e608cdc1e13593b54d54f11e65c1c309d19370commit-bot@chromium.org bool deletion_callback_called_; 12479fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org bool is_isolated_guest_; 1254e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com scoped_ptr<base::ProcessHandle> process_handle; 12679fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org 1274e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHost); 1284e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com}; 12979fbb40bca9d815ef79b896b31ba6ee736817e0fcommit-bot@chromium.org 1304e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.comclass MockRenderProcessHostFactory : public RenderProcessHostFactory { 1314e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com public: 1324e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com MockRenderProcessHostFactory(); 1334e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual ~MockRenderProcessHostFactory(); 1344e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com 1354e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com virtual RenderProcessHost* CreateRenderProcessHost( 1364e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com BrowserContext* browser_context, 1374e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com SiteInstance* site_instance) const OVERRIDE; 1384e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com 1394e2b3d3fb1288c6dc0f3ea1c0aa4a0d7c603bd7breed@google.com // Removes the given MockRenderProcessHost from the MockRenderProcessHost list 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // without deleting it. When a test deletes a MockRenderProcessHost, we need 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // to remove it from |processes_| to prevent it from being deleted twice. 1424991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com void Remove(MockRenderProcessHost* host) const; 1430f10f7bf1fb43ca6346dc220a076773b1f19a367commit-bot@chromium.org 1444991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com private: 1454991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com // A list of MockRenderProcessHosts created by this object. This list is used 1464991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com // for deleting all MockRenderProcessHosts that have not deleted by a test in 1474991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com // the destructor and prevent them from being leaked. 1484991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com mutable ScopedVector<MockRenderProcessHost> processes_; 1494991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com 1504991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com DISALLOW_COPY_AND_ASSIGN(MockRenderProcessHostFactory); 1514991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com}; 1524991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com 1534991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com} // namespace content 1544991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com 1554991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com#endif // CONTENT_PUBLIC_TEST_MOCK_RENDER_PROCESS_HOST_H_ 1564991b8f23482afc1494fd17647421ce68de53331robertphillips@google.com