1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2012 The Chromium Authors. All rights reserved. 28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com// Use of this source code is governed by a BSD-style license that can be 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file. 48a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#ifndef CONTENT_PUBLIC_RENDERER_RENDER_THREAD_H_ 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#define CONTENT_PUBLIC_RENDERER_RENDER_THREAD_H_ 78a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/basictypes.h" 9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "base/callback.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/memory/shared_memory.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "base/metrics/user_metrics_action.h" 12c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com#include "content/common/content_export.h" 134b163ed2c22facbe8891616874ae07ba7827d9c9reed@google.com#include "ipc/ipc_channel_proxy.h" 14b83b6b4f7690fe929d8d6b1a3d2b7ed562b95ba6robertphillips@google.com#include "ipc/ipc_sender.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 160456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com#if defined(OS_WIN) 170456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com#include <windows.h> 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 20fc25abdabff76f913fb9d4f373418c10a1eca92breed@android.comclass GURL; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comnamespace base { 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass MessageLoop; 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass MessageLoopProxy; 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass WaitableEvent; 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comnamespace IPC { 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass MessageFilter; 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SyncChannel; 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SyncMessageFilter; 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 33fc25abdabff76f913fb9d4f373418c10a1eca92breed@android.com 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comnamespace v8 { 35da94699149a40a90731425766d3b994e34c5ba26deanm@chromium.orgclass Extension; 36543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.com} 37543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.com 38543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.comnamespace content { 39543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.com 40543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.comclass RenderProcessObserver; 41543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.comclass ResourceDispatcherDelegate; 42543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.comclass ServiceRegistry; 43543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.com 44543ed9352c7dfd93071c08b14930cca2e82a08d4reed@android.comclass CONTENT_EXPORT RenderThread : public IPC::Sender { 45da94699149a40a90731425766d3b994e34c5ba26deanm@chromium.org public: 46a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // Returns the one render thread for this process. Note that this can only 47a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // be accessed when running on the render thread itself. 48a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com static RenderThread* Get(); 49a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com 50a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com RenderThread(); 51a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual ~RenderThread(); 52a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com 53a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual base::MessageLoop* GetMessageLoop() = 0; 54da94699149a40a90731425766d3b994e34c5ba26deanm@chromium.org virtual IPC::SyncChannel* GetChannel() = 0; 55a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual std::string GetLocale() = 0; 56a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual IPC::SyncMessageFilter* GetSyncMessageFilter() = 0; 57a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual scoped_refptr<base::MessageLoopProxy> GetIOMessageLoopProxy() = 0; 58a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com 59a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // Called to add or remove a listener for a particular message routing ID. 60a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // These methods normally get delegated to a MessageRouter. 61a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual void AddRoute(int32 routing_id, IPC::Listener* listener) = 0; 62a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual void RemoveRoute(int32 routing_id) = 0; 63a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual int GenerateRoutingID() = 0; 64da94699149a40a90731425766d3b994e34c5ba26deanm@chromium.org 65a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // These map to IPC::ChannelProxy methods. 66a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual void AddFilter(IPC::MessageFilter* filter) = 0; 67a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual void RemoveFilter(IPC::MessageFilter* filter) = 0; 68a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com 69a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com // Add/remove observers for the process. 70a0f5d1546d499ef0cd7dbfba9a866ae5a27e1541reed@android.com virtual void AddObserver(RenderProcessObserver* observer) = 0; 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void RemoveObserver(RenderProcessObserver* observer) = 0; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 7348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Set the ResourceDispatcher delegate object for this process. 7448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void SetResourceDispatcherDelegate( 7548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org ResourceDispatcherDelegate* delegate) = 0; 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // We initialize WebKit as late as possible. Call this to force 7848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // initialization. 7948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void EnsureWebKitInitialized() = 0; 8048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Sends over a base::UserMetricsAction to be recorded by user metrics as 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // an action. Once a new user metric is added, run 8348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // tools/metrics/actions/extract_actions.py 8448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // to add the metric to actions.xml, then update the <owner>s and 8548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // <description> sections. Make sure to include the actions.xml file when you 8648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // upload your code for review! 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // 881447c6f7f4579942b32af6ffff1eadede40b42bctomhudson@google.com // WARNING: When using base::UserMetricsAction, base::UserMetricsAction 8948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // and a string literal parameter must be on the same line, e.g. 9048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // RenderThread::Get()->RecordAction( 9148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // base::UserMetricsAction("my extremely long action name")); 9248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // because otherwise our processing scripts won't pick up on new actions. 9348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void RecordAction(const base::UserMetricsAction& action) = 0; 9448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 9548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Sends over a string to be recorded by user metrics as a computed action. 9648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // When you use this you need to also update the rules for extracting known 9748543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // actions in chrome/tools/extract_actions.py. 9848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void RecordComputedAction(const std::string& action) = 0; 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Asks the host to create a block of shared memory for the renderer. 10148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // The shared memory allocated by the host is returned back. 10248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual scoped_ptr<base::SharedMemory> HostAllocateSharedMemoryBuffer( 10348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org size_t buffer_size) = 0; 10448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 10548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Registers the given V8 extension with WebKit. 10648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void RegisterExtension(v8::Extension* extension) = 0; 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 10848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Schedule a call to IdleHandler with the given initial delay. 10948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void ScheduleIdleHandler(int64 initial_delay_ms) = 0; 11048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // A task we invoke periodically to assist with idle cleanup. 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void IdleHandler() = 0; 11348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 11448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Get/Set the delay for how often the idle handler is called. 11548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual int64 GetIdleNotificationDelayInMs() const = 0; 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void SetIdleNotificationDelayInMs( 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int64 idle_notification_delay_in_ms) = 0; 11848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 11948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void UpdateHistograms(int sequence_number) = 0; 12048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 12148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Post task to all worker threads. Returns number of workers. 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual int PostTaskToAllWebWorkers(const base::Closure& closure) = 0; 12348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 12448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Resolve the proxy servers to use for a given url. On success true is 12548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // returned and |proxy_list| is set to a PAC string containing a list of 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // proxy servers. 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool ResolveProxy(const GURL& url, std::string* proxy_list) = 0; 12848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 12948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Gets the shutdown event for the process. 13048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual base::WaitableEvent* GetShutdownEvent() = 0; 13148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 13248543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#if defined(OS_WIN) 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Request that the given font be loaded by the browser so it's cached by the 13448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // OS. Please see ChildProcessHost::PreCacheFont for details. 13548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void PreCacheFont(const LOGFONT& log_font) = 0; 13648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 13748543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Release cached font. 13848543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org virtual void ReleaseCachedFonts() = 0; 13948543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#endif 14048543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 14148543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org // Returns the ServiceRegistry for this thread. 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual ServiceRegistry* GetServiceRegistry() = 0; 14348543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org}; 14448543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 14548543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org} // namespace content 14648543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org 14748543277728fdf66b993f17421f65fba532a23a2vandebo@chromium.org#endif // CONTENT_PUBLIC_RENDERER_RENDER_THREAD_H_ 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com