| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 5 #ifndef CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 
| 6 #define CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 6 #define CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 
| 7 | 7 | 
| 8 #include <map> | 8 #include <map> | 
| 9 #include <memory> | 9 #include <memory> | 
|  | 10 #include <unordered_set> | 
| 10 | 11 | 
| 11 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" | 
| 12 #include "base/macros.h" | 13 #include "base/macros.h" | 
| 13 #include "build/build_config.h" | 14 #include "build/build_config.h" | 
| 14 #include "content/browser/devtools/devtools_agent_host_impl.h" | 15 #include "content/browser/devtools/devtools_agent_host_impl.h" | 
| 15 #include "content/common/content_export.h" | 16 #include "content/common/content_export.h" | 
| 16 #include "content/public/browser/web_contents_observer.h" | 17 #include "content/public/browser/web_contents_observer.h" | 
| 17 #include "net/base/net_errors.h" | 18 #include "net/base/net_errors.h" | 
| 18 | 19 | 
| 19 #if defined(OS_ANDROID) | 20 #if defined(OS_ANDROID) | 
| 20 #include "ui/android/view_android.h" | 21 #include "ui/android/view_android.h" | 
| 21 #endif  // OS_ANDROID | 22 #endif  // OS_ANDROID | 
| 22 | 23 | 
| 23 namespace cc { | 24 namespace cc { | 
| 24 class CompositorFrameMetadata; | 25 class CompositorFrameMetadata; | 
| 25 } | 26 } | 
| 26 | 27 | 
| 27 #if defined(OS_ANDROID) | 28 #if defined(OS_ANDROID) | 
| 28 #include "device/wake_lock/public/interfaces/wake_lock.mojom.h" | 29 #include "device/wake_lock/public/interfaces/wake_lock.mojom.h" | 
| 29 #endif | 30 #endif | 
| 30 | 31 | 
| 31 namespace content { | 32 namespace content { | 
| 32 | 33 | 
| 33 class BrowserContext; | 34 class BrowserContext; | 
| 34 class DevToolsFrameTraceRecorder; | 35 class DevToolsFrameTraceRecorder; | 
| 35 class FrameTreeNode; | 36 class FrameTreeNode; | 
| 36 class NavigationHandle; | 37 class NavigationHandle; | 
|  | 38 class NavigationHandleImpl; | 
| 37 class NavigationThrottle; | 39 class NavigationThrottle; | 
| 38 class RenderFrameHostImpl; | 40 class RenderFrameHostImpl; | 
| 39 struct BeginNavigationParams; | 41 struct BeginNavigationParams; | 
| 40 struct CommonNavigationParams; | 42 struct CommonNavigationParams; | 
| 41 | 43 | 
| 42 class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 44 class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
| 43     : public DevToolsAgentHostImpl, | 45     : public DevToolsAgentHostImpl, | 
| 44       private WebContentsObserver { | 46       private WebContentsObserver { | 
| 45  public: | 47  public: | 
| 46   static void AddAllAgentHosts(DevToolsAgentHost::List* result); | 48   static void AddAllAgentHosts(DevToolsAgentHost::List* result); | 
| 47   static scoped_refptr<DevToolsAgentHost> GetOrCreateFor( | 49   static scoped_refptr<DevToolsAgentHost> GetOrCreateFor( | 
| 48       FrameTreeNode* frame_tree_node); | 50       FrameTreeNode* frame_tree_node); | 
| 49 | 51 | 
| 50   static void OnCancelPendingNavigation(RenderFrameHost* pending, | 52   static void OnCancelPendingNavigation(RenderFrameHost* pending, | 
| 51                                         RenderFrameHost* current); | 53                                         RenderFrameHost* current); | 
| 52   static void OnBeforeNavigation(RenderFrameHost* current, | 54   static void OnBeforeNavigation(RenderFrameHost* current, | 
| 53                                  RenderFrameHost* pending); | 55                                  RenderFrameHost* pending); | 
| 54   static void OnBeforeNavigation(NavigationHandle* navigation_handle); |  | 
| 55   static void OnFailedNavigation(RenderFrameHost* host, | 56   static void OnFailedNavigation(RenderFrameHost* host, | 
| 56                                  const CommonNavigationParams& common_params, | 57                                  const CommonNavigationParams& common_params, | 
| 57                                  const BeginNavigationParams& begin_params, | 58                                  const BeginNavigationParams& begin_params, | 
| 58                                  net::Error error_code); | 59                                  net::Error error_code); | 
| 59   static std::unique_ptr<NavigationThrottle> CreateThrottleForNavigation( | 60   static std::unique_ptr<NavigationThrottle> CreateThrottleForNavigation( | 
| 60       NavigationHandle* navigation_handle); | 61       NavigationHandle* navigation_handle); | 
| 61   static bool IsNetworkHandlerEnabled(FrameTreeNode* frame_tree_node); | 62   static bool IsNetworkHandlerEnabled(FrameTreeNode* frame_tree_node); | 
| 62   static std::string UserAgentOverride(FrameTreeNode* frame_tree_node); | 63   static std::string UserAgentOverride(FrameTreeNode* frame_tree_node); | 
| 63 | 64 | 
| 64   static void WebContentsCreated(WebContents* web_contents); | 65   static void WebContentsCreated(WebContents* web_contents); | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 93 | 94 | 
| 94   // DevToolsAgentHostImpl overrides. | 95   // DevToolsAgentHostImpl overrides. | 
| 95   void AttachSession(DevToolsSession* session) override; | 96   void AttachSession(DevToolsSession* session) override; | 
| 96   void DetachSession(int session_id) override; | 97   void DetachSession(int session_id) override; | 
| 97   void InspectElement(DevToolsSession* session, int x, int y) override; | 98   void InspectElement(DevToolsSession* session, int x, int y) override; | 
| 98   bool DispatchProtocolMessage( | 99   bool DispatchProtocolMessage( | 
| 99       DevToolsSession* session, | 100       DevToolsSession* session, | 
| 100       const std::string& message) override; | 101       const std::string& message) override; | 
| 101 | 102 | 
| 102   // WebContentsObserver overrides. | 103   // WebContentsObserver overrides. | 
|  | 104   void DidStartNavigation(NavigationHandle* navigation_handle) override; | 
| 103   void ReadyToCommitNavigation(NavigationHandle* navigation_handle) override; | 105   void ReadyToCommitNavigation(NavigationHandle* navigation_handle) override; | 
| 104   void DidFinishNavigation(NavigationHandle* navigation_handle) override; | 106   void DidFinishNavigation(NavigationHandle* navigation_handle) override; | 
| 105   void RenderFrameHostChanged(RenderFrameHost* old_host, | 107   void RenderFrameHostChanged(RenderFrameHost* old_host, | 
| 106                               RenderFrameHost* new_host) override; | 108                               RenderFrameHost* new_host) override; | 
| 107   void FrameDeleted(RenderFrameHost* rfh) override; | 109   void FrameDeleted(RenderFrameHost* rfh) override; | 
| 108   void RenderFrameDeleted(RenderFrameHost* rfh) override; | 110   void RenderFrameDeleted(RenderFrameHost* rfh) override; | 
| 109   void RenderProcessGone(base::TerminationStatus status) override; | 111   void RenderProcessGone(base::TerminationStatus status) override; | 
| 110   bool OnMessageReceived(const IPC::Message& message, | 112   bool OnMessageReceived(const IPC::Message& message, | 
| 111                          RenderFrameHost* render_frame_host) override; | 113                          RenderFrameHost* render_frame_host) override; | 
| 112   void DidAttachInterstitialPage() override; | 114   void DidAttachInterstitialPage() override; | 
| 113   void DidDetachInterstitialPage() override; | 115   void DidDetachInterstitialPage() override; | 
| 114   void WasShown() override; | 116   void WasShown() override; | 
| 115   void WasHidden() override; | 117   void WasHidden() override; | 
| 116   void DidReceiveCompositorFrame() override; | 118   void DidReceiveCompositorFrame() override; | 
| 117 | 119 | 
| 118   void AboutToNavigateRenderFrame(RenderFrameHost* old_host, | 120   void AboutToNavigateRenderFrame(RenderFrameHost* old_host, | 
| 119                                   RenderFrameHost* new_host); | 121                                   RenderFrameHost* new_host); | 
| 120   void AboutToNavigate(NavigationHandle* navigation_handle); |  | 
| 121   void OnFailedNavigation(const CommonNavigationParams& common_params, |  | 
| 122                           const BeginNavigationParams& begin_params, |  | 
| 123                           net::Error error_code); |  | 
| 124 |  | 
| 125   void DispatchBufferedProtocolMessagesIfNecessary(); |  | 
| 126 | 122 | 
| 127   void SetPending(RenderFrameHostImpl* host); | 123   void SetPending(RenderFrameHostImpl* host); | 
| 128   void CommitPending(); | 124   void CommitPending(); | 
| 129   void DiscardPending(); | 125   void DiscardPending(); | 
| 130   void UpdateProtocolHandlers(RenderFrameHostImpl* host); | 126   void UpdateProtocolHandlers(RenderFrameHostImpl* host); | 
| 131 | 127 | 
| 132   bool IsChildFrame(); | 128   bool IsChildFrame(); | 
| 133 | 129 | 
| 134   void OnClientAttached(); | 130   void OnClientAttached(); | 
| 135   void OnClientDetached(); | 131   void OnClientDetached(); | 
| 136 | 132 | 
| 137   void RenderFrameCrashed(); | 133   void RenderFrameCrashed(); | 
| 138   void OnSwapCompositorFrame(const IPC::Message& message); | 134   void OnSwapCompositorFrame(const IPC::Message& message); | 
| 139   void OnDispatchOnInspectorFrontend( | 135   void OnDispatchOnInspectorFrontend( | 
| 140       RenderFrameHost* sender, | 136       RenderFrameHost* sender, | 
| 141       const DevToolsMessageChunk& message); | 137       const DevToolsMessageChunk& message); | 
| 142   void OnRequestNewWindow(RenderFrameHost* sender, int new_routing_id); | 138   void OnRequestNewWindow(RenderFrameHost* sender, int new_routing_id); | 
| 143   void DestroyOnRenderFrameGone(); | 139   void DestroyOnRenderFrameGone(); | 
| 144 | 140 | 
| 145   bool CheckConsistency(); | 141   bool CheckConsistency(); | 
|  | 142   void UpdateFrameHost(RenderFrameHostImpl* frame_host); | 
|  | 143   void MaybeReattachToRenderFrame(); | 
|  | 144   void SendMessageFromProcessor(int session_id, const std::string& message); | 
|  | 145   void GrantPolicy(RenderFrameHostImpl* host); | 
|  | 146   void RevokePolicy(RenderFrameHostImpl* host); | 
| 146 | 147 | 
| 147 #if defined(OS_ANDROID) | 148 #if defined(OS_ANDROID) | 
| 148   device::mojom::WakeLock* GetWakeLock(); | 149   device::mojom::WakeLock* GetWakeLock(); | 
| 149 #endif | 150 #endif | 
| 150 | 151 | 
| 151   void SynchronousSwapCompositorFrame( | 152   void SynchronousSwapCompositorFrame( | 
| 152       cc::CompositorFrameMetadata frame_metadata); | 153       cc::CompositorFrameMetadata frame_metadata); | 
| 153 | 154 | 
| 154   class FrameHostHolder; | 155   class FrameHostHolder; | 
| 155 | 156 | 
| 156   std::unique_ptr<FrameHostHolder> current_; | 157   std::unique_ptr<FrameHostHolder> current_; | 
| 157   std::unique_ptr<FrameHostHolder> pending_; | 158   std::unique_ptr<FrameHostHolder> pending_; | 
| 158 | 159 | 
| 159   // Stores per-host state between DisconnectWebContents and ConnectWebContents. | 160   // Stores per-host state between DisconnectWebContents and ConnectWebContents. | 
| 160   std::string disconnected_cookie_; | 161   std::string disconnected_cookie_; | 
| 161 | 162 | 
| 162   std::unique_ptr<DevToolsFrameTraceRecorder> frame_trace_recorder_; | 163   std::unique_ptr<DevToolsFrameTraceRecorder> frame_trace_recorder_; | 
| 163 #if defined(OS_ANDROID) | 164 #if defined(OS_ANDROID) | 
| 164   device::mojom::WakeLockPtr wake_lock_; | 165   device::mojom::WakeLockPtr wake_lock_; | 
| 165 #endif | 166 #endif | 
| 166   RenderFrameHostImpl* handlers_frame_host_; | 167   RenderFrameHostImpl* handlers_frame_host_; | 
| 167   bool current_frame_crashed_; | 168   bool current_frame_crashed_; | 
| 168 | 169 | 
| 169   // PlzNavigate | 170   // PlzNavigate | 
| 170 | 171 | 
| 171   // Handle that caused the setting of pending_. | 172   // The active host we are talking to. | 
| 172   NavigationHandle* pending_handle_; | 173   RenderFrameHostImpl* frame_host_ = nullptr; | 
| 173 | 174   struct Message { | 
| 174   // List of handles currently navigating. |  | 
| 175   std::set<NavigationHandle*> navigating_handles_; |  | 
| 176 |  | 
| 177   struct PendingMessage { |  | 
| 178     int session_id; | 175     int session_id; | 
| 179     std::string method; | 176     std::string method; | 
| 180     std::string message; | 177     std::string message; | 
| 181   }; | 178   }; | 
| 182   // <call_id> -> PendingMessage | 179   // Chunk processor's state cookie always corresponds to a state before | 
| 183   std::map<int, PendingMessage> in_navigation_protocol_message_buffer_; | 180   // any of the suspended or waiting for response messages have been handled. | 
|  | 181   DevToolsMessageChunkProcessor chunk_processor_; | 
|  | 182   std::unordered_set<NavigationHandleImpl*> navigation_handles_; | 
|  | 183   bool render_frame_alive_ = false; | 
|  | 184   // These messages were sent before suspending, but their result have not been | 
|  | 185   // received yet, and state cookie has not been updated. | 
|  | 186   std::map<int, Message> waiting_for_response_messages_; | 
|  | 187   // These messages were queued after suspending, not sent to the agent, | 
|  | 188   // and will be sent after resuming. | 
|  | 189   std::map<int, Message> suspended_messages_; | 
| 184 | 190 | 
| 185   // The FrameTreeNode associated with this agent. | 191   // The FrameTreeNode associated with this agent. | 
| 186   FrameTreeNode* frame_tree_node_; | 192   FrameTreeNode* frame_tree_node_; | 
| 187 | 193 | 
| 188   DISALLOW_COPY_AND_ASSIGN(RenderFrameDevToolsAgentHost); | 194   DISALLOW_COPY_AND_ASSIGN(RenderFrameDevToolsAgentHost); | 
| 189 }; | 195 }; | 
| 190 | 196 | 
| 191 }  // namespace content | 197 }  // namespace content | 
| 192 | 198 | 
| 193 #endif  // CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 199 #endif  // CONTENT_BROWSER_DEVTOOLS_RENDER_FRAME_DEVTOOLS_AGENT_HOST_H_ | 
| OLD | NEW | 
|---|