| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "components/web_view/frame_devtools_agent.h" | 5 #include "components/web_view/frame_devtools_agent.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/guid.h" | 12 #include "base/guid.h" |
| 13 #include "base/json/json_reader.h" | 13 #include "base/json/json_reader.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/values.h" | 16 #include "base/values.h" |
| 17 #include "components/web_view/frame_devtools_agent_delegate.h" | 17 #include "components/web_view/frame_devtools_agent_delegate.h" |
| 18 #include "mojo/services/network/public/interfaces/url_loader.mojom.h" | 18 #include "mojo/services/network/public/interfaces/url_loader.mojom.h" |
| 19 #include "mojo/shell/public/cpp/application_impl.h" | 19 #include "mojo/shell/public/cpp/shell.h" |
| 20 #include "url/gurl.h" | 20 #include "url/gurl.h" |
| 21 | 21 |
| 22 namespace web_view { | 22 namespace web_view { |
| 23 | 23 |
| 24 using devtools_service::DevToolsAgentClientPtr; | 24 using devtools_service::DevToolsAgentClientPtr; |
| 25 using devtools_service::DevToolsAgentPtr; | 25 using devtools_service::DevToolsAgentPtr; |
| 26 using devtools_service::DevToolsRegistryPtr; | 26 using devtools_service::DevToolsRegistryPtr; |
| 27 | 27 |
| 28 using mojo::String; | 28 using mojo::String; |
| 29 | 29 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 FrameDevToolsAgent* const owner_; | 79 FrameDevToolsAgent* const owner_; |
| 80 mojo::Binding<DevToolsAgentClient> binding_; | 80 mojo::Binding<DevToolsAgentClient> binding_; |
| 81 // The DevToolsAgentClient interface provided by the DevTools service. This | 81 // The DevToolsAgentClient interface provided by the DevTools service. This |
| 82 // class will forward DevToolsAgentClient method calls it receives to | 82 // class will forward DevToolsAgentClient method calls it receives to |
| 83 // |forward_client_|. | 83 // |forward_client_|. |
| 84 DevToolsAgentClientPtr forward_client_; | 84 DevToolsAgentClientPtr forward_client_; |
| 85 | 85 |
| 86 DISALLOW_COPY_AND_ASSIGN(FrameDevToolsAgentClient); | 86 DISALLOW_COPY_AND_ASSIGN(FrameDevToolsAgentClient); |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 FrameDevToolsAgent::FrameDevToolsAgent(mojo::ApplicationImpl* app, | 89 FrameDevToolsAgent::FrameDevToolsAgent(mojo::Shell* shell, |
| 90 FrameDevToolsAgentDelegate* delegate) | 90 FrameDevToolsAgentDelegate* delegate) |
| 91 : app_(app), | 91 : shell_(shell), |
| 92 delegate_(delegate), | 92 delegate_(delegate), |
| 93 id_(base::GenerateGUID()), | 93 id_(base::GenerateGUID()), |
| 94 binding_(this) { | 94 binding_(this) { |
| 95 DCHECK(app_); | 95 DCHECK(shell_); |
| 96 DCHECK(delegate_); | 96 DCHECK(delegate_); |
| 97 } | 97 } |
| 98 | 98 |
| 99 FrameDevToolsAgent::~FrameDevToolsAgent() {} | 99 FrameDevToolsAgent::~FrameDevToolsAgent() {} |
| 100 | 100 |
| 101 void FrameDevToolsAgent::AttachFrame( | 101 void FrameDevToolsAgent::AttachFrame( |
| 102 DevToolsAgentPtr forward_agent, | 102 DevToolsAgentPtr forward_agent, |
| 103 Frame::ClientPropertyMap* devtools_properties) { | 103 Frame::ClientPropertyMap* devtools_properties) { |
| 104 RegisterAgentIfNecessary(); | 104 RegisterAgentIfNecessary(); |
| 105 forward_agent_ = std::move(forward_agent); | 105 forward_agent_ = std::move(forward_agent); |
| 106 | 106 |
| 107 StringToVector(id_, &(*devtools_properties)["devtools-id"]); | 107 StringToVector(id_, &(*devtools_properties)["devtools-id"]); |
| 108 if (client_impl_) { | 108 if (client_impl_) { |
| 109 StringToVector(state_, &(*devtools_properties)["devtools-state"]); | 109 StringToVector(state_, &(*devtools_properties)["devtools-state"]); |
| 110 client_impl_->OnAttachedFrame(); | 110 client_impl_->OnAttachedFrame(); |
| 111 } | 111 } |
| 112 | 112 |
| 113 // This follows Chrome's logic and relies on the fact that call IDs increase | 113 // This follows Chrome's logic and relies on the fact that call IDs increase |
| 114 // monotonously so iterating over |pending_messages_| preserves the order in | 114 // monotonously so iterating over |pending_messages_| preserves the order in |
| 115 // which they were received. | 115 // which they were received. |
| 116 for (const auto& item : pending_messages_) | 116 for (const auto& item : pending_messages_) |
| 117 forward_agent_->DispatchProtocolMessage(item.second); | 117 forward_agent_->DispatchProtocolMessage(item.second); |
| 118 } | 118 } |
| 119 | 119 |
| 120 void FrameDevToolsAgent::RegisterAgentIfNecessary() { | 120 void FrameDevToolsAgent::RegisterAgentIfNecessary() { |
| 121 if (binding_.is_bound()) | 121 if (binding_.is_bound()) |
| 122 return; | 122 return; |
| 123 | 123 |
| 124 DevToolsRegistryPtr devtools_registry; | 124 DevToolsRegistryPtr devtools_registry; |
| 125 app_->ConnectToService("mojo:devtools_service", &devtools_registry); | 125 shell_->ConnectToService("mojo:devtools_service", &devtools_registry); |
| 126 | 126 |
| 127 devtools_registry->RegisterAgent(id_, binding_.CreateInterfacePtrAndBind()); | 127 devtools_registry->RegisterAgent(id_, binding_.CreateInterfacePtrAndBind()); |
| 128 } | 128 } |
| 129 | 129 |
| 130 void FrameDevToolsAgent::HandlePageNavigateRequest( | 130 void FrameDevToolsAgent::HandlePageNavigateRequest( |
| 131 const base::DictionaryValue* request) { | 131 const base::DictionaryValue* request) { |
| 132 std::string method; | 132 std::string method; |
| 133 if (!request->GetString("method", &method) || method != "Page.navigate") | 133 if (!request->GetString("method", &method) || method != "Page.navigate") |
| 134 return; | 134 return; |
| 135 | 135 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 pending_messages_.erase(call_id); | 187 pending_messages_.erase(call_id); |
| 188 } | 188 } |
| 189 | 189 |
| 190 void FrameDevToolsAgent::OnForwardClientClosed() { | 190 void FrameDevToolsAgent::OnForwardClientClosed() { |
| 191 client_impl_.reset(); | 191 client_impl_.reset(); |
| 192 state_.clear(); | 192 state_.clear(); |
| 193 pending_messages_.clear(); | 193 pending_messages_.clear(); |
| 194 } | 194 } |
| 195 | 195 |
| 196 } // namespace web_view | 196 } // namespace web_view |
| OLD | NEW |