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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |