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

Side by Side Diff: third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp

Issue 2860013002: [DevTools] Support multiple sessions in WebDevToolsAgentImpl (Closed)
Patch Set: zero session id fix Created 3 years, 6 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
« no previous file with comments | « third_party/WebKit/Source/web/WebDevToolsAgentImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebDevToolsAgentImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698