| Index: content/browser/renderer_host/render_process_host.h
|
| ===================================================================
|
| --- content/browser/renderer_host/render_process_host.h (revision 110571)
|
| +++ content/browser/renderer_host/render_process_host.h (working copy)
|
| @@ -1,337 +0,0 @@
|
| -// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_PROCESS_HOST_H_
|
| -#define CONTENT_BROWSER_RENDERER_HOST_RENDER_PROCESS_HOST_H_
|
| -#pragma once
|
| -
|
| -#include <set>
|
| -
|
| -#include "base/id_map.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/process.h"
|
| -#include "base/process_util.h"
|
| -#include "base/time.h"
|
| -#include "content/common/content_export.h"
|
| -#include "ipc/ipc_channel_proxy.h"
|
| -#include "ui/gfx/native_widget_types.h"
|
| -#include "ui/gfx/surface/transport_dib.h"
|
| -
|
| -class GURL;
|
| -struct ViewMsg_SwapOut_Params;
|
| -
|
| -namespace content {
|
| -class BrowserContext;
|
| -}
|
| -
|
| -// 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 CONTENT_EXPORT RenderProcessHost : public IPC::Channel::Sender,
|
| - public IPC::Channel::Listener {
|
| - public:
|
| - typedef IDMap<RenderProcessHost>::iterator iterator;
|
| -
|
| - // Details for RENDERER_PROCESS_CLOSED notifications.
|
| - struct RendererClosedDetails {
|
| - RendererClosedDetails(base::ProcessHandle handle,
|
| - base::TerminationStatus status,
|
| - int exit_code,
|
| - bool was_alive) {
|
| - this->handle = handle;
|
| - this->status = status;
|
| - this->exit_code = exit_code;
|
| - this->was_alive = was_alive;
|
| - }
|
| - base::ProcessHandle handle;
|
| - base::TerminationStatus status;
|
| - int exit_code;
|
| - bool was_alive;
|
| - };
|
| -
|
| - explicit RenderProcessHost(content::BrowserContext* browser_context);
|
| - virtual ~RenderProcessHost();
|
| -
|
| - // Returns the user browser context associated with this renderer process.
|
| - content::BrowserContext* browser_context() const { return browser_context_; }
|
| -
|
| - // 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. Virtual for mocking out for tests.
|
| - virtual bool HasConnection() const;
|
| -
|
| - 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);
|
| -
|
| - // Schedules the host for deletion and removes it from the all_hosts list.
|
| - void Cleanup();
|
| -
|
| - // 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);
|
| -
|
| - // Track the count of pending views that are being swapped back in. Called
|
| - // by listeners to register and unregister pending views to prevent the
|
| - // process from exiting.
|
| - void AddPendingView();
|
| - void RemovePendingView();
|
| -
|
| - // 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);
|
| - }
|
| -
|
| - IPC::ChannelProxy* channel() { return channel_.get(); }
|
| -
|
| - // 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 ---------------------------------------------------------
|
| -
|
| - // Call this to allow queueing of IPC messages that are sent before the
|
| - // process is launched.
|
| - virtual void EnableSendQueue() = 0;
|
| -
|
| - // 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) = 0;
|
| -
|
| - // Gets the next available routing id.
|
| - virtual int GetNextRoutingID() = 0;
|
| -
|
| - // Update the max page ID and send the update to the renderer process as well.
|
| - virtual void UpdateAndSendMaxPageID(int32 page_id) = 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 SwapOut_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
|
| - // unload handler.
|
| - virtual void CrossSiteSwapOutACK(
|
| - const ViewMsg_SwapOut_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;
|
| - virtual int VisibleWidgetCount() const = 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;
|
| -
|
| - // Dump the child process' handle table before shutting down.
|
| - virtual void DumpHandles() = 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;
|
| -
|
| - // RenderWidgetHost / compositing surface mapping functions ------------------
|
| -
|
| - // Set a mapping from a RenderWidgetHost to a compositing surface. Pass a null
|
| - // handle to remove the mapping.
|
| - virtual void SetCompositingSurface(
|
| - int render_widget_id,
|
| - gfx::PluginWindowHandle compositing_surface) = 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 browser
|
| - // context, if possible. The renderer process is chosen randomly from
|
| - // suitable renderers that share the same context and type (determined by the
|
| - // site url).
|
| - // Returns NULL if no suitable renderer process is available, in which case
|
| - // the caller is free to create a new renderer.
|
| - static RenderProcessHost* GetExistingProcessHost(
|
| - content::BrowserContext* browser_context, const GURL& site_url);
|
| -
|
| - // 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 SetMaxRendererProcessCountForTest(size_t count);
|
| -
|
| - protected:
|
| - // A proxy for our IPC::Channel that lives on the IO thread (see
|
| - // browser_process.h)
|
| - scoped_ptr<IPC::ChannelProxy> 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_;
|
| -
|
| - // The count of currently swapped out but pending RenderViews. We have
|
| - // started to swap these in, so the renderer process should not exit if
|
| - // this count is non-zero.
|
| - int32 pending_views_;
|
| -
|
| - private:
|
| - // The globally-unique identifier for this RPH.
|
| - int id_;
|
| -
|
| - content::BrowserContext* browser_context_;
|
| -
|
| - // 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(
|
| - content::BrowserContext* browser_context) const = 0;
|
| -};
|
| -
|
| -#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_PROCESS_HOST_H_
|
|
|