| 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 |