1 /* 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef DRTDevToolsAgent_h 32 #define DRTDevToolsAgent_h 33 34 #include "Task.h" 35 #include "WebDevToolsAgentClient.h" 36 #include "WebString.h" 37 #include <wtf/HashMap.h> 38 #include <wtf/Noncopyable.h> 39 40 namespace WebKit { 41 42 class WebCString; 43 class WebDevToolsAgent; 44 class WebView; 45 struct WebDevToolsMessageData; 46 47 } // namespace WebKit 48 49 class DRTDevToolsClient; 50 51 class DRTDevToolsAgent : public WebKit::WebDevToolsAgentClient { 52 WTF_MAKE_NONCOPYABLE(DRTDevToolsAgent); 53 public: 54 DRTDevToolsAgent(); ~DRTDevToolsAgent()55 virtual ~DRTDevToolsAgent() {} 56 void reset(); 57 58 void setWebView(WebKit::WebView*); 59 60 // WebDevToolsAgentClient implementation. 61 virtual void sendMessageToInspectorFrontend(const WebKit::WebString&); hostIdentifier()62 virtual int hostIdentifier() { return m_routingID; } 63 virtual void runtimePropertyChanged(const WebKit::WebString& name, const WebKit::WebString& value); 64 virtual WebKitClientMessageLoop* createClientMessageLoop(); 65 66 void asyncCall(const WebKit::WebString& args); 67 68 void attach(DRTDevToolsClient*); 69 void detach(); 70 void frontendLoaded(); 71 72 bool evaluateInWebInspector(long callID, const std::string& script); 73 bool setTimelineProfilingEnabled(bool enable); taskList()74 TaskList* taskList() { return &m_taskList; } 75 76 private: 77 void call(const WebKit::WebString& args); 78 void delayedFrontendLoaded(); 79 static void dispatchMessageLoop(); 80 WebKit::WebDevToolsAgent* webDevToolsAgent(); 81 82 class AsyncCallTask: public MethodTask<DRTDevToolsAgent> { 83 public: AsyncCallTask(DRTDevToolsAgent * object,const WebKit::WebString & args)84 AsyncCallTask(DRTDevToolsAgent* object, const WebKit::WebString& args) 85 : MethodTask<DRTDevToolsAgent>(object), m_args(args) {} runIfValid()86 virtual void runIfValid() { m_object->call(m_args); } 87 private: 88 WebKit::WebString m_args; 89 }; 90 91 struct DelayedFrontendLoadedTask: public MethodTask<DRTDevToolsAgent> { DelayedFrontendLoadedTaskDelayedFrontendLoadedTask92 DelayedFrontendLoadedTask(DRTDevToolsAgent* object) : MethodTask<DRTDevToolsAgent>(object) {} runIfValidDelayedFrontendLoadedTask93 virtual void runIfValid() { m_object->delayedFrontendLoaded(); } 94 }; 95 96 TaskList m_taskList; 97 DRTDevToolsClient* m_drtDevToolsClient; 98 int m_routingID; 99 WebKit::WebDevToolsAgent* m_webDevToolsAgent; 100 WebKit::WebView* m_webView; 101 }; 102 103 #endif // DRTDevToolsAgent_h 104