blob: a3bd53408c04acac58bee1579a01adcc9527d5b5 [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"
initial.commit09911bf2008-07-26 23:55:2915
[email protected]39008c02009-02-11 23:59:2516class FilePath;
[email protected]4d395d092009-02-11 21:40:4017class NotificationService;
[email protected]39008c02009-02-11 23:59:2518class RenderDnsMaster;
19class SkBitmap;
[email protected]4d395d092009-02-11 21:40:4020class UserScriptSlave;
[email protected]39008c02009-02-11 23:59:2521class VisitedLinkSlave;
22struct ModalDialogEvent;
23struct WebPreferences;
initial.commit09911bf2008-07-26 23:55:2924
[email protected]81a34412009-01-05 19:17:2425// The RenderThreadBase is the minimal interface that a RenderView/Widget
26// expects from a render thread. The interface basically abstracts a way to send
27// and receive messages.
[email protected]8930d472009-02-21 08:05:2828class RenderThreadBase {
[email protected]8085dbc82008-09-26 22:53:4429 public:
30 virtual ~RenderThreadBase() {}
31
[email protected]8930d472009-02-21 08:05:2832 virtual bool Send(IPC::Message* msg) = 0;
33
[email protected]8085dbc82008-09-26 22:53:4434 // True if currently sending a message.
35 virtual bool InSend() const = 0;
36
37 // 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
73 virtual bool InSend() const {
74 return ChildThread::InSend();
75 }
76
77 virtual void AddRoute(int32 routing_id, IPC::Channel::Listener* listener) {
78 return ChildThread::AddRoute(routing_id, listener);
79 }
80 virtual void RemoveRoute(int32 routing_id) {
81 return ChildThread::RemoveRoute(routing_id);
82 }
83
[email protected]81a34412009-01-05 19:17:2484 virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter);
85 virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter);
initial.commit09911bf2008-07-26 23:55:2986
[email protected]1e0f70402008-10-16 23:57:4787 // Gets the VisitedLinkSlave instance for this thread
initial.commit09911bf2008-07-26 23:55:2988 VisitedLinkSlave* visited_link_slave() const { return visited_link_slave_; }
89
[email protected]0938d3c2009-01-09 20:37:3590 // Gets the UserScriptSlave instance for this thread
91 UserScriptSlave* user_script_slave() const { return user_script_slave_; }
[email protected]1e0f70402008-10-16 23:57:4792
initial.commit09911bf2008-07-26 23:55:2993 // Do DNS prefetch resolution of a hostname.
94 void Resolve(const char* name, size_t length);
95
initial.commit09911bf2008-07-26 23:55:2996 // Invokes InformHostOfCacheStats after a short delay. Used to move this
97 // bookkeeping operation off the critical latency path.
98 void InformHostOfCacheStatsLater();
99
[email protected]8930d472009-02-21 08:05:28100 private:
101 virtual void OnControlMessageReceived(const IPC::Message& msg);
initial.commit09911bf2008-07-26 23:55:29102
initial.commit09911bf2008-07-26 23:55:29103 // Called by the thread base class
104 virtual void Init();
105 virtual void CleanUp();
106
[email protected]176aa482008-11-14 03:25:15107 void OnUpdateVisitedLinks(base::SharedMemoryHandle table);
[email protected]0938d3c2009-01-09 20:37:35108 void OnUpdateUserScripts(base::SharedMemoryHandle table);
initial.commit09911bf2008-07-26 23:55:29109
[email protected]690a99c2009-01-06 16:48:45110 void OnPluginMessage(const FilePath& plugin_path,
[email protected]a9f4d902008-09-15 23:43:42111 const std::vector<uint8>& data);
initial.commit09911bf2008-07-26 23:55:29112 void OnSetNextPageID(int32 next_page_id);
[email protected]18bcc3c2009-01-27 21:39:15113 void OnCreateNewView(gfx::NativeViewId parent_hwnd,
114 ModalDialogEvent modal_dialog_event,
initial.commit09911bf2008-07-26 23:55:29115 const WebPreferences& webkit_prefs,
116 int32 view_id);
117 void OnTransferBitmap(const SkBitmap& bitmap, int resource_id);
118 void OnSetCacheCapacities(size_t min_dead_capacity,
119 size_t max_dead_capacity,
120 size_t capacity);
121 void OnGetCacheResourceStats();
122
123 // Gather usage statistics from the in-memory cache and inform our host.
124 // These functions should be call periodically so that the host can make
125 // decisions about how to allocation resources using current information.
126 void InformHostOfCacheStats();
127
initial.commit09911bf2008-07-26 23:55:29128 // These objects live solely on the render thread.
129 VisitedLinkSlave* visited_link_slave_;
[email protected]0938d3c2009-01-09 20:37:35130 UserScriptSlave* user_script_slave_;
initial.commit09911bf2008-07-26 23:55:29131
132 scoped_ptr<RenderDnsMaster> render_dns_master_;
133
134 scoped_ptr<ScopedRunnableMethodFactory<RenderThread> > cache_stats_factory_;
135
[email protected]173de1b2008-08-15 18:36:46136 scoped_ptr<NotificationService> notification_service_;
137
[email protected]1bc83062009-02-06 00:16:37138 DISALLOW_COPY_AND_ASSIGN(RenderThread);
initial.commit09911bf2008-07-26 23:55:29139};
140
[email protected]1d97d2e2008-12-18 23:39:02141#endif // CHROME_RENDERER_RENDER_THREAD_H_