| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010-2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2010-2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 252 WebDevToolsAgentClient* client, | 252 WebDevToolsAgentClient* client, |
| 253 bool include_view_agents) | 253 bool include_view_agents) |
| 254 : client_(client), | 254 : client_(client), |
| 255 web_local_frame_impl_(web_local_frame_impl), | 255 web_local_frame_impl_(web_local_frame_impl), |
| 256 probe_sink_(web_local_frame_impl_->GetFrame()->GetProbeSink()), | 256 probe_sink_(web_local_frame_impl_->GetFrame()->GetProbeSink()), |
| 257 resource_content_loader_(InspectorResourceContentLoader::Create( | 257 resource_content_loader_(InspectorResourceContentLoader::Create( |
| 258 web_local_frame_impl_->GetFrame())), | 258 web_local_frame_impl_->GetFrame())), |
| 259 inspected_frames_( | 259 inspected_frames_( |
| 260 InspectedFrames::Create(web_local_frame_impl_->GetFrame())), | 260 InspectedFrames::Create(web_local_frame_impl_->GetFrame())), |
| 261 resource_container_(new InspectorResourceContainer(inspected_frames_)), | 261 resource_container_(new InspectorResourceContainer(inspected_frames_)), |
| 262 page_agent_(nullptr), | 262 trace_events_(new InspectorTraceEvents()), |
| 263 network_agent_(nullptr), | |
| 264 layer_tree_agent_(nullptr), | |
| 265 tracing_agent_(nullptr), | |
| 266 trace_events_agent_(new InspectorTraceEvents()), | |
| 267 overlay_agent_(nullptr), | |
| 268 include_view_agents_(include_view_agents), | 263 include_view_agents_(include_view_agents), |
| 269 layer_tree_id_(0) { | 264 layer_tree_id_(0) { |
| 270 DCHECK(IsMainThread()); | 265 DCHECK(IsMainThread()); |
| 271 DCHECK(web_local_frame_impl_->GetFrame()); | 266 DCHECK(web_local_frame_impl_->GetFrame()); |
| 272 probe_sink_->addInspectorTraceEvents(trace_events_agent_); | 267 probe_sink_->addInspectorTraceEvents(trace_events_); |
| 273 } | 268 } |
| 274 | 269 |
| 275 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { | 270 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { |
| 276 DCHECK(!client_); | 271 DCHECK(!client_); |
| 277 } | 272 } |
| 278 | 273 |
| 279 DEFINE_TRACE(WebDevToolsAgentImpl) { | 274 DEFINE_TRACE(WebDevToolsAgentImpl) { |
| 280 visitor->Trace(web_local_frame_impl_); | 275 visitor->Trace(web_local_frame_impl_); |
| 281 visitor->Trace(probe_sink_); | 276 visitor->Trace(probe_sink_); |
| 282 visitor->Trace(resource_content_loader_); | 277 visitor->Trace(resource_content_loader_); |
| 283 visitor->Trace(inspected_frames_); | 278 visitor->Trace(inspected_frames_); |
| 284 visitor->Trace(resource_container_); | 279 visitor->Trace(resource_container_); |
| 285 visitor->Trace(page_agent_); | 280 visitor->Trace(trace_events_); |
| 286 visitor->Trace(network_agent_); | 281 visitor->Trace(page_agents_); |
| 287 visitor->Trace(layer_tree_agent_); | 282 visitor->Trace(network_agents_); |
| 288 visitor->Trace(tracing_agent_); | 283 visitor->Trace(layer_tree_agents_); |
| 289 visitor->Trace(trace_events_agent_); | 284 visitor->Trace(tracing_agents_); |
| 290 visitor->Trace(overlay_agent_); | 285 visitor->Trace(overlay_agents_); |
| 291 visitor->Trace(session_); | 286 visitor->Trace(sessions_); |
| 292 } | 287 } |
| 293 | 288 |
| 294 void WebDevToolsAgentImpl::WillBeDestroyed() { | 289 void WebDevToolsAgentImpl::WillBeDestroyed() { |
| 295 DCHECK(web_local_frame_impl_->GetFrame()); | 290 DCHECK(web_local_frame_impl_->GetFrame()); |
| 296 DCHECK(inspected_frames_->Root()->View()); | 291 DCHECK(inspected_frames_->Root()->View()); |
| 297 probe_sink_->removeInspectorTraceEvents(trace_events_agent_); | 292 probe_sink_->removeInspectorTraceEvents(trace_events_); |
| 298 trace_events_agent_ = nullptr; | 293 trace_events_ = nullptr; |
| 299 if (session_) | 294 |
| 300 Detach(session_->SessionId()); | 295 Vector<int> session_ids; |
| 296 for (int session_id : sessions_.Keys()) |
| 297 session_ids.push_back(session_id); |
| 298 for (int session_id : session_ids) |
| 299 Detach(session_id); |
| 300 |
| 301 resource_content_loader_->Dispose(); | 301 resource_content_loader_->Dispose(); |
| 302 client_ = nullptr; | 302 client_ = nullptr; |
| 303 } | 303 } |
| 304 | 304 |
| 305 void WebDevToolsAgentImpl::InitializeSession(int session_id, | 305 InspectorSession* WebDevToolsAgentImpl::InitializeSession(int session_id, |
| 306 const String& host_id, | 306 const String& host_id, |
| 307 String* state) { | 307 String* state) { |
| 308 DCHECK(client_); | 308 DCHECK(client_); |
| 309 ClientMessageLoopAdapter::EnsureMainThreadDebuggerCreated(client_); | 309 ClientMessageLoopAdapter::EnsureMainThreadDebuggerCreated(client_); |
| 310 MainThreadDebugger* main_thread_debugger = MainThreadDebugger::Instance(); | 310 MainThreadDebugger* main_thread_debugger = MainThreadDebugger::Instance(); |
| 311 v8::Isolate* isolate = V8PerIsolateData::MainThreadIsolate(); | 311 v8::Isolate* isolate = V8PerIsolateData::MainThreadIsolate(); |
| 312 | 312 |
| 313 session_ = new InspectorSession( | 313 InspectorSession* session = new InspectorSession( |
| 314 this, probe_sink_.Get(), session_id, | 314 this, probe_sink_.Get(), session_id, |
| 315 main_thread_debugger->GetV8Inspector(), | 315 main_thread_debugger->GetV8Inspector(), |
| 316 main_thread_debugger->ContextGroupId(inspected_frames_->Root()), state); | 316 main_thread_debugger->ContextGroupId(inspected_frames_->Root()), state); |
| 317 | 317 |
| 318 InspectorDOMAgent* dom_agent = new InspectorDOMAgent( | 318 InspectorDOMAgent* dom_agent = new InspectorDOMAgent( |
| 319 isolate, inspected_frames_.Get(), session_->V8Session()); | 319 isolate, inspected_frames_.Get(), session->V8Session()); |
| 320 session_->Append(dom_agent); | 320 session->Append(dom_agent); |
| 321 | 321 |
| 322 InspectorLayerTreeAgent* layer_tree_agent = | 322 InspectorLayerTreeAgent* layer_tree_agent = |
| 323 InspectorLayerTreeAgent::Create(inspected_frames_.Get()); | 323 InspectorLayerTreeAgent::Create(inspected_frames_.Get()); |
| 324 layer_tree_agent_ = layer_tree_agent; | 324 layer_tree_agents_.Set(session_id, layer_tree_agent); |
| 325 session_->Append(layer_tree_agent); | 325 session->Append(layer_tree_agent); |
| 326 | 326 |
| 327 InspectorNetworkAgent* network_agent = | 327 InspectorNetworkAgent* network_agent = |
| 328 InspectorNetworkAgent::Create(inspected_frames_.Get()); | 328 InspectorNetworkAgent::Create(inspected_frames_.Get()); |
| 329 network_agent_ = network_agent; | 329 network_agents_.Set(session_id, network_agent); |
| 330 session_->Append(network_agent); | 330 session->Append(network_agent); |
| 331 | 331 |
| 332 InspectorCSSAgent* css_agent = InspectorCSSAgent::Create( | 332 InspectorCSSAgent* css_agent = InspectorCSSAgent::Create( |
| 333 dom_agent, inspected_frames_.Get(), network_agent_, | 333 dom_agent, inspected_frames_.Get(), network_agent, |
| 334 resource_content_loader_.Get(), resource_container_.Get()); | 334 resource_content_loader_.Get(), resource_container_.Get()); |
| 335 session_->Append(css_agent); | 335 session->Append(css_agent); |
| 336 | 336 |
| 337 session_->Append(new InspectorAnimationAgent( | 337 session->Append(new InspectorAnimationAgent(inspected_frames_.Get(), |
| 338 inspected_frames_.Get(), css_agent, session_->V8Session())); | 338 css_agent, session->V8Session())); |
| 339 | 339 |
| 340 session_->Append(InspectorMemoryAgent::Create()); | 340 session->Append(InspectorMemoryAgent::Create()); |
| 341 | 341 |
| 342 session_->Append( | 342 session->Append( |
| 343 InspectorApplicationCacheAgent::Create(inspected_frames_.Get())); | 343 InspectorApplicationCacheAgent::Create(inspected_frames_.Get())); |
| 344 | 344 |
| 345 session_->Append(new InspectorIndexedDBAgent(inspected_frames_.Get(), | 345 session->Append(new InspectorIndexedDBAgent(inspected_frames_.Get(), |
| 346 session_->V8Session())); | 346 session->V8Session())); |
| 347 | 347 |
| 348 InspectorWorkerAgent* worker_agent = | 348 InspectorWorkerAgent* worker_agent = |
| 349 new InspectorWorkerAgent(inspected_frames_.Get()); | 349 new InspectorWorkerAgent(inspected_frames_.Get()); |
| 350 session_->Append(worker_agent); | 350 session->Append(worker_agent); |
| 351 | 351 |
| 352 InspectorTracingAgent* tracing_agent = InspectorTracingAgent::Create( | 352 InspectorTracingAgent* tracing_agent = InspectorTracingAgent::Create( |
| 353 this, worker_agent, inspected_frames_.Get()); | 353 this, worker_agent, inspected_frames_.Get()); |
| 354 tracing_agent_ = tracing_agent; | 354 tracing_agents_.Set(session_id, tracing_agent); |
| 355 session_->Append(tracing_agent); | 355 session->Append(tracing_agent); |
| 356 | 356 |
| 357 session_->Append( | 357 session->Append( |
| 358 new InspectorDOMDebuggerAgent(isolate, dom_agent, session_->V8Session())); | 358 new InspectorDOMDebuggerAgent(isolate, dom_agent, session->V8Session())); |
| 359 | 359 |
| 360 session_->Append(InspectorInputAgent::Create(inspected_frames_.Get())); | 360 session->Append(InspectorInputAgent::Create(inspected_frames_.Get())); |
| 361 | 361 |
| 362 InspectorPageAgent* page_agent = InspectorPageAgent::Create( | 362 InspectorPageAgent* page_agent = InspectorPageAgent::Create( |
| 363 inspected_frames_.Get(), this, resource_content_loader_.Get(), | 363 inspected_frames_.Get(), this, resource_content_loader_.Get(), |
| 364 session_->V8Session()); | 364 session->V8Session()); |
| 365 page_agent_ = page_agent; | 365 page_agents_.Set(session_id, page_agent); |
| 366 session_->Append(page_agent); | 366 session->Append(page_agent); |
| 367 | 367 |
| 368 session_->Append(new InspectorLogAgent( | 368 session->Append(new InspectorLogAgent( |
| 369 &inspected_frames_->Root()->GetPage()->GetConsoleMessageStorage(), | 369 &inspected_frames_->Root()->GetPage()->GetConsoleMessageStorage(), |
| 370 inspected_frames_->Root()->GetPerformanceMonitor())); | 370 inspected_frames_->Root()->GetPerformanceMonitor())); |
| 371 | 371 |
| 372 session_->Append( | 372 session->Append(new DeviceOrientationInspectorAgent(inspected_frames_.Get())); |
| 373 new DeviceOrientationInspectorAgent(inspected_frames_.Get())); | |
| 374 | 373 |
| 375 InspectorOverlayAgent* overlay_agent = | 374 InspectorOverlayAgent* overlay_agent = |
| 376 new InspectorOverlayAgent(web_local_frame_impl_, inspected_frames_.Get(), | 375 new InspectorOverlayAgent(web_local_frame_impl_, inspected_frames_.Get(), |
| 377 session_->V8Session(), dom_agent); | 376 session->V8Session(), dom_agent); |
| 378 overlay_agent_ = overlay_agent; | 377 overlay_agents_.Set(session_id, overlay_agent); |
| 379 session_->Append(overlay_agent); | 378 session->Append(overlay_agent); |
| 380 | 379 |
| 381 tracing_agent_->SetLayerTreeId(layer_tree_id_); | 380 tracing_agent->SetLayerTreeId(layer_tree_id_); |
| 382 network_agent_->SetHostId(host_id); | 381 network_agent->SetHostId(host_id); |
| 383 | 382 |
| 384 if (include_view_agents_) { | 383 if (include_view_agents_) { |
| 385 // TODO(dgozman): we should actually pass the view instead of frame, but | 384 // TODO(dgozman): we should actually pass the view instead of frame, but |
| 386 // during remote->local transition we cannot access mainFrameImpl() yet, so | 385 // during remote->local transition we cannot access mainFrameImpl() yet, so |
| 387 // we have to store the frame which will become the main frame later. | 386 // we have to store the frame which will become the main frame later. |
| 388 session_->Append( | 387 session->Append( |
| 389 InspectorEmulationAgent::Create(web_local_frame_impl_, this)); | 388 InspectorEmulationAgent::Create(web_local_frame_impl_, this)); |
| 390 // TODO(dgozman): migrate each of the following agents to frame once module | 389 // TODO(dgozman): migrate each of the following agents to frame once module |
| 391 // is ready. | 390 // is ready. |
| 392 Page* page = web_local_frame_impl_->ViewImpl()->GetPage(); | 391 Page* page = web_local_frame_impl_->ViewImpl()->GetPage(); |
| 393 session_->Append(InspectorDatabaseAgent::Create(page)); | 392 session->Append(InspectorDatabaseAgent::Create(page)); |
| 394 session_->Append(new InspectorAccessibilityAgent(page, dom_agent)); | 393 session->Append(new InspectorAccessibilityAgent(page, dom_agent)); |
| 395 session_->Append(InspectorDOMStorageAgent::Create(page)); | 394 session->Append(InspectorDOMStorageAgent::Create(page)); |
| 396 session_->Append(InspectorCacheStorageAgent::Create()); | 395 session->Append(InspectorCacheStorageAgent::Create()); |
| 397 } | 396 } |
| 398 | 397 |
| 399 Platform::Current()->CurrentThread()->AddTaskObserver(this); | 398 if (!sessions_.size()) |
| 399 Platform::Current()->CurrentThread()->AddTaskObserver(this); |
| 400 |
| 401 sessions_.Set(session_id, session); |
| 402 return session; |
| 400 } | 403 } |
| 401 | 404 |
| 402 void WebDevToolsAgentImpl::DestroySession() { | 405 void WebDevToolsAgentImpl::DestroySession(int session_id) { |
| 403 overlay_agent_.Clear(); | 406 overlay_agents_.erase(session_id); |
| 404 tracing_agent_.Clear(); | 407 tracing_agents_.erase(session_id); |
| 405 layer_tree_agent_.Clear(); | 408 layer_tree_agents_.erase(session_id); |
| 406 network_agent_.Clear(); | 409 network_agents_.erase(session_id); |
| 407 page_agent_.Clear(); | 410 page_agents_.erase(session_id); |
| 408 | 411 |
| 409 session_->Dispose(); | 412 auto session_it = sessions_.find(session_id); |
| 410 session_.Clear(); | 413 DCHECK(session_it != sessions_.end()); |
| 414 session_it->value->Dispose(); |
| 415 sessions_.erase(session_it); |
| 411 | 416 |
| 412 Platform::Current()->CurrentThread()->RemoveTaskObserver(this); | 417 if (!sessions_.size()) |
| 418 Platform::Current()->CurrentThread()->RemoveTaskObserver(this); |
| 413 } | 419 } |
| 414 | 420 |
| 415 void WebDevToolsAgentImpl::Attach(const WebString& host_id, int session_id) { | 421 void WebDevToolsAgentImpl::Attach(const WebString& host_id, int session_id) { |
| 416 if (Attached()) | 422 if (!session_id || sessions_.find(session_id) != sessions_.end()) |
| 417 return; | 423 return; |
| 418 InitializeSession(session_id, host_id, nullptr); | 424 InitializeSession(session_id, host_id, nullptr); |
| 419 } | 425 } |
| 420 | 426 |
| 421 void WebDevToolsAgentImpl::Reattach(const WebString& host_id, | 427 void WebDevToolsAgentImpl::Reattach(const WebString& host_id, |
| 422 int session_id, | 428 int session_id, |
| 423 const WebString& saved_state) { | 429 const WebString& saved_state) { |
| 424 if (Attached()) | 430 if (!session_id || sessions_.find(session_id) != sessions_.end()) |
| 425 return; | 431 return; |
| 426 String state = saved_state; | 432 String state = saved_state; |
| 427 InitializeSession(session_id, host_id, &state); | 433 InspectorSession* session = InitializeSession(session_id, host_id, &state); |
| 428 session_->Restore(); | 434 session->Restore(); |
| 429 } | 435 } |
| 430 | 436 |
| 431 void WebDevToolsAgentImpl::Detach(int session_id) { | 437 void WebDevToolsAgentImpl::Detach(int session_id) { |
| 432 if (!Attached() || session_id != session_->SessionId()) | 438 if (!session_id || sessions_.find(session_id) == sessions_.end()) |
| 433 return; | 439 return; |
| 434 DestroySession(); | 440 DestroySession(session_id); |
| 435 } | 441 } |
| 436 | 442 |
| 437 void WebDevToolsAgentImpl::ContinueProgram() { | 443 void WebDevToolsAgentImpl::ContinueProgram() { |
| 438 ClientMessageLoopAdapter::ContinueProgram(); | 444 ClientMessageLoopAdapter::ContinueProgram(); |
| 439 } | 445 } |
| 440 | 446 |
| 441 void WebDevToolsAgentImpl::DidCommitLoadForLocalFrame(LocalFrame* frame) { | 447 void WebDevToolsAgentImpl::DidCommitLoadForLocalFrame(LocalFrame* frame) { |
| 442 resource_container_->DidCommitLoadForLocalFrame(frame); | 448 resource_container_->DidCommitLoadForLocalFrame(frame); |
| 443 resource_content_loader_->DidCommitLoadForLocalFrame(frame); | 449 resource_content_loader_->DidCommitLoadForLocalFrame(frame); |
| 444 if (session_) | 450 for (auto& it : sessions_) |
| 445 session_->DidCommitLoadForLocalFrame(frame); | 451 it.value->DidCommitLoadForLocalFrame(frame); |
| 446 } | 452 } |
| 447 | 453 |
| 448 void WebDevToolsAgentImpl::DidStartProvisionalLoad(LocalFrame* frame) { | 454 void WebDevToolsAgentImpl::DidStartProvisionalLoad(LocalFrame* frame) { |
| 449 if (session_ && inspected_frames_->Root() == frame) | 455 if (inspected_frames_->Root() == frame) { |
| 450 session_->V8Session()->resume(); | 456 for (auto& it : sessions_) |
| 457 it.value->V8Session()->resume(); |
| 458 } |
| 451 } | 459 } |
| 452 | 460 |
| 453 bool WebDevToolsAgentImpl::ScreencastEnabled() { | 461 bool WebDevToolsAgentImpl::ScreencastEnabled() { |
| 454 return page_agent_ && page_agent_->ScreencastEnabled(); | 462 for (auto& it : page_agents_) { |
| 463 if (it.value->ScreencastEnabled()) |
| 464 return true; |
| 465 } |
| 466 return false; |
| 455 } | 467 } |
| 456 | 468 |
| 457 void WebDevToolsAgentImpl::WillAddPageOverlay(const GraphicsLayer* layer) { | 469 void WebDevToolsAgentImpl::WillAddPageOverlay(const GraphicsLayer* layer) { |
| 458 if (layer_tree_agent_) | 470 for (auto& it : layer_tree_agents_) |
| 459 layer_tree_agent_->WillAddPageOverlay(layer); | 471 it.value->WillAddPageOverlay(layer); |
| 460 } | 472 } |
| 461 | 473 |
| 462 void WebDevToolsAgentImpl::DidRemovePageOverlay(const GraphicsLayer* layer) { | 474 void WebDevToolsAgentImpl::DidRemovePageOverlay(const GraphicsLayer* layer) { |
| 463 if (layer_tree_agent_) | 475 for (auto& it : layer_tree_agents_) |
| 464 layer_tree_agent_->DidRemovePageOverlay(layer); | 476 it.value->DidRemovePageOverlay(layer); |
| 465 } | 477 } |
| 466 | 478 |
| 467 void WebDevToolsAgentImpl::RootLayerCleared() { | 479 void WebDevToolsAgentImpl::RootLayerCleared() { |
| 468 if (tracing_agent_) | 480 for (auto& it : tracing_agents_) |
| 469 tracing_agent_->RootLayerCleared(); | 481 it.value->RootLayerCleared(); |
| 470 } | 482 } |
| 471 | 483 |
| 472 void WebDevToolsAgentImpl::LayerTreeViewChanged( | 484 void WebDevToolsAgentImpl::LayerTreeViewChanged( |
| 473 WebLayerTreeView* layer_tree_view) { | 485 WebLayerTreeView* layer_tree_view) { |
| 474 layer_tree_id_ = layer_tree_view ? layer_tree_view->LayerTreeId() : 0; | 486 layer_tree_id_ = layer_tree_view ? layer_tree_view->LayerTreeId() : 0; |
| 475 if (tracing_agent_) | 487 for (auto& it : tracing_agents_) |
| 476 tracing_agent_->SetLayerTreeId(layer_tree_id_); | 488 it.value->SetLayerTreeId(layer_tree_id_); |
| 477 } | 489 } |
| 478 | 490 |
| 479 void WebDevToolsAgentImpl::EnableTracing(const String& category_filter) { | 491 void WebDevToolsAgentImpl::EnableTracing(const String& category_filter) { |
| 480 if (client_) | 492 if (client_) |
| 481 client_->EnableTracing(category_filter); | 493 client_->EnableTracing(category_filter); |
| 482 } | 494 } |
| 483 | 495 |
| 484 void WebDevToolsAgentImpl::DisableTracing() { | 496 void WebDevToolsAgentImpl::DisableTracing() { |
| 485 if (client_) | 497 if (client_) |
| 486 client_->DisableTracing(); | 498 client_->DisableTracing(); |
| 487 } | 499 } |
| 488 | 500 |
| 489 void WebDevToolsAgentImpl::ShowReloadingBlanket() { | 501 void WebDevToolsAgentImpl::ShowReloadingBlanket() { |
| 490 if (overlay_agent_) | 502 for (auto& it : overlay_agents_) |
| 491 overlay_agent_->ShowReloadingBlanket(); | 503 it.value->ShowReloadingBlanket(); |
| 492 } | 504 } |
| 493 | 505 |
| 494 void WebDevToolsAgentImpl::HideReloadingBlanket() { | 506 void WebDevToolsAgentImpl::HideReloadingBlanket() { |
| 495 if (overlay_agent_) | 507 for (auto& it : overlay_agents_) |
| 496 overlay_agent_->HideReloadingBlanket(); | 508 it.value->HideReloadingBlanket(); |
| 497 } | 509 } |
| 498 | 510 |
| 499 void WebDevToolsAgentImpl::SetCPUThrottlingRate(double rate) { | 511 void WebDevToolsAgentImpl::SetCPUThrottlingRate(double rate) { |
| 500 if (client_) | 512 if (client_) |
| 501 client_->SetCPUThrottlingRate(rate); | 513 client_->SetCPUThrottlingRate(rate); |
| 502 } | 514 } |
| 503 | 515 |
| 504 void WebDevToolsAgentImpl::DispatchOnInspectorBackend( | 516 void WebDevToolsAgentImpl::DispatchOnInspectorBackend( |
| 505 int session_id, | 517 int session_id, |
| 506 int call_id, | 518 int call_id, |
| 507 const WebString& method, | 519 const WebString& method, |
| 508 const WebString& message) { | 520 const WebString& message) { |
| 509 if (!Attached()) | 521 if (!Attached()) |
| 510 return; | 522 return; |
| 511 if (WebDevToolsAgent::ShouldInterruptForMethod(method)) | 523 if (WebDevToolsAgent::ShouldInterruptForMethod(method)) |
| 512 MainThreadDebugger::Instance()->TaskRunner()->RunAllTasksDontWait(); | 524 MainThreadDebugger::Instance()->TaskRunner()->RunAllTasksDontWait(); |
| 513 else | 525 else |
| 514 DispatchMessageFromFrontend(session_id, method, message); | 526 DispatchMessageFromFrontend(session_id, method, message); |
| 515 } | 527 } |
| 516 | 528 |
| 517 void WebDevToolsAgentImpl::DispatchMessageFromFrontend(int session_id, | 529 void WebDevToolsAgentImpl::DispatchMessageFromFrontend(int session_id, |
| 518 const String& method, | 530 const String& method, |
| 519 const String& message) { | 531 const String& message) { |
| 520 if (!Attached() || session_id != session_->SessionId()) | 532 if (!session_id) |
| 533 return; |
| 534 auto session_it = sessions_.find(session_id); |
| 535 if (session_it == sessions_.end()) |
| 521 return; | 536 return; |
| 522 InspectorTaskRunner::IgnoreInterruptsScope scope( | 537 InspectorTaskRunner::IgnoreInterruptsScope scope( |
| 523 MainThreadDebugger::Instance()->TaskRunner()); | 538 MainThreadDebugger::Instance()->TaskRunner()); |
| 524 session_->DispatchProtocolMessage(method, message); | 539 session_it->value->DispatchProtocolMessage(method, message); |
| 525 } | 540 } |
| 526 | 541 |
| 527 void WebDevToolsAgentImpl::InspectElementAt( | 542 void WebDevToolsAgentImpl::InspectElementAt( |
| 528 int session_id, | 543 int session_id, |
| 529 const WebPoint& point_in_root_frame) { | 544 const WebPoint& point_in_root_frame) { |
| 530 if (!overlay_agent_ || !session_ || session_->SessionId() != session_id) | 545 if (!session_id) |
| 546 return; |
| 547 auto agent_it = overlay_agents_.find(session_id); |
| 548 if (agent_it == overlay_agents_.end()) |
| 531 return; | 549 return; |
| 532 HitTestRequest::HitTestRequestType hit_type = | 550 HitTestRequest::HitTestRequestType hit_type = |
| 533 HitTestRequest::kMove | HitTestRequest::kReadOnly | | 551 HitTestRequest::kMove | HitTestRequest::kReadOnly | |
| 534 HitTestRequest::kAllowChildFrameContent; | 552 HitTestRequest::kAllowChildFrameContent; |
| 535 HitTestRequest request(hit_type); | 553 HitTestRequest request(hit_type); |
| 536 WebMouseEvent dummy_event(WebInputEvent::kMouseDown, | 554 WebMouseEvent dummy_event(WebInputEvent::kMouseDown, |
| 537 WebInputEvent::kNoModifiers, | 555 WebInputEvent::kNoModifiers, |
| 538 WTF::MonotonicallyIncreasingTimeMS()); | 556 WTF::MonotonicallyIncreasingTimeMS()); |
| 539 dummy_event.SetPositionInWidget(point_in_root_frame.x, point_in_root_frame.y); | 557 dummy_event.SetPositionInWidget(point_in_root_frame.x, point_in_root_frame.y); |
| 540 IntPoint transformed_point = FlooredIntPoint( | 558 IntPoint transformed_point = FlooredIntPoint( |
| 541 TransformWebMouseEvent(web_local_frame_impl_->GetFrameView(), dummy_event) | 559 TransformWebMouseEvent(web_local_frame_impl_->GetFrameView(), dummy_event) |
| 542 .PositionInRootFrame()); | 560 .PositionInRootFrame()); |
| 543 HitTestResult result( | 561 HitTestResult result( |
| 544 request, web_local_frame_impl_->GetFrameView()->RootFrameToContents( | 562 request, web_local_frame_impl_->GetFrameView()->RootFrameToContents( |
| 545 transformed_point)); | 563 transformed_point)); |
| 546 web_local_frame_impl_->GetFrame()->ContentLayoutItem().HitTest(result); | 564 web_local_frame_impl_->GetFrame()->ContentLayoutItem().HitTest(result); |
| 547 Node* node = result.InnerNode(); | 565 Node* node = result.InnerNode(); |
| 548 if (!node && web_local_frame_impl_->GetFrame()->GetDocument()) | 566 if (!node && web_local_frame_impl_->GetFrame()->GetDocument()) |
| 549 node = web_local_frame_impl_->GetFrame()->GetDocument()->documentElement(); | 567 node = web_local_frame_impl_->GetFrame()->GetDocument()->documentElement(); |
| 550 overlay_agent_->Inspect(node); | 568 agent_it->value->Inspect(node); |
| 551 } | 569 } |
| 552 | 570 |
| 553 void WebDevToolsAgentImpl::FailedToRequestDevTools() { | 571 void WebDevToolsAgentImpl::FailedToRequestDevTools() { |
| 554 ClientMessageLoopAdapter::ResumeForCreateWindow(); | 572 ClientMessageLoopAdapter::ResumeForCreateWindow(); |
| 555 } | 573 } |
| 556 | 574 |
| 557 void WebDevToolsAgentImpl::SendProtocolMessage(int session_id, | 575 void WebDevToolsAgentImpl::SendProtocolMessage(int session_id, |
| 558 int call_id, | 576 int call_id, |
| 559 const String& response, | 577 const String& response, |
| 560 const String& state) { | 578 const String& state) { |
| 561 DCHECK(Attached()); | 579 DCHECK(Attached()); |
| 562 if (client_) | 580 if (client_) |
| 563 client_->SendProtocolMessage(session_id, call_id, response, state); | 581 client_->SendProtocolMessage(session_id, call_id, response, state); |
| 564 } | 582 } |
| 565 | 583 |
| 566 void WebDevToolsAgentImpl::PageLayoutInvalidated(bool resized) { | 584 void WebDevToolsAgentImpl::PageLayoutInvalidated(bool resized) { |
| 567 if (overlay_agent_) | 585 for (auto& it : overlay_agents_) |
| 568 overlay_agent_->PageLayoutInvalidated(resized); | 586 it.value->PageLayoutInvalidated(resized); |
| 569 } | 587 } |
| 570 | 588 |
| 571 void WebDevToolsAgentImpl::WaitForCreateWindow(LocalFrame* frame) { | 589 void WebDevToolsAgentImpl::WaitForCreateWindow(LocalFrame* frame) { |
| 572 if (!Attached()) | 590 if (!Attached()) |
| 573 return; | 591 return; |
| 574 if (client_ && | 592 if (client_ && |
| 575 client_->RequestDevToolsForFrame(WebLocalFrameBase::FromFrame(frame))) | 593 client_->RequestDevToolsForFrame(WebLocalFrameBase::FromFrame(frame))) |
| 576 ClientMessageLoopAdapter::PauseForCreateWindow(web_local_frame_impl_); | 594 ClientMessageLoopAdapter::PauseForCreateWindow(web_local_frame_impl_); |
| 577 } | 595 } |
| 578 | 596 |
| 579 WebString WebDevToolsAgentImpl::EvaluateInWebInspectorOverlay( | 597 WebString WebDevToolsAgentImpl::EvaluateInWebInspectorOverlay( |
| 580 const WebString& script) { | 598 const WebString& script) { |
| 581 if (!overlay_agent_) | 599 WebString result; |
| 582 return WebString(); | 600 for (auto& it : overlay_agents_) |
| 583 | 601 result = it.value->EvaluateInOverlayForTest(script); |
| 584 return overlay_agent_->EvaluateInOverlayForTest(script); | 602 return result; |
| 585 } | 603 } |
| 586 | 604 |
| 587 void WebDevToolsAgentImpl::PaintOverlay() { | 605 void WebDevToolsAgentImpl::PaintOverlay() { |
| 588 if (overlay_agent_) | 606 for (auto& it : overlay_agents_) |
| 589 overlay_agent_->PaintOverlay(); | 607 it.value->PaintOverlay(); |
| 590 } | 608 } |
| 591 | 609 |
| 592 void WebDevToolsAgentImpl::LayoutOverlay() { | 610 void WebDevToolsAgentImpl::LayoutOverlay() { |
| 593 if (overlay_agent_) | 611 for (auto& it : overlay_agents_) |
| 594 overlay_agent_->LayoutOverlay(); | 612 it.value->LayoutOverlay(); |
| 595 } | 613 } |
| 596 | 614 |
| 597 bool WebDevToolsAgentImpl::HandleInputEvent(const WebInputEvent& event) { | 615 bool WebDevToolsAgentImpl::HandleInputEvent(const WebInputEvent& event) { |
| 598 if (overlay_agent_) | 616 for (auto& it : overlay_agents_) { |
| 599 return overlay_agent_->HandleInputEvent(event); | 617 if (it.value->HandleInputEvent(event)) |
| 618 return true; |
| 619 } |
| 600 return false; | 620 return false; |
| 601 } | 621 } |
| 602 | 622 |
| 603 bool WebDevToolsAgentImpl::CacheDisabled() { | 623 bool WebDevToolsAgentImpl::CacheDisabled() { |
| 604 if (!network_agent_) | 624 for (auto& it : network_agents_) { |
| 605 return false; | 625 if (it.value->CacheDisabled()) |
| 606 return network_agent_->CacheDisabled(); | 626 return true; |
| 627 } |
| 628 return false; |
| 607 } | 629 } |
| 608 | 630 |
| 609 void WebDevToolsAgentImpl::FlushProtocolNotifications() { | 631 void WebDevToolsAgentImpl::FlushProtocolNotifications() { |
| 610 if (session_) | 632 for (auto& it : sessions_) |
| 611 session_->flushProtocolNotifications(); | 633 it.value->flushProtocolNotifications(); |
| 612 } | 634 } |
| 613 | 635 |
| 614 void WebDevToolsAgentImpl::WillProcessTask() { | 636 void WebDevToolsAgentImpl::WillProcessTask() { |
| 615 if (!Attached()) | 637 if (!Attached()) |
| 616 return; | 638 return; |
| 617 ThreadDebugger::IdleFinished(V8PerIsolateData::MainThreadIsolate()); | 639 ThreadDebugger::IdleFinished(V8PerIsolateData::MainThreadIsolate()); |
| 618 } | 640 } |
| 619 | 641 |
| 620 void WebDevToolsAgentImpl::DidProcessTask() { | 642 void WebDevToolsAgentImpl::DidProcessTask() { |
| 621 if (!Attached()) | 643 if (!Attached()) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 648 } | 670 } |
| 649 | 671 |
| 650 bool WebDevToolsAgent::ShouldInterruptForMethod(const WebString& method) { | 672 bool WebDevToolsAgent::ShouldInterruptForMethod(const WebString& method) { |
| 651 return method == "Debugger.pause" || method == "Debugger.setBreakpoint" || | 673 return method == "Debugger.pause" || method == "Debugger.setBreakpoint" || |
| 652 method == "Debugger.setBreakpointByUrl" || | 674 method == "Debugger.setBreakpointByUrl" || |
| 653 method == "Debugger.removeBreakpoint" || | 675 method == "Debugger.removeBreakpoint" || |
| 654 method == "Debugger.setBreakpointsActive"; | 676 method == "Debugger.setBreakpointsActive"; |
| 655 } | 677 } |
| 656 | 678 |
| 657 } // namespace blink | 679 } // namespace blink |
| OLD | NEW |