Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: chrome/browser/extensions/extension_event_router.cc

Issue 3801008: Expands the chrome.experimental.processes extension API. ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_event_router.h" 5 #include "chrome/browser/extensions/extension_event_router.h"
6 6
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "chrome/browser/child_process_security_policy.h" 8 #include "chrome/browser/child_process_security_policy.h"
9 #include "chrome/browser/extensions/extension_devtools_manager.h" 9 #include "chrome/browser/extensions/extension_devtools_manager.h"
10 #include "chrome/browser/extensions/extension_processes_api.h"
11 #include "chrome/browser/extensions/extension_processes_api_constants.h"
10 #include "chrome/browser/extensions/extension_tabs_module.h" 12 #include "chrome/browser/extensions/extension_tabs_module.h"
11 #include "chrome/browser/profile.h" 13 #include "chrome/browser/profile.h"
12 #include "chrome/browser/renderer_host/render_process_host.h" 14 #include "chrome/browser/renderer_host/render_process_host.h"
13 #include "chrome/common/extensions/extension.h" 15 #include "chrome/common/extensions/extension.h"
14 #include "chrome/common/notification_service.h" 16 #include "chrome/common/notification_service.h"
15 #include "chrome/common/render_messages.h" 17 #include "chrome/common/render_messages.h"
16 18
17 namespace { 19 namespace {
18 20
19 const char kDispatchEvent[] = "Event.dispatchJSON"; 21 const char kDispatchEvent[] = "Event.dispatchJSON";
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 void ExtensionEventRouter::AddEventListener( 57 void ExtensionEventRouter::AddEventListener(
56 const std::string& event_name, 58 const std::string& event_name,
57 int render_process_id) { 59 int render_process_id) {
58 DCHECK_EQ(listeners_[event_name].count(render_process_id), 0u) << event_name; 60 DCHECK_EQ(listeners_[event_name].count(render_process_id), 0u) << event_name;
59 listeners_[event_name].insert(render_process_id); 61 listeners_[event_name].insert(render_process_id);
60 62
61 if (extension_devtools_manager_.get()) { 63 if (extension_devtools_manager_.get()) {
62 extension_devtools_manager_->AddEventListener(event_name, 64 extension_devtools_manager_->AddEventListener(event_name,
63 render_process_id); 65 render_process_id);
64 } 66 }
67
68 // We lazily tell the TaskManager to start updating when listeners to the
69 // processes.onUpdated event arrive.
70 if (event_name.compare(extension_processes_api_constants::kOnUpdated) == 0)
71 ExtensionProcessesEventRouter::GetInstance()->ListenerAdded();
65 } 72 }
66 73
67 void ExtensionEventRouter::RemoveEventListener( 74 void ExtensionEventRouter::RemoveEventListener(
68 const std::string& event_name, 75 const std::string& event_name,
69 int render_process_id) { 76 int render_process_id) {
70 DCHECK_EQ(listeners_[event_name].count(render_process_id), 1u) << 77 DCHECK_EQ(listeners_[event_name].count(render_process_id), 1u) <<
71 " PID=" << render_process_id << " event=" << event_name; 78 " PID=" << render_process_id << " event=" << event_name;
72 listeners_[event_name].erase(render_process_id); 79 listeners_[event_name].erase(render_process_id);
73 80
74 if (extension_devtools_manager_.get()) { 81 if (extension_devtools_manager_.get()) {
75 extension_devtools_manager_->RemoveEventListener(event_name, 82 extension_devtools_manager_->RemoveEventListener(event_name,
76 render_process_id); 83 render_process_id);
77 } 84 }
85
86 // If a processes.onUpdated event listener is removed (or a process with one
87 // exits), then we let the TaskManager know that it has one fewer listener.
88 if (event_name.compare(extension_processes_api_constants::kOnUpdated) == 0)
89 ExtensionProcessesEventRouter::GetInstance()->ListenerRemoved();
78 } 90 }
79 91
80 bool ExtensionEventRouter::HasEventListener(const std::string& event_name) { 92 bool ExtensionEventRouter::HasEventListener(const std::string& event_name) {
81 return (listeners_.find(event_name) != listeners_.end() && 93 return (listeners_.find(event_name) != listeners_.end() &&
82 !listeners_[event_name].empty()); 94 !listeners_[event_name].empty());
83 } 95 }
84 96
85 void ExtensionEventRouter::DispatchEventToRenderers( 97 void ExtensionEventRouter::DispatchEventToRenderers(
86 const std::string& event_name, const std::string& event_args, 98 const std::string& event_name, const std::string& event_args,
87 Profile* restrict_to_profile, const GURL& event_url) { 99 Profile* restrict_to_profile, const GURL& event_url) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 if (current->second.count(renderer->id()) != 0) 150 if (current->second.count(renderer->id()) != 0)
139 RemoveEventListener(current->first, renderer->id()); 151 RemoveEventListener(current->first, renderer->id());
140 } 152 }
141 break; 153 break;
142 } 154 }
143 default: 155 default:
144 NOTREACHED(); 156 NOTREACHED();
145 return; 157 return;
146 } 158 }
147 } 159 }
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/task_manager_mac_unittest.mm ('k') | chrome/browser/extensions/extension_function_dispatcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698