summaryrefslogtreecommitdiffstats
path: root/chrome/browser/render_process_host.cc
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-30 23:57:59 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-30 23:57:59 +0000
commit4cc1a29b935e7d260ee24ab4e78193186febecac (patch)
tree84e348ccb55117b02bed787c55139bc600b8dfde /chrome/browser/render_process_host.cc
parentf6cda7598ff5c5bdd6b7b91440589fdf2d37eb55 (diff)
downloadchromium_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.cc54
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;