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

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

Issue 1899933003: [DevTools] Introduce InspectorSession. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: export, comment Created 4 years, 8 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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 return agent; 293 return agent;
294 } 294 }
295 295
296 WebDevToolsAgentImpl::WebDevToolsAgentImpl( 296 WebDevToolsAgentImpl::WebDevToolsAgentImpl(
297 WebLocalFrameImpl* webLocalFrameImpl, 297 WebLocalFrameImpl* webLocalFrameImpl,
298 WebDevToolsAgentClient* client, 298 WebDevToolsAgentClient* client,
299 InspectorOverlay* overlay, 299 InspectorOverlay* overlay,
300 bool includeViewAgents) 300 bool includeViewAgents)
301 : m_client(client) 301 : m_client(client)
302 , m_webLocalFrameImpl(webLocalFrameImpl) 302 , m_webLocalFrameImpl(webLocalFrameImpl)
303 , m_attached(false)
304 #if DCHECK_IS_ON() 303 #if DCHECK_IS_ON()
305 , m_hasBeenDisposed(false) 304 , m_hasBeenDisposed(false)
306 #endif 305 #endif
307 , m_instrumentingAgents(m_webLocalFrameImpl->frame()->instrumentingAgents()) 306 , m_instrumentingAgents(m_webLocalFrameImpl->frame()->instrumentingAgents())
308 , m_resourceContentLoader(InspectorResourceContentLoader::create(m_webLocalF rameImpl->frame())) 307 , m_resourceContentLoader(InspectorResourceContentLoader::create(m_webLocalF rameImpl->frame()))
309 , m_overlay(overlay) 308 , m_overlay(overlay)
310 , m_inspectedFrames(InspectedFrames::create(m_webLocalFrameImpl->frame())) 309 , m_inspectedFrames(InspectedFrames::create(m_webLocalFrameImpl->frame()))
311 , m_resourceContainer(new InspectorResourceContainer(m_inspectedFrames)) 310 , m_resourceContainer(new InspectorResourceContainer(m_inspectedFrames))
312 , m_domAgent(nullptr) 311 , m_domAgent(nullptr)
313 , m_pageAgent(nullptr) 312 , m_pageAgent(nullptr)
314 , m_resourceAgent(nullptr) 313 , m_resourceAgent(nullptr)
315 , m_layerTreeAgent(nullptr) 314 , m_layerTreeAgent(nullptr)
316 , m_tracingAgent(nullptr) 315 , m_tracingAgent(nullptr)
317 , m_agents(m_instrumentingAgents.get())
318 , m_includeViewAgents(includeViewAgents) 316 , m_includeViewAgents(includeViewAgents)
319 , m_sessionId(0)
320 , m_stateMuted(false)
321 , m_layerTreeId(0) 317 , m_layerTreeId(0)
322 { 318 {
323 DCHECK(isMainThread()); 319 DCHECK(isMainThread());
324 DCHECK(m_webLocalFrameImpl->frame()); 320 DCHECK(m_webLocalFrameImpl->frame());
325 } 321 }
326 322
327 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() 323 WebDevToolsAgentImpl::~WebDevToolsAgentImpl()
328 { 324 {
329 #if DCHECK_IS_ON() 325 #if DCHECK_IS_ON()
330 DCHECK(m_hasBeenDisposed); 326 DCHECK(m_hasBeenDisposed);
331 #endif 327 #endif
332 } 328 }
333 329
334 void WebDevToolsAgentImpl::dispose() 330 void WebDevToolsAgentImpl::dispose()
335 { 331 {
336 // Explicitly dispose of the agent before destructing to ensure 332 // Explicitly dispose of the agent before destructing to ensure
337 // same behavior (and correctness) with and without Oilpan. 333 // same behavior (and correctness) with and without Oilpan.
338 if (m_attached) 334 if (attached())
339 Platform::current()->currentThread()->removeTaskObserver(this); 335 Platform::current()->currentThread()->removeTaskObserver(this);
340 #if DCHECK_IS_ON() 336 #if DCHECK_IS_ON()
341 DCHECK(!m_hasBeenDisposed); 337 DCHECK(!m_hasBeenDisposed);
342 m_hasBeenDisposed = true; 338 m_hasBeenDisposed = true;
343 #endif 339 #endif
344 } 340 }
345 341
346 // static 342 // static
347 void WebDevToolsAgentImpl::webViewImplClosed(WebViewImpl* webViewImpl) 343 void WebDevToolsAgentImpl::webViewImplClosed(WebViewImpl* webViewImpl)
348 { 344 {
(...skipping 12 matching lines...) Expand all
361 visitor->trace(m_instrumentingAgents); 357 visitor->trace(m_instrumentingAgents);
362 visitor->trace(m_resourceContentLoader); 358 visitor->trace(m_resourceContentLoader);
363 visitor->trace(m_overlay); 359 visitor->trace(m_overlay);
364 visitor->trace(m_inspectedFrames); 360 visitor->trace(m_inspectedFrames);
365 visitor->trace(m_resourceContainer); 361 visitor->trace(m_resourceContainer);
366 visitor->trace(m_domAgent); 362 visitor->trace(m_domAgent);
367 visitor->trace(m_pageAgent); 363 visitor->trace(m_pageAgent);
368 visitor->trace(m_resourceAgent); 364 visitor->trace(m_resourceAgent);
369 visitor->trace(m_layerTreeAgent); 365 visitor->trace(m_layerTreeAgent);
370 visitor->trace(m_tracingAgent); 366 visitor->trace(m_tracingAgent);
371 visitor->trace(m_agents); 367 visitor->trace(m_session);
372 } 368 }
373 369
374 void WebDevToolsAgentImpl::willBeDestroyed() 370 void WebDevToolsAgentImpl::willBeDestroyed()
375 { 371 {
376 DCHECK(m_webLocalFrameImpl->frame()); 372 DCHECK(m_webLocalFrameImpl->frame());
377 DCHECK(m_inspectedFrames->root()->view()); 373 DCHECK(m_inspectedFrames->root()->view());
378
379 detach(); 374 detach();
380 m_resourceContentLoader->dispose(); 375 m_resourceContentLoader->dispose();
381 m_agents.discardAgents();
382 m_instrumentingAgents->reset();
383 m_v8Session.clear();
384 } 376 }
385 377
386 void WebDevToolsAgentImpl::initializeAgents() 378 void WebDevToolsAgentImpl::initializeSession(int sessionId, const String& hostId )
387 { 379 {
380 m_session = new InspectorSession(this, sessionId, m_instrumentingAgents.get( ), false /* autoFlush */);
381
388 ClientMessageLoopAdapter::ensureMainThreadDebuggerCreated(m_client); 382 ClientMessageLoopAdapter::ensureMainThreadDebuggerCreated(m_client);
389 MainThreadDebugger* mainThreadDebugger = MainThreadDebugger::instance(); 383 MainThreadDebugger* mainThreadDebugger = MainThreadDebugger::instance();
390 v8::Isolate* isolate = V8PerIsolateData::mainThreadIsolate(); 384 v8::Isolate* isolate = V8PerIsolateData::mainThreadIsolate();
391 385
392 m_v8Session = mainThreadDebugger->debugger()->connect(mainThreadDebugger->co ntextGroupId(m_inspectedFrames->root())); 386 m_v8Session = mainThreadDebugger->debugger()->connect(mainThreadDebugger->co ntextGroupId(m_inspectedFrames->root()));
393 V8RuntimeAgent* runtimeAgent = m_v8Session->runtimeAgent(); 387 V8RuntimeAgent* runtimeAgent = m_v8Session->runtimeAgent();
394 388
395 m_agents.append(PageRuntimeAgent::create(this, runtimeAgent, m_inspectedFram es.get())); 389 m_session->append(PageRuntimeAgent::create(this, runtimeAgent, m_inspectedFr ames.get()));
396 390
397 InspectorDOMAgent* domAgent = InspectorDOMAgent::create(isolate, m_inspected Frames.get(), runtimeAgent, m_overlay.get()); 391 InspectorDOMAgent* domAgent = InspectorDOMAgent::create(isolate, m_inspected Frames.get(), runtimeAgent, m_overlay.get());
398 m_domAgent = domAgent; 392 m_domAgent = domAgent;
399 m_agents.append(domAgent); 393 m_session->append(domAgent);
400 394
401 InspectorLayerTreeAgent* layerTreeAgent = InspectorLayerTreeAgent::create(m_ inspectedFrames.get()); 395 InspectorLayerTreeAgent* layerTreeAgent = InspectorLayerTreeAgent::create(m_ inspectedFrames.get());
402 m_layerTreeAgent = layerTreeAgent; 396 m_layerTreeAgent = layerTreeAgent;
403 m_agents.append(layerTreeAgent); 397 m_session->append(layerTreeAgent);
404 398
405 InspectorResourceAgent* resourceAgent = InspectorResourceAgent::create(m_ins pectedFrames.get()); 399 InspectorResourceAgent* resourceAgent = InspectorResourceAgent::create(m_ins pectedFrames.get());
406 m_resourceAgent = resourceAgent; 400 m_resourceAgent = resourceAgent;
407 m_agents.append(resourceAgent); 401 m_session->append(resourceAgent);
408 402
409 InspectorCSSAgent* cssAgent = InspectorCSSAgent::create(m_domAgent, m_inspec tedFrames.get(), m_resourceAgent, m_resourceContentLoader.get(), m_resourceConta iner.get()); 403 InspectorCSSAgent* cssAgent = InspectorCSSAgent::create(m_domAgent, m_inspec tedFrames.get(), m_resourceAgent, m_resourceContentLoader.get(), m_resourceConta iner.get());
410 m_agents.append(cssAgent); 404 m_session->append(cssAgent);
411 405
412 m_agents.append(InspectorAnimationAgent::create(m_inspectedFrames.get(), m_d omAgent, cssAgent, runtimeAgent)); 406 m_session->append(InspectorAnimationAgent::create(m_inspectedFrames.get(), m _domAgent, cssAgent, runtimeAgent));
413 407
414 m_agents.append(InspectorMemoryAgent::create()); 408 m_session->append(InspectorMemoryAgent::create());
415 409
416 m_agents.append(InspectorApplicationCacheAgent::create(m_inspectedFrames.get ())); 410 m_session->append(InspectorApplicationCacheAgent::create(m_inspectedFrames.g et()));
417 411
418 m_agents.append(InspectorIndexedDBAgent::create(m_inspectedFrames.get())); 412 m_session->append(InspectorIndexedDBAgent::create(m_inspectedFrames.get()));
419 413
420 InspectorDebuggerAgent* debuggerAgent = PageDebuggerAgent::create(m_v8Sessio n->debuggerAgent(), m_inspectedFrames.get()); 414 InspectorDebuggerAgent* debuggerAgent = PageDebuggerAgent::create(m_v8Sessio n->debuggerAgent(), m_inspectedFrames.get());
421 m_agents.append(debuggerAgent); 415 m_session->append(debuggerAgent);
422 416
423 PageConsoleAgent* pageConsoleAgent = PageConsoleAgent::create(runtimeAgent, m_v8Session->debuggerAgent(), m_domAgent, m_inspectedFrames.get()); 417 PageConsoleAgent* pageConsoleAgent = PageConsoleAgent::create(runtimeAgent, m_v8Session->debuggerAgent(), m_domAgent, m_inspectedFrames.get());
424 m_agents.append(pageConsoleAgent); 418 m_session->append(pageConsoleAgent);
425 419
426 InspectorWorkerAgent* workerAgent = InspectorWorkerAgent::create(m_inspected Frames.get(), pageConsoleAgent); 420 InspectorWorkerAgent* workerAgent = InspectorWorkerAgent::create(m_inspected Frames.get(), pageConsoleAgent);
427 m_agents.append(workerAgent); 421 m_session->append(workerAgent);
428 422
429 InspectorTracingAgent* tracingAgent = InspectorTracingAgent::create(this, wo rkerAgent, m_inspectedFrames.get()); 423 InspectorTracingAgent* tracingAgent = InspectorTracingAgent::create(this, wo rkerAgent, m_inspectedFrames.get());
430 m_tracingAgent = tracingAgent; 424 m_tracingAgent = tracingAgent;
431 m_agents.append(tracingAgent); 425 m_session->append(tracingAgent);
432 426
433 m_agents.append(InspectorDOMDebuggerAgent::create(isolate, m_domAgent, runti meAgent, debuggerAgent->v8Agent())); 427 m_session->append(InspectorDOMDebuggerAgent::create(isolate, m_domAgent, run timeAgent, debuggerAgent->v8Agent()));
434 428
435 m_agents.append(InspectorInputAgent::create(m_inspectedFrames.get())); 429 m_session->append(InspectorInputAgent::create(m_inspectedFrames.get()));
436 430
437 m_agents.append(InspectorProfilerAgent::create(m_v8Session->profilerAgent(), m_overlay.get())); 431 m_session->append(InspectorProfilerAgent::create(m_v8Session->profilerAgent( ), m_overlay.get()));
438 432
439 m_agents.append(InspectorHeapProfilerAgent::create(isolate, m_v8Session->hea pProfilerAgent())); 433 m_session->append(InspectorHeapProfilerAgent::create(isolate, m_v8Session->h eapProfilerAgent()));
440 434
441 InspectorPageAgent* pageAgent = InspectorPageAgent::create(m_inspectedFrames .get(), this, m_resourceContentLoader.get(), debuggerAgent); 435 InspectorPageAgent* pageAgent = InspectorPageAgent::create(m_inspectedFrames .get(), this, m_resourceContentLoader.get(), debuggerAgent);
442 m_pageAgent = pageAgent; 436 m_pageAgent = pageAgent;
443 m_agents.append(pageAgent); 437 m_session->append(pageAgent);
444 438
445 runtimeAgent->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAl lMessages, pageConsoleAgent)); 439 runtimeAgent->setClearConsoleCallback(bind<>(&InspectorConsoleAgent::clearAl lMessages, pageConsoleAgent));
446 m_tracingAgent->setLayerTreeId(m_layerTreeId); 440 m_tracingAgent->setLayerTreeId(m_layerTreeId);
441 m_resourceAgent->setHostId(hostId);
447 442
448 if (m_includeViewAgents) { 443 if (m_includeViewAgents) {
449 // TODO(dgozman): we should actually pass the view instead of frame, but during 444 // TODO(dgozman): we should actually pass the view instead of frame, but during
450 // remote->local transition we cannot access mainFrameImpl() yet, so we have to store the 445 // remote->local transition we cannot access mainFrameImpl() yet, so we have to store the
451 // frame which will become the main frame later. 446 // frame which will become the main frame later.
452 m_agents.append(InspectorRenderingAgent::create(m_webLocalFrameImpl, m_o verlay.get())); 447 m_session->append(InspectorRenderingAgent::create(m_webLocalFrameImpl, m _overlay.get()));
453 m_agents.append(InspectorEmulationAgent::create(m_webLocalFrameImpl, thi s)); 448 m_session->append(InspectorEmulationAgent::create(m_webLocalFrameImpl, t his));
454 // TODO(dgozman): migrate each of the following agents to frame once mod ule is ready. 449 // TODO(dgozman): migrate each of the following agents to frame once mod ule is ready.
455 Page* page = m_webLocalFrameImpl->viewImpl()->page(); 450 Page* page = m_webLocalFrameImpl->viewImpl()->page();
456 m_agents.append(InspectorDatabaseAgent::create(page)); 451 m_session->append(InspectorDatabaseAgent::create(page));
457 m_agents.append(DeviceOrientationInspectorAgent::create(page)); 452 m_session->append(DeviceOrientationInspectorAgent::create(page));
458 m_agents.append(InspectorAccessibilityAgent::create(page)); 453 m_session->append(InspectorAccessibilityAgent::create(page));
459 m_agents.append(InspectorDOMStorageAgent::create(page)); 454 m_session->append(InspectorDOMStorageAgent::create(page));
460 m_agents.append(InspectorCacheStorageAgent::create()); 455 m_session->append(InspectorCacheStorageAgent::create());
461 } 456 }
462 457
463 if (m_overlay) 458 if (m_overlay)
464 m_overlay->init(cssAgent, debuggerAgent, m_domAgent); 459 m_overlay->init(cssAgent, debuggerAgent, m_domAgent);
460
461 Platform::current()->currentThread()->addTaskObserver(this);
462 InspectorInstrumentation::registerInstrumentingAgents(m_instrumentingAgents. get());
465 } 463 }
466 464
467 void WebDevToolsAgentImpl::destroyAgents() 465 void WebDevToolsAgentImpl::destroySession()
468 { 466 {
469 if (m_overlay) 467 if (m_overlay)
470 m_overlay->clear(); 468 m_overlay->clear();
471 469
472 m_tracingAgent.clear(); 470 m_tracingAgent.clear();
473 m_layerTreeAgent.clear(); 471 m_layerTreeAgent.clear();
474 m_resourceAgent.clear(); 472 m_resourceAgent.clear();
475 m_pageAgent.clear(); 473 m_pageAgent.clear();
476 m_domAgent.clear(); 474 m_domAgent.clear();
477 475
478 m_agents.discardAgents(); 476 m_session->detach();
479 m_instrumentingAgents->reset();
480 m_v8Session.clear(); 477 m_v8Session.clear();
478 m_session.clear();
479
480 Platform::current()->currentThread()->removeTaskObserver(this);
481 InspectorInstrumentation::unregisterInstrumentingAgents(m_instrumentingAgent s.get());
481 } 482 }
482 483
483 void WebDevToolsAgentImpl::attach(const WebString& hostId, int sessionId) 484 void WebDevToolsAgentImpl::attach(const WebString& hostId, int sessionId)
484 { 485 {
485 if (m_attached) 486 if (attached())
486 return; 487 return;
487 488 initializeSession(sessionId, hostId);
488 // Set the attached bit first so that sync notifications were delivered. 489 m_session->attach(nullptr);
489 m_attached = true;
490 m_sessionId = sessionId;
491
492 initializeAgents();
493 m_resourceAgent->setHostId(hostId);
494
495 m_inspectorFrontend = adoptPtr(new protocol::Frontend(this));
496 // We can reconnect to existing front-end -> unmute state.
497 m_stateMuted = false;
498 m_agents.setFrontend(m_inspectorFrontend.get());
499
500 InspectorInstrumentation::registerInstrumentingAgents(m_instrumentingAgents. get());
501 InspectorInstrumentation::frontendCreated();
502
503 m_inspectorBackendDispatcher = protocol::Dispatcher::create(this);
504 m_agents.registerInDispatcher(m_inspectorBackendDispatcher.get());
505
506 Platform::current()->currentThread()->addTaskObserver(this);
507 } 490 }
508 491
509 void WebDevToolsAgentImpl::reattach(const WebString& hostId, int sessionId, cons t WebString& savedState) 492 void WebDevToolsAgentImpl::reattach(const WebString& hostId, int sessionId, cons t WebString& savedState)
510 { 493 {
511 if (m_attached) 494 if (attached())
512 return; 495 return;
513 496 initializeSession(sessionId, hostId);
514 attach(hostId, sessionId); 497 String state = savedState;
515 m_agents.restore(savedState); 498 m_session->attach(&state);
516 } 499 }
517 500
518 void WebDevToolsAgentImpl::detach() 501 void WebDevToolsAgentImpl::detach()
519 { 502 {
520 if (!m_attached) 503 if (!attached())
521 return; 504 return;
522 505 destroySession();
523 Platform::current()->currentThread()->removeTaskObserver(this);
524
525 m_inspectorBackendDispatcher->clearFrontend();
526 m_inspectorBackendDispatcher.clear();
527
528 // Destroying agents would change the state, but we don't want that.
529 // Pre-disconnect state will be used to restore inspector agents.
530 m_stateMuted = true;
531 m_agents.clearFrontend();
532 m_inspectorFrontend.clear();
533
534 destroyAgents();
535 InspectorInstrumentation::frontendDeleted();
536 InspectorInstrumentation::unregisterInstrumentingAgents(m_instrumentingAgent s.get());
537
538 m_sessionId = 0;
539 m_attached = false;
540 } 506 }
541 507
542 void WebDevToolsAgentImpl::continueProgram() 508 void WebDevToolsAgentImpl::continueProgram()
543 { 509 {
544 ClientMessageLoopAdapter::continueProgram(); 510 ClientMessageLoopAdapter::continueProgram();
545 } 511 }
546 512
547 void WebDevToolsAgentImpl::didCommitLoadForLocalFrame(LocalFrame* frame) 513 void WebDevToolsAgentImpl::didCommitLoadForLocalFrame(LocalFrame* frame)
548 { 514 {
549 m_resourceContainer->didCommitLoadForLocalFrame(frame); 515 m_resourceContainer->didCommitLoadForLocalFrame(frame);
550 m_resourceContentLoader->didCommitLoadForLocalFrame(frame); 516 m_resourceContentLoader->didCommitLoadForLocalFrame(frame);
551 m_agents.didCommitLoadForLocalFrame(frame); 517 if (m_session)
518 m_session->didCommitLoadForLocalFrame(frame);
552 } 519 }
553 520
554 bool WebDevToolsAgentImpl::screencastEnabled() 521 bool WebDevToolsAgentImpl::screencastEnabled()
555 { 522 {
556 return m_pageAgent && m_pageAgent->screencastEnabled(); 523 return m_pageAgent && m_pageAgent->screencastEnabled();
557 } 524 }
558 525
559 void WebDevToolsAgentImpl::willAddPageOverlay(const GraphicsLayer* layer) 526 void WebDevToolsAgentImpl::willAddPageOverlay(const GraphicsLayer* layer)
560 { 527 {
561 if (m_layerTreeAgent) 528 if (m_layerTreeAgent)
(...skipping 23 matching lines...) Expand all
585 m_client->disableTracing(); 552 m_client->disableTracing();
586 } 553 }
587 554
588 void WebDevToolsAgentImpl::setCPUThrottlingRate(double rate) 555 void WebDevToolsAgentImpl::setCPUThrottlingRate(double rate)
589 { 556 {
590 m_client->setCPUThrottlingRate(rate); 557 m_client->setCPUThrottlingRate(rate);
591 } 558 }
592 559
593 void WebDevToolsAgentImpl::dispatchOnInspectorBackend(int sessionId, const WebSt ring& message) 560 void WebDevToolsAgentImpl::dispatchOnInspectorBackend(int sessionId, const WebSt ring& message)
594 { 561 {
595 if (!m_attached) 562 if (!attached())
596 return; 563 return;
597 if (WebDevToolsAgent::shouldInterruptForMessage(message)) 564 if (WebDevToolsAgent::shouldInterruptForMessage(message))
598 MainThreadDebugger::instance()->taskRunner()->runAllTasksDontWait(); 565 MainThreadDebugger::instance()->taskRunner()->runAllTasksDontWait();
599 else 566 else
600 dispatchMessageFromFrontend(sessionId, message); 567 dispatchMessageFromFrontend(sessionId, message);
601 } 568 }
602 569
603 void WebDevToolsAgentImpl::dispatchMessageFromFrontend(int sessionId, const Stri ng& message) 570 void WebDevToolsAgentImpl::dispatchMessageFromFrontend(int sessionId, const Stri ng& message)
604 { 571 {
572 if (!attached() || sessionId != m_session->sessionId())
573 return;
605 InspectorTaskRunner::IgnoreInterruptsScope scope(MainThreadDebugger::instanc e()->taskRunner()); 574 InspectorTaskRunner::IgnoreInterruptsScope scope(MainThreadDebugger::instanc e()->taskRunner());
606 if (m_inspectorBackendDispatcher) 575 m_session->dispatchProtocolMessage(message);
607 m_inspectorBackendDispatcher->dispatch(sessionId, message);
608 } 576 }
609 577
610 void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& pointInRootFrame) 578 void WebDevToolsAgentImpl::inspectElementAt(const WebPoint& pointInRootFrame)
611 { 579 {
612 if (!m_domAgent) 580 if (!m_domAgent)
613 return; 581 return;
614 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR equest::ReadOnly | HitTestRequest::AllowChildFrameContent; 582 HitTestRequest::HitTestRequestType hitType = HitTestRequest::Move | HitTestR equest::ReadOnly | HitTestRequest::AllowChildFrameContent;
615 HitTestRequest request(hitType); 583 HitTestRequest request(hitType);
616 WebMouseEvent dummyEvent; 584 WebMouseEvent dummyEvent;
617 dummyEvent.type = WebInputEvent::MouseDown; 585 dummyEvent.type = WebInputEvent::MouseDown;
618 dummyEvent.x = pointInRootFrame.x; 586 dummyEvent.x = pointInRootFrame.x;
619 dummyEvent.y = pointInRootFrame.y; 587 dummyEvent.y = pointInRootFrame.y;
620 IntPoint transformedPoint = PlatformMouseEventBuilder(m_webLocalFrameImpl->f rameView(), dummyEvent).position(); 588 IntPoint transformedPoint = PlatformMouseEventBuilder(m_webLocalFrameImpl->f rameView(), dummyEvent).position();
621 HitTestResult result(request, m_webLocalFrameImpl->frameView()->rootFrameToC ontents(transformedPoint)); 589 HitTestResult result(request, m_webLocalFrameImpl->frameView()->rootFrameToC ontents(transformedPoint));
622 m_webLocalFrameImpl->frame()->contentLayoutItem().hitTest(result); 590 m_webLocalFrameImpl->frame()->contentLayoutItem().hitTest(result);
623 Node* node = result.innerNode(); 591 Node* node = result.innerNode();
624 if (!node && m_webLocalFrameImpl->frame()->document()) 592 if (!node && m_webLocalFrameImpl->frame()->document())
625 node = m_webLocalFrameImpl->frame()->document()->documentElement(); 593 node = m_webLocalFrameImpl->frame()->document()->documentElement();
626 m_domAgent->inspect(node); 594 m_domAgent->inspect(node);
627 } 595 }
628 596
629 void WebDevToolsAgentImpl::failedToRequestDevTools() 597 void WebDevToolsAgentImpl::failedToRequestDevTools()
630 { 598 {
631 ClientMessageLoopAdapter::resumeForCreateWindow(); 599 ClientMessageLoopAdapter::resumeForCreateWindow();
632 } 600 }
633 601
634 void WebDevToolsAgentImpl::sendProtocolResponse(int sessionId, int callId, PassO wnPtr<protocol::DictionaryValue> message) 602 void WebDevToolsAgentImpl::sendProtocolMessage(int sessionId, int callId, const String& response, const String& state)
635 { 603 {
636 if (!m_attached) 604 ASSERT(attached());
637 return; 605 m_client->sendProtocolMessage(sessionId, callId, response, state);
638 flushPendingProtocolNotifications();
639 String stateToSend;
640 if (!m_stateMuted) {
641 stateToSend = m_agents.state();
642 if (stateToSend == m_stateCookie)
643 stateToSend = String();
644 else
645 m_stateCookie = stateToSend;
646 }
647
648 m_client->sendProtocolMessage(sessionId, callId, message->toJSONString(), st ateToSend);
649 }
650
651 void WebDevToolsAgentImpl::sendProtocolNotification(PassOwnPtr<protocol::Diction aryValue> message)
652 {
653 if (!m_attached)
654 return;
655 m_notificationQueue.append(std::make_pair(m_sessionId, message));
656 }
657
658 void WebDevToolsAgentImpl::flush()
659 {
660 flushPendingProtocolNotifications();
661 } 606 }
662 607
663 void WebDevToolsAgentImpl::resumeStartup() 608 void WebDevToolsAgentImpl::resumeStartup()
664 { 609 {
665 // If we've paused for createWindow, handle it ourselves. 610 // If we've paused for createWindow, handle it ourselves.
666 if (ClientMessageLoopAdapter::resumeForCreateWindow()) 611 if (ClientMessageLoopAdapter::resumeForCreateWindow())
667 return; 612 return;
668 // Otherwise, pass to the client (embedded workers do it differently). 613 // Otherwise, pass to the client (embedded workers do it differently).
669 m_client->resumeStartup(); 614 m_client->resumeStartup();
670 } 615 }
671 616
672 void WebDevToolsAgentImpl::pageLayoutInvalidated(bool resized) 617 void WebDevToolsAgentImpl::pageLayoutInvalidated(bool resized)
673 { 618 {
674 if (m_overlay) 619 if (m_overlay)
675 m_overlay->pageLayoutInvalidated(resized); 620 m_overlay->pageLayoutInvalidated(resized);
676 } 621 }
677 622
678 void WebDevToolsAgentImpl::setPausedInDebuggerMessage(const String& message) 623 void WebDevToolsAgentImpl::setPausedInDebuggerMessage(const String& message)
679 { 624 {
680 if (m_overlay) 625 if (m_overlay)
681 m_overlay->setPausedInDebuggerMessage(message); 626 m_overlay->setPausedInDebuggerMessage(message);
682 } 627 }
683 628
684 void WebDevToolsAgentImpl::waitForCreateWindow(LocalFrame* frame) 629 void WebDevToolsAgentImpl::waitForCreateWindow(LocalFrame* frame)
685 { 630 {
686 if (!m_attached) 631 if (!attached())
687 return; 632 return;
688 if (m_client->requestDevToolsForFrame(WebLocalFrameImpl::fromFrame(frame))) 633 if (m_client->requestDevToolsForFrame(WebLocalFrameImpl::fromFrame(frame)))
689 ClientMessageLoopAdapter::pauseForCreateWindow(m_webLocalFrameImpl); 634 ClientMessageLoopAdapter::pauseForCreateWindow(m_webLocalFrameImpl);
690 } 635 }
691 636
692 WebString WebDevToolsAgentImpl::evaluateInWebInspectorOverlay(const WebString& s cript) 637 WebString WebDevToolsAgentImpl::evaluateInWebInspectorOverlay(const WebString& s cript)
693 { 638 {
694 if (!m_overlay) 639 if (!m_overlay)
695 return WebString(); 640 return WebString();
696 641
697 return m_overlay->evaluateInOverlayForTest(script); 642 return m_overlay->evaluateInOverlayForTest(script);
698 } 643 }
699 644
700 void WebDevToolsAgentImpl::flushPendingProtocolNotifications() 645 void WebDevToolsAgentImpl::flushPendingProtocolNotifications()
701 { 646 {
702 if (m_attached) { 647 if (m_session)
703 m_agents.flushPendingProtocolNotifications(); 648 m_session->flushPendingProtocolNotifications();
704 for (size_t i = 0; i < m_notificationQueue.size(); ++i)
705 m_client->sendProtocolMessage(m_notificationQueue[i].first, 0, m_not ificationQueue[i].second->toJSONString(), WebString());
706 }
707 m_notificationQueue.clear();
708 } 649 }
709 650
710 void WebDevToolsAgentImpl::willProcessTask() 651 void WebDevToolsAgentImpl::willProcessTask()
711 { 652 {
712 if (!m_attached) 653 if (!attached())
713 return; 654 return;
714 if (InspectorProfilerAgent* profilerAgent = m_instrumentingAgents->inspector ProfilerAgent()) 655 if (InspectorProfilerAgent* profilerAgent = m_instrumentingAgents->inspector ProfilerAgent())
715 profilerAgent->willProcessTask(); 656 profilerAgent->willProcessTask();
716 } 657 }
717 658
718 void WebDevToolsAgentImpl::didProcessTask() 659 void WebDevToolsAgentImpl::didProcessTask()
719 { 660 {
720 if (!m_attached) 661 if (!attached())
721 return; 662 return;
722 if (InspectorProfilerAgent* profilerAgent = m_instrumentingAgents->inspector ProfilerAgent()) 663 if (InspectorProfilerAgent* profilerAgent = m_instrumentingAgents->inspector ProfilerAgent())
723 profilerAgent->didProcessTask(); 664 profilerAgent->didProcessTask();
724 flushPendingProtocolNotifications(); 665 flushPendingProtocolNotifications();
725 } 666 }
726 667
727 void WebDevToolsAgentImpl::runDebuggerTask(int sessionId, PassOwnPtr<WebDevTools Agent::MessageDescriptor> descriptor) 668 void WebDevToolsAgentImpl::runDebuggerTask(int sessionId, PassOwnPtr<WebDevTools Agent::MessageDescriptor> descriptor)
728 { 669 {
729 WebDevToolsAgent* webagent = descriptor->agent(); 670 WebDevToolsAgent* webagent = descriptor->agent();
730 if (!webagent) 671 if (!webagent)
731 return; 672 return;
732 673
733 WebDevToolsAgentImpl* agentImpl = static_cast<WebDevToolsAgentImpl*>(webagen t); 674 WebDevToolsAgentImpl* agentImpl = static_cast<WebDevToolsAgentImpl*>(webagen t);
734 if (agentImpl->m_attached) 675 if (agentImpl->attached())
735 agentImpl->dispatchMessageFromFrontend(sessionId, descriptor->message()) ; 676 agentImpl->dispatchMessageFromFrontend(sessionId, descriptor->message()) ;
736 } 677 }
737 678
738 void WebDevToolsAgent::interruptAndDispatch(int sessionId, MessageDescriptor* ra wDescriptor) 679 void WebDevToolsAgent::interruptAndDispatch(int sessionId, MessageDescriptor* ra wDescriptor)
739 { 680 {
740 // rawDescriptor can't be a PassOwnPtr because interruptAndDispatch is a Web Kit API function. 681 // rawDescriptor can't be a PassOwnPtr because interruptAndDispatch is a Web Kit API function.
741 MainThreadDebugger::interruptMainThreadAndRun(threadSafeBind(WebDevToolsAgen tImpl::runDebuggerTask, sessionId, adoptPtr(rawDescriptor))); 682 MainThreadDebugger::interruptMainThreadAndRun(threadSafeBind(WebDevToolsAgen tImpl::runDebuggerTask, sessionId, adoptPtr(rawDescriptor)));
742 } 683 }
743 684
744 bool WebDevToolsAgent::shouldInterruptForMessage(const WebString& message) 685 bool WebDevToolsAgent::shouldInterruptForMessage(const WebString& message)
745 { 686 {
746 String16 commandName; 687 String16 commandName;
747 if (!protocol::Dispatcher::getCommandName(message, &commandName)) 688 if (!protocol::Dispatcher::getCommandName(message, &commandName))
748 return false; 689 return false;
749 return commandName == "Debugger.pause" 690 return commandName == "Debugger.pause"
750 || commandName == "Debugger.setBreakpoint" 691 || commandName == "Debugger.setBreakpoint"
751 || commandName == "Debugger.setBreakpointByUrl" 692 || commandName == "Debugger.setBreakpointByUrl"
752 || commandName == "Debugger.removeBreakpoint" 693 || commandName == "Debugger.removeBreakpoint"
753 || commandName == "Debugger.setBreakpointsActive"; 694 || commandName == "Debugger.setBreakpointsActive";
754 } 695 }
755 696
756 } // namespace blink 697 } // 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