// Copyright (c) 2012 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 CONTENT_BROWSER_DEVTOOLS_RENDER_VIEW_DEVTOOLS_AGENT_HOST_H_ #define CONTENT_BROWSER_DEVTOOLS_RENDER_VIEW_DEVTOOLS_AGENT_HOST_H_ #include #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "content/browser/devtools/ipc_devtools_agent_host.h" #include "content/common/content_export.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_observer.h" namespace cc { class CompositorFrameMetadata; } namespace content { class DevToolsProtocolHandlerImpl; class RenderViewHost; class RenderViewHostImpl; #if defined(OS_ANDROID) class PowerSaveBlockerImpl; #endif namespace devtools { namespace dom { class DOMHandler; } namespace input { class InputHandler; } namespace network { class NetworkHandler; } namespace page { class PageHandler; } namespace power { class PowerHandler; } namespace tracing { class TracingHandler; } } class CONTENT_EXPORT RenderViewDevToolsAgentHost : public IPCDevToolsAgentHost, private WebContentsObserver, public NotificationObserver { public: static void OnCancelPendingNavigation(RenderViewHost* pending, RenderViewHost* current); RenderViewDevToolsAgentHost(RenderViewHost*); void SynchronousSwapCompositorFrame( const cc::CompositorFrameMetadata& frame_metadata); // DevTooolsAgentHost overrides. void DisconnectWebContents() override; void ConnectWebContents(WebContents* web_contents) override; WebContents* GetWebContents() override; Type GetType() override; std::string GetTitle() override; GURL GetURL() override; bool Activate() override; bool Close() override; private: friend class DevToolsAgentHost; ~RenderViewDevToolsAgentHost() override; // IPCDevToolsAgentHost overrides. void DispatchProtocolMessage(const std::string& message) override; void SendMessageToAgent(IPC::Message* msg) override; void OnClientAttached() override; void OnClientDetached() override; // WebContentsObserver overrides. void AboutToNavigateRenderView(RenderViewHost* dest_rvh) override; void RenderViewHostChanged(RenderViewHost* old_host, RenderViewHost* new_host) override; void RenderViewDeleted(RenderViewHost* rvh) override; void RenderProcessGone(base::TerminationStatus status) override; bool OnMessageReceived(const IPC::Message& message, RenderFrameHost* render_frame_host) override; bool OnMessageReceived(const IPC::Message& message) override; void DidAttachInterstitialPage() override; void DidDetachInterstitialPage() override; void TitleWasSet(NavigationEntry* entry, bool explicit_set) override; void NavigationEntryCommitted( const LoadCommittedDetails& load_details) override; // NotificationObserver overrides: void Observe(int type, const NotificationSource& source, const NotificationDetails& details) override; void DisconnectRenderViewHost(); void ConnectRenderViewHost(RenderViewHost* rvh); void ReattachToRenderViewHost(RenderViewHost* rvh); bool DispatchIPCMessage(const IPC::Message& message); void SetRenderViewHost(RenderViewHost* rvh); void ClearRenderViewHost(); void RenderViewCrashed(); void OnSwapCompositorFrame(const IPC::Message& message); bool OnSetTouchEventEmulationEnabled(const IPC::Message& message); void OnDispatchOnInspectorFrontend(const std::string& message, uint32 total_size); void DispatchOnInspectorFrontend(const std::string& message); void OnSaveAgentRuntimeState(const std::string& state); void ClientDetachedFromRenderer(); void InnerOnClientAttached(); void InnerClientDetachedFromRenderer(); RenderViewHostImpl* render_view_host_; scoped_ptr dom_handler_; scoped_ptr input_handler_; scoped_ptr network_handler_; scoped_ptr page_handler_; scoped_ptr power_handler_; scoped_ptr tracing_handler_; scoped_ptr handler_impl_; #if defined(OS_ANDROID) scoped_ptr power_save_blocker_; #endif std::string state_; NotificationRegistrar registrar_; bool reattaching_; DISALLOW_COPY_AND_ASSIGN(RenderViewDevToolsAgentHost); }; } // namespace content #endif // CONTENT_BROWSER_DEVTOOLS_RENDER_VIEW_DEVTOOLS_AGENT_HOST_H_