| Index: chrome/browser/render_process_host.cc
|
| ===================================================================
|
| --- chrome/browser/render_process_host.cc (revision 4208)
|
| +++ chrome/browser/render_process_host.cc (working copy)
|
| @@ -166,6 +166,10 @@
|
| 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 @@
|
| }
|
|
|
| profile_->GetPrefs()->RemovePrefObserver(prefs::kBlockPopups, this);
|
| +
|
| + NotificationService::current()->RemoveObserver(this,
|
| + NOTIFY_NEW_USER_SCRIPTS,
|
| + NotificationService::AllSources());
|
| }
|
|
|
| void RenderProcessHost::Unregister() {
|
| @@ -426,38 +434,41 @@
|
| // 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();
|
| + InitGreasemonkeyScripts();
|
|
|
| - InitVisitedLinks(target_process);
|
| - InitGreasemonkeyScripts(target_process);
|
| -
|
| if (max_page_id_ != -1)
|
| channel_->Send(new ViewMsg_SetNextPageID(max_page_id_ + 1));
|
|
|
| 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 @@
|
| 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 @@
|
| }
|
| 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;
|
|
|