summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host/render_process_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/renderer_host/render_process_host.h')
-rw-r--r--chrome/browser/renderer_host/render_process_host.h319
1 files changed, 2 insertions, 317 deletions
diff --git a/chrome/browser/renderer_host/render_process_host.h b/chrome/browser/renderer_host/render_process_host.h
index fa58495..41af810 100644
--- a/chrome/browser/renderer_host/render_process_host.h
+++ b/chrome/browser/renderer_host/render_process_host.h
@@ -6,322 +6,7 @@
#define CHROME_BROWSER_RENDERER_HOST_RENDER_PROCESS_HOST_H_
#pragma once
-#include <set>
-
-#include "app/surface/transport_dib.h"
-#include "base/id_map.h"
-#include "base/process.h"
-#include "base/process_util.h"
-#include "base/scoped_ptr.h"
-#include "base/time.h"
-#include "chrome/common/visitedlink_common.h"
-#include "ipc/ipc_sync_channel.h"
-
-class Profile;
-class URLRequestContextGetter;
-struct ViewMsg_ClosePage_Params;
-
-namespace base {
-class SharedMemory;
-}
-
-// Virtual interface that represents the browser side of the browser <->
-// renderer communication channel. There will generally be one
-// RenderProcessHost per renderer process.
-//
-// The concrete implementation of this class for normal use is the
-// BrowserRenderProcessHost. It may also be implemented by a testing interface
-// for mocking purposes.
-class RenderProcessHost : public IPC::Channel::Sender,
- public IPC::Channel::Listener {
- public:
- typedef IDMap<RenderProcessHost>::iterator iterator;
-
- // We classify renderers according to their highest privilege, and try
- // to group pages into renderers with similar privileges.
- // Note: it may be possible for a renderer to have multiple privileges,
- // in which case we call it an "extension" renderer.
- enum Type {
- TYPE_NORMAL, // Normal renderer, no extra privileges.
- TYPE_WEBUI, // Renderer with WebUI privileges, like New Tab.
- TYPE_EXTENSION, // Renderer with extension privileges.
- };
-
- // Details for RENDERER_PROCESS_CLOSED notifications.
- struct RendererClosedDetails {
- RendererClosedDetails(base::TerminationStatus status,
- int exit_code,
- bool was_extension_renderer) {
- this->status = status;
- this->exit_code = exit_code;
- this->was_extension_renderer = was_extension_renderer;
- }
- base::TerminationStatus status;
- int exit_code;
- bool was_extension_renderer;
- };
-
- explicit RenderProcessHost(Profile* profile);
- virtual ~RenderProcessHost();
-
- // Returns the user profile associated with this renderer process.
- Profile* profile() const { return profile_; }
-
- // Returns the unique ID for this child process. This can be used later in
- // a call to FromID() to get back to this object (this is used to avoid
- // sending non-threadsafe pointers to other threads).
- //
- // This ID will be unique for all child processes, including workers, plugins,
- // etc. It is generated by ChildProcessInfo.
- int id() const { return id_; }
-
- // Returns true iff channel_ has been set to non-NULL. Use this for checking
- // if there is connection or not.
- bool HasConnection() { return channel_.get() != NULL; }
-
- bool sudden_termination_allowed() const {
- return sudden_termination_allowed_;
- }
- void set_sudden_termination_allowed(bool enabled) {
- sudden_termination_allowed_ = enabled;
- }
-
- // Used for refcounting, each holder of this object must Attach and Release
- // just like it would for a COM object. This object should be allocated on
- // the heap; when no listeners own it any more, it will delete itself.
- void Attach(IPC::Channel::Listener* listener, int routing_id);
-
- // See Attach()
- void Release(int listener_id);
-
- // Listeners should call this when they've sent a "Close" message and
- // they're waiting for a "Close_ACK", so that if the renderer process
- // goes away we'll know that it was intentional rather than a crash.
- void ReportExpectingClose(int32 listener_id);
-
- // Allows iteration over this RenderProcessHost's RenderViewHost listeners.
- // Use from UI thread only.
- typedef IDMap<IPC::Channel::Listener>::const_iterator listeners_iterator;
-
- listeners_iterator ListenersIterator() {
- return listeners_iterator(&listeners_);
- }
-
- IPC::Channel::Listener* GetListenerByID(int routing_id) {
- return listeners_.Lookup(routing_id);
- }
-
- // Called to inform the render process host of a new "max page id" for a
- // render view host. The render process host computes the largest page id
- // across all render view hosts and uses the value when it needs to
- // initialize a new renderer in place of the current one.
- void UpdateMaxPageID(int32 page_id);
-
- void set_ignore_input_events(bool ignore_input_events) {
- ignore_input_events_ = ignore_input_events;
- }
- bool ignore_input_events() {
- return ignore_input_events_;
- }
-
- // Returns how long the child has been idle. The definition of idle
- // depends on when a derived class calls mark_child_process_activity_time().
- // This is a rough indicator and its resolution should not be better than
- // 10 milliseconds.
- base::TimeDelta get_child_process_idle_time() const {
- return base::TimeTicks::Now() - child_process_activity_time_;
- }
-
- // Call this function when it is evident that the child process is actively
- // performing some operation, for example if we just received an IPC message.
- void mark_child_process_activity_time() {
- child_process_activity_time_ = base::TimeTicks::Now();
- }
-
- // Try to shutdown the associated render process as fast as possible, but
- // only if |count| matches the number of render widgets that this process
- // controls.
- bool FastShutdownForPageCount(size_t count);
-
- bool fast_shutdown_started() {
- return fast_shutdown_started_;
- }
-
- // Virtual interface ---------------------------------------------------------
-
- // Initialize the new renderer process, returning true on success. This must
- // be called once before the object can be used, but can be called after
- // that with no effect. Therefore, if the caller isn't sure about whether
- // the process has been created, it should just call Init().
- virtual bool Init(
- bool is_accessibility_enabled, bool is_extensions_process) = 0;
-
- // Gets the next available routing id.
- virtual int GetNextRoutingID() = 0;
-
- // Called on the UI thread to cancel any outstanding resource requests for
- // the specified render widget.
- virtual void CancelResourceRequests(int render_widget_id) = 0;
-
- // Called on the UI thread to simulate a ClosePage_ACK message to the
- // ResourceDispatcherHost. Necessary for a cross-site request, in the case
- // that the original RenderViewHost is not live and thus cannot run an
- // onunload handler.
- virtual void CrossSiteClosePageACK(
- const ViewMsg_ClosePage_Params& params) = 0;
-
- // Called on the UI thread to wait for the next UpdateRect message for the
- // specified render widget. Returns true if successful, and the msg out-
- // param will contain a copy of the received UpdateRect message.
- virtual bool WaitForUpdateMsg(int render_widget_id,
- const base::TimeDelta& max_delay,
- IPC::Message* msg) = 0;
-
- // Called when a received message cannot be decoded.
- virtual void ReceivedBadMessage() = 0;
-
- // Track the count of visible widgets. Called by listeners to register and
- // unregister visibility.
- virtual void WidgetRestored() = 0;
- virtual void WidgetHidden() = 0;
-
- // Called when RenderView is created by a listener.
- virtual void ViewCreated() = 0;
-
- // Informs the renderer about a new visited link table.
- virtual void SendVisitedLinkTable(base::SharedMemory* table_memory) = 0;
-
- // Notify the renderer that a link was visited.
- virtual void AddVisitedLinks(
- const VisitedLinkCommon::Fingerprints& links) = 0;
-
- // Clear internal visited links buffer and ask the renderer to update link
- // coloring state for all of its links.
- virtual void ResetVisitedLinks() = 0;
-
- // Try to shutdown the associated renderer process as fast as possible.
- // If this renderer has any RenderViews with unload handlers, then this
- // function does nothing. The current implementation uses TerminateProcess.
- // Returns True if it was able to do fast shutdown.
- virtual bool FastShutdownIfPossible() = 0;
-
- // Synchronously sends the message, waiting for the specified timeout. The
- // implementor takes ownership of the given Message regardless of whether or
- // not this method succeeds. Returns true on success.
- virtual bool SendWithTimeout(IPC::Message* msg, int timeout_ms) = 0;
-
- // Returns the process object associated with the child process. In certain
- // tests or single-process mode, this will actually represent the current
- // process.
- //
- // NOTE: this is not necessarily valid immediately after calling Init, as
- // Init starts the process asynchronously. It's guaranteed to be valid after
- // the first IPC arrives.
- virtual base::ProcessHandle GetHandle() = 0;
-
- // Transport DIB functions ---------------------------------------------------
-
- // Return the TransportDIB for the given id. On Linux, this can involve
- // mapping shared memory. On Mac, the shared memory is created in the browser
- // process and the cached metadata is returned. On Windows, this involves
- // duplicating the handle from the remote process. The RenderProcessHost
- // still owns the returned DIB.
- virtual TransportDIB* GetTransportDIB(TransportDIB::Id dib_id) = 0;
-
- // Static management functions -----------------------------------------------
-
- // Flag to run the renderer in process. This is primarily
- // for debugging purposes. When running "in process", the
- // browser maintains a single RenderProcessHost which communicates
- // to a RenderProcess which is instantiated in the same process
- // with the Browser. All IPC between the Browser and the
- // Renderer is the same, it's just not crossing a process boundary.
- static bool run_renderer_in_process() {
- return run_renderer_in_process_;
- }
- static void set_run_renderer_in_process(bool value) {
- run_renderer_in_process_ = value;
- }
-
- // Allows iteration over all the RenderProcessHosts in the browser. Note
- // that each host may not be active, and therefore may have NULL channels.
- static iterator AllHostsIterator();
-
- // Returns the RenderProcessHost given its ID. Returns NULL if the ID does
- // not correspond to a live RenderProcessHost.
- static RenderProcessHost* FromID(int render_process_id);
-
- // Returns true if the caller should attempt to use an existing
- // RenderProcessHost rather than creating a new one.
- static bool ShouldTryToUseExistingProcessHost();
-
- // Get an existing RenderProcessHost associated with the given profile, if
- // possible. The renderer process is chosen randomly from suitable renderers
- // that share the same profile and type.
- // Returns NULL if no suitable renderer process is available, in which case
- // the caller is free to create a new renderer.
- static RenderProcessHost* GetExistingProcessHost(Profile* profile, Type type);
-
- // Overrides the default heuristic for limiting the max renderer process
- // count. This is useful for unit testing process limit behaviors.
- // A value of zero means to use the default heuristic.
- static void SetMaxRendererProcessCount(size_t count);
-
- protected:
- // A proxy for our IPC::Channel that lives on the IO thread (see
- // browser_process.h)
- scoped_ptr<IPC::SyncChannel> channel_;
-
- // The registered listeners. When this list is empty or all NULL, we should
- // delete ourselves
- IDMap<IPC::Channel::Listener> listeners_;
-
- // The maximum page ID we've ever seen from the renderer process.
- int32 max_page_id_;
-
- // True if fast shutdown has been performed on this RPH.
- bool fast_shutdown_started_;
-
- // True if we've posted a DeleteTask and will be deleted soon.
- bool deleting_soon_;
-
- private:
- // The globally-unique identifier for this RPH.
- int id_;
-
- Profile* profile_;
-
- // set of listeners that expect the renderer process to close
- std::set<int> listeners_expecting_close_;
-
- // True if the process can be shut down suddenly. If this is true, then we're
- // sure that all the RenderViews in the process can be shutdown suddenly. If
- // it's false, then specific RenderViews might still be allowed to be shutdown
- // suddenly by checking their SuddenTerminationAllowed() flag. This can occur
- // if one tab has an unload event listener but another tab in the same process
- // doesn't.
- bool sudden_termination_allowed_;
-
- // Set to true if we shouldn't send input events. We actually do the
- // filtering for this at the render widget level.
- bool ignore_input_events_;
-
- // See getter above.
- static bool run_renderer_in_process_;
-
- // Records the last time we regarded the child process active.
- base::TimeTicks child_process_activity_time_;
-
- DISALLOW_COPY_AND_ASSIGN(RenderProcessHost);
-};
-
-// Factory object for RenderProcessHosts. Using this factory allows tests to
-// swap out a different one to use a TestRenderProcessHost.
-class RenderProcessHostFactory {
- public:
- virtual ~RenderProcessHostFactory() {}
- virtual RenderProcessHost* CreateRenderProcessHost(
- Profile* profile) const = 0;
-};
+// TODO(jam): remove this file when all files have been converted.
+#include "content/browser/renderer_host/render_process_host.h"
#endif // CHROME_BROWSER_RENDERER_HOST_RENDER_PROCESS_HOST_H_