diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-30 23:57:59 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-30 23:57:59 +0000 |
commit | 4cc1a29b935e7d260ee24ab4e78193186febecac (patch) | |
tree | 84e348ccb55117b02bed787c55139bc600b8dfde /chrome/browser/render_process_host.cc | |
parent | f6cda7598ff5c5bdd6b7b91440589fdf2d37eb55 (diff) | |
download | chromium_src-4cc1a29b935e7d260ee24ab4e78193186febecac.zip chromium_src-4cc1a29b935e7d260ee24ab4e78193186febecac.tar.gz chromium_src-4cc1a29b935e7d260ee24ab4e78193186febecac.tar.bz2 |
Make it so that you can refresh and see changes in Greasemonkey
scripts immediately, without having to restart the renderer.
Review URL: http://codereview.chromium.org/8908
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4256 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/render_process_host.cc')
-rw-r--r-- | chrome/browser/render_process_host.cc | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/chrome/browser/render_process_host.cc b/chrome/browser/render_process_host.cc index bfe05a2..a8d7d5f 100644 --- a/chrome/browser/render_process_host.cc +++ b/chrome/browser/render_process_host.cc @@ -166,6 +166,10 @@ RenderProcessHost::RenderProcessHost(Profile* profile) widget_helper_->set_block_popups( profile->GetPrefs()->GetBoolean(prefs::kBlockPopups)); + NotificationService::current()->AddObserver(this, + NOTIFY_NEW_USER_SCRIPTS, + NotificationService::AllSources()); + // Note: When we create the RenderProcessHost, it's technically backgrounded, // because it has no visible listeners. But the process doesn't // actually exist yet, so we'll Background it later, after creation. @@ -185,6 +189,10 @@ RenderProcessHost::~RenderProcessHost() { } profile_->GetPrefs()->RemovePrefObserver(prefs::kBlockPopups, this); + + NotificationService::current()->RemoveObserver(this, + NOTIFY_NEW_USER_SCRIPTS, + NotificationService::AllSources()); } void RenderProcessHost::Unregister() { @@ -426,16 +434,8 @@ bool RenderProcessHost::Init() { // Now that the process is created, set it's backgrounding accordingly. SetBackgrounded(backgrounded_); - // Send the process its initial VisitedLink and Greasemonkey data. - HANDLE target_process = process_.handle(); - if (!target_process) { - // Target process can be null if it's started with the --single-process - // flag. - target_process = GetCurrentProcess(); - } - - InitVisitedLinks(target_process); - InitGreasemonkeyScripts(target_process); + InitVisitedLinks(); + InitGreasemonkeyScripts(); if (max_page_id_ != -1) channel_->Send(new ViewMsg_SetNextPageID(max_page_id_ + 1)); @@ -443,21 +443,32 @@ bool RenderProcessHost::Init() { return true; } -void RenderProcessHost::InitVisitedLinks(HANDLE target_process) { +HANDLE RenderProcessHost::GetRendererProcessHandle() { + HANDLE result = process_.handle(); + if (!result) { + // Renderer process can be null if it's started with the --single-process + // flag. + result = GetCurrentProcess(); + } + return result; +} + +void RenderProcessHost::InitVisitedLinks() { VisitedLinkMaster* visitedlink_master = profile_->GetVisitedLinkMaster(); if (!visitedlink_master) { return; } SharedMemoryHandle handle_for_process = NULL; - visitedlink_master->ShareToProcess(target_process, &handle_for_process); + visitedlink_master->ShareToProcess(GetRendererProcessHandle(), + &handle_for_process); DCHECK(handle_for_process); if (handle_for_process) { channel_->Send(new ViewMsg_VisitedLink_NewTable(handle_for_process)); } } -void RenderProcessHost::InitGreasemonkeyScripts(HANDLE target_process) { +void RenderProcessHost::InitGreasemonkeyScripts() { CommandLine command_line; if (!command_line.HasSwitch(switches::kEnableGreasemonkey)) { return; @@ -479,8 +490,15 @@ void RenderProcessHost::InitGreasemonkeyScripts(HANDLE target_process) { return; } + // Update the renderer process with the current scripts. + SendGreasemonkeyScriptsUpdate(greasemonkey_master->GetSharedMemory()); +} + +void RenderProcessHost::SendGreasemonkeyScriptsUpdate( + SharedMemory *shared_memory) { SharedMemoryHandle handle_for_process = NULL; - greasemonkey_master->ShareToProcess(target_process, &handle_for_process); + shared_memory->ShareToProcess(GetRendererProcessHandle(), + &handle_for_process); DCHECK(handle_for_process); if (handle_for_process) { channel_->Send(new ViewMsg_Greasemonkey_NewScripts(handle_for_process)); @@ -802,6 +820,14 @@ void RenderProcessHost::Observe(NotificationType type, } break; } + case NOTIFY_NEW_USER_SCRIPTS: { + SharedMemory* shared_memory = Details<SharedMemory>(details).ptr(); + DCHECK(shared_memory); + if (shared_memory) { + SendGreasemonkeyScriptsUpdate(shared_memory); + } + break; + } default: { NOTREACHED(); break; |