| 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 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 #include "public/web/WebSettings.h" | 67 #include "public/web/WebSettings.h" |
| 68 #include "public/web/WebViewClient.h" | 68 #include "public/web/WebViewClient.h" |
| 69 #include "web/WebInputEventConversion.h" | 69 #include "web/WebInputEventConversion.h" |
| 70 #include "web/WebLocalFrameImpl.h" | 70 #include "web/WebLocalFrameImpl.h" |
| 71 #include "web/WebViewImpl.h" | 71 #include "web/WebViewImpl.h" |
| 72 #include "wtf/CurrentTime.h" | 72 #include "wtf/CurrentTime.h" |
| 73 #include "wtf/MathExtras.h" | 73 #include "wtf/MathExtras.h" |
| 74 #include "wtf/Noncopyable.h" | 74 #include "wtf/Noncopyable.h" |
| 75 #include "wtf/text/WTFString.h" | 75 #include "wtf/text/WTFString.h" |
| 76 | 76 |
| 77 using namespace blink; | |
| 78 | |
| 79 namespace OverlayZOrders { | 77 namespace OverlayZOrders { |
| 80 // Use 99 as a big z-order number so that highlight is above other overlays. | 78 // Use 99 as a big z-order number so that highlight is above other overlays. |
| 81 static const int highlight = 99; | 79 static const int highlight = 99; |
| 82 } | 80 } |
| 83 | 81 |
| 84 namespace blink { | 82 namespace blink { |
| 85 | 83 |
| 86 class ClientMessageLoopAdapter : public PageScriptDebugServer::ClientMessageLoop
{ | 84 class ClientMessageLoopAdapter : public PageScriptDebugServer::ClientMessageLoop
{ |
| 87 public: | 85 public: |
| 88 static void ensureClientMessageLoopCreated(WebDevToolsAgentClient* client) | 86 static void ensureClientMessageLoopCreated(WebDevToolsAgentClient* client) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 101 } | 99 } |
| 102 | 100 |
| 103 static void didNavigate() | 101 static void didNavigate() |
| 104 { | 102 { |
| 105 // Release render thread if necessary. | 103 // Release render thread if necessary. |
| 106 if (s_instance && s_instance->m_running) | 104 if (s_instance && s_instance->m_running) |
| 107 PageScriptDebugServer::shared().continueProgram(); | 105 PageScriptDebugServer::shared().continueProgram(); |
| 108 } | 106 } |
| 109 | 107 |
| 110 private: | 108 private: |
| 111 ClientMessageLoopAdapter(PassOwnPtr<blink::WebDevToolsAgentClient::WebKitCli
entMessageLoop> messageLoop) | 109 ClientMessageLoopAdapter(PassOwnPtr<WebDevToolsAgentClient::WebKitClientMess
ageLoop> messageLoop) |
| 112 : m_running(false) | 110 : m_running(false) |
| 113 , m_messageLoop(messageLoop) { } | 111 , m_messageLoop(messageLoop) { } |
| 114 | 112 |
| 115 | 113 |
| 116 virtual void run(Page* page) | 114 virtual void run(Page* page) |
| 117 { | 115 { |
| 118 if (m_running) | 116 if (m_running) |
| 119 return; | 117 return; |
| 120 m_running = true; | 118 m_running = true; |
| 121 | 119 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 161 |
| 164 m_running = false; | 162 m_running = false; |
| 165 } | 163 } |
| 166 | 164 |
| 167 virtual void quitNow() | 165 virtual void quitNow() |
| 168 { | 166 { |
| 169 m_messageLoop->quitNow(); | 167 m_messageLoop->quitNow(); |
| 170 } | 168 } |
| 171 | 169 |
| 172 bool m_running; | 170 bool m_running; |
| 173 OwnPtr<blink::WebDevToolsAgentClient::WebKitClientMessageLoop> m_messageLoop
; | 171 OwnPtr<WebDevToolsAgentClient::WebKitClientMessageLoop> m_messageLoop; |
| 174 typedef HashSet<WebViewImpl*> FrozenViewsSet; | 172 typedef HashSet<WebViewImpl*> FrozenViewsSet; |
| 175 FrozenViewsSet m_frozenViews; | 173 FrozenViewsSet m_frozenViews; |
| 176 // FIXME: The ownership model for s_instance is somewhat complicated. Can we
make this simpler? | 174 // FIXME: The ownership model for s_instance is somewhat complicated. Can we
make this simpler? |
| 177 static ClientMessageLoopAdapter* s_instance; | 175 static ClientMessageLoopAdapter* s_instance; |
| 178 }; | 176 }; |
| 179 | 177 |
| 180 ClientMessageLoopAdapter* ClientMessageLoopAdapter::s_instance = 0; | 178 ClientMessageLoopAdapter* ClientMessageLoopAdapter::s_instance = 0; |
| 181 | 179 |
| 182 class DebuggerTask : public PageScriptDebugServer::Task { | 180 class DebuggerTask : public PageScriptDebugServer::Task { |
| 183 public: | 181 public: |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 inspectorController()->setProcessId(processId); | 219 inspectorController()->setProcessId(processId); |
| 222 | 220 |
| 223 ASSERT(m_debuggerId > 0); | 221 ASSERT(m_debuggerId > 0); |
| 224 ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client); | 222 ClientMessageLoopAdapter::ensureClientMessageLoopCreated(m_client); |
| 225 } | 223 } |
| 226 | 224 |
| 227 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() | 225 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() |
| 228 { | 226 { |
| 229 ClientMessageLoopAdapter::inspectedViewClosed(m_webViewImpl); | 227 ClientMessageLoopAdapter::inspectedViewClosed(m_webViewImpl); |
| 230 if (m_attached) | 228 if (m_attached) |
| 231 blink::Platform::current()->currentThread()->removeTaskObserver(this); | 229 Platform::current()->currentThread()->removeTaskObserver(this); |
| 232 } | 230 } |
| 233 | 231 |
| 234 void WebDevToolsAgentImpl::attach(const WebString& hostId) | 232 void WebDevToolsAgentImpl::attach(const WebString& hostId) |
| 235 { | 233 { |
| 236 if (m_attached) | 234 if (m_attached) |
| 237 return; | 235 return; |
| 238 | 236 |
| 239 inspectorController()->connectFrontend(hostId, this); | 237 inspectorController()->connectFrontend(hostId, this); |
| 240 blink::Platform::current()->currentThread()->addTaskObserver(this); | 238 Platform::current()->currentThread()->addTaskObserver(this); |
| 241 m_attached = true; | 239 m_attached = true; |
| 242 } | 240 } |
| 243 | 241 |
| 244 void WebDevToolsAgentImpl::reattach(const WebString& hostId, const WebString& sa
vedState) | 242 void WebDevToolsAgentImpl::reattach(const WebString& hostId, const WebString& sa
vedState) |
| 245 { | 243 { |
| 246 if (m_attached) | 244 if (m_attached) |
| 247 return; | 245 return; |
| 248 | 246 |
| 249 inspectorController()->reuseFrontend(hostId, this, savedState); | 247 inspectorController()->reuseFrontend(hostId, this, savedState); |
| 250 blink::Platform::current()->currentThread()->addTaskObserver(this); | 248 Platform::current()->currentThread()->addTaskObserver(this); |
| 251 m_attached = true; | 249 m_attached = true; |
| 252 } | 250 } |
| 253 | 251 |
| 254 void WebDevToolsAgentImpl::detach() | 252 void WebDevToolsAgentImpl::detach() |
| 255 { | 253 { |
| 256 blink::Platform::current()->currentThread()->removeTaskObserver(this); | 254 Platform::current()->currentThread()->removeTaskObserver(this); |
| 257 | 255 |
| 258 // Prevent controller from sending messages to the frontend. | 256 // Prevent controller from sending messages to the frontend. |
| 259 InspectorController* ic = inspectorController(); | 257 InspectorController* ic = inspectorController(); |
| 260 ic->disconnectFrontend(); | 258 ic->disconnectFrontend(); |
| 261 m_attached = false; | 259 m_attached = false; |
| 262 } | 260 } |
| 263 | 261 |
| 264 void WebDevToolsAgentImpl::continueProgram() | 262 void WebDevToolsAgentImpl::continueProgram() |
| 265 { | 263 { |
| 266 ClientMessageLoopAdapter::didNavigate(); | 264 ClientMessageLoopAdapter::didNavigate(); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 288 | 286 |
| 289 void WebDevToolsAgentImpl::didComposite() | 287 void WebDevToolsAgentImpl::didComposite() |
| 290 { | 288 { |
| 291 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "CompositeL
ayers"); | 289 TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "CompositeL
ayers"); |
| 292 if (InspectorController* ic = inspectorController()) | 290 if (InspectorController* ic = inspectorController()) |
| 293 ic->didComposite(); | 291 ic->didComposite(); |
| 294 } | 292 } |
| 295 | 293 |
| 296 void WebDevToolsAgentImpl::didCreateScriptContext(WebLocalFrameImpl* webframe, i
nt worldId) | 294 void WebDevToolsAgentImpl::didCreateScriptContext(WebLocalFrameImpl* webframe, i
nt worldId) |
| 297 { | 295 { |
| 298 if (blink::LocalFrame* frame = webframe->frame()) | 296 if (LocalFrame* frame = webframe->frame()) |
| 299 frame->script().setWorldDebugId(worldId, m_debuggerId); | 297 frame->script().setWorldDebugId(worldId, m_debuggerId); |
| 300 // Skip non main world contexts. | 298 // Skip non main world contexts. |
| 301 if (worldId) | 299 if (worldId) |
| 302 return; | 300 return; |
| 303 m_webViewDidLayoutOnceAfterLoad = false; | 301 m_webViewDidLayoutOnceAfterLoad = false; |
| 304 } | 302 } |
| 305 | 303 |
| 306 bool WebDevToolsAgentImpl::handleInputEvent(blink::Page* page, const WebInputEve
nt& inputEvent) | 304 bool WebDevToolsAgentImpl::handleInputEvent(Page* page, const WebInputEvent& inp
utEvent) |
| 307 { | 305 { |
| 308 if (!m_attached && !m_generatingEvent) | 306 if (!m_attached && !m_generatingEvent) |
| 309 return false; | 307 return false; |
| 310 | 308 |
| 311 // FIXME: This workaround is required for touch emulation on Mac, where | 309 // FIXME: This workaround is required for touch emulation on Mac, where |
| 312 // compositor-side pinch handling is not enabled. See http://crbug.com/13800
3. | 310 // compositor-side pinch handling is not enabled. See http://crbug.com/13800
3. |
| 313 bool isPinch = inputEvent.type == WebInputEvent::GesturePinchBegin || inputE
vent.type == WebInputEvent::GesturePinchUpdate || inputEvent.type == WebInputEve
nt::GesturePinchEnd; | 311 bool isPinch = inputEvent.type == WebInputEvent::GesturePinchBegin || inputE
vent.type == WebInputEvent::GesturePinchUpdate || inputEvent.type == WebInputEve
nt::GesturePinchEnd; |
| 314 if (isPinch && m_touchEventEmulationEnabled) { | 312 if (isPinch && m_touchEventEmulationEnabled) { |
| 315 FrameView* frameView = page->deprecatedLocalMainFrame()->view(); | 313 FrameView* frameView = page->deprecatedLocalMainFrame()->view(); |
| 316 PlatformGestureEventBuilder gestureEvent(frameView, static_cast<const We
bGestureEvent&>(inputEvent)); | 314 PlatformGestureEventBuilder gestureEvent(frameView, static_cast<const We
bGestureEvent&>(inputEvent)); |
| 317 float pageScaleFactor = page->pageScaleFactor(); | 315 float pageScaleFactor = page->pageScaleFactor(); |
| 318 if (gestureEvent.type() == PlatformEvent::GesturePinchBegin) { | 316 if (gestureEvent.type() == PlatformEvent::GesturePinchBegin) { |
| 319 m_lastPinchAnchorCss = adoptPtr(new blink::IntPoint(frameView->scrol
lPosition() + gestureEvent.position())); | 317 m_lastPinchAnchorCss = adoptPtr(new IntPoint(frameView->scrollPositi
on() + gestureEvent.position())); |
| 320 m_lastPinchAnchorDip = adoptPtr(new blink::IntPoint(gestureEvent.pos
ition())); | 318 m_lastPinchAnchorDip = adoptPtr(new IntPoint(gestureEvent.position()
)); |
| 321 m_lastPinchAnchorDip->scale(pageScaleFactor, pageScaleFactor); | 319 m_lastPinchAnchorDip->scale(pageScaleFactor, pageScaleFactor); |
| 322 } | 320 } |
| 323 if (gestureEvent.type() == PlatformEvent::GesturePinchUpdate && m_lastPi
nchAnchorCss) { | 321 if (gestureEvent.type() == PlatformEvent::GesturePinchUpdate && m_lastPi
nchAnchorCss) { |
| 324 float newPageScaleFactor = pageScaleFactor * gestureEvent.scale(); | 322 float newPageScaleFactor = pageScaleFactor * gestureEvent.scale(); |
| 325 blink::IntPoint anchorCss(*m_lastPinchAnchorDip.get()); | 323 IntPoint anchorCss(*m_lastPinchAnchorDip.get()); |
| 326 anchorCss.scale(1.f / newPageScaleFactor, 1.f / newPageScaleFactor); | 324 anchorCss.scale(1.f / newPageScaleFactor, 1.f / newPageScaleFactor); |
| 327 m_webViewImpl->setPageScaleFactor(newPageScaleFactor); | 325 m_webViewImpl->setPageScaleFactor(newPageScaleFactor); |
| 328 m_webViewImpl->setMainFrameScrollOffset(*m_lastPinchAnchorCss.get()
- toIntSize(anchorCss)); | 326 m_webViewImpl->setMainFrameScrollOffset(*m_lastPinchAnchorCss.get()
- toIntSize(anchorCss)); |
| 329 } | 327 } |
| 330 if (gestureEvent.type() == PlatformEvent::GesturePinchEnd) { | 328 if (gestureEvent.type() == PlatformEvent::GesturePinchEnd) { |
| 331 m_lastPinchAnchorCss.clear(); | 329 m_lastPinchAnchorCss.clear(); |
| 332 m_lastPinchAnchorDip.clear(); | 330 m_lastPinchAnchorDip.clear(); |
| 333 } | 331 } |
| 334 return true; | 332 return true; |
| 335 } | 333 } |
| (...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 m_webViewImpl->layout(); | 654 m_webViewImpl->layout(); |
| 657 } | 655 } |
| 658 m_webViewImpl->addPageOverlay(this, OverlayZOrders::highlight); | 656 m_webViewImpl->addPageOverlay(this, OverlayZOrders::highlight); |
| 659 } | 657 } |
| 660 | 658 |
| 661 void WebDevToolsAgentImpl::hideHighlight() | 659 void WebDevToolsAgentImpl::hideHighlight() |
| 662 { | 660 { |
| 663 m_webViewImpl->removePageOverlay(this); | 661 m_webViewImpl->removePageOverlay(this); |
| 664 } | 662 } |
| 665 | 663 |
| 666 void WebDevToolsAgentImpl::sendMessageToFrontend(PassRefPtr<blink::JSONObject> m
essage) | 664 void WebDevToolsAgentImpl::sendMessageToFrontend(PassRefPtr<JSONObject> message) |
| 667 { | 665 { |
| 668 m_frontendMessageQueue.append(message); | 666 m_frontendMessageQueue.append(message); |
| 669 } | 667 } |
| 670 | 668 |
| 671 void WebDevToolsAgentImpl::flush() | 669 void WebDevToolsAgentImpl::flush() |
| 672 { | 670 { |
| 673 flushPendingFrontendMessages(); | 671 flushPendingFrontendMessages(); |
| 674 } | 672 } |
| 675 | 673 |
| 676 void WebDevToolsAgentImpl::updateInspectorStateCookie(const String& state) | 674 void WebDevToolsAgentImpl::updateInspectorStateCookie(const String& state) |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 || commandName == InspectorBackendDispatcher::commandName(InspectorBacke
ndDispatcher::kDebugger_removeBreakpointCmd) | 736 || commandName == InspectorBackendDispatcher::commandName(InspectorBacke
ndDispatcher::kDebugger_removeBreakpointCmd) |
| 739 || commandName == InspectorBackendDispatcher::commandName(InspectorBacke
ndDispatcher::kDebugger_setBreakpointsActiveCmd); | 737 || commandName == InspectorBackendDispatcher::commandName(InspectorBacke
ndDispatcher::kDebugger_setBreakpointsActiveCmd); |
| 740 } | 738 } |
| 741 | 739 |
| 742 void WebDevToolsAgent::processPendingMessages() | 740 void WebDevToolsAgent::processPendingMessages() |
| 743 { | 741 { |
| 744 PageScriptDebugServer::shared().runPendingTasks(); | 742 PageScriptDebugServer::shared().runPendingTasks(); |
| 745 } | 743 } |
| 746 | 744 |
| 747 } // namespace blink | 745 } // namespace blink |
| OLD | NEW |