summaryrefslogtreecommitdiffstats
path: root/content/browser/devtools/devtools_http_handler_impl.cc
diff options
context:
space:
mode:
authordgozman <dgozman@chromium.org>2015-04-13 11:34:47 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-13 18:35:35 +0000
commit2d32187578fbf7e73ae2167f30b84c2e163a048a (patch)
treea6213d7aa01faff5170c3d4e90899a70fa2c05a5 /content/browser/devtools/devtools_http_handler_impl.cc
parent4b591dc5e99c3509dcaa0de71963a091a9f115db (diff)
downloadchromium_src-2d32187578fbf7e73ae2167f30b84c2e163a048a.zip
chromium_src-2d32187578fbf7e73ae2167f30b84c2e163a048a.tar.gz
chromium_src-2d32187578fbf7e73ae2167f30b84c2e163a048a.tar.bz2
[DevTools] Expose DevToolsAgentHost for browser, move DevToolsHttpHandler to it.
In preparation to making DevToolsHttpHandler a component, this patch removes unneeded dependencies from it to content/browser/devtools. Drive-by: cleanup DevToolsAgentHost::IsWorker method. BUG=476496 Review URL: https://codereview.chromium.org/1086623002 Cr-Commit-Position: refs/heads/master@{#324885}
Diffstat (limited to 'content/browser/devtools/devtools_http_handler_impl.cc')
-rw-r--r--content/browser/devtools/devtools_http_handler_impl.cc110
1 files changed, 20 insertions, 90 deletions
diff --git a/content/browser/devtools/devtools_http_handler_impl.cc b/content/browser/devtools/devtools_http_handler_impl.cc
index fb25825d..4cae448 100644
--- a/content/browser/devtools/devtools_http_handler_impl.cc
+++ b/content/browser/devtools/devtools_http_handler_impl.cc
@@ -13,14 +13,11 @@
#include "base/message_loop/message_loop_proxy.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
#include "base/threading/thread.h"
#include "base/values.h"
#include "content/browser/devtools/devtools_manager.h"
-#include "content/browser/devtools/protocol/devtools_protocol_handler.h"
-#include "content/browser/devtools/protocol/system_info_handler.h"
-#include "content/browser/devtools/protocol/tethering_handler.h"
-#include "content/browser/devtools/protocol/tracing_handler.h"
-#include "content/common/devtools_messages.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/devtools_http_handler.h"
@@ -71,7 +68,6 @@ const char kTargetDevtoolsFrontendUrlField[] = "devtoolsFrontendUrl";
// added back pressure on the TraceComplete message protocol - crbug.com/456845.
const int32 kSendBufferSizeForDevTools = 256 * 1024 * 1024; // 256Mb
-class BrowserTarget;
class DevToolsAgentHostClientImpl;
class ServerWrapper;
@@ -148,8 +144,6 @@ class DevToolsHttpHandlerImpl : public DevToolsHttpHandler {
ServerSocketFactory* socket_factory_;
typedef std::map<std::string, DevToolsTarget*> TargetMap;
TargetMap target_map_;
- typedef std::map<int, BrowserTarget*> BrowserTargets;
- BrowserTargets browser_targets_;
base::WeakPtrFactory<DevToolsHttpHandlerImpl> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl);
@@ -346,7 +340,7 @@ class DevToolsAgentHostClientImpl : public DevToolsAgentHostClient {
DevToolsAgentHostClientImpl(base::MessageLoop* message_loop,
ServerWrapper* server_wrapper,
int connection_id,
- DevToolsAgentHost* agent_host)
+ scoped_refptr<DevToolsAgentHost> agent_host)
: message_loop_(message_loop),
server_wrapper_(server_wrapper),
connection_id_(connection_id),
@@ -363,13 +357,12 @@ class DevToolsAgentHostClientImpl : public DevToolsAgentHostClient {
bool replaced_with_another_client) override {
DCHECK(agent_host == agent_host_.get());
- base::Callback<void(const std::string&)> raw_message_callback(
- base::Bind(&DevToolsAgentHostClientImpl::DispatchProtocolMessage,
- base::Unretained(this), base::Unretained(agent_host)));
- devtools::inspector::Client inspector(raw_message_callback);
- inspector.Detached(devtools::inspector::DetachedParams::Create()
- ->set_reason(replaced_with_another_client ?
- "replaced_with_devtools" : "target_closed"));
+ std::string message = base::StringPrintf(
+ "{ \"method\": \"Inspector.detached\", "
+ "\"params\": { \"reason\": \"%s\"} }",
+ replaced_with_another_client ?
+ "replaced_with_devtools" : "target_closed");
+ DispatchProtocolMessage(agent_host, message);
agent_host_ = nullptr;
message_loop_->PostTask(
@@ -407,59 +400,6 @@ static bool TimeComparator(const DevToolsTarget* target1,
return target1->GetLastActivityTime() > target2->GetLastActivityTime();
}
-// BrowserTarget -------------------------------------------------------------
-
-class BrowserTarget {
- public:
- BrowserTarget(base::MessageLoop* message_loop,
- ServerWrapper* server_wrapper,
- DevToolsHttpHandler::ServerSocketFactory* socket_factory,
- int connection_id)
- : message_loop_(message_loop),
- server_wrapper_(server_wrapper),
- connection_id_(connection_id),
- system_info_handler_(new devtools::system_info::SystemInfoHandler()),
- tethering_handler_(new devtools::tethering::TetheringHandler(
- socket_factory, message_loop->message_loop_proxy())),
- tracing_handler_(new devtools::tracing::TracingHandler(
- devtools::tracing::TracingHandler::Browser)),
- protocol_handler_(new DevToolsProtocolHandler(
- base::Bind(&BrowserTarget::Respond, base::Unretained(this)))) {
- DevToolsProtocolDispatcher* dispatcher = protocol_handler_->dispatcher();
- dispatcher->SetSystemInfoHandler(system_info_handler_.get());
- dispatcher->SetTetheringHandler(tethering_handler_.get());
- dispatcher->SetTracingHandler(tracing_handler_.get());
- }
-
- void HandleMessage(const std::string& message) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- std::string error_response;
- scoped_ptr<base::DictionaryValue> command =
- protocol_handler_->ParseCommand(message);
- if (command)
- protocol_handler_->HandleCommand(command.Pass());
- }
-
- void Respond(const std::string& message) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- message_loop_->PostTask(
- FROM_HERE,
- base::Bind(&ServerWrapper::SendOverWebSocket,
- base::Unretained(server_wrapper_),
- connection_id_,
- message));
- }
-
- private:
- base::MessageLoop* const message_loop_;
- ServerWrapper* const server_wrapper_;
- const int connection_id_;
- scoped_ptr<devtools::system_info::SystemInfoHandler> system_info_handler_;
- scoped_ptr<devtools::tethering::TetheringHandler> tethering_handler_;
- scoped_ptr<devtools::tracing::TracingHandler> tracing_handler_;
- scoped_ptr<DevToolsProtocolHandler> protocol_handler_;
-};
-
} // namespace
// DevToolsHttpHandler -------------------------------------------------------
@@ -467,7 +407,7 @@ class BrowserTarget {
// static
bool DevToolsHttpHandler::IsSupportedProtocolVersion(
const std::string& version) {
- return devtools::IsSupportedProtocolVersion(version);
+ return DevToolsAgentHost::IsSupportedProtocolVersion(version);
}
// static
@@ -511,7 +451,6 @@ DevToolsHttpHandler::ServerSocketFactory::CreateForTethering(
DevToolsHttpHandlerImpl::~DevToolsHttpHandlerImpl() {
TerminateOnUI(thread_, server_wrapper_, socket_factory_);
STLDeleteValues(&target_map_);
- STLDeleteValues(&browser_targets_);
STLDeleteValues(&connection_to_client_);
}
@@ -718,7 +657,8 @@ void DevToolsHttpHandlerImpl::OnJsonRequest(
if (command == "version") {
base::DictionaryValue version;
- version.SetString("Protocol-Version", devtools::kProtocolVersion);
+ version.SetString("Protocol-Version",
+ DevToolsAgentHost::GetProtocolVersion().c_str());
version.SetString("WebKit-Version", GetWebKitVersion());
version.SetString("Browser", GetContentClient()->GetProduct());
version.SetString("User-Agent", GetContentClient()->GetUserAgent());
@@ -880,10 +820,13 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest(
std::string browser_prefix = "/devtools/browser";
size_t browser_pos = request.path.find(browser_prefix);
if (browser_pos == 0) {
- browser_targets_[connection_id] = new BrowserTarget(thread_->message_loop(),
- server_wrapper_,
- socket_factory_,
- connection_id);
+ scoped_refptr<DevToolsAgentHost> browser_agent =
+ DevToolsAgentHost::CreateForBrowser(
+ thread_->message_loop_proxy(),
+ base::Bind(&ServerSocketFactory::CreateForTethering,
+ base::Unretained(socket_factory_)));
+ connection_to_client_[connection_id] = new DevToolsAgentHostClientImpl(
+ thread_->message_loop(), server_wrapper_, connection_id, browser_agent);
AcceptWebSocket(connection_id, request);
return;
}
@@ -910,7 +853,7 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest(
}
DevToolsAgentHostClientImpl* client_host = new DevToolsAgentHostClientImpl(
- thread_->message_loop(), server_wrapper_, connection_id, agent.get());
+ thread_->message_loop(), server_wrapper_, connection_id, agent);
connection_to_client_[connection_id] = client_host;
AcceptWebSocket(connection_id, request);
@@ -919,12 +862,6 @@ void DevToolsHttpHandlerImpl::OnWebSocketRequest(
void DevToolsHttpHandlerImpl::OnWebSocketMessage(
int connection_id,
const std::string& data) {
- BrowserTargets::iterator browser_it = browser_targets_.find(connection_id);
- if (browser_it != browser_targets_.end()) {
- browser_it->second->HandleMessage(data);
- return;
- }
-
ConnectionToClientMap::iterator it =
connection_to_client_.find(connection_id);
if (it != connection_to_client_.end())
@@ -932,13 +869,6 @@ void DevToolsHttpHandlerImpl::OnWebSocketMessage(
}
void DevToolsHttpHandlerImpl::OnClose(int connection_id) {
- BrowserTargets::iterator browser_it = browser_targets_.find(connection_id);
- if (browser_it != browser_targets_.end()) {
- delete browser_it->second;
- browser_targets_.erase(connection_id);
- return;
- }
-
ConnectionToClientMap::iterator it =
connection_to_client_.find(connection_id);
if (it != connection_to_client_.end()) {