blob: 8f41ccedb6ba925c9abe70e4233271341bd585d6 [file] [log] [blame]
license.botbf09a502008-08-24 00:55:551// Copyright (c) 2006-2008 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.
initial.commit09911bf2008-07-26 23:55:294
[email protected]1d97d2e2008-12-18 23:39:025#ifndef CHROME_RENDERER_RENDER_THREAD_H_
6#define CHROME_RENDERER_RENDER_THREAD_H_
initial.commit09911bf2008-07-26 23:55:297
[email protected]1bc83062009-02-06 00:16:378#include <vector>
9
[email protected]18bcc3c2009-01-27 21:39:1510#include "base/gfx/native_widget_types.h"
initial.commit09911bf2008-07-26 23:55:2911#include "base/shared_memory.h"
12#include "base/task.h"
[email protected]037fce02009-01-22 01:42:1513#include "build/build_config.h"
[email protected]8930d472009-02-21 08:05:2814#include "chrome/common/child_thread.h"
[email protected]55e57d42009-02-25 06:10:1715#include "chrome/renderer/renderer_histogram_snapshots.h"
initial.commit09911bf2008-07-26 23:55:2916
[email protected]39008c02009-02-11 23:59:2517class FilePath;
[email protected]4d395d092009-02-11 21:40:4018class NotificationService;
[email protected]39008c02009-02-11 23:59:2519class RenderDnsMaster;
[email protected]55e57d42009-02-25 06:10:1720class RendererHistogram;
[email protected]8d86fce2009-02-26 23:37:5521class RendererWebKitClientImpl;
[email protected]39008c02009-02-11 23:59:2522class SkBitmap;
[email protected]4d395d092009-02-11 21:40:4023class UserScriptSlave;
[email protected]39008c02009-02-11 23:59:2524class VisitedLinkSlave;
25struct ModalDialogEvent;
26struct WebPreferences;
initial.commit09911bf2008-07-26 23:55:2927
[email protected]81a34412009-01-05 19:17:2428// The RenderThreadBase is the minimal interface that a RenderView/Widget
29// expects from a render thread. The interface basically abstracts a way to send
30// and receive messages.
[email protected]8930d472009-02-21 08:05:2831class RenderThreadBase {
[email protected]8085dbc82008-09-26 22:53:4432 public:
33 virtual ~RenderThreadBase() {}
34
[email protected]8930d472009-02-21 08:05:2835 virtual bool Send(IPC::Message* msg) = 0;
36
[email protected]8085dbc82008-09-26 22:53:4437 // Called to add or remove a listener for a particular message routing ID.
38 // These methods normally get delegated to a MessageRouter.
39 virtual void AddRoute(int32 routing_id, IPC::Channel::Listener* listener) = 0;
40 virtual void RemoveRoute(int32 routing_id) = 0;
[email protected]81a34412009-01-05 19:17:2441
42 virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter) = 0;
43 virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) = 0;
[email protected]8085dbc82008-09-26 22:53:4444};
45
initial.commit09911bf2008-07-26 23:55:2946// The RenderThread class represents a background thread where RenderView
47// instances live. The RenderThread supports an API that is used by its
48// consumer to talk indirectly to the RenderViews and supporting objects.
49// Likewise, it provides an API for the RenderViews to talk back to the main
50// process (i.e., their corresponding WebContents).
51//
52// Most of the communication occurs in the form of IPC messages. They are
53// routed to the RenderThread according to the routing IDs of the messages.
54// The routing IDs correspond to RenderView instances.
[email protected]8930d472009-02-21 08:05:2855class RenderThread : public RenderThreadBase,
56 public ChildThread {
initial.commit09911bf2008-07-26 23:55:2957 public:
[email protected]8930d472009-02-21 08:05:2858 // Grabs the IPC channel name from the command line.
59 RenderThread();
60 // Constructor that's used when running in single process mode.
61 RenderThread(const std::wstring& channel_name);
[email protected]8085dbc82008-09-26 22:53:4462 virtual ~RenderThread();
initial.commit09911bf2008-07-26 23:55:2963
[email protected]8930d472009-02-21 08:05:2864 // Returns the one render thread for this process. Note that this should only
65 // be accessed when running on the render thread itself
66 static RenderThread* current();
initial.commit09911bf2008-07-26 23:55:2967
[email protected]81a34412009-01-05 19:17:2468 // Overridded from RenderThreadBase.
[email protected]8930d472009-02-21 08:05:2869 virtual bool Send(IPC::Message* msg) {
70 return ChildThread::Send(msg);
71 }
72
[email protected]8930d472009-02-21 08:05:2873 virtual void AddRoute(int32 routing_id, IPC::Channel::Listener* listener) {
74 return ChildThread::AddRoute(routing_id, listener);
75 }
76 virtual void RemoveRoute(int32 routing_id) {
77 return ChildThread::RemoveRoute(routing_id);
78 }
79
[email protected]81a34412009-01-05 19:17:2480 virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter);
81 virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter);
initial.commit09911bf2008-07-26 23:55:2982
[email protected]8d86fce2009-02-26 23:37:5583 VisitedLinkSlave* visited_link_slave() const {
84 return visited_link_slave_.get();
85 }
initial.commit09911bf2008-07-26 23:55:2986
[email protected]8d86fce2009-02-26 23:37:5587 UserScriptSlave* user_script_slave() const {
88 return user_script_slave_.get();
89 }
[email protected]1e0f70402008-10-16 23:57:4790
initial.commit09911bf2008-07-26 23:55:2991 // Do DNS prefetch resolution of a hostname.
92 void Resolve(const char* name, size_t length);
93
[email protected]55e57d42009-02-25 06:10:1794 // Send all the Histogram data to browser.
95 void SendHistograms();
96
initial.commit09911bf2008-07-26 23:55:2997 // Invokes InformHostOfCacheStats after a short delay. Used to move this
98 // bookkeeping operation off the critical latency path.
99 void InformHostOfCacheStatsLater();
100
[email protected]8930d472009-02-21 08:05:28101 private:
102 virtual void OnControlMessageReceived(const IPC::Message& msg);
initial.commit09911bf2008-07-26 23:55:29103
initial.commit09911bf2008-07-26 23:55:29104 // Called by the thread base class
105 virtual void Init();
106 virtual void CleanUp();
107
[email protected]176aa482008-11-14 03:25:15108 void OnUpdateVisitedLinks(base::SharedMemoryHandle table);
[email protected]0938d3c2009-01-09 20:37:35109 void OnUpdateUserScripts(base::SharedMemoryHandle table);
initial.commit09911bf2008-07-26 23:55:29110
[email protected]690a99c2009-01-06 16:48:45111 void OnPluginMessage(const FilePath& plugin_path,
[email protected]a9f4d902008-09-15 23:43:42112 const std::vector<uint8>& data);
initial.commit09911bf2008-07-26 23:55:29113 void OnSetNextPageID(int32 next_page_id);
[email protected]18bcc3c2009-01-27 21:39:15114 void OnCreateNewView(gfx::NativeViewId parent_hwnd,
115 ModalDialogEvent modal_dialog_event,
initial.commit09911bf2008-07-26 23:55:29116 const WebPreferences& webkit_prefs,
117 int32 view_id);
118 void OnTransferBitmap(const SkBitmap& bitmap, int resource_id);
119 void OnSetCacheCapacities(size_t min_dead_capacity,
120 size_t max_dead_capacity,
121 size_t capacity);
122 void OnGetCacheResourceStats();
123
[email protected]55e57d42009-02-25 06:10:17124 // Send all histograms to browser.
125 void OnGetRendererHistograms();
126
initial.commit09911bf2008-07-26 23:55:29127 // Gather usage statistics from the in-memory cache and inform our host.
128 // These functions should be call periodically so that the host can make
129 // decisions about how to allocation resources using current information.
130 void InformHostOfCacheStats();
131
initial.commit09911bf2008-07-26 23:55:29132 // These objects live solely on the render thread.
[email protected]8d86fce2009-02-26 23:37:55133 scoped_ptr<VisitedLinkSlave> visited_link_slave_;
initial.commit09911bf2008-07-26 23:55:29134
[email protected]8d86fce2009-02-26 23:37:55135 scoped_ptr<UserScriptSlave> user_script_slave_;
initial.commit09911bf2008-07-26 23:55:29136
[email protected]8d86fce2009-02-26 23:37:55137 scoped_ptr<RenderDnsMaster> dns_master_;
138
139 scoped_ptr<RendererHistogramSnapshots> histogram_snapshots_;
[email protected]55e57d42009-02-25 06:10:17140
initial.commit09911bf2008-07-26 23:55:29141 scoped_ptr<ScopedRunnableMethodFactory<RenderThread> > cache_stats_factory_;
142
[email protected]173de1b2008-08-15 18:36:46143 scoped_ptr<NotificationService> notification_service_;
144
[email protected]8d86fce2009-02-26 23:37:55145 scoped_ptr<RendererWebKitClientImpl> webkit_client_impl_;
[email protected]c62ce3e2009-02-26 00:15:20146
[email protected]1bc83062009-02-06 00:16:37147 DISALLOW_COPY_AND_ASSIGN(RenderThread);
initial.commit09911bf2008-07-26 23:55:29148};
149
[email protected]1d97d2e2008-12-18 23:39:02150#endif // CHROME_RENDERER_RENDER_THREAD_H_