| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/browser/devtools/protocol/service_worker_handler.h" | 5 #include "content/browser/devtools/protocol/service_worker_handler.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/containers/scoped_ptr_hash_map.h" | 8 #include "base/containers/scoped_ptr_hash_map.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 122 std::string scope = path.substr(0, path.length() - file.length()); | 122 std::string scope = path.substr(0, path.length() - file.length()); |
| 123 if (scope.length() > best_scope.length()) { | 123 if (scope.length() > best_scope.length()) { |
| 124 best_host = host; | 124 best_host = host; |
| 125 best_scope = scope; | 125 best_scope = scope; |
| 126 } | 126 } |
| 127 } | 127 } |
| 128 return best_host; | 128 return best_host; |
| 129 } | 129 } |
| 130 | 130 |
| 131 ServiceWorkerDevToolsAgentHost::Map GetMatchingServiceWorkers( | 131 ServiceWorkerDevToolsAgentHost::Map GetMatchingServiceWorkers( |
| 132 BrowserContext* browser_context, |
| 132 const std::set<GURL>& urls) { | 133 const std::set<GURL>& urls) { |
| 134 ServiceWorkerDevToolsAgentHost::Map result; |
| 135 if (!browser_context) |
| 136 return result; |
| 133 ServiceWorkerDevToolsAgentHost::List agent_hosts; | 137 ServiceWorkerDevToolsAgentHost::List agent_hosts; |
| 134 ServiceWorkerDevToolsManager::GetInstance()-> | 138 ServiceWorkerDevToolsManager::GetInstance() |
| 135 AddAllAgentHosts(&agent_hosts); | 139 ->AddAllAgentHostsForBrowserContext(browser_context, &agent_hosts); |
| 136 ServiceWorkerDevToolsAgentHost::Map result; | |
| 137 for (const GURL& url : urls) { | 140 for (const GURL& url : urls) { |
| 138 scoped_refptr<ServiceWorkerDevToolsAgentHost> host = | 141 scoped_refptr<ServiceWorkerDevToolsAgentHost> host = |
| 139 GetMatchingServiceWorker(agent_hosts, url); | 142 GetMatchingServiceWorker(agent_hosts, url); |
| 140 if (host) | 143 if (host) |
| 141 result[host->GetId()] = host; | 144 result[host->GetId()] = host; |
| 142 } | 145 } |
| 143 return result; | 146 return result; |
| 144 } | 147 } |
| 145 | 148 |
| 146 bool CollectURLs(std::set<GURL>* urls, FrameTreeNode* tree_node) { | 149 bool CollectURLs(std::set<GURL>* urls, FrameTreeNode* tree_node) { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 209 |
| 207 void ServiceWorkerHandler::SetClient(scoped_ptr<Client> client) { | 210 void ServiceWorkerHandler::SetClient(scoped_ptr<Client> client) { |
| 208 client_.swap(client); | 211 client_.swap(client); |
| 209 } | 212 } |
| 210 | 213 |
| 211 void ServiceWorkerHandler::UpdateHosts() { | 214 void ServiceWorkerHandler::UpdateHosts() { |
| 212 if (!enabled_) | 215 if (!enabled_) |
| 213 return; | 216 return; |
| 214 | 217 |
| 215 urls_.clear(); | 218 urls_.clear(); |
| 219 BrowserContext* browser_context = nullptr; |
| 216 if (render_frame_host_) { | 220 if (render_frame_host_) { |
| 217 render_frame_host_->frame_tree_node()->frame_tree()->ForEach( | 221 render_frame_host_->frame_tree_node()->frame_tree()->ForEach( |
| 218 base::Bind(&CollectURLs, &urls_)); | 222 base::Bind(&CollectURLs, &urls_)); |
| 223 browser_context = render_frame_host_->GetProcess()->GetBrowserContext(); |
| 219 } | 224 } |
| 220 | 225 |
| 221 ServiceWorkerDevToolsAgentHost::Map old_hosts = attached_hosts_; | 226 ServiceWorkerDevToolsAgentHost::Map old_hosts = attached_hosts_; |
| 222 ServiceWorkerDevToolsAgentHost::Map new_hosts = | 227 ServiceWorkerDevToolsAgentHost::Map new_hosts = |
| 223 GetMatchingServiceWorkers(urls_); | 228 GetMatchingServiceWorkers(browser_context, urls_); |
| 224 | 229 |
| 225 for (auto pair : old_hosts) { | 230 for (auto pair : old_hosts) { |
| 226 if (new_hosts.find(pair.first) == new_hosts.end()) | 231 if (new_hosts.find(pair.first) == new_hosts.end()) |
| 227 ReportWorkerTerminated(pair.second.get()); | 232 ReportWorkerTerminated(pair.second.get()); |
| 228 } | 233 } |
| 229 | 234 |
| 230 for (auto pair : new_hosts) { | 235 for (auto pair : new_hosts) { |
| 231 if (old_hosts.find(pair.first) == old_hosts.end()) | 236 if (old_hosts.find(pair.first) == old_hosts.end()) |
| 232 ReportWorkerCreated(pair.second.get()); | 237 ReportWorkerCreated(pair.second.get()); |
| 233 } | 238 } |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 void ServiceWorkerHandler::AgentHostClosed( | 461 void ServiceWorkerHandler::AgentHostClosed( |
| 457 DevToolsAgentHost* host, | 462 DevToolsAgentHost* host, |
| 458 bool replaced_with_another_client) { | 463 bool replaced_with_another_client) { |
| 459 client_->WorkerTerminated(WorkerTerminatedParams::Create()-> | 464 client_->WorkerTerminated(WorkerTerminatedParams::Create()-> |
| 460 set_worker_id(host->GetId())); | 465 set_worker_id(host->GetId())); |
| 461 attached_hosts_.erase(host->GetId()); | 466 attached_hosts_.erase(host->GetId()); |
| 462 } | 467 } |
| 463 | 468 |
| 464 void ServiceWorkerHandler::WorkerCreated( | 469 void ServiceWorkerHandler::WorkerCreated( |
| 465 ServiceWorkerDevToolsAgentHost* host) { | 470 ServiceWorkerDevToolsAgentHost* host) { |
| 466 auto hosts = GetMatchingServiceWorkers(urls_); | 471 BrowserContext* browser_context = nullptr; |
| 472 if (render_frame_host_) |
| 473 browser_context = render_frame_host_->GetProcess()->GetBrowserContext(); |
| 474 |
| 475 auto hosts = GetMatchingServiceWorkers(browser_context, urls_); |
| 467 if (hosts.find(host->GetId()) != hosts.end() && !host->IsAttached() && | 476 if (hosts.find(host->GetId()) != hosts.end() && !host->IsAttached() && |
| 468 !host->IsPausedForDebugOnStart()) | 477 !host->IsPausedForDebugOnStart()) |
| 469 host->PauseForDebugOnStart(); | 478 host->PauseForDebugOnStart(); |
| 470 } | 479 } |
| 471 | 480 |
| 472 void ServiceWorkerHandler::WorkerReadyForInspection( | 481 void ServiceWorkerHandler::WorkerReadyForInspection( |
| 473 ServiceWorkerDevToolsAgentHost* host) { | 482 ServiceWorkerDevToolsAgentHost* host) { |
| 474 if (ServiceWorkerDevToolsManager::GetInstance() | 483 if (ServiceWorkerDevToolsManager::GetInstance() |
| 475 ->debug_service_worker_on_start()) { | 484 ->debug_service_worker_on_start()) { |
| 476 // When debug_service_worker_on_start is true, a new DevTools window will | 485 // When debug_service_worker_on_start is true, a new DevTools window will |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 return; | 517 return; |
| 509 host->DetachClient(); | 518 host->DetachClient(); |
| 510 client_->WorkerTerminated(WorkerTerminatedParams::Create()-> | 519 client_->WorkerTerminated(WorkerTerminatedParams::Create()-> |
| 511 set_worker_id(host->GetId())); | 520 set_worker_id(host->GetId())); |
| 512 attached_hosts_.erase(it); | 521 attached_hosts_.erase(it); |
| 513 } | 522 } |
| 514 | 523 |
| 515 } // namespace service_worker | 524 } // namespace service_worker |
| 516 } // namespace devtools | 525 } // namespace devtools |
| 517 } // namespace content | 526 } // namespace content |
| OLD | NEW |