| Index: content/browser/devtools/render_frame_devtools_agent_host.h | 
| diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h | 
| index 895413644cfc14050455fae9fd20d9a0d71731e1..675990f59986d0957e2836d8e8b8f33669b3b943 100644 | 
| --- a/content/browser/devtools/render_frame_devtools_agent_host.h | 
| +++ b/content/browser/devtools/render_frame_devtools_agent_host.h | 
| @@ -7,6 +7,7 @@ | 
|  | 
| #include <map> | 
| #include <memory> | 
| +#include <unordered_set> | 
|  | 
| #include "base/compiler_specific.h" | 
| #include "base/macros.h" | 
| @@ -34,6 +35,7 @@ class BrowserContext; | 
| class DevToolsFrameTraceRecorder; | 
| class FrameTreeNode; | 
| class NavigationHandle; | 
| +class NavigationHandleImpl; | 
| class NavigationThrottle; | 
| class RenderFrameHostImpl; | 
| struct BeginNavigationParams; | 
| @@ -51,7 +53,6 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
| RenderFrameHost* current); | 
| static void OnBeforeNavigation(RenderFrameHost* current, | 
| RenderFrameHost* pending); | 
| -  static void OnBeforeNavigation(NavigationHandle* navigation_handle); | 
| static void OnFailedNavigation(RenderFrameHost* host, | 
| const CommonNavigationParams& common_params, | 
| const BeginNavigationParams& begin_params, | 
| @@ -100,6 +101,7 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
| const std::string& message) override; | 
|  | 
| // WebContentsObserver overrides. | 
| +  void DidStartNavigation(NavigationHandle* navigation_handle) override; | 
| void ReadyToCommitNavigation(NavigationHandle* navigation_handle) override; | 
| void DidFinishNavigation(NavigationHandle* navigation_handle) override; | 
| void RenderFrameHostChanged(RenderFrameHost* old_host, | 
| @@ -117,12 +119,6 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
|  | 
| void AboutToNavigateRenderFrame(RenderFrameHost* old_host, | 
| RenderFrameHost* new_host); | 
| -  void AboutToNavigate(NavigationHandle* navigation_handle); | 
| -  void OnFailedNavigation(const CommonNavigationParams& common_params, | 
| -                          const BeginNavigationParams& begin_params, | 
| -                          net::Error error_code); | 
| - | 
| -  void DispatchBufferedProtocolMessagesIfNecessary(); | 
|  | 
| void SetPending(RenderFrameHostImpl* host); | 
| void CommitPending(); | 
| @@ -143,6 +139,11 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
| void DestroyOnRenderFrameGone(); | 
|  | 
| bool CheckConsistency(); | 
| +  void UpdateFrameHost(RenderFrameHostImpl* frame_host); | 
| +  void MaybeReattachToRenderFrame(); | 
| +  void SendMessageFromProcessor(int session_id, const std::string& message); | 
| +  void GrantPolicy(RenderFrameHostImpl* host); | 
| +  void RevokePolicy(RenderFrameHostImpl* host); | 
|  | 
| #if defined(OS_ANDROID) | 
| device::mojom::WakeLock* GetWakeLock(); | 
| @@ -168,19 +169,24 @@ class CONTENT_EXPORT RenderFrameDevToolsAgentHost | 
|  | 
| // PlzNavigate | 
|  | 
| -  // Handle that caused the setting of pending_. | 
| -  NavigationHandle* pending_handle_; | 
| - | 
| -  // List of handles currently navigating. | 
| -  std::set<NavigationHandle*> navigating_handles_; | 
| - | 
| -  struct PendingMessage { | 
| +  // The active host we are talking to. | 
| +  RenderFrameHostImpl* frame_host_ = nullptr; | 
| +  struct Message { | 
| int session_id; | 
| std::string method; | 
| std::string message; | 
| }; | 
| -  // <call_id> -> PendingMessage | 
| -  std::map<int, PendingMessage> in_navigation_protocol_message_buffer_; | 
| +  // Chunk processor's state cookie always corresponds to a state before | 
| +  // any of the suspended or waiting for response messages have been handled. | 
| +  DevToolsMessageChunkProcessor chunk_processor_; | 
| +  std::unordered_set<NavigationHandleImpl*> navigation_handles_; | 
| +  bool render_frame_alive_ = false; | 
| +  // These messages were sent before suspending, but their result have not been | 
| +  // received yet, and state cookie has not been updated. | 
| +  std::map<int, Message> waiting_for_response_messages_; | 
| +  // These messages were queued after suspending, not sent to the agent, | 
| +  // and will be sent after resuming. | 
| +  std::map<int, Message> suspended_messages_; | 
|  | 
| // The FrameTreeNode associated with this agent. | 
| FrameTreeNode* frame_tree_node_; | 
|  |