| 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 |