// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef WEBKIT_GLUE_WEBDEVTOOLSFRONTEND_IMPL_H_ #define WEBKIT_GLUE_WEBDEVTOOLSFRONTEND_IMPL_H_ #include #include "ContextMenuProvider.h" #include #include #include #include #include #include "v8.h" #include "third_party/WebKit/WebKit/chromium/public/WebDevToolsFrontend.h" #include "webkit/glue/devtools/devtools_rpc.h" namespace WebCore { class ContextMenuItem; class Node; class Page; class String; } namespace WebKit { class WebViewImpl; struct WebDevToolsMessageData; } class JsDebuggerAgentBoundObj; class JsNetAgentBoundObj; class JsProfilerAgentBoundObj; class JsToolsAgentBoundObj; class ToolsAgentNativeDelegateImpl; class WebDevToolsClientDelegate; class WebDevToolsFrontendImpl : public WebKit::WebDevToolsFrontend, public DevToolsRpc::Delegate, public Noncopyable { public: WebDevToolsFrontendImpl( WebKit::WebViewImpl* web_view_impl, WebKit::WebDevToolsFrontendClient* client, const String& application_locale); virtual ~WebDevToolsFrontendImpl(); // DevToolsRpc::Delegate implementation. virtual void SendRpcMessage(const WebKit::WebDevToolsMessageData& data); // WebDevToolsFrontend implementation. virtual void dispatchMessageFromAgent( const WebKit::WebDevToolsMessageData& data); private: class MenuProvider : public WebCore::ContextMenuProvider { public: static PassRefPtr create( WebDevToolsFrontendImpl* frontend_host, const Vector& items) { return adoptRef(new MenuProvider(frontend_host, items)); } virtual ~MenuProvider() { contextMenuCleared(); } void disconnect() { frontend_host_ = NULL; } virtual void populateContextMenu(WebCore::ContextMenu* menu) { for (size_t i = 0; i < items_.size(); ++i) menu->appendItem(*items_[i]); } virtual void contextMenuItemSelected(WebCore::ContextMenuItem* item) { if (frontend_host_) frontend_host_->ContextMenuItemSelected(item); } virtual void contextMenuCleared() { if (frontend_host_) frontend_host_->ContextMenuCleared(); deleteAllValues(items_); items_.clear(); } private: MenuProvider(WebDevToolsFrontendImpl* frontend_host, const Vector& items) : frontend_host_(frontend_host), items_(items) { } WebDevToolsFrontendImpl* frontend_host_; Vector items_; }; void AddResourceSourceToFrame(int resource_id, String mime_type, WebCore::Node* frame); void ExecuteScript(const Vector& v); void DispatchOnWebInspector(const String& method, const String& param); // friend class MenuSelectionHandler; void ContextMenuItemSelected(WebCore::ContextMenuItem* menu_item); void ContextMenuCleared(); static v8::Handle JsReset(const v8::Arguments& args); static v8::Handle JsAddSourceToFrame(const v8::Arguments& args); static v8::Handle JsAddResourceSourceToFrame( const v8::Arguments& args); static v8::Handle JsLoaded(const v8::Arguments& args); static v8::Handle JsPlatform(const v8::Arguments& args); static v8::Handle JsPort(const v8::Arguments& args); static v8::Handle JsActivateWindow(const v8::Arguments& args); static v8::Handle JsCloseWindow(const v8::Arguments& args); static v8::Handle JsDockWindow(const v8::Arguments& args); static v8::Handle JsUndockWindow(const v8::Arguments& args); static v8::Handle JsLocalizedStringsURL( const v8::Arguments& args); static v8::Handle JsHiddenPanels( const v8::Arguments& args); static v8::Handle JsDebuggerCommand( const v8::Arguments& args); static v8::Handle JsSetting( const v8::Arguments& args); static v8::Handle JsSetSetting( const v8::Arguments& args); static v8::Handle JsDebuggerPauseScript( const v8::Arguments& args); static v8::Handle JsWindowUnloading( const v8::Arguments& args); static v8::Handle JsShowContextMenu( const v8::Arguments& args); WebKit::WebViewImpl* web_view_impl_; WebKit::WebDevToolsFrontendClient* client_; String application_locale_; OwnPtr debugger_agent_obj_; OwnPtr profiler_agent_obj_; OwnPtr tools_agent_obj_; bool loaded_; Vector > pending_incoming_messages_; OwnPtr tools_agent_native_delegate_impl_; RefPtr menu_provider_; }; #endif // WEBKIT_GLUE_WEBDEVTOOLSFRONTEND_IMPL_H_