Index: chrome/browser/renderer_host/browser_render_process_host.h |
=================================================================== |
--- chrome/browser/renderer_host/browser_render_process_host.h (revision 32255) |
+++ chrome/browser/renderer_host/browser_render_process_host.h (working copy) |
@@ -8,6 +8,7 @@ |
#include "build/build_config.h" |
#include <map> |
+#include <queue> |
#include <string> |
#include "base/process.h" |
@@ -17,6 +18,7 @@ |
#include "base/string16.h" |
#include "base/timer.h" |
#include "chrome/common/transport_dib.h" |
+#include "chrome/browser/child_process_launcher.h" |
#include "chrome/browser/renderer_host/render_process_host.h" |
#include "chrome/common/notification_registrar.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebCache.h" |
@@ -49,7 +51,8 @@ |
// are correlated with IDs. This way, the Views and the corresponding ViewHosts |
// communicate through the two process objects. |
class BrowserRenderProcessHost : public RenderProcessHost, |
- public NotificationObserver { |
+ public NotificationObserver, |
+ public ChildProcessLauncher::Client { |
public: |
explicit BrowserRenderProcessHost(Profile* profile); |
~BrowserRenderProcessHost(); |
@@ -68,6 +71,7 @@ |
virtual void WidgetHidden(); |
virtual void ViewCreated(); |
virtual void AddWord(const string16& word); |
+ virtual void SendVisitedLinkTable(base::SharedMemory* table_memory); |
virtual void AddVisitedLinks(const VisitedLinkCommon::Fingerprints& links); |
virtual void ResetVisitedLinks(); |
virtual bool FastShutdownIfPossible(); |
@@ -94,6 +98,9 @@ |
const NotificationSource& source, |
const NotificationDetails& details); |
+ // ChildProcessLauncher::Client implementation. |
+ virtual void OnProcessLaunched(); |
+ |
private: |
friend class VisitRelayingRenderProcessHost; |
@@ -122,11 +129,8 @@ |
void SendUserScriptsUpdate(base::SharedMemory* shared_memory); |
// Generates a command line to be used to spawn a renderer and appends the |
- // results to |*command_line|. |*has_cmd_prefix| will be set if the renderer |
- // command line specifies a prefix which is another program that will actually |
- // execute the renderer (like gdb). |
- void AppendRendererCommandLine(CommandLine* command_line, |
- bool* has_cmd_prefix) const; |
+ // results to |*command_line|. |
+ void AppendRendererCommandLine(CommandLine* command_line) const; |
// Copies applicable command line switches from the given |browser_cmd| line |
// flags to the output |renderer_cmd| line flags. Not all switches will be |
@@ -134,13 +138,6 @@ |
void PropogateBrowserCommandLineToRenderer(const CommandLine& browser_cmd, |
CommandLine* renderer_cmd) const; |
- // Spawns the renderer process, returning the new handle on success, or 0 on |
- // failure. The renderer command line is given in the first argument, and |
- // whether a command prefix was used when generating the command line is |
- // speficied in the second. |
- base::ProcessHandle ExecuteRenderer(CommandLine* cmd_line, |
- bool has_cmd_prefix); |
- |
// Callers can reduce the RenderProcess' priority. |
// Returns true if the priority is backgrounded; false otherwise. |
void SetBackgrounded(bool boost); |
@@ -201,15 +198,18 @@ |
// Buffer visited links and send them to to renderer. |
scoped_ptr<VisitedLinkUpdater> visited_link_updater_; |
- // True iff the renderer is a child of a zygote process. |
- bool zygote_child_; |
- |
// True iff this process is being used as an extension process. Not valid |
// when running in single-process mode. |
bool extension_process_; |
- base::Process process_; |
+ // Usedt to launch and terminate the process without blocking the UI thread. |
+ scoped_ptr<ChildProcessLauncher> child_process_; |
+ // Messages we queue while waiting for the process handle. We queue them here |
+ // instead of in the channel so that we ensure they're sent after init related |
+ // messages that are sent once the process handle is available. This is |
+ // because the queued messages may have dependencies on the init messages. |
+ std::queue<IPC::Message*> queued_messages_; |
DISALLOW_COPY_AND_ASSIGN(BrowserRenderProcessHost); |
}; |