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

Unified Diff: content/browser/devtools/devtools_manager.cc

Issue 2408133004: [DevTools] Implement Target.setDiscoverTargets method. (Closed)
Patch Set: new fancy range-based iteration in observer list! Created 4 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/devtools/devtools_manager.cc
diff --git a/content/browser/devtools/devtools_manager.cc b/content/browser/devtools/devtools_manager.cc
index 70059c6f251b0ac8fe56d3ea1301d41a18db70ab..0af55b0200f8d4904d79c34397731a5e31d63db5 100644
--- a/content/browser/devtools/devtools_manager.cc
+++ b/content/browser/devtools/devtools_manager.cc
@@ -10,6 +10,7 @@
#include "content/browser/devtools/devtools_agent_host_impl.h"
#include "content/browser/devtools/devtools_http_handler.h"
#include "content/browser/loader/netlog_observer.h"
+#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/devtools_socket_factory.h"
@@ -25,10 +26,10 @@ void DevToolsAgentHost::StartRemoteDebuggingServer(
const std::string& product_name,
const std::string& user_agent) {
DevToolsManager* manager = DevToolsManager::GetInstance();
- if (!manager->delegate())
+ if (!manager->GetDelegate())
return;
manager->SetHttpHandler(base::WrapUnique(new DevToolsHttpHandler(
- manager->delegate(), std::move(server_socket_factory), frontend_url,
+ manager->GetDelegate(), std::move(server_socket_factory), frontend_url,
active_port_output_directory, debug_frontend_dir, product_name,
user_agent)));
}
@@ -45,14 +46,61 @@ DevToolsManager* DevToolsManager::GetInstance() {
}
DevToolsManager::DevToolsManager()
- : delegate_(GetContentClient()->browser()->GetDevToolsManagerDelegate()),
+ : delegate_initialized_(false),
attached_hosts_count_(0) {
}
DevToolsManager::~DevToolsManager() {
+ for (DevToolsAgentHostImpl* agent_host : agent_hosts_) {
pfeldman 2016/10/12 23:11:18 How can this happen?
dgozman 2016/10/12 23:23:12 Service workers shutdown later (I think on IO) tha
pfeldman 2016/10/13 17:58:10 Could you mention it the comments here? Also, what
+ for (auto& observer : observers_)
+ observer.AgentHostDestroyed(agent_host);
+ }
+ agent_hosts_.clear();
DCHECK(!attached_hosts_count_);
}
+DevToolsManagerDelegate* DevToolsManager::GetDelegate() {
+ if (!delegate_initialized_) {
pfeldman 2016/10/12 23:11:18 What is wrong with !delegate_ ?
dgozman 2016/10/12 23:23:12 Client can pass a null one, I don't want to ask fo
+ delegate_initialized_ = true;
+ delegate_.reset(
+ GetContentClient()->browser()->GetDevToolsManagerDelegate());
+ }
+ return delegate_.get();
+}
+
+void DevToolsManager::AddObserver(Observer* observer) {
+ if (!observers_.might_have_observers()) {
+ // Force all agent hosts when first observer is added.
+ DevToolsAgentHost::GetOrCreateAll();
+ }
+ observers_.AddObserver(observer);
+ for (DevToolsAgentHostImpl* agent_host : agent_hosts_)
+ observer->AgentHostCreated(agent_host);
+}
+
+void DevToolsManager::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+void DevToolsManager::WebContentsCreated(WebContentsImpl* web_contents) {
+ if (observers_.might_have_observers()) {
+ // Force agent host.
+ DevToolsAgentHost::GetOrCreateFor(web_contents);
+ }
+}
+
+void DevToolsManager::AgentHostCreated(DevToolsAgentHostImpl* agent_host) {
+ agent_hosts_.insert(agent_host);
+ for (auto& observer : observers_)
+ observer.AgentHostCreated(agent_host);
+}
+
+void DevToolsManager::AgentHostDestroyed(DevToolsAgentHostImpl* agent_host) {
+ for (auto& observer : observers_)
+ observer.AgentHostDestroyed(agent_host);
+ agent_hosts_.erase(agent_host);
+}
+
void DevToolsManager::AgentHostStateChanged(
DevToolsAgentHostImpl* agent_host, bool attached) {
if (attached) {

Powered by Google App Engine
This is Rietveld 408576698