summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authoryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 09:06:15 +0000
committeryurys@chromium.org <yurys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-02 09:06:15 +0000
commitd683ecdabe2df6b43f79bee0b687da5dbb138e95 (patch)
tree6c49e7fe0d5945a003744300bea9bc3c186d205c /content
parent5bff94bb94ea8a1c774c4069de28acfdc21a13d3 (diff)
downloadchromium_src-d683ecdabe2df6b43f79bee0b687da5dbb138e95.zip
chromium_src-d683ecdabe2df6b43f79bee0b687da5dbb138e95.tar.gz
chromium_src-d683ecdabe2df6b43f79bee0b687da5dbb138e95.tar.bz2
Add content API for DevTools HTTP handler
BUG=104625 TEST=Existing tests Review URL: http://codereview.chromium.org/8554008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112662 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.cc (renamed from content/browser/debugger/devtools_http_protocol_handler.cc)85
-rw-r--r--content/browser/debugger/devtools_http_handler_impl.h (renamed from content/browser/debugger/devtools_http_protocol_handler.h)78
-rw-r--r--content/content_browser.gypi6
-rw-r--r--content/public/browser/devtools_http_handler.h38
-rw-r--r--content/public/browser/devtools_http_handler_delegate.h39
5 files changed, 151 insertions, 95 deletions
diff --git a/content/browser/debugger/devtools_http_protocol_handler.cc b/content/browser/debugger/devtools_http_handler_impl.cc
index df85974..790bef1 100644
--- a/content/browser/debugger/devtools_http_protocol_handler.cc
+++ b/content/browser/debugger/devtools_http_handler_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "content/browser/debugger/devtools_http_protocol_handler.h"
+#include "content/browser/debugger/devtools_http_handler_impl.h"
#include <utility>
@@ -23,6 +23,7 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/devtools_agent_host_registry.h"
#include "content/public/browser/devtools_client_host.h"
+#include "content/public/browser/devtools_http_handler_delegate.h"
#include "content/public/browser/devtools_manager.h"
#include "googleurl/src/gurl.h"
#include "net/base/escape.h"
@@ -30,11 +31,7 @@
#include "net/server/http_server_request_info.h"
#include "net/url_request/url_request_context.h"
-using content::BrowserThread;
-using content::DevToolsAgentHost;
-using content::DevToolsAgentHostRegistry;
-using content::DevToolsClientHost;
-using content::DevToolsManager;
+namespace content {
const int kBufferSize = 16 * 1024;
@@ -138,35 +135,36 @@ base::LazyInstance<
} // namespace
// static
-scoped_refptr<DevToolsHttpProtocolHandler> DevToolsHttpProtocolHandler::Start(
+DevToolsHttpHandler* DevToolsHttpHandler::Start(
const std::string& ip,
int port,
const std::string& frontend_url,
- Delegate* delegate) {
- scoped_refptr<DevToolsHttpProtocolHandler> http_handler =
- new DevToolsHttpProtocolHandler(ip, port, frontend_url, delegate);
+ DevToolsHttpHandlerDelegate* delegate) {
+ DevToolsHttpHandlerImpl* http_handler =
+ new DevToolsHttpHandlerImpl(ip, port, frontend_url, delegate);
http_handler->Start();
return http_handler;
}
-DevToolsHttpProtocolHandler::~DevToolsHttpProtocolHandler() {
+DevToolsHttpHandlerImpl::~DevToolsHttpHandlerImpl() {
// Stop() must be called prior to this being called
DCHECK(server_.get() == NULL);
}
-void DevToolsHttpProtocolHandler::Start() {
+void DevToolsHttpHandlerImpl::Start() {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&DevToolsHttpProtocolHandler::Init, this));
+ base::Bind(&DevToolsHttpHandlerImpl::Init, this));
}
-void DevToolsHttpProtocolHandler::Stop() {
+void DevToolsHttpHandlerImpl::Stop() {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&DevToolsHttpProtocolHandler::Teardown, this));
+ base::Bind(&DevToolsHttpHandlerImpl::Teardown, this));
+ protect_ptr_ = NULL;
}
-void DevToolsHttpProtocolHandler::OnHttpRequest(
+void DevToolsHttpHandlerImpl::OnHttpRequest(
int connection_id,
const net::HttpServerRequestInfo& info) {
if (info.path == "/json") {
@@ -174,7 +172,7 @@ void DevToolsHttpProtocolHandler::OnHttpRequest(
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
- base::Bind(&DevToolsHttpProtocolHandler::OnJsonRequestUI,
+ base::Bind(&DevToolsHttpHandlerImpl::OnJsonRequestUI,
this,
connection_id,
info));
@@ -210,33 +208,33 @@ void DevToolsHttpProtocolHandler::OnHttpRequest(
request->Start();
}
-void DevToolsHttpProtocolHandler::OnWebSocketRequest(
+void DevToolsHttpHandlerImpl::OnWebSocketRequest(
int connection_id,
const net::HttpServerRequestInfo& request) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpProtocolHandler::OnWebSocketRequestUI,
+ &DevToolsHttpHandlerImpl::OnWebSocketRequestUI,
this,
connection_id,
request));
}
-void DevToolsHttpProtocolHandler::OnWebSocketMessage(
+void DevToolsHttpHandlerImpl::OnWebSocketMessage(
int connection_id,
const std::string& data) {
BrowserThread::PostTask(
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpProtocolHandler::OnWebSocketMessageUI,
+ &DevToolsHttpHandlerImpl::OnWebSocketMessageUI,
this,
connection_id,
data));
}
-void DevToolsHttpProtocolHandler::OnClose(int connection_id) {
+void DevToolsHttpHandlerImpl::OnClose(int connection_id) {
ConnectionToRequestsMap::iterator it =
connection_to_requests_io_.find(connection_id);
if (it != connection_to_requests_io_.end()) {
@@ -256,7 +254,7 @@ void DevToolsHttpProtocolHandler::OnClose(int connection_id) {
BrowserThread::UI,
FROM_HERE,
base::Bind(
- &DevToolsHttpProtocolHandler::OnCloseUI,
+ &DevToolsHttpHandlerImpl::OnCloseUI,
this,
connection_id));
}
@@ -273,10 +271,10 @@ struct PageInfo
typedef std::vector<PageInfo> PageList;
static PageList GeneratePageList(
- DevToolsHttpProtocolHandler::Delegate* delegate,
+ DevToolsHttpHandlerDelegate* delegate,
int connection_id,
const net::HttpServerRequestInfo& info) {
- typedef DevToolsHttpProtocolHandler::InspectableTabs Tabs;
+ typedef DevToolsHttpHandlerDelegate::InspectableTabs Tabs;
Tabs inspectable_tabs = delegate->GetInspectableTabs();
PageList page_list;
@@ -306,7 +304,7 @@ static PageList GeneratePageList(
return page_list;
}
-void DevToolsHttpProtocolHandler::OnJsonRequestUI(
+void DevToolsHttpHandlerImpl::OnJsonRequestUI(
int connection_id,
const net::HttpServerRequestInfo& info) {
PageList page_list = GeneratePageList(delegate_.get(),
@@ -340,7 +338,7 @@ void DevToolsHttpProtocolHandler::OnJsonRequestUI(
Send200(connection_id, response, "application/json; charset=UTF-8");
}
-void DevToolsHttpProtocolHandler::OnWebSocketRequestUI(
+void DevToolsHttpHandlerImpl::OnWebSocketRequestUI(
int connection_id,
const net::HttpServerRequestInfo& request) {
std::string prefix = "/devtools/page/";
@@ -379,7 +377,7 @@ void DevToolsHttpProtocolHandler::OnWebSocketRequestUI(
AcceptWebSocket(connection_id, request);
}
-void DevToolsHttpProtocolHandler::OnWebSocketMessageUI(
+void DevToolsHttpHandlerImpl::OnWebSocketMessageUI(
int connection_id,
const std::string& data) {
ConnectionToClientHostMap::iterator it =
@@ -391,7 +389,7 @@ void DevToolsHttpProtocolHandler::OnWebSocketMessageUI(
manager->DispatchOnInspectorBackend(it->second, data);
}
-void DevToolsHttpProtocolHandler::OnCloseUI(int connection_id) {
+void DevToolsHttpHandlerImpl::OnCloseUI(int connection_id) {
ConnectionToClientHostMap::iterator it =
connection_to_client_host_ui_.find(connection_id);
if (it != connection_to_client_host_ui_.end()) {
@@ -403,7 +401,7 @@ void DevToolsHttpProtocolHandler::OnCloseUI(int connection_id) {
}
}
-void DevToolsHttpProtocolHandler::OnResponseStarted(net::URLRequest* request) {
+void DevToolsHttpHandlerImpl::OnResponseStarted(net::URLRequest* request) {
RequestToSocketMap::iterator it = request_to_connection_io_.find(request);
if (it == request_to_connection_io_.end())
return;
@@ -435,7 +433,7 @@ void DevToolsHttpProtocolHandler::OnResponseStarted(net::URLRequest* request) {
OnReadCompleted(request, bytes_read);
}
-void DevToolsHttpProtocolHandler::OnReadCompleted(net::URLRequest* request,
+void DevToolsHttpHandlerImpl::OnReadCompleted(net::URLRequest* request,
int bytes_read) {
RequestToSocketMap::iterator it = request_to_connection_io_.find(request);
if (it == request_to_connection_io_.end())
@@ -461,29 +459,30 @@ void DevToolsHttpProtocolHandler::OnReadCompleted(net::URLRequest* request,
}
}
-DevToolsHttpProtocolHandler::DevToolsHttpProtocolHandler(
+DevToolsHttpHandlerImpl::DevToolsHttpHandlerImpl(
const std::string& ip,
int port,
const std::string& frontend_host,
- Delegate* delegate)
+ DevToolsHttpHandlerDelegate* delegate)
: ip_(ip),
port_(port),
overridden_frontend_url_(frontend_host),
- delegate_(delegate) {
+ delegate_(delegate),
+ ALLOW_THIS_IN_INITIALIZER_LIST(protect_ptr_(this)) {
if (overridden_frontend_url_.empty())
overridden_frontend_url_ = "/devtools/devtools.html";
}
-void DevToolsHttpProtocolHandler::Init() {
+void DevToolsHttpHandlerImpl::Init() {
server_ = new net::HttpServer(ip_, port_, this);
}
// Run on I/O thread
-void DevToolsHttpProtocolHandler::Teardown() {
+void DevToolsHttpHandlerImpl::Teardown() {
server_ = NULL;
}
-void DevToolsHttpProtocolHandler::Bind(net::URLRequest* request,
+void DevToolsHttpHandlerImpl::Bind(net::URLRequest* request,
int connection_id) {
request_to_connection_io_[request] = connection_id;
ConnectionToRequestsMap::iterator it =
@@ -498,7 +497,7 @@ void DevToolsHttpProtocolHandler::Bind(net::URLRequest* request,
request_to_buffer_io_[request] = new net::IOBuffer(kBufferSize);
}
-void DevToolsHttpProtocolHandler::RequestCompleted(net::URLRequest* request) {
+void DevToolsHttpHandlerImpl::RequestCompleted(net::URLRequest* request) {
RequestToSocketMap::iterator it = request_to_connection_io_.find(request);
if (it == request_to_connection_io_.end())
return;
@@ -512,7 +511,7 @@ void DevToolsHttpProtocolHandler::RequestCompleted(net::URLRequest* request) {
delete request;
}
-void DevToolsHttpProtocolHandler::Send200(int connection_id,
+void DevToolsHttpHandlerImpl::Send200(int connection_id,
const std::string& data,
const std::string& mime_type) {
BrowserThread::PostTask(
@@ -524,13 +523,13 @@ void DevToolsHttpProtocolHandler::Send200(int connection_id,
mime_type));
}
-void DevToolsHttpProtocolHandler::Send404(int connection_id) {
+void DevToolsHttpHandlerImpl::Send404(int connection_id) {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&net::HttpServer::Send404, server_.get(), connection_id));
}
-void DevToolsHttpProtocolHandler::Send500(int connection_id,
+void DevToolsHttpHandlerImpl::Send500(int connection_id,
const std::string& message) {
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
@@ -538,7 +537,7 @@ void DevToolsHttpProtocolHandler::Send500(int connection_id,
message));
}
-void DevToolsHttpProtocolHandler::AcceptWebSocket(
+void DevToolsHttpHandlerImpl::AcceptWebSocket(
int connection_id,
const net::HttpServerRequestInfo& request) {
BrowserThread::PostTask(
@@ -546,3 +545,5 @@ void DevToolsHttpProtocolHandler::AcceptWebSocket(
base::Bind(&net::HttpServer::AcceptWebSocket, server_.get(),
connection_id, request));
}
+
+} // namespace content
diff --git a/content/browser/debugger/devtools_http_protocol_handler.h b/content/browser/debugger/devtools_http_handler_impl.h
index c25b5cd..69ead40 100644
--- a/content/browser/debugger/devtools_http_protocol_handler.h
+++ b/content/browser/debugger/devtools_http_handler_impl.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_PROTOCOL_HANDLER_H_
-#define CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_PROTOCOL_HANDLER_H_
+#ifndef CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_HANDLER_IMPL_H_
+#define CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_HANDLER_IMPL_H_
#pragma once
#include <map>
@@ -14,65 +14,38 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "content/common/content_export.h"
+#include "content/public/browser/devtools_http_handler.h"
#include "net/server/http_server.h"
#include "net/url_request/url_request.h"
class TabContents;
-namespace content {
-class DevToolsClientHost;
-}
-
namespace net {
class URLRequestContext;
}
-class DevToolsHttpProtocolHandler
- : public net::HttpServer::Delegate,
- public net::URLRequest::Delegate,
- public base::RefCountedThreadSafe<DevToolsHttpProtocolHandler> {
- public:
- typedef std::vector<TabContents*> InspectableTabs;
- class Delegate {
- public:
- Delegate() {}
- virtual ~Delegate() {}
-
- // Should return the list of inspectable tabs. Called on the UI thread.
- virtual InspectableTabs GetInspectableTabs() = 0;
-
- // Should return discovery page HTML that should list available tabs
- // and provide attach links. Called on the IO thread.
- virtual std::string GetDiscoveryPageHTML() = 0;
-
- // Should return URL request context for issuing requests against devtools
- // webui or NULL if no context is available. Called on the IO thread.
- virtual net::URLRequestContext* GetURLRequestContext() = 0;
- private:
- DISALLOW_COPY_AND_ASSIGN(Delegate);
- };
-
- // Takes ownership over |delegate|.
- CONTENT_EXPORT static scoped_refptr<DevToolsHttpProtocolHandler> Start(
- const std::string& ip,
- int port,
- const std::string& frontend_url,
- Delegate* delegate);
-
- // Called from the main thread in order to stop protocol handler.
- // Will schedule tear down task on IO thread.
- CONTENT_EXPORT void Stop();
+namespace content {
+
+class DevToolsClientHost;
+class DevToolsHttpHandlerImpl
+ : public DevToolsHttpHandler,
+ public base::RefCountedThreadSafe<DevToolsHttpHandlerImpl>,
+ public net::HttpServer::Delegate,
+ public net::URLRequest::Delegate {
private:
- friend class base::RefCountedThreadSafe<DevToolsHttpProtocolHandler>;
-
- DevToolsHttpProtocolHandler(const std::string& ip,
- int port,
- const std::string& frontend_url,
- Delegate* delegate);
- virtual ~DevToolsHttpProtocolHandler();
+ friend class base::RefCountedThreadSafe<DevToolsHttpHandlerImpl>;
+ friend class DevToolsHttpHandler;
+ DevToolsHttpHandlerImpl(const std::string& ip,
+ int port,
+ const std::string& frontend_url,
+ DevToolsHttpHandlerDelegate* delegate);
+ virtual ~DevToolsHttpHandlerImpl();
void Start();
+ // DevToolsHttpHandler implementation.
+ virtual void Stop() OVERRIDE;
+
// net::HttpServer::Delegate implementation.
virtual void OnHttpRequest(int connection_id,
const net::HttpServerRequestInfo& info) OVERRIDE;
@@ -126,8 +99,11 @@ class DevToolsHttpProtocolHandler
typedef std::map<int, content::DevToolsClientHost*>
ConnectionToClientHostMap;
ConnectionToClientHostMap connection_to_client_host_ui_;
- scoped_ptr<Delegate> delegate_;
- DISALLOW_COPY_AND_ASSIGN(DevToolsHttpProtocolHandler);
+ scoped_ptr<DevToolsHttpHandlerDelegate> delegate_;
+ scoped_refptr<DevToolsHttpHandlerImpl> protect_ptr_;
+ DISALLOW_COPY_AND_ASSIGN(DevToolsHttpHandlerImpl);
};
-#endif // CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_PROTOCOL_HANDLER_H_
+} // namespace content
+
+#endif // CONTENT_BROWSER_DEBUGGER_DEVTOOLS_HTTP_HANDLER_IMPL_H_
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 2e3b0e1..3220681 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -34,6 +34,8 @@
'public/browser/devtools_agent_host_registry.h',
'public/browser/devtools_client_host.h',
'public/browser/devtools_frontend_window_delegate.h',
+ 'public/browser/devtools_http_handler.h',
+ 'public/browser/devtools_http_handler_delegate.h',
'public/browser/devtools_manager.h',
'public/browser/download_manager_delegate.h',
'public/browser/intents_host.h',
@@ -113,8 +115,8 @@
'browser/debugger/devtools_agent_host.h',
'browser/debugger/devtools_frontend_host.cc',
'browser/debugger/devtools_frontend_host.h',
- 'browser/debugger/devtools_http_protocol_handler.cc',
- 'browser/debugger/devtools_http_protocol_handler.h',
+ 'browser/debugger/devtools_http_handler_impl.cc',
+ 'browser/debugger/devtools_http_handler_impl.h',
'browser/debugger/devtools_manager_impl.cc',
'browser/debugger/devtools_manager_impl.h',
'browser/debugger/devtools_netlog_observer.cc',
diff --git a/content/public/browser/devtools_http_handler.h b/content/public/browser/devtools_http_handler.h
new file mode 100644
index 0000000..b8e4be7
--- /dev/null
+++ b/content/public/browser/devtools_http_handler.h
@@ -0,0 +1,38 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
+#pragma once
+
+#include <string>
+
+#include "content/common/content_export.h"
+
+namespace content {
+
+class DevToolsHttpHandlerDelegate;
+
+// This class is used for managing DevTools remote debugging server.
+// Clients can connect to the specified ip:port and start debugging
+// this browser.
+class DevToolsHttpHandler {
+ public:
+ // Takes ownership over |delegate|.
+ CONTENT_EXPORT static DevToolsHttpHandler* Start(
+ const std::string& ip,
+ int port,
+ const std::string& frontend_url,
+ DevToolsHttpHandlerDelegate* delegate);
+
+ // Called from the main thread in order to stop protocol handler.
+ virtual void Stop() = 0;
+
+ protected:
+ virtual ~DevToolsHttpHandler() {}
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_H_
diff --git a/content/public/browser/devtools_http_handler_delegate.h b/content/public/browser/devtools_http_handler_delegate.h
new file mode 100644
index 0000000..970b06f
--- /dev/null
+++ b/content/public/browser/devtools_http_handler_delegate.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
+#define CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_
+#pragma once
+
+#include <string>
+#include <vector>
+
+class TabContents;
+
+namespace net {
+class URLRequestContext;
+}
+
+namespace content {
+
+class DevToolsHttpHandlerDelegate {
+ public:
+ typedef std::vector<TabContents*> InspectableTabs;
+ virtual ~DevToolsHttpHandlerDelegate() {}
+
+ // Should return the list of inspectable tabs. Called on the UI thread.
+ virtual InspectableTabs GetInspectableTabs() = 0;
+
+ // Should return discovery page HTML that should list available tabs
+ // and provide attach links. Called on the IO thread.
+ virtual std::string GetDiscoveryPageHTML() = 0;
+
+ // Should return URL request context for issuing requests against devtools
+ // webui or NULL if no context is available. Called on the IO thread.
+ virtual net::URLRequestContext* GetURLRequestContext() = 0;
+};
+
+} // namespace content
+
+#endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_HTTP_HANDLER_DELEGATE_H_